application/vnd.gov.sk.e-form+xml
001.Žiadosť o odpustenie/zníženie poplatku za komunálny odpad a drobný stavebný odpad (FO)
http://data.gov.sk/doc/eform/00321796.A0000224.000000002.ZiadostOdpustenieZnizeniepoplatkuZaKOaDSO_FO/1.4
001.Žiadosť o odpustenie/zníženie poplatku za komunálny odpad a drobný stavebný odpad (FO)
ico://sk/00321796
ico://sk/00321796
1.4
2016-12-06
2016-12-06
2020-04-20
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48eHM6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMyMTc5Ni5BMDAwMDIyNC4wMDAwMDAwMDIuWmlhZG9zdE9kcHVzdGVuaWVabml6ZW5pZXBvcGxhdGt1WmFLT2FEU09fRk8vMS40IiB4bWxucz0iaHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMjE3OTYuQTAwMDAyMjQuMDAwMDAwMDAyLlppYWRvc3RPZHB1c3RlbmllWm5pemVuaWVwb3BsYXRrdVphS09hRFNPX0ZPLzEuNCI+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RUZXh0Qm94Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrU3RhdHkiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtPYmNlIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrS3JhamUiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dFBTQyI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjx4czptYXhMZW5ndGggdmFsdWU9IjYiIC8+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtUaXR1bHlQcmVkIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrVGl0dWx5WmEiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGF0dW0iPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0iUmFkaW9EcnVoVWxhdnkiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dEFyZWEiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2hlY2tCb3giPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmJvb2xlYW4iPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQoNCg0KPHhzOmVsZW1lbnQgbmFtZT0iZUZvcm1fZUdvdl8wMDEiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iU2VrY2lhT2JlYyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik9iZWNfTXNVIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+TWVzdG8gxb1pbGluYTogTWVzdHNrJiMyNTM7ICYjMjUwO3JhZCB2IMW9aWxpbmUsIE4mIzIyNTttZXN0aWUgb2JldCYjMjM3OyBrb211bml6bXUgMSwgMDExIDMxIMW9aWxpbmE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0VtYWlsIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+RS1tYWlsOiBrY19wb2RhdGVsbmFAemlsaW5hLnNrPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19XZWIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5XRUI6IHd3dy56aWxpbmEuc2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjE86IDAwMzIxNzk2PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19ESUMiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EScSMOiAyMDIxMzM5NDc0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19UZWxlZm9uIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGVsZWYmIzI0MztuOiAwNDEgLyA3MDYzIDExMTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhSGVhZGVyIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT0RldGFpbCIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCBwcmVkIG1lbm9tPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5NZW5vPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFJDIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+Um9kbiYjMjMzOyDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIHR5cGU9InhzZENpc2VsbmlrVGl0dWx5WmEiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCB6YSBtZW5vbTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlByaWV6dmlza288L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiIHR5cGU9ImRhdHVtIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EJiMyMjU7dHVtIG5hcm9kZW5pYTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0ieHNkQ2lzZWxuaWtTdGF0eSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsWgdCYjMjI1O3Q8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjCYjMjM3O3NsbyBieXR1PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InhzZENpc2VsbmlrS3JhamUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5LcmFqPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlMmIzI1MDtwLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0eXBlPSJ4c2RUZXh0UFNDIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UFPEjDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9yLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InhzZENpc2VsbmlrU3RhdHkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FoHQmIzIyNTt0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InhzZENpc2VsbmlrT2JjZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9iZWM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjCYjMjM3O3NsbyBieXR1PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InhzZENpc2VsbmlrS3JhamUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5LcmFqPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TJiMyNTA7cC7EjS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InhzZENpc2VsbmlrT2tyZXN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2tyZXM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dFBTQyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pci7EjS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ4c2RDaXNlbG5pa1N0YXR5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xaB0JiMyMjU7dDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2JlYzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xIwmIzIzNztzbG8gYnl0dTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0ieHNkQ2lzZWxuaWtLcmFqZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPktyYWo8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UyYjMjUwO3AuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dFBTQyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T3IuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlRlbGVmJiMyNDM7bm5lIMSNJiMyMzc7c2xvPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5FLW1haWxvdiYjMjI1OyBhZHJlc2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZG9zdCIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlJvemhvZCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+Um96aG9kbnV0JiMyMzc7bSDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InZ5cnViZW55IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Cb2wgdnlydWJlbiYjMjUzOyBuYSByb2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJwb3BsYXRvayIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UG9wbGF0b2sgemEga29tdW4mIzIyNTtsbmUgYSBkcm9ibiYjMjMzOyBzdGF2ZWJuJiMyMzM7IG9kcGFkeSB2byB2JiMyNTM7xaFrZSAo4oKsKTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InppYWRhbSIgdHlwZT0iUmFkaW9EcnVoVWxhdnkiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsW9aWFkYW0gc3ByJiMyMjU7dmN1IHBvcGxhdGt1IG8gem4mIzIzNzvFvmVuaWUvb2RwdXN0ZW5pZSBwb3BsYXRrdSB6YSBrb211biYjMjI1O2xuZSBvZHBhZHkgYSBkcm9ibiYjMjMzOyBzdGF2ZWJuJiMyMzM7IG9kcGFkeTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRvc3REb3ZvZCIgdHlwZT0ieHNkVGV4dEFyZWEiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPkQmIzI0NDt2b2Qgxb5pYWRvc3RpPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHR5cGU9InhzZENoZWNrQm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0JiMyMjU7IG9zb2JhIHYgcyYjMjUwO2xhZGUgcyB1c3Rhbm92ZW4mIzIzNzttICYjMTY3OyAxMSB6JiMyMjU7a29uYSDEjS4gMTIyLzIwMTMgWi4gei4gbyBvY2hyYW5lIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbiYjMjM3OyBuaWVrdG9yJiMyNTM7Y2ggeiYjMjI1O2tvbm92ICjEj2FsZWogbGVuIOKAnnomIzIyNTtrb24pLCBwb3NreXR1amUgTWVzdHUgxb1pbGluYSwgYWtvIHByZXYmIzIyNTtkemtvdmF0ZcS+b3ZpLCBzJiMyNTA7aGxhcyBzbyBzcHJhY292YW4mIzIzNzttIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgdXZlZGVuJiMyNTM7Y2ggdiB0ZWp0byDFvmlhZG9zdGkgYSBqZWogcHImIzIzNztsb2gmIzIyNTtjaCwgYSB0byB6YSAmIzI1MDvEjWVsb20gYmV6cGXEjW5laiBhIHomIzIyNTttZW51IHZ5bHXEjXVqJiMyNTA7Y2VqIGlkZW50aWZpayYjMjI1O2NpZSBkb3RrbnV0ZWogb3NvYnkgcyB0JiMyNTM7bSwgxb5lIGplIG9wciYjMjI1O3ZuZW4mIzI1MzsgdGVudG8gcyYjMjUwO2hsYXMgcCYjMjM3O3NvbW5lIG9kdm9sYcWlIHYgcHImIzIzNztwYWRlIHByZXVrJiMyMjU7emF0ZcS+biYjMjMzO2hvIHBvcnXFoWVuaWEgeiYjMjI1O2tvbmEgem8gc3RyYW55IHByZXYmIzIyNTtkemtvdmF0ZcS+YS4gT2R2b2xhbmllIG11cyYjMjM3OyBiecWlIHVyb2JlbiYjMjMzOyBwJiMyMzc7c29tbmUgYSBwcmV1ayYjMjI1O3phdGXEvm5lIGRvcnXEjWVuJiMyMzM7IE1lc3R1IMW9aWxpbmEuIERvYmEgcGxhdG5vc3RpIHMmIzI1MDtobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIHByZXVrJiMyMjU7emF0ZcS+biYjMjMzO2hvICYjMjUwO8SNZWx1IHNwcmFjJiMyNTA7dmFuaWEgb3NvYm4mIzI1MztjaCAmIzI1MDtkYWpvdiBkb3RrbnV0ZWogb3NvYnkuIFByZXYmIzIyNTtkemtvdmF0ZcS+IHQmIzI1MzttdG8gcHJlaGxhc3VqZSwgxb5lIG9zb2JuJiMyMzM7ICYjMjUwO2RhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdiYjMjI1O3ZhxaUgcGxuZSB2IHMmIzI1MDtsYWRlIHMgdXN0YW5vdmVuaWFtaSB6JiMyMjU7a29uYS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiB0eXBlPSJ4c2RSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TcCYjMjQ0O3NvYiBkb3J1xI1lbmlhIHYmIzI1MztzdHVwdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+S29udGFrdCB2IHByJiMyMzc7cGFkZSBkb3J1xI1lbmlhIG9zb2JuZSAvIHBvxaF0b3U8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYUZvb3RlciIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNjaGVtYT4NCg0K
Mestský úrad v Žiline, Námestie obetí komunizmu 1, 011 31 Žilina
kc_podatelna@zilina.sk
www.zilina.sk
00321796
2021339474
041 / 7063 111
Slovenská republika
Žilina
Žilinský kraj
Okres Žilina
Slovenská republika
Žilina
Žilinský kraj
Okres Žilina
Slovenská republika
Žilina
Žilinský kraj
Okres Žilina
<_1sekciaZiadatelFOKontaktTelCislo>
<_2sekciaZiadatelFOKontaktEmailAdresa>
0
eDesk
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIG5ic3AgIiYjeGEwOyI+XT4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzIxNzk2LkEwMDAwMjI0LjAwMDAwMDAwMi5aaWFkb3N0T2RwdXN0ZW5pZVpuaXplbmllcG9wbGF0a3VaYUtPYURTT19GTy8xLjQiIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJlZ29ucCI+IA0KPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIiBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iIGluZGVudD0ibm8iIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiLz4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPg0KPGh0bWw+DQoJPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPg0KCTx0aXRsZT4wMDEuxb1pYWRvc8WlIG8gb2RwdXN0ZW5pZS96bsOtxb5lbmllIHBvcGxhdGt1IHphIGtvbXVuw6Fsbnkgb2RwYWQgYSBkcm9ibsO9IHN0YXZlYm7DvSBvZHBhZCAoRk8pPC90aXRsZT4NCgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIvPg0KCTxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJzay1TSyIgLz4NCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvanF1ZXJ5LXVpLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL2pxdWVyeS5tdWx0aXNlbGVjdC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1N0eWxlcy9qcXVlcnkubXVsdGlzZWxlY3QuZmlsdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL2Jhc2UuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvZWdvLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL3RyZWVzZWxlY3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvY2hvc2VudHJlZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1N0eWxlcy9wX3VwdnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDQwMGl0YWxpYyxib2xkLDYwMCZhbXA7c3Vic2V0PWxhdGluLGxhdGluLWV4dCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnktbWlncmF0ZS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkubWFzay5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQ0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LXVpLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5Lm11bHRpc2VsZWN0LmZpbHRlci5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkubXVsdGlzZWxlY3QubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS52YWxpZGF0ZS5jdXN0b21SdWxlcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2Vnby5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5mb3JtLnBsdWdpbnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQkJDQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9lZ28uc3RhdHVzRGlhbG9nLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LmNob3NlbnRyZWUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkudHJlZXNlbGVjdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2ZpbGxlclNhdmVyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvd3JhcHBlci5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL3BfdXB2cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQl2YXIgcHJvamVjdFR5cGUgPSAnVVBWUyc7DQoJCQ0KCQkJCQk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+DQoJCQkJCQkJCSQoZnVuY3Rpb24gKCl7DQoJCQkJICAkKCJ0ZXh0YXJlYSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCSAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gKHRoaXMuc2Nyb2xsSGVpZ2h0KSsncHgnOw0KCQkJCSAgfSk7DQoJCQkJfSk7DQoJCQkJCS8qIDwhW0NEQVRBWyAqLw0KCQkNCgkJDQoJCQ0KCQkNCgkJZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZUluZGV4KHJlc291cmNldHlwZSkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIEdldEV4dGVybmFsUmVzb3VyY2UocmVzb3VyY2V0eXBlLCBpbmRleCkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCg0KCQlmdW5jdGlvbiBTZXREZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgew0KICBpZiAodmFsdWUgPT0gJycgfHwga2V5ID09ICcnKSB7DQogICAgcmV0dXJuOw0KCX0NCn0NCmZ1bmN0aW9uIEdldERlZmF1bHRWYWx1ZSgpIHsNCiAgdmFyIHJldFN0cmluZyA9ICcnOw0KICByZXR1cm4gcmV0U3RyaW5nOw0KfQ0KDQoJCQkJZnVuY3Rpb24gSW5pdENvbmRpdGlvbmFsUnVsZXMoY29udGV4dCwgc2lkKSB7DQoJCQlpZiAoc2lkID09IG51bGwpIHsNCg0KCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgew0KJCgiW2lkfD0nWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIpLm1hc2soIlk5OTkgOTkiLCB7J3RyYW5zbGF0aW9uJzogeyBZOiB7cGF0dGVybjogL1srLC1dLywgb3B0aW9uYWw6IHRydWV9IH19KTsNCn0pOw0KDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCX0NCgkJfQ0KCQkJCQkJDQoNCgkJdmFyIHZhbGlkYXRvck9iamVjdCA9IG51bGw7DQoJCQ0KCQlmdW5jdGlvbiBJbml0VmFsaWRhdGlvbigpIHsNCgkJCXZhbGlkYXRvck9iamVjdCA9ICQoIiNlRm9ybV9lR292XzAwMSIpLnZhbGlkYXRlKHsNCgkJCQkJCQllcnJvckxhYmVsQ29udGFpbmVyOiAkKCIjZXJyb3JzQ29udGFpbmVyIiksDQoJCQkJd3JhcHBlcjogImxpIiwNCgkJCQlvbmtleXVwOiBmYWxzZSwNCgkJCQlvbmNsaWNrOiBmYWxzZSwNCgkJICAgICAgICBpZ25vcmU6ICIuZGlzYWJsZVZhbGlkYXRvcnMiLA0KCQkJCQkJCQlydWxlczogew0KCQkJICAJCQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQpaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KDQpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCg0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNg0KfSwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQpaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClJvemhvZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KdnlydWJlbnkgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCnBvcGxhdG9rIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQp6aWFkYW0gOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClppYWRvc3REb3ZvZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0NCgkJCSAgCX0sDQoJCQkJbWVzc2FnZXM6IHsJCQkNCgkJCSAgIAkJDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ01lbm8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQoNClppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnUHJpZXp2aXNrbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNClppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdEw6F0dW0gbmFyb2RlbmlhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSIsDQpkYXRlOiAiUG9sb8W+a2EgJ0TDoXR1bSBuYXJvZGVuaWEnIG3DoSBuZXBsYXRuw70gZm9ybcOhdCINCn0sDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnT2JlYycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1VsaWNhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdTw7pwLsSNLicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogIk1heGltw6FsbmEgZMS6xb5rYSBwb2xvxb5reSAnUFPEjCcgbXVzw60gYnnFpTogNiB6bmFrb3YiDQp9LA0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1RlbGVmw7NubmUgxI3DrXNsbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0UtbWFpbG92w6EgYWRyZXNhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNClJvemhvZCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdSb3pob2RudXTDrW0gxI3DrXNsbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQp2eXJ1YmVueSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdCb2wgdnlydWJlbsO9IG5hIHJvaycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpwb3BsYXRvayA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdQb3BsYXRvayB6YSBrb211bsOhbG5lIGEgZHJvYm7DqSBzdGF2ZWJuw6kgb2RwYWR5IHZvIHbDvcWha2UgKOKCrCknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KemlhZGFtIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ8W9aWFkYW0gc3Byw6F2Y3UgcG9wbGF0a3UgbyB6bsOtxb5lbmllL29kcHVzdGVuaWUgcG9wbGF0a3UgemEga29tdW7DoWxuZSBvZHBhZHkgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KWmlhZG9zdERvdm9kIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0TDtHZvZCDFvmlhZG9zdGknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnxb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS4nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfQkgIAkNCgkJCSAgCX0NCgkJCX0pOw0KCSAgCX0NCgkvKiBdXT4gKi8NCgkJCQkJPC94c2w6dGV4dD4NCgkJCTwvc2NyaXB0Pg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCS5pbmZvSWNvbiB7ZGlzcGxheTpub25lO30NCi5sb2dvIGltZyB7d2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDt9DQouTGFiZWxCb2xkIGxhYmVsIHtmb250LXdlaWdodDogYm9sZDt9DQouVmVjTmF6b3ZGcm0ge2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjogY2VudGVyO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQ0KLkhlYWRlck5hem92X2ludGVybmFse3dpZHRoOjUwMHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbHt3aWR0aDo0MHB4O30uWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbHt3aWR0aDo0MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbHt3aWR0aDo1MHB4O30uemlhZGFtX2ludGVybmFse3dpZHRoOjE1MHB4O30uWmlhZG9zdERvdm9kX2ludGVybmFse3dpZHRoOjgzMHB4O30uU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3RfaW50ZXJuYWx7d2lkdGg6MjAwcHg7fQ0KCTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCgk8bm9zY3JpcHQ+PHAgY2xhc3M9Im5vc2NyaXB0Ij5QcmUga29tcGxldG7DuiBmdW5rxI1ub3PFpSBhcGxpa8OhY2llIGplIHBvdHJlYm7DqSBwb3ZvbGnFpSBKYXZhU2NyaXB0PC9wPjwvbm9zY3JpcHQ+DQoJPGRpdiBpZD0iZXJyb3JzQ29udGFpbmVyRGl2IiBjbGFzcz0iZXJyb3JzQ29udGFpbmVyRGl2Ij4gPHVsIGlkPSJlcnJvcnNDb250YWluZXIiIGNsYXNzPSJlcnJvcnNDb250YWluZXIiPjxsaS8+PC91bD4gPC9kaXY+DQoJPGZvcm0gaWQ9ImVGb3JtX2VHb3ZfMDAxIiBhY3Rpb249IiI+DQoJCTxkaXYgaWQ9Im1haW4iIGNsYXNzPSJsYXlvdXRNYWluIHVpLXdpZGdldC1jb250ZW50Ij4JDQoJCQkJCQkgDQoJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODgzIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNla2NpYU9iZWMiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODgzIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MjciIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MTIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk0IiBjbGFzcz0iY2VsbCAgbG9nbyIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGltZyBzcmM9Imh0dHA6Ly93d3cuemlsaW5hLnNrL3VzZXJmaWxlcy9lcmIxLmpwZyIgYWx0PSIiIHRpdGxlPSIiLz48L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjI4IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDc5OTUiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX01zVSIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5NZXN0byDFvWlsaW5hOiBNZXN0c2vDvSDDunJhZCB2IMW9aWxpbmUsIE7DoW1lc3RpZSBvYmV0w60ga29tdW5pem11IDEsIDAxMSAzMSDFvWlsaW5hIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19Nc1UiIG5hbWU9Ik9iZWNfTXNVIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjM0MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iTWVzdHNrw70gw7pyYWQgdiDFvWlsaW5lLCBOw6FtZXN0aWUgb2JldMOtIGtvbXVuaXptdSAxLCAwMTEgMzEgxb1pbGluYSIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfTXNVJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX01zVSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19Nc1UnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk3IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19FbWFpbCIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5FLW1haWw6IGtjX3BvZGF0ZWxuYUB6aWxpbmEuc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0VtYWlsIiBuYW1lPSJPYmVjX0VtYWlsIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0ia2NfcG9kYXRlbG5hQHppbGluYS5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk2IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19XZWIiICBzdHlsZT0id2lkdGg6NjAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+V0VCOiB3d3cuemlsaW5hLnNrIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19XZWIiIG5hbWU9Ik9iZWNfV2ViIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0id3d3LnppbGluYS5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfV2ViJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1dlYiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19XZWInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYyOSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MTYwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk5IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19JQ08iICBzdHlsZT0id2lkdGg6MTYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+ScSMTzogMDAzMjE3OTYgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0lDTyIgbmFtZT0iT2JlY19JQ08iIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIwMDMyMTc5NiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfSUNPJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX0lDTyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19JQ08nXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDAwIiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19ESUMiICBzdHlsZT0id2lkdGg6MTYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+REnEjDogMjAyMTMzOTQ3NCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfRElDIiBuYW1lPSJPYmVjX0RJQyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IjIwMjEzMzk0NzQiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdPYmVjX0RJQyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19ESUMnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfRElDJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwNzk5OCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfVGVsZWZvbiIgIHN0eWxlPSJ3aWR0aDoxNjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5UZWxlZsOzbjogMDQxIC8gNzA2MyAxMTEgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1RlbGVmb24iIG5hbWU9Ik9iZWNfVGVsZWZvbiIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IjA0MSAvIDcwNjMgMTExIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19UZWxlZm9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1RlbGVmb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfVGVsZWZvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFIZWFkZXIiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODg1IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYUhlYWRlciIgLz4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4ODUiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzMSIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDMiIGNsYXNzPSJjZWxsICBWZWNOYXpvdkZybSIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjg1MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsW9aWFkb3PFpSBvIG9kcHVzdGVuaWUvem7DrcW+ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG55IG9kcGFkIGEgZHJvYm7DvSBzdGF2ZWJuw70gb2RwYWQgPC94c2w6dGV4dD4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODg2IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBOZXpvYnJhem92YXRJbmZvSWtvbnVSZW1vdGVMb29rdXAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSLFvWlhZGF0ZcS+ICAtIEZ5emlja8OhIG9zb2JhIj7FvWlhZGF0ZcS+ICAtIEZ5emlja8OhIG9zb2JhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4NiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjMyIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4OCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPRGV0YWlsIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4OCIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjM2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxOCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGl0dWwgcHJlZCBtZW5vbSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHByZWQgbWVub20iIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mjwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk1lbm8gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJNZW5vIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsUkMiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+Um9kbsOpIMSNw61zbG8gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9EZXRhaWxSQyIgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFJDIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFJDJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsUkMnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxSQyddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlJvZG7DqSDEjcOtc2xvIiBob2Rub3R1IHYgdHZhcmUgcyBsb23DrXRrb20uPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjM3IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMjEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGl0dWwgemEgbWVub20gPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHphIG1lbm9tIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QcmllenZpc2tvIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmllenZpc2tvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDIyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RMOhdHVtIG5hcm9kZW5pYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgYWx0PSIiIGlkPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgZGF0ZSBkYXRlcGlja2VyICIgdmFsdWU9IiIgbWF4bGVuZ3RoPSIxNCIgc2l6ZT0iMTYwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJEw6F0dW0gbmFyb2RlbmlhIiBob2Rub3R1IHYgdHZhcmUgImRlxYgubWVzaWFjLnJvayIgKCJERC5NTS5SUlJSIikgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4OSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSI+QWRyZXNhIHRydmFsw6lobyBwb2J5dHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzgiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9iZWMgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2JlYyIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VWxpY2EgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiAgc3R5bGU9IndpZHRoOjcwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIzDrXNsbyBieXR1IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMzUiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLEjMOtc2xvIGJ5dHUiIGhvZG5vdHUuPC9zcGFuPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzkiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS3JhaiIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsSMYXPFpSBvYmNlIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMjgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiICBzdHlsZT0id2lkdGg6NjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Tw7pwLsSNLiA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQwIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9rcmVzIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9rcmVzIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBTxIwgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI2IiBzaXplPSI1MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBTxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9yLsSNLiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkgDQoJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5MCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYSIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IkFkcmVzYSBwcmVjaG9kbsOpaG8gcG9ieXR1ICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5BZHJlc2EgcHJlY2hvZG7DqWhvIHBvYnl0dSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTAiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0MSIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDoyOTBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsWgdMOhdCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLFoHTDoXQiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzYiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2JlYyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iZWMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzOCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiAgc3R5bGU9IndpZHRoOjcwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIzDrXNsbyBieXR1IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMzUiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLEjMOtc2xvIGJ5dHUiIGhvZG5vdHUuPC9zcGFuPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDIiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS3JhaiIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsSMYXPFpSBvYmNlIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQzIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9rcmVzIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHknXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9rcmVzIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlBTxIwgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBTxIwiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9yLsSNLiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQkJCTxkaXYgaWQ9InJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvdzIyODkwIiBjbGFzcz0ic2VjdGlvblBhZ2VyIj4NCgkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPjx4c2w6YXR0cmlidXRlIG5hbWU9InN0eWxlIj48eHNsOnRleHQ+ZGlzcGxheTpub25lOzwveHNsOnRleHQ+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPg0KCQkJCQkJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJDQoJCTx4c2w6aWYgdGVzdD0ibm9ybWFsaXplLXNwYWNlKC9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYSkgPSAnJyI+DQoJCQkJCQk8eHNsOmlmIHRlc3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9Abm90SW5Gb3JtRGF0YSI+DQoJCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgaW5pdFJlcGV0aXRpb25TZWN0aW9uKDAsIDEsICdsYXlvdXRSb3cyMjg5MCcpIH0pPC9zY3JpcHQ+DQoJCQkJCTwveHNsOmlmPg0KCQkJCSAgICA8L3hzbDppZj4NCgkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAwNSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4ODciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+QWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4NyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjMzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjI5MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAwNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsWgdMOhdCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAwNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2JlYyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmVjIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiICBzdHlsZT0id2lkdGg6NzBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7EjMOtc2xvIGJ5dHUgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEzNSIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMw61zbG8gYnl0dSIgaG9kbm90dS48L3NwYW4+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzNCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDEwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ0ZXh0IiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIktyYWoiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsSMYXPFpSBvYmNlIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjM1IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pa3JlcyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICBkaXNhYmxlZD0iZGlzYWJsZWQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2tyZXMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QU8SMIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQU8SMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDEzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T3IuxI0uIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9yLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0icmVwZXRpdGlvbkNvbW1hbmRzbGF5b3V0Um93MjI4ODciIGNsYXNzPSJzZWN0aW9uUGFnZXIiPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0ic3R5bGUiPjx4c2w6dGV4dD5kaXNwbGF5Om5vbmU7PC94c2w6dGV4dD48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+DQoJCQkJCQkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkNCgkJPHhzbDppZiB0ZXN0PSJub3JtYWxpemUtc3BhY2UoL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MpID0gJyciPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9Abm90SW5Gb3JtRGF0YSI+DQoJCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgaW5pdFJlcGV0aXRpb25TZWN0aW9uKDAsIDEsICdsYXlvdXRSb3cyMjg4NycpIH0pPC9zY3JpcHQ+DQoJCQkJCTwveHNsOmlmPg0KCQkJCSAgICA8L3hzbDppZj4NCgkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0NSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODkxIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iXzFzZWtjaWFaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iS29udGFrdCAtIHRlbGVmw7NuIj5Lb250YWt0IC0gdGVsZWbDs24JCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODkxIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDQiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiICBzdHlsZT0id2lkdGg6MTE1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGVsZWbDs25uZSDEjcOtc2xvIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiBuYW1lPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGVsZWbDs25uZSDEjcOtc2xvIiBob2Rub3R1LCBvZHBvcsO6xI1hbWUgdiBtZWR6aW7DoXJvZG5vbSB0dmFyZSArNDIxeHh4Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8yc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJLb250YWt0IC0gRS1tYWlsIj5Lb250YWt0IC0gRS1tYWlsCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5MiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ1IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0OCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSIgIHN0eWxlPSJ3aWR0aDoxMTVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5FLW1haWxvdsOhIGFkcmVzYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIG5hbWU9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiRS1tYWlsb3bDoSBhZHJlc2EiIGhvZG5vdHUgdiB0dmFyZSBtZW5vQGRvbcOpbmEuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpaaWFkb3N0Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5MyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlppYWRvc3QiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSLFvWlhZG9zxaUiPsW9aWFkb3PFpQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTMiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NiIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlJvemhvZCIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Sb3pob2RudXTDrW0gxI3DrXNsbyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlJvemhvZCIgbmFtZT0iUm96aG9kIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnUm96aG9kJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdSb3pob2QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1JvemhvZCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlJvemhvZG51dMOtbSDEjcOtc2xvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NyIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDUxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJ2eXJ1YmVueSIgIHN0eWxlPSJ3aWR0aDoxNDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Cb2wgdnlydWJlbsO9IG5hIHJvayA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9InZ5cnViZW55IiBuYW1lPSJ2eXJ1YmVueSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ3Z5cnViZW55J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICd2eXJ1YmVueSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAndnlydWJlbnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJCb2wgdnlydWJlbsO9IG5hIHJvayIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDgiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjkwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA1MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0icG9wbGF0b2siICBzdHlsZT0id2lkdGg6NTQwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UG9wbGF0b2sgemEga29tdW7DoWxuZSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeSB2byB2w73FoWtlICjigqwpIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0icG9wbGF0b2siIG5hbWU9InBvcGxhdG9rIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGRpc2FibGVkPSJkaXNhYmxlZCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAncG9wbGF0b2snXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ3BvcGxhdG9rJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdwb3BsYXRvayddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBvcGxhdG9rIHphIGtvbXVuw6FsbmUgYSBkcm9ibsOpIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDUzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDo2NDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FvWlhZGFtIHNwcsOhdmN1IHBvcGxhdGt1IG8gem7DrcW+ZW5pZS9vZHB1c3RlbmllIHBvcGxhdGt1IHphIGtvbXVuw6FsbmUgb2RwYWR5IGEgZHJvYm7DqSBzdGF2ZWJuw6kgb2RwYWR5IDwveHNsOnRleHQ+IDxlbT4qPC9lbT4gPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlZ5YmVydGUgamVkbnUgeiBtb8W+bm9zdMOtLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pjwvc3Bhbj48ZmllbGRzZXQ+PGxlZ2VuZD48L2xlZ2VuZD48ZGl2IGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCB6aWFkYW1faW50ZXJuYWwiPjxzcGFuPjxpbnB1dCBpZD0iemlhZGFtIiBuYW1lPSJ6aWFkYW0iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCB6aWFkYW1faW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Inpuw63FvmVuaWUgIiB2YWx1ZT0iem7DrcW+ZW5pZSAiICAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPnppYWRhbTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICd6aWFkYW0nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ3ppYWRhbSddPSd6biYjMjM3O8W+ZW5pZSAnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iemlhZGFtIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnpuw63FvmVuaWUgPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJ6aWFkYW1Qb3N0Zml4TGlzdDEiIG5hbWU9InppYWRhbSIgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0IHppYWRhbV9pbnRlcm5hbCIgdGl0bGU9IiIgdHlwZT0icmFkaW8iIGFsdD0ib2RwdXN0ZW5pZSAiIHZhbHVlPSJvZHB1c3RlbmllICIgICBkaXNhYmxlZD0iZGlzYWJsZWQiICA+PHhzbDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+emlhZGFtPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ3ppYWRhbSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnemlhZGFtJ109J29kcHVzdGVuaWUgJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9InppYWRhbVBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5vZHB1c3RlbmllIDwvbGFiZWw+PC9zcGFuPjwvZGl2PjwvZmllbGRzZXQ+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ5IiBjbGFzcz0iY29sdW1uICIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRvc3REb3ZvZCIgPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Ew7R2b2Qgxb5pYWRvc3RpIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjx0ZXh0YXJlYSBpZD0iWmlhZG9zdERvdm9kIiBuYW1lPSJaaWFkb3N0RG92b2QiIHRpdGxlPSIiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRBcmVhIFppYWRvc3REb3ZvZF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgIGNvbHM9IjEwMCIgcm93cz0iMyIgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkb3N0RG92b2QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZG9zdERvdm9kJ10iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRvc3REb3ZvZCddIi8+PC94c2w6d2hlbj48eHNsOm90aGVyd2lzZT48eHNsOnRleHQ+PC94c2w6dGV4dD48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPjwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkTDtHZvZCDFvmlhZG9zdGkiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjgwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlYgcHLDrXBhZGUsIMW+ZSBwb2RrbGFkIChwb3Zpbm7DqSBwcsOtbG9oeSkgbmllIHPDuiB2eXN0YXZlbsOpIHYgc2xvdmVuc2tvbSBhbGVibyDEjWVza29tIGphenlrdSwgcG9wbGF0bsOtayBwcmVkbG/FvsOtIGFqIHByZWtsYWQgcHLDrXNsdcWhbsOpaG8gcG9ka2xhZHUsIHBvZHDDrXNhbsOpaG8gcG9wbGF0bsOta29tLiA8L3hzbDp0ZXh0PiAgPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5NCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNla2NpYU9jaHJhbmFPc29ibnljaFVkYWpvdiIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9Ik9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODk0IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NTAiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDU3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxpbnB1dCBpZD0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHRpdGxlPSIiIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0ieHNkX2Jvb2xlYW4gY2hlY2tCb3ggIiB2YWx1ZT0ixb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS4iIGFsdD0iIiAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyddPScxJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9Ik9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyIgY2xhc3M9ImNoZWNrQm94TGFiZWwiPsW9aWFkYXRlxL4gYWtvIGRvdGtudXTDoSBvc29iYSB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqcgMTEgesOha29uYSDEjS4gMTIyLzIwMTMgWi4gei4gbyBvY2hyYW5lIG9zb2Juw71jaCDDumRham92IGEgbyB6bWVuZSBhIGRvcGxuZW7DrSBuaWVrdG9yw71jaCB6w6Frb25vdiAoxI9hbGVqIGxlbiDigJ56w6Frb24pLCBwb3NreXR1amUgTWVzdHUgxb1pbGluYSwgYWtvIHByZXbDoWR6a292YXRlxL5vdmksIHPDumhsYXMgc28gc3ByYWNvdmFuw61tIG9zb2Juw71jaCDDumRham92IHV2ZWRlbsO9Y2ggdiB0ZWp0byDFvmlhZG9zdGkgYSBqZWogcHLDrWxvaMOhY2gsIGEgdG8gemEgw7rEjWVsb20gYmV6cGXEjW5laiBhIHrDoW1lbnUgdnlsdcSNdWrDumNlaiBpZGVudGlmaWvDoWNpZSBkb3RrbnV0ZWogb3NvYnkgcyB0w71tLCDFvmUgamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBww61zb21uZSBvZHZvbGHFpSB2IHByw61wYWRlIHByZXVrw6F6YXRlxL5uw6lobyBwb3J1xaFlbmlhIHrDoWtvbmEgem8gc3RyYW55IHByZXbDoWR6a292YXRlxL5hLiBPZHZvbGFuaWUgbXVzw60gYnnFpSB1cm9iZW7DqSBww61zb21uZSBhIHByZXVrw6F6YXRlxL5uZSBkb3J1xI1lbsOpIE1lc3R1IMW9aWxpbmEuIERvYmEgcGxhdG5vc3RpIHPDumhsYXN1IHNhIHZpYcW+ZSBuYSBkb2J1IHRydmFuaWEgcHJldWvDoXphdGXEvm7DqWhvIMO6xI1lbHUgc3ByYWPDunZhbmlhIG9zb2Juw71jaCDDumRham92IGRvdGtudXRlaiBvc29ieS4gUHJldsOhZHprb3ZhdGXEviB0w71tdG8gcHJlaGxhc3VqZSwgxb5lIG9zb2Juw6kgw7pkYWplIGRvdGtudXRlaiBvc29ieSBidWRlIHNwcmFjb3bDoXZhxaUgcGxuZSB2IHPDumxhZGUgcyB1c3Rhbm92ZW5pYW1pIHrDoWtvbmEuPC9sYWJlbD48YnIgLz4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iU3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1Ij5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODk3IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NTQiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MzAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDY1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUgPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIj48c3Bhbj48aW5wdXQgaWQ9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siICAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXA8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddPSdlRGVzayciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ib3B0aW9uTGFiZWwiPmVEZXNrPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QxIiBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJvc29ibmUiIHZhbHVlPSJvc29ibmUiICAgZGlzYWJsZWQ9ImRpc2FibGVkIiAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXA8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddPSdvc29ibmUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cFBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5vc29ibmU8L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXBQb3N0Zml4TGlzdDIiIG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9InBvxaF0b3UiIHZhbHVlPSJwb8WhdG91IiAgIGRpc2FibGVkPSJkaXNhYmxlZCIgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAnXT0ncG/FoXRvdSciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QyIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnBvxaF0b3U8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY1NSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NTUwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDY2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgIHN0eWxlPSJ3aWR0aDoyNzBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgbmFtZT0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3RfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIyMDAiICBkaXNhYmxlZD0iZGlzYWJsZWQiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvcyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYUZvb3RlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTYiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhRm9vdGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5NiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjUzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA2MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48YSBocmVmPSJodHRwOi8vd3d3LnppbGluYS5zayIgY2xhc3M9InhzZF9zdHJpbmcgaHlwZXJMaW5rICIgdGFyZ2V0PSJfYmxhbmsiID5Db3B5cmlnaHQgwqkgMjAxNSwgTWVzdG8gxb1pbGluYSAtIFbFoWV0a3kgcHLDoXZhIHZ5aHJhZGVuw6k8L2E+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNjMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjQwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk1lc3RvIMW9aWxpbmEgLSBNZXN0byBzIHR2w6Fyb3UgPC94c2w6dGV4dD4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCQk8ZGl2IGlkPSJidXR0b25zUGxhY2Vob2xkZXIiPg0KCQkJCQkJCQk8aW5wdXQgaWQ9ImNhbmNlbEZvcm0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iWnJ1xaFpxaUiICBhbHQ9IlpydcWhacWlIiBhY2Nlc3NrZXk9IloiIC8+CQkJDQoJCQk8L2Rpdj4JCQ0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic3RhdHVzRGlhbG9nIiB0aXRsZT0iU3RhdHVzIj4NCgkJCTxpbWcgaWQ9InN0YXR1c0xvYWRlciIgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L0ltYWdlcy9hamF4LWxvYWRlci5wbmciIGFsdD0ixIxha2FqdGUgcHJvc8OtbSIgLz4NCgkJCTxwIGlkPSJzdGF0dXNNZXNzYWdlIiBjbGFzcz0ic3RhdHVzTWVzc2FnZSI+PC9wPg0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic2F2ZWRGb3Jtc0NvbnRhaW5lciIgY2xhc3M9ImxheW91dE1haW4gdWktd2lkZ2V0LWNvbnRlbnQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkgIDxkaXYgaWQ9InNhdmVkRm9ybXNDb250YWluZXJSb3ciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgIHRpdGxlPSIiID4NCgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkJhc2ljIiAvPg0KCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCgkJCSAgPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IlVsb8W+ZW7DqSBmb3JtdWzDoXJlIj5VbG/FvmVuw6kgZm9ybXVsw6FyZTwvZGl2Pg0KCQkJICA8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IGlkPSJsYXlvdXRSb3dTYXZlZEZvcm1zIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkgIDxkaXYgaWQ9Imxjb2x1bW5TYXZlZEZvcm1zIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJPGRpdiBpZD0ibGNlbGxTYXZlZEZvcm1zIiBjbGFzcz0iY2VsbCI+ICAgICAgICAgIAkJCQkgIA0KCQkJCTwvZGl2PgkJCQkNCgkJCSAgPC9kaXY+DQoJCQkgIDxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCQk8L2Rpdj4NCgkJICA8L2Rpdj4NCgkJPC9kaXY+DQoJCTxkaXYgaWQ9Im10ZF9mb3JtTWV0YURhdGEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjxzcGFuIGlkPSJtdGRfdmVyc2lvbiI+MS40PC9zcGFuPjxzcGFuIGlkPSJtdGRfaWRwIj41NTM2PC9zcGFuPjxzcGFuIGlkPSJtdGRfbmFtZXNwYWNlIj5odHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMyMTc5Ni5BMDAwMDIyNC4wMDAwMDAwMDIuWmlhZG9zdE9kcHVzdGVuaWVabml6ZW5pZXBvcGxhdGt1WmFLT2FEU09fRk8vMS40PC9zcGFuPjwvZGl2Pg0KCTwvZm9ybT4NCjwvYm9keT4NCjwvaHRtbD4NCjwveHNsOnRlbXBsYXRlPg0KPC94c2w6c3R5bGVzaGVldD4NCg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZUZvcm1fZUdvdl8wMDEgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzIxNzk2LkEwMDAwMjI0LjAwMDAwMDAwMi5aaWFkb3N0T2RwdXN0ZW5pZVpuaXplbmllcG9wbGF0a3VaYUtPYURTT19GTy8xLjQiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPjxTZWtjaWFPYmVjPjxPYmVjX01zVT5NZXN0c2vDvSDDunJhZCB2IMW9aWxpbmUsIE7DoW1lc3RpZSBvYmV0w60ga29tdW5pem11IDEsIDAxMSAzMSDFvWlsaW5hPC9PYmVjX01zVT48T2JlY19FbWFpbD5rY19wb2RhdGVsbmFAemlsaW5hLnNrPC9PYmVjX0VtYWlsPjxPYmVjX1dlYj53d3cuemlsaW5hLnNrPC9PYmVjX1dlYj48T2JlY19JQ08+MDAzMjE3OTY8L09iZWNfSUNPPjxPYmVjX0RJQz4yMDIxMzM5NDc0PC9PYmVjX0RJQz48T2JlY19UZWxlZm9uPjA0MSAvIDcwNjMgMTExPC9PYmVjX1RlbGVmb24+PC9TZWtjaWFPYmVjPjxzZWtjaWFIZWFkZXI+PC9zZWtjaWFIZWFkZXI+PHNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24+PHNla2NpYVppYWRhdGVsRk9EZXRhaWw+PFppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4PjwvWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg+PFppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZT48L1ppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZT48WmlhZGF0ZWxGT0RldGFpbFJDPjwvWmlhZGF0ZWxGT0RldGFpbFJDPjxaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PjwvWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeD48WmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZT48L1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWU+PFppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aD48L1ppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aD48L3Nla2NpYVppYWRhdGVsRk9EZXRhaWw+PHNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3M+PFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeT5TbG92ZW5za8OhIHJlcHVibGlrYTwvWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PjxaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eT7FvWlsaW5hPC9aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eT48WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZT48L1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWU+PFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dT48L1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dT48WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24+xb1pbGluc2vDvSBrcmFqPC9aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbj48WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3Q+PC9aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdD48WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcj48L1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXI+PFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eT5Pa3JlcyDFvWlsaW5hPC9aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk+PFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlPjwvWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGU+PFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcj48L1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcj48L3Nla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3M+PHNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYT48WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PlNsb3ZlbnNrw6EgcmVwdWJsaWthPC9aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk+PFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PsW9aWxpbmE8L1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PjxaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lPjwvWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZT48WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1PjwvWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1PjxaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbj7FvWlsaW5za8O9IGtyYWo8L1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPjxaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdD48L1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0PjxaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyPjwvWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcj48WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5Pk9rcmVzIMW9aWxpbmE8L1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eT48WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGU+PC9aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZT48WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyPjwvWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyPjwvc2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhPjxzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcz48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeT5TbG92ZW5za8OhIHJlcHVibGlrYTwvWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeT48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PsW9aWxpbmE8L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eT48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWU+PC9aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZT48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dT48L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHU+PFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbj7FvWlsaW5za8O9IGtyYWo8L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbj48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0PjwvWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0PjxaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcj48L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyPjxaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5Pk9rcmVzIMW9aWxpbmE8L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHk+PFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZT48L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZT48WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlcj48L1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXI+PC9zZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcz48XzFzZWtjaWFaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvPjxaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3M+PC9aaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3M+PC9fMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8+PF8yc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYT48WmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYT48L1ppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2E+PC9fMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2E+PC9zZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uPjxaaWFkb3N0PjxSb3pob2Q+PC9Sb3pob2Q+PHZ5cnViZW55PjwvdnlydWJlbnk+PHBvcGxhdG9rPjwvcG9wbGF0b2s+PHppYWRhbT48L3ppYWRhbT48WmlhZG9zdERvdm9kPjwvWmlhZG9zdERvdm9kPjwvWmlhZG9zdD48U2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92PjxPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXM+MDwvT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzPjwvU2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92PjxzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1PjxTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwPmVEZXNrPC9TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwPjxTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdD48L1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0Pjwvc2VrY2lhU3Bvc29iRG9ydWNlbmlhVnlzdHVwdT48c2VrY2lhRm9vdGVyPjwvc2VrY2lhRm9vdGVyPjwvZUZvcm1fZUdvdl8wMDE+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48UHVibGlzaGVkRm9ybVZlcnNpb25NZXRhZGF0YSB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBEZXNpZ25lclZlcnNpb249IjEuMTYuMC4wIiBQdWJsaXNoaW5nRGF0ZT0iNi4xMi4yMDE2Ij48Rm9ybSBHZXN0b3I9ImljbzovL3NrLzAwMzIxNzk2IiBQdXJwb3NlPSJOQSIgTmFtZT0iMDAxLsW9aWFkb3PFpSBvIG9kcHVzdGVuaWUvem7DrcW+ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG55IG9kcGFkIGEgZHJvYm7DvSBzdGF2ZWJuw70gb2RwYWQgKEZPKSIgSWRlbnRpZmllcj0iTkEiPjxGb3JtVmVyc2lvbiBWYWxpZEZyb209IjYuMTIuMjAxNiIgVmFsaWRUbz0iTkEiIExhbmd1YWdlPSJzayIgVmVyc2lvbj0iMS40IiBJZGVudGlmaWVyPSIwMDMyMTc5Ni5BMDAwMDIyNC4wMDAwMDAwMDIuWmlhZG9zdE9kcHVzdGVuaWVabml6ZW5pZXBvcGxhdGt1WmFLT2FEU09fRk8iIElEPSI3OTkiIEd1aWQ9IjIwOTkwNmFlLTU5NDYtNGEzOC05OWI1LWYwNDk1NjI3MWMzMCI+PE1hcHBpbmcgVHJhbnNsYXRvclR5cGU9IkJhc2ljIiBJc0ZpZWxkTWFwcGluZ1VzZWQ9ImZhbHNlIiAvPjxSZW1vdGVMb29rdXBzPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzA4NTkiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSJTbG92ZW5za8OhIHJlcHVibGlrYSIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyNSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IsW9aWxpbmEiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjMiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSLFvWlsaW5za8O9IGtyYWoiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgUmVtb3RlTG9va3VwQ29kZT0iU1VTUl8wMDI0IiBSZW1vdGVTb3VyY2VJZGVudGlmaWVyPSIiIFJlbW90ZURlZmF1bHRWYWx1ZT0iT2tyZXMgxb1pbGluYSIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgUmVtb3RlTG9va3VwQ29kZT0iU1VTUl8wMDYyIiBSZW1vdGVTb3VyY2VJZGVudGlmaWVyPSIiIFJlbW90ZURlZmF1bHRWYWx1ZT0iIiBSZW1vdGVTb3J0Q3JpdGVyaXVtPSIiIFJlbW90ZUNvbnRyb2xUeXBlPSJSZW1vdGVMb29rdXAiIC8+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDA2MyIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDg1OSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IlNsb3ZlbnNrw6EgcmVwdWJsaWthIiBSZW1vdGVTb3J0Q3JpdGVyaXVtPSIiIFJlbW90ZUNvbnRyb2xUeXBlPSJSZW1vdGVMb29rdXAiIC8+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjUiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSLFvWlsaW5hIiBSZW1vdGVTb3J0Q3JpdGVyaXVtPSIiIFJlbW90ZUNvbnRyb2xUeXBlPSJSZW1vdGVMb29rdXAiIC8+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uIiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjMiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSLFvWlsaW5za8O9IGtyYWoiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiBSZW1vdGVMb29rdXBDb2RlPSJTVVNSXzAwMjQiIFJlbW90ZVNvdXJjZUlkZW50aWZpZXI9IiIgUmVtb3RlRGVmYXVsdFZhbHVlPSJPa3JlcyDFvWlsaW5hIiBSZW1vdGVTb3J0Q3JpdGVyaXVtPSIiIFJlbW90ZUNvbnRyb2xUeXBlPSJSZW1vdGVMb29rdXAiIC8+PFJlbW90ZUxvb2t1cCBDb250cm9sSWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgUmVtb3RlTG9va3VwQ29kZT0iU1VTUl8wODU5IiBSZW1vdGVTb3VyY2VJZGVudGlmaWVyPSIiIFJlbW90ZURlZmF1bHRWYWx1ZT0iU2xvdmVuc2vDoSByZXB1Ymxpa2EiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyNSIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IsW9aWxpbmEiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48UmVtb3RlTG9va3VwIENvbnRyb2xJZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyMyIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9IsW9aWxpbnNrw70ga3JhaiIgUmVtb3RlU29ydENyaXRlcml1bT0iIiBSZW1vdGVDb250cm9sVHlwZT0iUmVtb3RlTG9va3VwIiAvPjxSZW1vdGVMb29rdXAgQ29udHJvbElkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIFJlbW90ZUxvb2t1cENvZGU9IlNVU1JfMDAyNCIgUmVtb3RlU291cmNlSWRlbnRpZmllcj0iIiBSZW1vdGVEZWZhdWx0VmFsdWU9Ik9rcmVzIMW9aWxpbmEiIFJlbW90ZVNvcnRDcml0ZXJpdW09IiIgUmVtb3RlQ29udHJvbFR5cGU9IlJlbW90ZUxvb2t1cCIgLz48L1JlbW90ZUxvb2t1cHM+PEZpZHMgLz48L0Zvcm1WZXJzaW9uPjwvRm9ybT48L1B1Ymxpc2hlZEZvcm1WZXJzaW9uTWV0YWRhdGE+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiICB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgIHhtbG5zOmVnb25wPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMyMTc5Ni5BMDAwMDIyNC4wMDAwMDAwMDIuWmlhZG9zdE9kcHVzdGVuaWVabml6ZW5pZXBvcGxhdGt1WmFLT2FEU09fRk8vMS40IiBleGNsdWRlLXJlc3VsdC1wcmVmaXhlcz0iZWdvbnAiPg0KPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIiBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iIGluZGVudD0ibm8iIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiLz4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIgLz4NCjx0aXRsZT4wMDEuxb1pYWRvc8WlIG8gb2RwdXN0ZW5pZS96bsOtxb5lbmllIHBvcGxhdGt1IHphIGtvbXVuw6Fsbnkgb2RwYWQgYSBkcm9ibsO9IHN0YXZlYm7DvSBvZHBhZCAoRk8pPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ii8+DQo8bWV0YSBuYW1lPSJsYW5ndWFnZSIgY29udGVudD0ic2stU0siLz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5IHsgDQoJZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCAnU2Vnb2UgVUknLCAnVHJlYnVjaGV0IE1TJywgJ0dlbmV2YSBDRScsIGx1Y2lkYSwgc2Fucy1zZXJpZjsNCgliYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCn0NCi51aS10YWJzIHsNCglwYWRkaW5nOiAuMmVtOw0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgl6b29tOiAxOw0KfQkJCQkJCQkJDQouY2xlYXIgeyBjbGVhcjogYm90aDsgaGVpZ2h0OiAwO30NCi5sYXlvdXRNYWluIHsNCgltYXJnaW46IDBweCBhdXRvOw0KCXBhZGRpbmc6IDVweCA1cHggNXB4IDVweDsJDQp9CQkJCQ0KLmxheW91dFJvdyB7IG1hcmdpbi1ib3R0b206IDVweDsgfQkJCQkNCi5jYXB0aW9uIHsgLyp3aWR0aDogMTAwJTsgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IGJsYWNrOyovIH0NCi5ub2NhcHRpb24gJmd0OyAuY2FwdGlvbiB7IGJvcmRlcjogMHB4ICFpbXBvcnRhbnQ7IH0NCi5ub2NhcHRpb24gJmd0OyAuY2FwdGlvbiBzcGFuIHsNCgliYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7DQoJZGlzcGxheTogbm9uZTsNCn0gDQouY2FwdGlvbiAudGl0bGUgeyBwYWRkaW5nLWxlZnQ6IDVweDsgfQ0KLmhlYWRlcmNvcnJlY3Rpb24gewkNCgltYXJnaW46IDBweDsNCiAgICBmb250LXNpemUgOiAxZW07DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9CQkJCQ0KLmxhYmVsVmlzIHsNCglmbG9hdDogbGVmdDsNCglmb250LXdlaWdodDogYm9sZDsNCglmb250LWZhbWlseTogJ09wZW4gU2FucycsICdTZWdvZSBVSScsICdUcmVidWNoZXQgTVMnLCAnR2VuZXZhIENFJywgbHVjaWRhLCBzYW5zLXNlcmlmOw0KCWxpbmUtaGVpZ2h0OiAyNXB4Ow0KCW1hcmdpbjogMHB4IDE4cHggMHB4IDBweDsNCglwYWRkaW5nLWxlZnQ6IDNweDsNCgl3aWR0aDogMTkwcHg7DQoJd29yZC13cmFwOiBicmVhay13b3JkOw0KICAgIGZvbnQtc2l6ZTogMC44ZW07DQp9DQouY29udGVudFZpcyB7ICAgIAkgICAgIA0KCWZsb2F0OiBsZWZ0OwkNCglsaW5lLWhlaWdodDogMjVweDsNCgltYXJnaW46IDBweDsNCglwYWRkaW5nOiAwcHg7DQoJdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICBmb250LXNpemU6IDAuNzVlbTsJCQkNCn0NCi53b3Jkd3JhcCB7IA0KICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgICAgICANCiAgICB3aGl0ZS1zcGFjZTogLW1vei1wcmUtd3JhcDsgDQogICAgd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgICAgIA0KICAgIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICANCiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7ICAgICAgDQp9CQ0KLnVpLXdpZGdldC1jb250ZW50IHsNCgliYWNrZ3JvdW5kIDogNTAlIDUwJSByZXBlYXQteCAjZmZmZmZmOw0KCWJvcmRlciA6ICNkNGQ0ZDQgc29saWQgMnB4Ow0KCWNvbG9yIDogIzRmNGU0ZTsNCglib3JkZXItcmFkaXVzIDogM3B4Ow0KfQ0KLnVpLXdpZGdldC1oZWFkZXIgew0KCWN1cnNvciA6IHBvaW50ZXI7DQoJZm9udC1zaXplIDogMC44ZW07DQoJY29sb3IgOiAjNDk0OTQ5Ow0KCXBhZGRpbmctbGVmdCA6IDJweDsNCglib3JkZXIgOiAjZWFlOWU4IHNvbGlkIDFweDsNCgliYWNrZ3JvdW5kLWNvbG9yIDogI2VhZTllODsNCgltYXJnaW4tYm90dG9tOiAzcHg7DQoJYm9yZGVyLXJhZGl1cyA6IDNweDsNCn0JCQkNCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgaWQ9Im1haW4iIGNsYXNzPSJsYXlvdXRNYWluIj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj5lRm9ybV9lR292XzAwMV9GTzwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhSGVhZGVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhRm9vdGVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6U2VrY2lhT2JlYyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkb3N0Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6U2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSIvPg0KPC9kaXY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj5PY2hyYW5hIG9zb2Juw71jaCDDumRham92PC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdTwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6U3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0Ii8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj7FvWlhZG9zxaU8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlJvemhvZCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnZ5cnViZW55Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6cG9wbGF0b2siLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDp6aWFkYW0iLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkb3N0RG92b2QiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2JlYyI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPk9iZWM8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOk9iZWNfTXNVIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6T2JlY19FbWFpbCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOk9iZWNfV2ViIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6T2JlY19JQ08iLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpPYmVjX0RJQyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOk9iZWNfVGVsZWZvbiIvPg0KPC9kaXY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+xb1pYWRhdGXEviAgLSBGeXppY2vDoSBvc29iYTwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOl8xc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsbyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOl8yc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSIvPg0KPC9kaXY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8xc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsbyI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPktvbnRha3QgLSB0ZWxlZsOzbjwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6XzJzZWtjaWFaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+S29udGFrdCAtIEUtbWFpbDwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSIvPg0KPC9kaXY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwiPg0KPGRpdiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiID4NCjxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQo8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIj7FvWlhZGF0ZcS+ICAtIGZ5emlja8OhIG9zb2JhPC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxSQyIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcyI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPkFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1PC9kaXY+DQo8L2Rpdj4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIi8+DQo8L2Rpdj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIj4NCjxkaXYgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiA+DQo8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiI+QWRyZXNhIHByZWNob2Ruw6lobyBwb2J5dHUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSk8L2Rpdj4NCjwvZGl2Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5Ii8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiLz4NCjx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcyI+DQo8ZGl2IGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCIgPg0KPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4NCjxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iPkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KTwvZGl2Pg0KPC9kaXY+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIi8+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIvPg0KPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiLz4NCjwvZGl2Pg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFIZWFkZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPnNla2NpYUhlYWRlcjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFGb290ZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPnNla2NpYUZvb3RlcjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YvZWdvbnA6T2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEgdiBzw7psYWRlIHMgdXN0YW5vdmVuw61tIMKnIDExIHrDoWtvbmEgxI0uIDEyMi8yMDEzIFouIHouIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29uKSwgcG9za3l0dWplIE1lc3R1IMW9aWxpbmEsIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIHYgdGVqdG8gxb5pYWRvc3RpIGEgamVqIHByw61sb2jDoWNoLCBhIHRvIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHMgdMO9bSwgxb5lIGplIG9wcsOhdm5lbsO9IHRlbnRvIHPDumhsYXMgcMOtc29tbmUgb2R2b2xhxaUgdiBwcsOtcGFkZSBwcmV1a8OhemF0ZcS+bsOpaG8gcG9ydcWhZW5pYSB6w6Frb25hIHpvIHN0cmFueSBwcmV2w6FkemtvdmF0ZcS+YS4gT2R2b2xhbmllIG11c8OtIGJ5xaUgdXJvYmVuw6kgcMOtc29tbmUgYSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DqSBNZXN0dSDFvWlsaW5hLiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIHByZXVrw6F6YXRlxL5uw6lobyDDusSNZWx1IHNwcmFjw7p2YW5pYSBvc29ibsO9Y2ggw7pkYWpvdiBkb3RrbnV0ZWogb3NvYnkuIFByZXbDoWR6a292YXRlxL4gdMO9bXRvIHByZWhsYXN1amUsIMW+ZSBvc29ibsOpIMO6ZGFqZSBkb3RrbnV0ZWogb3NvYnkgYnVkZSBzcHJhY292w6F2YcWlIHBsbmUgdiBzw7psYWRlIHMgdXN0YW5vdmVuaWFtaSB6w6Frb25hLjogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj48eHNsOndpdGgtcGFyYW0gbmFtZT0iYm9vbFZhbHVlIiBzZWxlY3Q9Ii4iIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1L2Vnb25wOlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii49J2VEZXNrJyI+PHhzbDp0ZXh0PmVEZXNrPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdvc29ibmUnIj48eHNsOnRleHQ+b3NvYm5lPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdwb8WhdG91JyI+PHhzbDp0ZXh0PnBvxaF0b3U8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUvZWdvbnA6U3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPktvbnRha3QgdiBwcsOtcGFkZSBkb3J1xI1lbmlhIG9zb2JuZSAvIHBvxaF0b3U6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QvZWdvbnA6Um96aG9kIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5Sb3pob2RudXTDrW0gxI3DrXNsbzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6WmlhZG9zdC9lZ29ucDp2eXJ1YmVueSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+Qm9sIHZ5cnViZW7DvSBuYSByb2s6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QvZWdvbnA6cG9wbGF0b2siPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlBvcGxhdG9rIHphIGtvbXVuw6FsbmUgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHkgdm8gdsO9xaFrZSAo4oKsKTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6WmlhZG9zdC9lZ29ucDp6aWFkYW0iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsW9aWFkYW0gc3Byw6F2Y3UgcG9wbGF0a3UgbyB6bsOtxb5lbmllL29kcHVzdGVuaWUgcG9wbGF0a3UgemEga29tdW7DoWxuZSBvZHBhZHkgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHk6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2hvb3NlPjx4c2w6d2hlbiB0ZXN0PSIuPSd6biYjMjM3O8W+ZW5pZSAnIj48eHNsOnRleHQ+em4mIzIzNzvFvmVuaWUgPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdvZHB1c3RlbmllICciPjx4c2w6dGV4dD5vZHB1c3RlbmllIDwveHNsOnRleHQ+PC94c2w6d2hlbj48eHNsOm90aGVyd2lzZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwveHNsOm90aGVyd2lzZT48L3hzbDpjaG9vc2U+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6WmlhZG9zdC9lZ29ucDpaaWFkb3N0RG92b2QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPkTDtHZvZCDFvmlhZG9zdGk6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMvZWdvbnA6T2JlY19Nc1UiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPk1lc3RvIMW9aWxpbmE6IE1lc3Rza8O9IMO6cmFkIHYgxb1pbGluZSwgTsOhbWVzdGllIG9iZXTDrSBrb211bml6bXUgMSwgMDExIDMxIMW9aWxpbmE6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMvZWdvbnA6T2JlY19FbWFpbCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+RS1tYWlsOiBrY19wb2RhdGVsbmFAemlsaW5hLnNrOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfV2ViIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5XRUI6IHd3dy56aWxpbmEuc2s6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMvZWdvbnA6T2JlY19JQ08iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPknEjE86IDAwMzIxNzk2OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfRElDIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5EScSMOiAyMDIxMzM5NDc0OiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfVGVsZWZvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+VGVsZWbDs246IDA0MSAvIDcwNjMgMTExOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8xc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsby9lZ29ucDpaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlRlbGVmw7NubmUgxI3DrXNsbzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+RS1tYWlsb3bDoSBhZHJlc2E6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+VGl0dWwgcHJlZCBtZW5vbTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwvZWdvbnA6WmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5NZW5vOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwvZWdvbnA6WmlhZGF0ZWxGT0RldGFpbFJDIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5Sb2Ruw6kgxI3DrXNsbzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlRpdHVsIHphIG1lbm9tOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5QcmllenZpc2tvOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwvZWdvbnA6WmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5Ew6F0dW0gbmFyb2RlbmlhOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsWgdMOhdDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPk9iZWM6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlVsaWNhOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7EjMOtc2xvIGJ5dHU6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+S3JhajogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsSMYXPFpSBvYmNlOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+U8O6cC7EjS46IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPk9rcmVzOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+UFPEjDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T3IuxI0uOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsWgdMOhdDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2JlYzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5VbGljYTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7EjMOtc2xvIGJ5dHU6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5LcmFqOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7EjGFzxaUgb2JjZTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+U8O6cC7EjS46IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2tyZXM6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlBTxIw6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T3IuxI0uOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPsWgdMOhdDogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2JlYzogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5VbGljYTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7EjMOtc2xvIGJ5dHU6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj5LcmFqOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPGRpdj48bGFiZWwgY2xhc3M9ImxhYmVsVmlzIj7EjGFzxaUgb2JjZTogPC9sYWJlbD48c3BhbiBjbGFzcz0iY29udGVudFZpcyB3b3Jkd3JhcCI+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJTBBJyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+U8O6cC7EjS46IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T2tyZXM6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj4mI3hhMDs8L2Rpdj48L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8ZGl2PjxsYWJlbCBjbGFzcz0ibGFiZWxWaXMiPlBTxIw6IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImNvbnRlbnRWaXMgd29yZHdyYXAiPjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyUwQSciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjbGVhciI+JiN4YTA7PC9kaXY+PC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjxkaXY+PGxhYmVsIGNsYXNzPSJsYWJlbFZpcyI+T3IuxI0uOiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJjb250ZW50VmlzIHdvcmR3cmFwIj48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IiclMEEnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPiYjeGEwOzwvZGl2PjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRvU2tEYXRlIj4NCjx4c2w6cGFyYW0gbmFtZT0iZGF0ZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGRhdGUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGRhdGVTdHJpbmcgIT0gJycgYW5kIHN0cmluZy1sZW5ndGgoJGRhdGVTdHJpbmcpPTEwIGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVN0cmluZywgMSwgNCkpKSAhPSAnTmFOJyAiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDksIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkiIC8+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVTdHJpbmciPjwveHNsOnZhbHVlLW9mPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj4NCjx4c2w6cGFyYW0gbmFtZT0iYm9vbFZhbHVlIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJib29sVmFsdWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRib29sVmFsdWUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICd0cnVlJyAiPg0KPHhzbDp0ZXh0PsOBbm88L3hzbDp0ZXh0Pg0KPC94c2w6d2hlbj4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJ2ZhbHNlJyAiPg0KPHhzbDp0ZXh0Pk5pZTwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDp3aGVuIHRlc3Q9IiRib29sVmFsdWVTdHJpbmcgPSAnMScgIj4NCjx4c2w6dGV4dD7DgW5vPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICcwJyAiPg0KPHhzbDp0ZXh0Pk5pZTwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGJvb2xWYWx1ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VGltZVRyaW1TZWNvbmRzIj4NCjx4c2w6cGFyYW0gbmFtZT0idGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0idGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJHRpbWUpIiAvPg0KPHhzbDppZiB0ZXN0PSIkdGltZVN0cmluZyAhPSAnJyI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nKCR0aW1lU3RyaW5nLCAxLCA1KSIgLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRpbWUiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQo8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDgpIiAvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj4NCjx4c2w6cGFyYW0gbmFtZT0idGV4dCIvPg0KPHhzbDpwYXJhbSBuYW1lPSJyZXBsYWNlIi8+DQo8eHNsOnBhcmFtIG5hbWU9ImJ5Ii8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSJjb250YWlucygkdGV4dCwgJHJlcGxhY2UpIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYmVmb3JlKCR0ZXh0LCRyZXBsYWNlKSIvPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRieSIvPg0KPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJHRleHQsJHJlcGxhY2UpIi8+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSIkcmVwbGFjZSIvPg0KPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IiRieSIgLz4NCjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRleHQiLz4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWUiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMikpIiAvPg0KPC94c2w6d2hlbj4NCjx4c2w6b3RoZXJ3aXNlPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGVUaW1lU2Vjb25kIj4NCjx4c2w6cGFyYW0gbmFtZT0iZGF0ZVRpbWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9ImRhdGVUaW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZVRpbWUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGRhdGVUaW1lU3RyaW5nIT0gJycgYW5kIHN0cmluZy1sZW5ndGgoJGRhdGVUaW1lU3RyaW5nKT4xOCBhbmQgc3RyaW5nKG51bWJlcihzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDksIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDYsIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpLCcgJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTIsIDIpLCc6Jywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTUsIDIpLCc6Jywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTgsIDIpKSIgLz4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVRpbWVTdHJpbmciPjwveHNsOnZhbHVlLW9mPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8L3hzbDpzdHlsZXNoZWV0Pg0KDQo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSB4c2w6c3R5bGVzaGVldCBbIDwhRU5USVRZIG5ic3AgIiYjeGEwOyI+XT4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzIxNzk2LkEwMDAwMjI0LjAwMDAwMDAwMi5aaWFkb3N0T2RwdXN0ZW5pZVpuaXplbmllcG9wbGF0a3VaYUtPYURTT19GTy8xLjQiIGV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzPSJlZ29ucCI+IA0KPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIiBkb2N0eXBlLXB1YmxpYz0iLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iIGluZGVudD0ibm8iIG9taXQteG1sLWRlY2xhcmF0aW9uPSJ5ZXMiLz4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPg0KPGh0bWw+DQoJPGhlYWQ+DQoJPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIiAvPg0KCTx0aXRsZT4wMDEuxb1pYWRvc8WlIG8gb2RwdXN0ZW5pZS96bsOtxb5lbmllIHBvcGxhdGt1IHphIGtvbXVuw6Fsbnkgb2RwYWQgYSBkcm9ibsO9IHN0YXZlYm7DvSBvZHBhZCAoRk8pPC90aXRsZT4NCgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIvPg0KCTxtZXRhIG5hbWU9Imxhbmd1YWdlIiBjb250ZW50PSJzay1TSyIgLz4NCgkJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvanF1ZXJ5LXVpLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL2pxdWVyeS5tdWx0aXNlbGVjdC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1N0eWxlcy9qcXVlcnkubXVsdGlzZWxlY3QuZmlsdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL2Jhc2UuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvZWdvLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIvPg0KCTxsaW5rIGhyZWY9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU3R5bGVzL3RyZWVzZWxlY3QuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TdHlsZXMvY2hvc2VudHJlZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiLz4NCgk8bGluayBocmVmPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1N0eWxlcy9wX3VwdnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIi8+DQoJPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDQwMGl0YWxpYyxib2xkLDYwMCZhbXA7c3Vic2V0PWxhdGluLGxhdGluLWV4dCIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnktbWlncmF0ZS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkubWFzay5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQ0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LXVpLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS11aS10aW1lcGlja2VyLWFkZG9uLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5Lm11bHRpc2VsZWN0LmZpbHRlci5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkubXVsdGlzZWxlY3QubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LnZhbGlkYXRlLm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS52YWxpZGF0ZS5jdXN0b21SdWxlcy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2Vnby5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2pxdWVyeS5mb3JtLnBsdWdpbnMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CQkJDQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9lZ28uc3RhdHVzRGlhbG9nLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvanF1ZXJ5LmNob3NlbnRyZWUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvU2NyaXB0cy9qcXVlcnkudHJlZXNlbGVjdC5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL2ZpbGxlclNhdmVyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KCTxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL2VGb3JtL0Rlc2lnbmVyLzIuMC4xLjE2L1NjcmlwdHMvd3JhcHBlci5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuc2xvdmVuc2tvLnNrL3N0YXRpYy9lRm9ybS9EZXNpZ25lci8yLjAuMS4xNi9TY3JpcHRzL3BfdXB2cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQl2YXIgcHJvamVjdFR5cGUgPSAnVVBWUyc7DQoJCQ0KCQkJCQk8eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+DQoJCQkJCS8qIDwhW0NEQVRBWyAqLw0KCQkNCgkJDQoJCQ0KCQkNCgkJZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZUluZGV4KHJlc291cmNldHlwZSkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIEdldEV4dGVybmFsUmVzb3VyY2UocmVzb3VyY2V0eXBlLCBpbmRleCkgew0KICBzd2l0Y2ggKHJlc291cmNldHlwZSkgew0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gbnVsbDsNCiAgfQ0KICByZXR1cm4gbnVsbDsNCn0NCg0KCQlmdW5jdGlvbiBTZXREZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgew0KICBpZiAodmFsdWUgPT0gJycgfHwga2V5ID09ICcnKSB7DQogICAgcmV0dXJuOw0KCX0NCn0NCmZ1bmN0aW9uIEdldERlZmF1bHRWYWx1ZSgpIHsNCiAgdmFyIHJldFN0cmluZyA9ICcnOw0KICByZXR1cm4gcmV0U3RyaW5nOw0KfQ0KDQoJCQkJZnVuY3Rpb24gSW5pdENvbmRpdGlvbmFsUnVsZXMoY29udGV4dCwgc2lkKSB7DQoJCQlpZiAoc2lkID09IG51bGwpIHsNCg0KCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgew0KJCgiW2lkfD0nWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIpLm1hc2soIlk5OTkgOTkiLCB7J3RyYW5zbGF0aW9uJzogeyBZOiB7cGF0dGVybjogL1srLC1dLywgb3B0aW9uYWw6IHRydWV9IH19KTsNCn0pOw0KDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCX0NCgkJfQ0KCQkJCQkJDQoNCgkJdmFyIHZhbGlkYXRvck9iamVjdCA9IG51bGw7DQoJCQ0KCQlmdW5jdGlvbiBJbml0VmFsaWRhdGlvbigpIHsNCgkJCXZhbGlkYXRvck9iamVjdCA9ICQoIiNlRm9ybV9lR292XzAwMSIpLnZhbGlkYXRlKHsNCgkJCQkJCQllcnJvckxhYmVsQ29udGFpbmVyOiAkKCIjZXJyb3JzQ29udGFpbmVyIiksDQoJCQkJd3JhcHBlcjogImxpIiwNCgkJCQlvbmtleXVwOiBmYWxzZSwNCgkJCQlvbmNsaWNrOiBmYWxzZSwNCgkJICAgICAgICBpZ25vcmU6ICIuZGlzYWJsZVZhbGlkYXRvcnMiLA0KCQkJCQkJCQlydWxlczogew0KCQkJICAJCQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQpaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KDQpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCg0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogNg0KfSwNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA1DQp9LA0KDQpaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClJvemhvZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KdnlydWJlbnkgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCnBvcGxhdG9rIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQp6aWFkYW0gOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNClppYWRvc3REb3ZvZCA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0NCgkJCSAgCX0sDQoJCQkJbWVzc2FnZXM6IHsJCQkNCgkJCSAgIAkJDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ01lbm8nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQoNClppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnUHJpZXp2aXNrbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNClppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdEw6F0dW0gbmFyb2RlbmlhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSIsDQpkYXRlOiAiUG9sb8W+a2EgJ0TDoXR1bSBuYXJvZGVuaWEnIG3DoSBuZXBsYXRuw70gZm9ybcOhdCINCn0sDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnT2JlYycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1VsaWNhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdTw7pwLsSNLicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogIk1heGltw6FsbmEgZMS6xb5rYSBwb2xvxb5reSAnUFPEjCcgbXVzw60gYnnFpTogNiB6bmFrb3YiDQp9LA0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6ICJNYXhpbcOhbG5hIGTEusW+a2EgcG9sb8W+a3kgJ1BTxIwnIG11c8OtIGJ5xaU6IDUgem5ha292Ig0KfSwNCg0KWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1RlbGVmw7NubmUgxI3DrXNsbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0UtbWFpbG92w6EgYWRyZXNhJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNClJvemhvZCA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdSb3pob2RudXTDrW0gxI3DrXNsbycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQp2eXJ1YmVueSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdCb2wgdnlydWJlbsO9IG5hIHJvaycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpwb3BsYXRvayA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdQb3BsYXRvayB6YSBrb211bsOhbG5lIGEgZHJvYm7DqSBzdGF2ZWJuw6kgb2RwYWR5IHZvIHbDvcWha2UgKOKCrCknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KemlhZGFtIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ8W9aWFkYW0gc3Byw6F2Y3UgcG9wbGF0a3UgbyB6bsOtxb5lbmllL29kcHVzdGVuaWUgcG9wbGF0a3UgemEga29tdW7DoWxuZSBvZHBhZHkgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KWmlhZG9zdERvdm9kIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0TDtHZvZCDFvmlhZG9zdGknIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnxb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS4nIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfQkgIAkNCgkJCSAgCX0NCgkJCX0pOw0KCSAgCX0NCgkvKiBdXT4gKi8NCgkJCQkJPC94c2w6dGV4dD4NCgkJCTwvc2NyaXB0Pg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCS5pbmZvSWNvbiB7ZGlzcGxheTpub25lO30NCi5sb2dvIGltZyB7d2lkdGg6MTAwcHg7IGhlaWdodDoxMDBweDt9DQouTGFiZWxCb2xkIGxhYmVsIHtmb250LXdlaWdodDogYm9sZDt9DQouVmVjTmF6b3ZGcm0ge2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjogY2VudGVyO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQ0KLkhlYWRlck5hem92X2ludGVybmFse3dpZHRoOjUwMHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbHt3aWR0aDo0MHB4O30uWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeF9pbnRlcm5hbHt3aWR0aDo0MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1X2ludGVybmFse3dpZHRoOjEzNXB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbHt3aWR0aDo1MHB4O30uemlhZGFtX2ludGVybmFse3dpZHRoOjE1MHB4O30uWmlhZG9zdERvdm9kX2ludGVybmFse3dpZHRoOjgzMHB4O30uU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3RfaW50ZXJuYWx7d2lkdGg6MjAwcHg7fQ0KCTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCgk8bm9zY3JpcHQ+PHAgY2xhc3M9Im5vc2NyaXB0Ij5QcmUga29tcGxldG7DuiBmdW5rxI1ub3PFpSBhcGxpa8OhY2llIGplIHBvdHJlYm7DqSBwb3ZvbGnFpSBKYXZhU2NyaXB0PC9wPjwvbm9zY3JpcHQ+DQoJPGRpdiBpZD0iZXJyb3JzQ29udGFpbmVyRGl2IiBjbGFzcz0iZXJyb3JzQ29udGFpbmVyRGl2Ij4gPHVsIGlkPSJlcnJvcnNDb250YWluZXIiIGNsYXNzPSJlcnJvcnNDb250YWluZXIiPjxsaS8+PC91bD4gPC9kaXY+DQoJPGZvcm0gaWQ9ImVGb3JtX2VHb3ZfMDAxIiBhY3Rpb249IiI+DQoJCTxkaXYgaWQ9Im1haW4iIGNsYXNzPSJsYXlvdXRNYWluIHVpLXdpZGdldC1jb250ZW50Ij4JDQoJCQkJCQkgDQoJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODgzIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNla2NpYU9iZWMiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODgzIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MjciIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MTIwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk0IiBjbGFzcz0iY2VsbCAgbG9nbyIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGltZyBzcmM9Imh0dHA6Ly93d3cuemlsaW5hLnNrL3VzZXJmaWxlcy9lcmIxLmpwZyIgYWx0PSIiIHRpdGxlPSIiLz48L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjI4IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDc5OTUiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX01zVSIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5NZXN0byDFvWlsaW5hOiBNZXN0c2vDvSDDunJhZCB2IMW9aWxpbmUsIE7DoW1lc3RpZSBvYmV0w60ga29tdW5pem11IDEsIDAxMSAzMSDFvWlsaW5hIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19Nc1UiIG5hbWU9Ik9iZWNfTXNVIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjM0MCIgIGFsdD0iIiB2YWx1ZT0iTWVzdHNrw70gw7pyYWQgdiDFvWlsaW5lLCBOw6FtZXN0aWUgb2JldMOtIGtvbXVuaXptdSAxLCAwMTEgMzEgxb1pbGluYSIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfTXNVJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX01zVSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19Nc1UnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk3IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19FbWFpbCIgIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5FLW1haWw6IGtjX3BvZGF0ZWxuYUB6aWxpbmEuc2sgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0VtYWlsIiBuYW1lPSJPYmVjX0VtYWlsIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEwMCIgIGFsdD0iIiB2YWx1ZT0ia2NfcG9kYXRlbG5hQHppbGluYS5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfRW1haWwnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk2IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19XZWIiICBzdHlsZT0id2lkdGg6NjAwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+V0VCOiB3d3cuemlsaW5hLnNrIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19XZWIiIG5hbWU9Ik9iZWNfV2ViIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0id3d3LnppbGluYS5zayIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfV2ViJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1dlYiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19XZWInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYyOSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MTYwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk5IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19JQ08iICBzdHlsZT0id2lkdGg6MTYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+ScSMTzogMDAzMjE3OTYgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0lDTyIgbmFtZT0iT2JlY19JQ08iIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIwMDMyMTc5NiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ09iZWNfSUNPJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX0lDTyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19JQ08nXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDAwIiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19ESUMiICBzdHlsZT0id2lkdGg6MTYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+REnEjDogMjAyMTMzOTQ3NCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfRElDIiBuYW1lPSJPYmVjX0RJQyIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBhbHQ9IiIgdmFsdWU9IjIwMjEzMzk0NzQiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdPYmVjX0RJQyddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnT2JlY19ESUMnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfRElDJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwNzk5OCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfVGVsZWZvbiIgIHN0eWxlPSJ3aWR0aDoxNjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5UZWxlZsOzbjogMDQxIC8gNzA2MyAxMTEgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1RlbGVmb24iIG5hbWU9Ik9iZWNfVGVsZWZvbiIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxNTAiICBhbHQ9IiIgdmFsdWU9IjA0MSAvIDcwNjMgMTExIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnT2JlY19UZWxlZm9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdPYmVjX1RlbGVmb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ09iZWNfVGVsZWZvbiddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFIZWFkZXIiPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODg1IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYUhlYWRlciIgLz4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4ODUiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzMSIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDMiIGNsYXNzPSJjZWxsICBWZWNOYXpvdkZybSIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjg1MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsW9aWFkb3PFpSBvIG9kcHVzdGVuaWUvem7DrcW+ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG55IG9kcGFkIGEgZHJvYm7DvSBzdGF2ZWJuw70gb2RwYWQgPC94c2w6dGV4dD4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODg2IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBOZXpvYnJhem92YXRJbmZvSWtvbnVSZW1vdGVMb29rdXAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSLFvWlhZGF0ZcS+ICAtIEZ5emlja8OhIG9zb2JhIj7FvWlhZGF0ZcS+ICAtIEZ5emlja8OhIG9zb2JhCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4NiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjMyIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4OCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPRGV0YWlsIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4OCIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjM2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxOCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGl0dWwgcHJlZCBtZW5vbSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXgnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHByZWQgbWVub20iIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mjwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+TWVubyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSIgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk1lbm8iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9EZXRhaWxSQyIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Sb2Ruw6kgxI3DrXNsbyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RldGFpbFJDIiBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsUkMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsUkMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxSQyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFJDJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUm9kbsOpIMSNw61zbG8iIGhvZG5vdHUgdiB0dmFyZSBzIGxvbcOtdGtvbS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzciIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5UaXR1bCB6YSBtZW5vbSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXhfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGl0dWwgemEgbWVub20iIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QcmllenZpc2tvIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQcmllenZpc2tvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDIyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+RMOhdHVtIG5hcm9kZW5pYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgYWx0PSIiIGlkPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgZGF0ZSBkYXRlcGlja2VyICIgdmFsdWU9IiIgbWF4bGVuZ3RoPSIxNCIgc2l6ZT0iMTYwIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJEw6F0dW0gbmFyb2RlbmlhIiBob2Rub3R1IHYgdHZhcmUgImRlxYgubWVzaWFjLnJvayIgKCJERC5NTS5SUlJSIikgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4OSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSI+QWRyZXNhIHRydmFsw6lobyBwb2J5dHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzgiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9iZWMgPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2JlYyIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMjYiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5VbGljYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlVsaWNhIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiICBzdHlsZT0id2lkdGg6NzBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7EjMOtc2xvIGJ5dHUgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEzNSIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMw61zbG8gYnl0dSIgaG9kbm90dS48L3NwYW4+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzOSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPktyYWogPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24nXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiICBzdHlsZT0id2lkdGg6NjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7EjGFzxaUgb2JjZSA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlPDunAuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0MCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pa3JlcyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzMyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5QU8SMIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNiIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQU8SMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pci7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT3IuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDM0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTAiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgcHJlY2hvZG7DqWhvIHBvYnl0dSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+QWRyZXNhIHByZWNob2Ruw6lobyBwb2J5dHUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODkwIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDEiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDM1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FoHTDoXQgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDM2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9iZWMgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmVjIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzOCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiAgc3R5bGU9IndpZHRoOjcwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIzDrXNsbyBieXR1IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMzUiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLEjMOtc2xvIGJ5dHUiIGhvZG5vdHUuPC9zcGFuPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDIiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24nXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS3JhaiIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xIxhc8WlIG9iY2UgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiICBzdHlsZT0id2lkdGg6NjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Tw7pwLsSNLiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJTw7pwLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDMiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0MyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2tyZXMgPC94c2w6dGV4dD4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2tyZXMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UFPEjCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjUiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T3IuxI0uIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9yLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0icmVwZXRpdGlvbkNvbW1hbmRzbGF5b3V0Um93MjI4OTAiIGNsYXNzPSJzZWN0aW9uUGFnZXIiPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpICE9IGxhc3QoKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0ic3R5bGUiPjx4c2w6dGV4dD5kaXNwbGF5Om5vbmU7PC94c2w6dGV4dD48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+DQoJCQkJCQkJCTxzcGFuIGlkPSJhZGRTZWN0aW9ubGF5b3V0Um93MjI4OTAiIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0iYWRkU2VjdGlvbigwLCAxLCB0aGlzKSIgdGl0bGU9IlByaWRhxaUgc2VrY2l1IEFkcmVzYSBwcmVjaG9kbsOpaG8gcG9ieXR1ICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5QcmlkYcWlPC9zcGFuPg0KCQkJCTxzcGFuIGlkPSJyZW1vdmVTZWN0aW9ubGF5b3V0Um93MjI4OTAiIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0icmVtb3ZlU2VjdGlvbigwLCB0aGlzKSIgdGl0bGU9Ik9kb2JyYcWlIHNla2NpdSBBZHJlc2EgcHJlY2hvZG7DqWhvIHBvYnl0dSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+T2RvYnJhxaU8L3NwYW4+CQ0KCQkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkNCgkJPHhzbDppZiB0ZXN0PSJub3JtYWxpemUtc3BhY2UoL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhKSA9ICcnIj4NCgkJCQkJCTx4c2w6aWYgdGVzdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL0Bub3RJbkZvcm1EYXRhIj4NCgkJCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeyBpbml0UmVwZXRpdGlvblNlY3Rpb24oMCwgMSwgJ2xheW91dFJvdzIyODkwJykgfSk8L3NjcmlwdD4NCgkJCQkJPC94c2w6aWY+DQoJCQkJICAgIDwveHNsOmlmPg0KCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIj4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4NyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5BZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg3IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzMiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+xaB0w6F0IDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5J10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLFoHTDoXQiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAwNyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+T2JlYyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHknXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmVjIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlVsaWNhIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhVWxpY2FfU3RyZWV0TmFtZSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiICBzdHlsZT0id2lkdGg6NzBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7EjMOtc2xvIGJ5dHUgPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEzNSIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMw61zbG8gYnl0dSIgaG9kbm90dS48L3NwYW4+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzNCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDEwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5LcmFqIDwveHNsOnRleHQ+IDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIktyYWoiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPsSMYXPFpSBvYmNlIDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0J10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+U8O6cC7EjS4gPC94c2w6dGV4dD4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjM1IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiICBzdHlsZT0id2lkdGg6MjBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Pa3JlcyA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT2tyZXMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxNSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UFPEjCA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjUiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxMyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk9yLsSNLiA8L3hzbDp0ZXh0PiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXInXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQkJCTxkaXYgaWQ9InJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvdzIyODg3IiBjbGFzcz0ic2VjdGlvblBhZ2VyIj4NCgkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKSAhPSBsYXN0KCkiPjx4c2w6YXR0cmlidXRlIG5hbWU9InN0eWxlIj48eHNsOnRleHQ+ZGlzcGxheTpub25lOzwveHNsOnRleHQ+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPg0KCQkJCQkJCQk8c3BhbiBpZD0iYWRkU2VjdGlvbmxheW91dFJvdzIyODg3IiBjbGFzcz0iYnV0dG9uIGFkZFJlbW92ZVNlY3Rpb24iIG9uY2xpY2s9ImFkZFNlY3Rpb24oMCwgMSwgdGhpcykiIHRpdGxlPSJQcmlkYcWlIHNla2NpdSBBZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkiPlByaWRhxaU8L3NwYW4+DQoJCQkJPHNwYW4gaWQ9InJlbW92ZVNlY3Rpb25sYXlvdXRSb3cyMjg4NyIgY2xhc3M9ImJ1dHRvbiBhZGRSZW1vdmVTZWN0aW9uIiBvbmNsaWNrPSJyZW1vdmVTZWN0aW9uKDAsIHRoaXMpIiB0aXRsZT0iT2RvYnJhxaUgc2VrY2l1IEFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+T2RvYnJhxaU8L3NwYW4+CQ0KCQkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkNCgkJPHhzbDppZiB0ZXN0PSJub3JtYWxpemUtc3BhY2UoL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MpID0gJyciPg0KCQkJCQkJPHhzbDppZiB0ZXN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9Abm90SW5Gb3JtRGF0YSI+DQoJCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsgaW5pdFJlcGV0aXRpb25TZWN0aW9uKDAsIDEsICdsYXlvdXRSb3cyMjg4NycpIH0pPC9zY3JpcHQ+DQoJCQkJCTwveHNsOmlmPg0KCQkJCSAgICA8L3hzbDppZj4NCgkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0NSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iPgkJDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODkxIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iXzFzZWtjaWFaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iS29udGFrdCAtIHRlbGVmw7NuIj5Lb250YWt0IC0gdGVsZWbDs24JCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODkxIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDQiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiICBzdHlsZT0id2lkdGg6MTE1cHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+VGVsZWbDs25uZSDEjcOtc2xvIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiBuYW1lPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1ppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGVsZWbDs25uZSDEjcOtc2xvIiBob2Rub3R1LCBvZHBvcsO6xI1hbWUgdiBtZWR6aW7DoXJvZG5vbSB0dmFyZSArNDIxeHh4Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8yc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTIiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJLb250YWt0IC0gRS1tYWlsIj5Lb250YWt0IC0gRS1tYWlsCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5MiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ1IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0OCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSIgIHN0eWxlPSJ3aWR0aDoxMTVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5FLW1haWxvdsOhIGFkcmVzYSA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIG5hbWU9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhJ10iLz48L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiRS1tYWlsb3bDoSBhZHJlc2EiIGhvZG5vdHUgdiB0dmFyZSBtZW5vQGRvbcOpbmEuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQk8L3hzbDpmb3ItZWFjaD4JDQoJCQkJCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpaaWFkb3N0Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5MyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlppYWRvc3QiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSLFvWlhZG9zxaUiPsW9aWFkb3PFpQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTMiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NiIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDo0MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTAiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlJvemhvZCIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Sb3pob2RudXTDrW0gxI3DrXNsbyA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlJvemhvZCIgbmFtZT0iUm96aG9kIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnUm96aG9kJ10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdSb3pob2QnXSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1JvemhvZCddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlJvemhvZG51dMOtbSDEjcOtc2xvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NyIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDUxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJ2eXJ1YmVueSIgIHN0eWxlPSJ3aWR0aDoxNDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Cb2wgdnlydWJlbsO9IG5hIHJvayA8L3hzbDp0ZXh0PiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9InZ5cnViZW55IiBuYW1lPSJ2eXJ1YmVueSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ3Z5cnViZW55J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICd2eXJ1YmVueSddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAndnlydWJlbnknXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJCb2wgdnlydWJlbsO9IG5hIHJvayIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDgiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjkwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA1MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0icG9wbGF0b2siICBzdHlsZT0id2lkdGg6NTQwcHg7Ij48eHNsOnRleHQgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyI+UG9wbGF0b2sgemEga29tdW7DoWxuZSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeSB2byB2w73FoWtlICjigqwpIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0icG9wbGF0b2siIG5hbWU9InBvcGxhdG9rIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAncG9wbGF0b2snXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ3BvcGxhdG9rJ10iPjx4c2w6YXR0cmlidXRlIG5hbWU9InZhbHVlIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi8qW25hbWUoKSA9ICdwb3BsYXRvayddIi8+PC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlBvcGxhdG9rIHphIGtvbXVuw6FsbmUgYSBkcm9ibsOpIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDUzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgIHN0eWxlPSJ3aWR0aDo2NDBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj7FvWlhZGFtIHNwcsOhdmN1IHBvcGxhdGt1IG8gem7DrcW+ZW5pZS9vZHB1c3RlbmllIHBvcGxhdGt1IHphIGtvbXVuw6FsbmUgb2RwYWR5IGEgZHJvYm7DqSBzdGF2ZWJuw6kgb2RwYWR5IDwveHNsOnRleHQ+IDxlbT4qPC9lbT4gPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlZ5YmVydGUgamVkbnUgeiBtb8W+bm9zdMOtLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pjwvc3Bhbj48ZmllbGRzZXQ+PGxlZ2VuZD48L2xlZ2VuZD48ZGl2IGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCB6aWFkYW1faW50ZXJuYWwiPjxzcGFuPjxpbnB1dCBpZD0iemlhZGFtIiBuYW1lPSJ6aWFkYW0iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCB6aWFkYW1faW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Inpuw63FvmVuaWUgIiB2YWx1ZT0iem7DrcW+ZW5pZSAiICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPnppYWRhbTwveHNsOmF0dHJpYnV0ZT48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICd6aWFkYW0nXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ3ppYWRhbSddPSd6biYjMjM3O8W+ZW5pZSAnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iemlhZGFtIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnpuw63FvmVuaWUgPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJ6aWFkYW1Qb3N0Zml4TGlzdDEiIG5hbWU9InppYWRhbSIgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0IHppYWRhbV9pbnRlcm5hbCIgdGl0bGU9IiIgdHlwZT0icmFkaW8iIGFsdD0ib2RwdXN0ZW5pZSAiIHZhbHVlPSJvZHB1c3RlbmllICIgICA+PHhzbDphdHRyaWJ1dGUgbmFtZT0ibmFtZSI+emlhZGFtPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ3ppYWRhbSddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnemlhZGFtJ109J29kcHVzdGVuaWUgJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9InppYWRhbVBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5vZHB1c3RlbmllIDwvbGFiZWw+PC9zcGFuPjwvZGl2PjwvZmllbGRzZXQ+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ5IiBjbGFzcz0iY29sdW1uICIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTQiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRvc3REb3ZvZCIgPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Ew7R2b2Qgxb5pYWRvc3RpIDwveHNsOnRleHQ+IDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjx0ZXh0YXJlYSBpZD0iWmlhZG9zdERvdm9kIiBuYW1lPSJaaWFkb3N0RG92b2QiIHRpdGxlPSIiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRBcmVhIFppYWRvc3REb3ZvZF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgIGNvbHM9IjEwMCIgcm93cz0iMyIgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdaaWFkb3N0RG92b2QnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii4vKltuYW1lKCkgPSAnWmlhZG9zdERvdm9kJ10iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLypbbmFtZSgpID0gJ1ppYWRvc3REb3ZvZCddIi8+PC94c2w6d2hlbj48eHNsOm90aGVyd2lzZT48eHNsOnRleHQ+PC94c2w6dGV4dD48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPjwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkTDtHZvZCDFvmlhZG9zdGkiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjgwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPlYgcHLDrXBhZGUsIMW+ZSBwb2RrbGFkIChwb3Zpbm7DqSBwcsOtbG9oeSkgbmllIHPDuiB2eXN0YXZlbsOpIHYgc2xvdmVuc2tvbSBhbGVibyDEjWVza29tIGphenlrdSwgcG9wbGF0bsOtayBwcmVkbG/FvsOtIGFqIHByZWtsYWQgcHLDrXNsdcWhbsOpaG8gcG9ka2xhZHUsIHBvZHDDrXNhbsOpaG8gcG9wbGF0bsOta29tLiA8L3hzbDp0ZXh0PiAgPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92Ij4JCQ0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5NCIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNla2NpYU9jaHJhbmFPc29ibnljaFVkYWpvdiIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9Ik9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3YJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODk0IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NTAiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDU3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxpbnB1dCBpZD0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHRpdGxlPSIiIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0ieHNkX2Jvb2xlYW4gY2hlY2tCb3ggIiB2YWx1ZT0ixb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS4iIGFsdD0iIiAgID48eHNsOmlmIHRlc3Q9ImJvb2xlYW4oLi8qW25hbWUoKSA9ICdPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ09jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyddPScxJyI+PHhzbDphdHRyaWJ1dGUgbmFtZT0iY2hlY2tlZCI+Y2hlY2tlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxsYWJlbCBmb3I9Ik9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyIgY2xhc3M9ImNoZWNrQm94TGFiZWwiPsW9aWFkYXRlxL4gYWtvIGRvdGtudXTDoSBvc29iYSB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqcgMTEgesOha29uYSDEjS4gMTIyLzIwMTMgWi4gei4gbyBvY2hyYW5lIG9zb2Juw71jaCDDumRham92IGEgbyB6bWVuZSBhIGRvcGxuZW7DrSBuaWVrdG9yw71jaCB6w6Frb25vdiAoxI9hbGVqIGxlbiDigJ56w6Frb24pLCBwb3NreXR1amUgTWVzdHUgxb1pbGluYSwgYWtvIHByZXbDoWR6a292YXRlxL5vdmksIHPDumhsYXMgc28gc3ByYWNvdmFuw61tIG9zb2Juw71jaCDDumRham92IHV2ZWRlbsO9Y2ggdiB0ZWp0byDFvmlhZG9zdGkgYSBqZWogcHLDrWxvaMOhY2gsIGEgdG8gemEgw7rEjWVsb20gYmV6cGXEjW5laiBhIHrDoW1lbnUgdnlsdcSNdWrDumNlaiBpZGVudGlmaWvDoWNpZSBkb3RrbnV0ZWogb3NvYnkgcyB0w71tLCDFvmUgamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBww61zb21uZSBvZHZvbGHFpSB2IHByw61wYWRlIHByZXVrw6F6YXRlxL5uw6lobyBwb3J1xaFlbmlhIHrDoWtvbmEgem8gc3RyYW55IHByZXbDoWR6a292YXRlxL5hLiBPZHZvbGFuaWUgbXVzw60gYnnFpSB1cm9iZW7DqSBww61zb21uZSBhIHByZXVrw6F6YXRlxL5uZSBkb3J1xI1lbsOpIE1lc3R1IMW9aWxpbmEuIERvYmEgcGxhdG5vc3RpIHPDumhsYXN1IHNhIHZpYcW+ZSBuYSBkb2J1IHRydmFuaWEgcHJldWvDoXphdGXEvm7DqWhvIMO6xI1lbHUgc3ByYWPDunZhbmlhIG9zb2Juw71jaCDDumRham92IGRvdGtudXRlaiBvc29ieS4gUHJldsOhZHprb3ZhdGXEviB0w71tdG8gcHJlaGxhc3VqZSwgxb5lIG9zb2Juw6kgw7pkYWplIGRvdGtudXRlaiBvc29ieSBidWRlIHNwcmFjb3bDoXZhxaUgcGxuZSB2IHPDumxhZGUgcyB1c3Rhbm92ZW5pYW1pIHrDoWtvbmEuPC9sYWJlbD48YnIgLz4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJPC94c2w6Zm9yLWVhY2g+CQ0KCQkJCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTciIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iU3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1Ij5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODk3IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NTQiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MzAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDY1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiAgPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUgPC94c2w6dGV4dD4gIDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIj48c3Bhbj48aW5wdXQgaWQ9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9ImVEZXNrIiB2YWx1ZT0iZURlc2siICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXA8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddPSdlRGVzayciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ib3B0aW9uTGFiZWwiPmVEZXNrPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QxIiBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJvc29ibmUiIHZhbHVlPSJvc29ibmUiICAgPjx4c2w6YXR0cmlidXRlIG5hbWU9Im5hbWUiPlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXA8L3hzbDphdHRyaWJ1dGU+PHhzbDppZiB0ZXN0PSJib29sZWFuKC4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddL0Bpc1JlYWRPbmx5ID0gJ3RydWUnKSI+PHhzbDphdHRyaWJ1dGUgbmFtZT0icmVhZG9ubHkiPnJlYWRvbmx5PC94c2w6YXR0cmlidXRlPjx4c2w6YXR0cmlidXRlIG5hbWU9ImRpc2FibGVkIj5kaXNhYmxlZDwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48eHNsOmlmIHRlc3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCddPSdvc29ibmUnIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJjaGVja2VkIj5jaGVja2VkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjwvaW5wdXQ+PGxhYmVsIGZvcj0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cFBvc3RmaXhMaXN0MSIgY2xhc3M9Im9wdGlvbkxhYmVsIj5vc29ibmU8L2xhYmVsPjwvc3Bhbj48c3Bhbj48aW5wdXQgaWQ9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXBQb3N0Zml4TGlzdDIiIG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCAiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9InBvxaF0b3UiIHZhbHVlPSJwb8WhdG91IiAgID48eHNsOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIj5TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwPC94c2w6YXR0cmlidXRlPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAnXS9AaXNSZWFkT25seSA9ICd0cnVlJykiPjx4c2w6YXR0cmlidXRlIG5hbWU9InJlYWRvbmx5Ij5yZWFkb25seTwveHNsOmF0dHJpYnV0ZT48eHNsOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlZCI+ZGlzYWJsZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PHhzbDppZiB0ZXN0PSIuLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAnXT0ncG/FoXRvdSciPjx4c2w6YXR0cmlidXRlIG5hbWU9ImNoZWNrZWQiPmNoZWNrZWQ8L3hzbDphdHRyaWJ1dGU+PC94c2w6aWY+PC9pbnB1dD48bGFiZWwgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QyIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnBvxaF0b3U8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY1NSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NTUwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDY2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgIHN0eWxlPSJ3aWR0aDoyNzBweDsiPjx4c2w6dGV4dCBkaXNhYmxlLW91dHB1dC1lc2NhcGluZz0ieWVzIj5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91IDwveHNsOnRleHQ+IDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgbmFtZT0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3RfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIyMDAiICBhbHQ9IiIgdmFsdWU9IiIgPjx4c2w6aWYgdGVzdD0iYm9vbGVhbiguLypbbmFtZSgpID0gJ1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0J10vQGlzUmVhZE9ubHkgPSAndHJ1ZScpIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJyZWFkb25seSI+cmVhZG9ubHk8L3hzbDphdHRyaWJ1dGU+PHhzbDphdHRyaWJ1dGUgbmFtZT0iZGlzYWJsZWQiPmRpc2FibGVkPC94c2w6YXR0cmlidXRlPjwveHNsOmlmPjx4c2w6aWYgdGVzdD0iLi8qW25hbWUoKSA9ICdTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCddIj48eHNsOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vKltuYW1lKCkgPSAnU3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QnXSIvPjwveHNsOmF0dHJpYnV0ZT48L3hzbDppZj48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvcyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYUZvb3RlciI+CQkNCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTYiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhRm9vdGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5NiIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjUzIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA2MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48YSBocmVmPSJodHRwOi8vd3d3LnppbGluYS5zayIgY2xhc3M9InhzZF9zdHJpbmcgaHlwZXJMaW5rICIgdGFyZ2V0PSJfYmxhbmsiID5Db3B5cmlnaHQgwqkgMjAxNSwgTWVzdG8gxb1pbGluYSAtIFbFoWV0a3kgcHLDoXZhIHZ5aHJhZGVuw6k8L2E+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNjMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjQwMHB4OyI+PHhzbDp0ZXh0IGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiPk1lc3RvIMW9aWxpbmEgLSBNZXN0byBzIHR2w6Fyb3UgPC94c2w6dGV4dD4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCTwveHNsOmZvci1lYWNoPgkNCgkJCQkJDQoJCQk8ZGl2IGlkPSJidXR0b25zUGxhY2Vob2xkZXIiPg0KCQkJCQkJCQkJPGlucHV0IGlkPSJ2YWxpZGF0ZUZvcm0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iU2tvbnRyb2xvdmHFpSIgYWx0PSJTa29udHJvbG92YcWlIiBhY2Nlc3NrZXk9IlMiIC8+DQoJCQkJCQkJCQkJPGlucHV0IGlkPSJjbGVhckZvcm0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iVnnEjWlzdGkiICBhbHQ9IlZ5xI1pc3RpIiBhY2Nlc3NrZXk9IlYiIC8+DQoJCQkJCTxpbnB1dCBpZD0ibG9hZEZvcm1YbWwiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iTmHEjcOtdGHFpSIgIGFsdD0iTmHEjcOtdGHFpSIgYWNjZXNza2V5PSJOIiAvPg0KCQkJCQk8aW5wdXQgaWQ9InNhdmVUb1htbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJVbG/FvmnFpSIgIGFsdD0iVWxvxb5pxaUiIGFjY2Vzc2tleT0iVSIgLz4NCgkJCQkJCQkJCTxpbnB1dCBpZD0iY2FuY2VsRm9ybSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiIHZhbHVlPSJacnXFoWnFpSIgIGFsdD0iWnJ1xaFpxaUiIGFjY2Vzc2tleT0iWiIgLz4JCQkNCgkJCTwvZGl2PgkJDQoJCTwvZGl2Pg0KCQk8ZGl2IGlkPSJzdGF0dXNEaWFsb2ciIHRpdGxlPSJTdGF0dXMiPg0KCQkJPGltZyBpZD0ic3RhdHVzTG9hZGVyIiBzcmM9Imh0dHBzOi8vd3d3LnNsb3ZlbnNrby5zay9zdGF0aWMvZUZvcm0vRGVzaWduZXIvMi4wLjEuMTYvSW1hZ2VzL2FqYXgtbG9hZGVyLnBuZyIgYWx0PSLEjGFrYWp0ZSBwcm9zw61tIiAvPg0KCQkJPHAgaWQ9InN0YXR1c01lc3NhZ2UiIGNsYXNzPSJzdGF0dXNNZXNzYWdlIj48L3A+DQoJCTwvZGl2Pg0KCQk8ZGl2IGlkPSJzYXZlZEZvcm1zQ29udGFpbmVyIiBjbGFzcz0ibGF5b3V0TWFpbiB1aS13aWRnZXQtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+DQoJCSAgPGRpdiBpZD0ic2F2ZWRGb3Jtc0NvbnRhaW5lclJvdyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50IiAgdGl0bGU9IiIgPg0KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQmFzaWMiIC8+DQoJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPg0KCQkJICA8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iVWxvxb5lbsOpIGZvcm11bMOhcmUiPlVsb8W+ZW7DqSBmb3JtdWzDoXJlPC9kaXY+DQoJCQkgIDxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgaWQ9ImxheW91dFJvd1NhdmVkRm9ybXMiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCSAgPGRpdiBpZD0ibGNvbHVtblNhdmVkRm9ybXMiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQk8ZGl2IGlkPSJsY2VsbFNhdmVkRm9ybXMiIGNsYXNzPSJjZWxsIj4gICAgICAgICAgCQkJCSAgDQoJCQkJPC9kaXY+CQkJCQ0KCQkJICA8L2Rpdj4NCgkJCSAgPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJCTwvZGl2Pg0KCQkgIDwvZGl2Pg0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ibXRkX2Zvcm1NZXRhRGF0YSIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PHNwYW4gaWQ9Im10ZF92ZXJzaW9uIj4xLjQ8L3NwYW4+PHNwYW4gaWQ9Im10ZF9pZHAiPjU1MzY8L3NwYW4+PHNwYW4gaWQ9Im10ZF9uYW1lc3BhY2UiPmh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzIxNzk2LkEwMDAwMjI0LjAwMDAwMDAwMi5aaWFkb3N0T2RwdXN0ZW5pZVpuaXplbmllcG9wbGF0a3VaYUtPYURTT19GTy8xLjQ8L3NwYW4+PC9kaXY+DQoJPC9mb3JtPg0KPC9ib2R5Pg0KPC9odG1sPg0KPC94c2w6dGVtcGxhdGU+DQo8L3hzbDpzdHlsZXNoZWV0Pg0K
PFByZWZpbGxEYXRhTWFwcGluZyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCiAgPERlZmluaXRpb24gaWQ9IlVQVlMgSUFNIERlZmF1bHQgRGF0YSI+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5HaXZlbk5hbWUiIHhwYXRoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6UGVyc29uLkJpcnRoTnVtYmVyIiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUkMiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5GYW1pbHlOYW1lIiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIiAvPg0KICAgIDxJdGVtIGtleT0ic3ViamVjdDpQZXJzb24uQWRkcmVzcy5Db3VudHJ5IiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5BZGRyZXNzLk11bmljaXBhbGl0eSIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5BZGRyZXNzLlN0cmVldCIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgLz4NCiAgICA8SXRlbSBrZXk9InN1YmplY3Q6UGVyc29uLkFkZHJlc3MuUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHhwYXRoPSIvZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5BZGRyZXNzLkJ1aWxkaW5nTnVtYmVyIiB4cGF0aD0iL2Vnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIC8+DQogICAgPEl0ZW0ga2V5PSJzdWJqZWN0OlBlcnNvbi5BZGRyZXNzLkNvdW50eSIgeHBhdGg9Ii9lZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiAvPg0KICA8L0RlZmluaXRpb24+DQo8L1ByZWZpbGxEYXRhTWFwcGluZz4=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48TWFwcGluZ0RhdGE+PE4yRSAvPjwvTWFwcGluZ0RhdGE+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Q29tcGxldGVEaWN0aW9uYXJ5PjxNZXNzYWdlRGljdGlvbmFyeSAvPjxEZWZhdWx0c0RpY3Rpb25hcnkgLz48L0NvbXBsZXRlRGljdGlvbmFyeT4=
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQo8aHRtbCB4bWxuczptc289InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6bXNkdD0idXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiPg0KCTxoZWFkPg0KCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIgLz4NCgk8dGl0bGU+MDAxLsW9aWFkb3PFpSBvIG9kcHVzdGVuaWUvem7DrcW+ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG55IG9kcGFkIGEgZHJvYm7DvSBzdGF2ZWJuw70gb2RwYWQgKEZPKTwvdGl0bGU+DQoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLz4NCgk8bWV0YSBuYW1lPSJsYW5ndWFnZSIgY29udGVudD0ic2stU0siIC8+DQoJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCi8qDQogKiBqUXVlcnkgVUkgQ1NTIEZyYW1ld29yayAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJDQogKi8NCg0KLyogTGF5b3V0IGhlbHBlcnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoudWktaGVscGVyLWhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IH0NCg0KLnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSB7DQogICAgY2xpcDogcmVjdCgxcHggMXB4IDFweCAxcHgpOw0KICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsNCn0NCg0KLnVpLWhlbHBlci1yZXNldCB7DQogICAgYm9yZGVyOiAwOw0KICAgIGZvbnQtc2l6ZTogMTAwJTsNCiAgICBsaW5lLWhlaWdodDogMS4zOw0KICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgbWFyZ2luOiAwOw0KICAgIG91dGxpbmU6IDA7DQogICAgcGFkZGluZzogMDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIgew0KICAgIGNsZWFyOiBib3RoOw0KICAgIGNvbnRlbnQ6ICIuIjsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBoZWlnaHQ6IDA7DQogICAgdmlzaWJpbGl0eTogaGlkZGVuOw0KfQ0KDQoudWktaGVscGVyLWNsZWFyZml4IHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9DQovKiByZXF1aXJlZCBjb21tZW50IGZvciBjbGVhcmZpeCB0byB3b3JrIGluIE9wZXJhIFwqLw0KDQoqIGh0bWwgLnVpLWhlbHBlci1jbGVhcmZpeCB7IGhlaWdodDogMSU7IH0NCg0KLnVpLWhlbHBlci1jbGVhcmZpeCB7IGRpc3BsYXk6IGJsb2NrOyB9DQovKiBlbmQgY2xlYXJmaXggKi8NCg0KLnVpLWhlbHBlci16Zml4IHsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MCk7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGxlZnQ6IDA7DQogICAgb3BhY2l0eTogMDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoNCi8qIEludGVyYWN0aW9uIEN1ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoudWktc3RhdGUtZGlzYWJsZWQgeyBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsgfQ0KDQoNCi8qIEljb25zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogc3RhdGVzIGFuZCBJbWFnZXMgKi8NCg0KLnVpLWljb24gew0KICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7DQp9DQoNCg0KLyogTWlzYyB2aXN1YWxzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogT3ZlcmxheXMgKi8NCg0KLnVpLXdpZGdldC1vdmVybGF5IHsNCiAgICBoZWlnaHQ6IDEwMCU7DQogICAgbGVmdDogMDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KLyoNCiAqIGpRdWVyeSBVSSBBY2NvcmRpb24gMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9BY2NvcmRpb24jdGhlbWluZw0KICovDQovKiBJRS9XaW4gLSBGaXggYW5pbWF0aW9uIGJ1ZyAtICM0NjE1ICovDQoNCi51aS1hY2NvcmRpb24geyB3aWR0aDogMTAwJTsgfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgbWFyZ2luLXRvcDogMXB4Ow0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB6b29tOiAxOw0KfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tbGktZml4IHsgZGlzcGxheTogaW5saW5lOyB9DQoNCi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHsgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9DQoNCi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXIgYSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAxZW07DQogICAgcGFkZGluZzogLjVlbSAuNWVtIC41ZW0gLjdlbTsNCn0NCg0KLnVpLWFjY29yZGlvbi1pY29ucyAudWktYWNjb3JkaW9uLWhlYWRlciBhIHsgcGFkZGluZy1sZWZ0OiAyLjJlbTsgfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIC51aS1pY29uIHsNCiAgICBsZWZ0OiAuNWVtOw0KICAgIG1hcmdpbi10b3A6IC04cHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogNTAlOw0KfQ0KDQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7DQogICAgYm9yZGVyLXRvcDogMDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIG1hcmdpbi1ib3R0b206IDJweDsNCiAgICBtYXJnaW4tdG9wOiAtMnB4Ow0KICAgIG92ZXJmbG93OiBhdXRvOw0KICAgIHBhZGRpbmc6IDFlbSAyLjJlbTsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdG9wOiAxcHg7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH0NCi8qDQogKiBqUXVlcnkgVUkgQXV0b2NvbXBsZXRlIDEuOC4xNA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvQXV0b2NvbXBsZXRlI3RoZW1pbmcNCiAqLw0KDQoudWktYXV0b2NvbXBsZXRlIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KfQkNCg0KLyogd29ya2Fyb3VuZHMgKi8NCg0KKiBodG1sIC51aS1hdXRvY29tcGxldGUgeyB3aWR0aDogMXB4OyB9IC8qIHdpdGhvdXQgdGhpcywgdGhlIG1lbnUgZXhwYW5kcyB0byAxMDAlIGluIElFNiAqLw0KDQovKg0KICogalF1ZXJ5IFVJIE1lbnUgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9NZW51I3RoZW1pbmcNCiAqLw0KDQoudWktbWVudSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICBtYXJnaW46IDA7DQogICAgcGFkZGluZzogMnB4Ow0KfQ0KDQoudWktbWVudSAudWktbWVudSB7IG1hcmdpbi10b3A6IC0zcHg7IH0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSB7DQogICAgY2xlYXI6IGxlZnQ7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbWFyZ2luOiAwOw0KICAgIHBhZGRpbmc6IDA7DQogICAgd2lkdGg6IDEwMCU7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBsaW5lLWhlaWdodDogMS41Ow0KICAgIHBhZGRpbmc6IC4yZW0gLjRlbTsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgem9vbTogMTsNCn0NCg0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWhvdmVyLA0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWFjdGl2ZSB7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgICBtYXJnaW46IC0xcHg7DQp9DQovKg0KICogalF1ZXJ5IFVJIEJ1dHRvbiAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0J1dHRvbiN0aGVtaW5nDQogKi8NCg0KLnVpLWJ1dHRvbiB7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICBtYXJnaW4tcmlnaHQ6IC4xZW07DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgcGFkZGluZzogMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Ow0KICAgIHpvb206IDE7DQp9IC8qIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSByZW1vdmVzIGV4dHJhIHdpZHRoIGluIElFICovDQoNCi51aS1idXR0b24taWNvbi1vbmx5IHsgd2lkdGg6IDIuMmVtOyB9IC8qIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGljb24sIGEgd2lkdGggbmVlZHMgdG8gYmUgc2V0IGhlcmUgKi8NCg0KYnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHkgeyB3aWR0aDogMi40ZW07IH0gLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovDQoNCi51aS1idXR0b24taWNvbnMtb25seSB7IHdpZHRoOiAzLjRlbTsgfQ0KDQpidXR0b24udWktYnV0dG9uLWljb25zLW9ubHkgeyB3aWR0aDogMy43ZW07IH0gDQoNCi8qYnV0dG9uIHRleHQgZWxlbWVudCAqLw0KDQoudWktYnV0dG9uIC51aS1idXR0b24tdGV4dCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbGluZS1oZWlnaHQ6IDEuNDsNCn0NCg0KLnVpLWJ1dHRvbi10ZXh0LW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHsgcGFkZGluZzogLjRlbSAxZW07IH0NCg0KLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWJ1dHRvbi10ZXh0LCAudWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi10ZXh0IHsNCiAgICBwYWRkaW5nOiAuNGVtOw0KICAgIHRleHQtaW5kZW50OiAtOTk5OTk5OXB4Ow0KfQ0KDQoudWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW0gMWVtIC40ZW0gMi4xZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24tdGV4dCwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW0gMi4xZW0gLjRlbSAxZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24tdGV4dCB7DQogICAgcGFkZGluZy1sZWZ0OiAyLjFlbTsNCiAgICBwYWRkaW5nLXJpZ2h0OiAyLjFlbTsNCn0NCi8qIG5vIGljb24gc3VwcG9ydCBmb3IgaW5wdXQgZWxlbWVudHMsIHByb3ZpZGUgcGFkZGluZyBieSBkZWZhdWx0ICovDQoNCmlucHV0LnVpLWJ1dHRvbiB7IHBhZGRpbmc6IC40ZW0gMWVtOyB9DQoNCi8qYnV0dG9uIGljb24gZWxlbWVudChzKSAqLw0KDQoudWktYnV0dG9uLWljb24tb25seSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1pY29uLCAudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWljb24sIC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbiB7DQogICAgbWFyZ2luLXRvcDogLThweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiA1MCU7DQp9DQoNCi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC04cHg7DQp9DQoNCi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksIC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLWljb24tcHJpbWFyeSwgLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1wcmltYXJ5IHsgbGVmdDogLjVlbTsgfQ0KDQoudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0NCg0KLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0NCg0KLypidXR0b24gc2V0cyovDQoNCi51aS1idXR0b25zZXQgeyBtYXJnaW4tcmlnaHQ6IDdweDsgfQ0KDQoudWktYnV0dG9uc2V0IC51aS1idXR0b24gew0KICAgIG1hcmdpbi1sZWZ0OiAwOw0KICAgIG1hcmdpbi1yaWdodDogLS4zZW07DQp9DQoNCi8qIHdvcmthcm91bmRzICovDQoNCmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAwOw0KfSAvKiByZXNldCBleHRyYSBwYWRkaW5nIGluIEZpcmVmb3ggKi8NCi8qDQogKiBqUXVlcnkgVUkgRGF0ZXBpY2tlciAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0RhdGVwaWNrZXIjdGhlbWluZw0KICovDQoNCi51aS1kYXRlcGlja2VyIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHBhZGRpbmc6IC4yZW0gLjJlbSAwOw0KICAgIHdpZHRoOiAxN2VtOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIgew0KICAgIHBhZGRpbmc6IC4yZW0gMDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgew0KICAgIGhlaWdodDogMS44ZW07DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMnB4Ow0KICAgIHdpZHRoOiAxLjhlbTsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwgLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7IHRvcDogMXB4OyB9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgeyBsZWZ0OiAycHg7IH0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7IHJpZ2h0OiAycHg7IH0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB7IGxlZnQ6IDFweDsgfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHsgcmlnaHQ6IDFweDsgfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHNwYW4sIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbGVmdDogNTAlOw0KICAgIG1hcmdpbi1sZWZ0OiAtOHB4Ow0KICAgIG1hcmdpbi10b3A6IC04cHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogNTAlOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7DQogICAgbGluZS1oZWlnaHQ6IDEuOGVtOw0KICAgIG1hcmdpbjogMCAyLjNlbTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdCB7DQogICAgZm9udC1zaXplOiAxZW07DQogICAgbWFyZ2luOiAxcHggMDsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgteWVhciB7IHdpZHRoOiAxMDAlOyB9DQoNCi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLA0KLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciB7IHdpZHRoOiA0OSU7IH0NCg0KLnVpLWRhdGVwaWNrZXIgdGFibGUgew0KICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogICAgZm9udC1zaXplOiAuOWVtOw0KICAgIG1hcmdpbjogMCAwIC40ZW07DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi51aS1kYXRlcGlja2VyIHRoIHsNCiAgICBib3JkZXI6IDA7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgcGFkZGluZzogLjdlbSAuM2VtOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgdGQgew0KICAgIGJvcmRlcjogMDsNCiAgICBwYWRkaW5nOiAxcHg7DQp9DQoNCi51aS1kYXRlcGlja2VyIHRkIHNwYW4sIC51aS1kYXRlcGlja2VyIHRkIGEgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIHBhZGRpbmc6IC4yZW07DQogICAgdGV4dC1hbGlnbjogcmlnaHQ7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KICAgIGJvcmRlci1ib3R0b206IDA7DQogICAgYm9yZGVyLWxlZnQ6IDA7DQogICAgYm9yZGVyLXJpZ2h0OiAwOw0KICAgIG1hcmdpbjogLjdlbSAwIDAgMDsNCiAgICBwYWRkaW5nOiAwIC4yZW07DQp9DQoNCi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZmxvYXQ6IHJpZ2h0Ow0KICAgIG1hcmdpbjogLjVlbSAuMmVtIC40ZW07DQogICAgb3ZlcmZsb3c6IHZpc2libGU7DQogICAgcGFkZGluZzogLjJlbSAuNmVtIC4zZW0gLjZlbTsNCiAgICB3aWR0aDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50IHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLyogd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgKi8NCg0KLnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aSB7IHdpZHRoOiBhdXRvOyB9DQoNCi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGUgew0KICAgIG1hcmdpbjogMCBhdXRvIC40ZW07DQogICAgd2lkdGg6IDk1JTsNCn0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cCB7IHdpZHRoOiA1MCU7IH0NCg0KLnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cCB7IHdpZHRoOiAzMy4zJTsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3VwIHsgd2lkdGg6IDI1JTsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciB7IGJvcmRlci1sZWZ0LXdpZHRoOiAwOyB9DQoNCi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIgeyBib3JkZXItbGVmdC13aWR0aDogMDsgfQ0KDQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsgY2xlYXI6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHsNCiAgICBjbGVhcjogYm90aDsNCiAgICBmb250LXNpemU6IDBlbTsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLyogUlRMIHN1cHBvcnQgKi8NCg0KLnVpLWRhdGVwaWNrZXItcnRsIHsgZGlyZWN0aW9uOiBydGw7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXYgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDJweDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQgew0KICAgIGxlZnQ6IDJweDsNCiAgICByaWdodDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXY6aG92ZXIgew0KICAgIGxlZnQ6IGF1dG87DQogICAgcmlnaHQ6IDFweDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXIgew0KICAgIGxlZnQ6IDFweDsNCiAgICByaWdodDogYXV0bzsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgeyBjbGVhcjogcmlnaHQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHsgZmxvYXQ6IGxlZnQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCB7IGZsb2F0OiByaWdodDsgfQ0KDQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAgeyBmbG9hdDogcmlnaHQ7IH0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsNCiAgICBib3JkZXItbGVmdC13aWR0aDogMXB4Ow0KICAgIGJvcmRlci1yaWdodC13aWR0aDogMDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIgew0KICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7DQogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwOw0KfQ0KDQovKiBJRTYgSUZSQU1FIEZJWCAodGFrZW4gZnJvbSBkYXRlcGlja2VyIDEuNS4zICovDQoNCi51aS1kYXRlcGlja2VyLWNvdmVyIHsNCiAgICBkaXNwbGF5OiBub25lOyAvKnNvcnJ5IGZvciBJRTUqLw0KICAgIGRpc3BsYXkvKiovOiBibG9jazsgLypzb3JyeSBmb3IgSUU1Ki8NCiAgICBmaWx0ZXI6IG1hc2soKTsgLyptdXN0IGhhdmUqLw0KICAgIGhlaWdodDogMjAwcHg7IC8qbXVzdCBoYXZlKi8NCiAgICBsZWZ0OiAtNHB4OyAvKm11c3QgaGF2ZSovDQogICAgcG9zaXRpb246IGFic29sdXRlOyAvKm11c3QgaGF2ZSovDQogICAgdG9wOiAtNHB4OyAvKm11c3QgaGF2ZSovDQogICAgd2lkdGg6IDIwMHB4OyAvKm11c3QgaGF2ZSovDQogICAgei1pbmRleDogLTE7IC8qbXVzdCBoYXZlKi8NCn0vKg0KICogalF1ZXJ5IFVJIERpYWxvZyAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0RpYWxvZyN0aGVtaW5nDQogKi8NCg0KLnVpLWRpYWxvZyB7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICBwYWRkaW5nOiAuMmVtOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICB3aWR0aDogMzAwcHg7DQp9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhciB7DQogICAgcGFkZGluZzogLjRlbSAxZW07DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGUgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIG1hcmdpbjogLjFlbSAxNnB4IC4xZW0gMDsNCn0NCg0KLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIHsNCiAgICBoZWlnaHQ6IDE4cHg7DQogICAgbWFyZ2luOiAtMTBweCAwIDAgMDsNCiAgICBwYWRkaW5nOiAxcHg7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiAuM2VtOw0KICAgIHRvcDogNTAlOw0KICAgIHdpZHRoOiAxOXB4Ow0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2Ugc3BhbiB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgLyptYXJnaW46IDFweDsqLw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2U6aG92ZXIsIC51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZTpmb2N1cyB7IHBhZGRpbmc6IDA7IH0NCg0KLnVpLWRpYWxvZyAudWktZGlhbG9nLWNvbnRlbnQgew0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQogICAgYm9yZGVyOiAwOw0KICAgIG92ZXJmbG93OiBhdXRvOw0KICAgIHBhZGRpbmc6IC41ZW0gMWVtOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB6b29tOiAxOw0KfQ0KDQoudWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsNCiAgICBib3JkZXItd2lkdGg6IDFweCAwIDAgMDsNCiAgICBtYXJnaW46IC41ZW0gMCAwIDA7DQogICAgcGFkZGluZzogLjNlbSAxZW0gLjVlbSAuNGVtOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIC51aS1kaWFsb2ctYnV0dG9uc2V0IHsgZmxvYXQ6IHJpZ2h0OyB9DQoNCi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIGJ1dHRvbiB7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDsNCn0NCg0KLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHsNCiAgICBib3R0b206IDNweDsNCiAgICBoZWlnaHQ6IDE0cHg7DQogICAgcmlnaHQ6IDNweDsNCiAgICB3aWR0aDogMTRweDsNCn0NCg0KLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHsgY3Vyc29yOiBtb3ZlOyB9DQovKg0KICogalF1ZXJ5IFVJIFByb2dyZXNzYmFyIDEuOC4xNA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkNCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvUHJvZ3Jlc3NiYXIjdGhlbWluZw0KICovDQoNCi51aS1wcm9ncmVzc2JhciB7DQogICAgaGVpZ2h0OiAyZW07DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZSB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIG1hcmdpbjogLTFweDsNCn0vKg0KICogalF1ZXJ5IFVJIFJlc2l6YWJsZSAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1Jlc2l6YWJsZSN0aGVtaW5nDQogKi8NCg0KLnVpLXJlc2l6YWJsZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KDQoudWktcmVzaXphYmxlLWhhbmRsZSB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgZm9udC1zaXplOiAwLjFweDsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgei1pbmRleDogOTk5OTk7DQp9DQoNCi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsIC51aS1yZXNpemFibGUtYXV0b2hpZGUgLnVpLXJlc2l6YWJsZS1oYW5kbGUgeyBkaXNwbGF5OiBub25lOyB9DQoNCi51aS1yZXNpemFibGUtbiB7DQogICAgY3Vyc29yOiBuLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDdweDsNCiAgICBsZWZ0OiAwOw0KICAgIHRvcDogLTVweDsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KLnVpLXJlc2l6YWJsZS1zIHsNCiAgICBib3R0b206IC01cHg7DQogICAgY3Vyc29yOiBzLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDdweDsNCiAgICBsZWZ0OiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoudWktcmVzaXphYmxlLWUgew0KICAgIGN1cnNvcjogZS1yZXNpemU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHJpZ2h0OiAtNXB4Ow0KICAgIHRvcDogMDsNCiAgICB3aWR0aDogN3B4Ow0KfQ0KDQoudWktcmVzaXphYmxlLXcgew0KICAgIGN1cnNvcjogdy1yZXNpemU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGxlZnQ6IC01cHg7DQogICAgdG9wOiAwOw0KICAgIHdpZHRoOiA3cHg7DQp9DQoNCi51aS1yZXNpemFibGUtc2Ugew0KICAgIGJvdHRvbTogMXB4Ow0KICAgIGN1cnNvcjogc2UtcmVzaXplOw0KICAgIGhlaWdodDogMTJweDsNCiAgICByaWdodDogMXB4Ow0KICAgIHdpZHRoOiAxMnB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLXN3IHsNCiAgICBib3R0b206IC01cHg7DQogICAgY3Vyc29yOiBzdy1yZXNpemU7DQogICAgaGVpZ2h0OiA5cHg7DQogICAgbGVmdDogLTVweDsNCiAgICB3aWR0aDogOXB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLW53IHsNCiAgICBjdXJzb3I6IG53LXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDlweDsNCiAgICBsZWZ0OiAtNXB4Ow0KICAgIHRvcDogLTVweDsNCiAgICB3aWR0aDogOXB4Ow0KfQ0KDQoudWktcmVzaXphYmxlLW5lIHsNCiAgICBjdXJzb3I6IG5lLXJlc2l6ZTsNCiAgICBoZWlnaHQ6IDlweDsNCiAgICByaWdodDogLTVweDsNCiAgICB0b3A6IC01cHg7DQogICAgd2lkdGg6IDlweDsNCn0vKg0KICogalF1ZXJ5IFVJIFNlbGVjdGFibGUgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TZWxlY3RhYmxlI3RoZW1pbmcNCiAqLw0KDQoudWktc2VsZWN0YWJsZS1oZWxwZXIgew0KICAgIGJvcmRlcjogMXB4IGRvdHRlZCBibGFjazsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgei1pbmRleDogMTAwOw0KfQ0KLyoNCiAqIGpRdWVyeSBVSSBTbGlkZXIgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TbGlkZXIjdGhlbWluZw0KICovDQoNCi51aS1zbGlkZXIgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoudWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxlIHsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQogICAgaGVpZ2h0OiAxLjJlbTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgd2lkdGg6IDEuMmVtOw0KICAgIHotaW5kZXg6IDI7DQp9DQoNCi51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOw0KICAgIGJvcmRlcjogMDsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBmb250LXNpemU6IC43ZW07DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHotaW5kZXg6IDE7DQp9DQoNCi51aS1zbGlkZXItaG9yaXpvbnRhbCB7IGhlaWdodDogLjhlbTsgfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGUgew0KICAgIG1hcmdpbi1sZWZ0OiAtLjZlbTsNCiAgICB0b3A6IC0uM2VtOw0KfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZSB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHRvcDogMDsNCn0NCg0KLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWluIHsgbGVmdDogMDsgfQ0KDQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1tYXggeyByaWdodDogMDsgfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIHsNCiAgICBoZWlnaHQ6IDEwMHB4Ow0KICAgIHdpZHRoOiAuOGVtOw0KfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxlIHsNCiAgICBsZWZ0OiAtLjNlbTsNCiAgICBtYXJnaW4tYm90dG9tOiAtLjZlbTsNCiAgICBtYXJnaW4tbGVmdDogMDsNCn0NCg0KLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHsNCiAgICBsZWZ0OiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KDQoudWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHsgYm90dG9tOiAwOyB9DQoNCi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXggeyB0b3A6IDA7IH0vKg0KICogalF1ZXJ5IFVJIFRhYnMgMS44LjE0DQogKg0KICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQ0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlDQogKg0KICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9UYWJzI3RoZW1pbmcNCiAqLw0KDQoudWktdGFicyB7DQogICAgcGFkZGluZzogLjJlbTsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgem9vbTogMTsNCn0gLyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyAiZml4ZWQiKSAqLw0KDQoudWktdGFicyAudWktdGFicy1uYXYgew0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiAuMmVtIC4yZW0gMDsNCn0NCg0KLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpIHsNCiAgICBib3JkZXItYm90dG9tOiAwICFpbXBvcnRhbnQ7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICBtYXJnaW46IDAgLjJlbSAxcHggMDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0b3A6IDFweDsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkgYSB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgcGFkZGluZzogLjVlbSAxZW07DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCB7DQogICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCBhLCAudWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgYSwgLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXN0YXRlLXByb2Nlc3NpbmcgYSB7IGN1cnNvcjogdGV4dDsgfQ0KDQoudWktdGFicyAudWktdGFicy1uYXYgbGkgYSwgLnVpLXRhYnMudWktdGFicy1jb2xsYXBzaWJsZSAudWktdGFicy1uYXYgbGkudWktdGFicy1zZWxlY3RlZCBhIHsgY3Vyc29yOiBwb2ludGVyOyB9IC8qIGZpcnN0IHNlbGVjdG9yIGluIGdyb3VwIHNlZW1zIG9ic29sZXRlLCBidXQgcmVxdWlyZWQgdG8gb3ZlcmNvbWUgYnVnIGluIE9wZXJhIGFwcGx5aW5nIGN1cnNvcjogdGV4dCBvdmVyYWxsIGlmIGRlZmluZWQgZWxzZXdoZXJlLi4uICovDQoNCi51aS10YWJzIC51aS10YWJzLXBhbmVsIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGJvcmRlci13aWR0aDogMDsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBwYWRkaW5nOiAxZW0gMS40ZW07DQp9DQoNCi51aS10YWJzIC51aS10YWJzLWhpZGUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCi8qDQogKiBqUXVlcnkgVUkgQ1NTIEZyYW1ld29yayAxLjguMTQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpDQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4NCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UNCiAqDQogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJDQogKg0KICogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvDQogKi8NCg0KDQovKiBDb21wb25lbnQgY29udGFpbmVycw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi51aS13aWRnZXQgew0KICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZi8qe2ZmRGVmYXVsdH0qLzsNCiAgICBmb250LXNpemU6IDEuMWVtLyp7ZnNEZWZhdWx0fSovOw0KfQ0KDQoudWktd2lkZ2V0IC51aS13aWRnZXQgeyBmb250LXNpemU6IDFlbTsgfQ0KDQoudWktd2lkZ2V0IGlucHV0LCAudWktd2lkZ2V0IHNlbGVjdCwgLnVpLXdpZGdldCB0ZXh0YXJlYSwgLnVpLXdpZGdldCBidXR0b24gew0KICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZi8qe2ZmRGVmYXVsdH0qLzsNCiAgICBmb250LXNpemU6IDFlbTsNCn0NCg0KLnVpLXdpZGdldC1jb250ZW50IHsNCiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmIC8qe2JnQ29sb3JDb250ZW50fSovIC8qdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFCa0NBWUFBQUQwWkhKNkFBQUFlVWxFUVZSb2dlM09NUUhBSUJBQXNWTC9uaDhKRERmQWtDakltcG41SHZiZkRwd0lWb0tWWUNWWUNWYUNsV0FsV0FsV2dwVmdKVmdKVm9LVllDVllDVmFDbFdBbFdBbFdncFZnSlZnSlZvS1ZZQ1ZZQ1ZhQ2xXQWxXQWxXZ3BWZ0pWZ0pWb0tWWUNWWUNWYUNsV0FsV0FsV2dwVmdKVmdKVmh0cWl3VEVLVExYVGdBQUFBQkpSVTVFcmtKZ2dnPT0pKi8gLyp7YmdJbWdVcmxDb250ZW50fSovIDUwJSAvKntiZ0NvbnRlbnRYUG9zfSovIDUwJSAvKntiZ0NvbnRlbnRZUG9zfSovIHJlcGVhdC14Lyp7YmdDb250ZW50UmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWEvKntib3JkZXJDb2xvckNvbnRlbnR9Ki87DQogICAgY29sb3I6ICMyMjIyMjIvKntmY0NvbnRlbnR9Ki87DQp9DQoNCi51aS13aWRnZXQtY29udGVudCBhIHsgY29sb3I6ICMyMjIyMjIvKntmY0NvbnRlbnR9Ki87IH0NCg0KLnVpLXdpZGdldC1oZWFkZXIgew0KICAgIGJhY2tncm91bmQ6ICNjY2NjY2MgLyp7YmdDb2xvckhlYWRlcn0qLyAvKnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQmtDQVlBQUFCSExGcGdBQUFBTEVsRVFWUVlsV040OU9qUmZ5WUdCZ2FHSVVUOC8vOGZTcUJ4MFloLy8vNFJMOHZBd0FBVlEyTU5Pd0lBbDZnNktrT0p3azhBQUFBQVNVVk9SSzVDWUlJPSkqLyAvKntiZ0ltZ1VybEhlYWRlcn0qLyA1MCUgLyp7YmdIZWFkZXJYUG9zfSovIDUwJSAvKntiZ0hlYWRlcllQb3N9Ki8gcmVwZWF0LXgvKntiZ0hlYWRlclJlcGVhdH0qLzsNCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhLyp7Ym9yZGVyQ29sb3JIZWFkZXJ9Ki87DQogICAgY29sb3I6ICMyMjIyMjIvKntmY0hlYWRlcn0qLzsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KLnVpLXdpZGdldC1oZWFkZXIgYSB7IGNvbG9yOiAjMjIyMjIyLyp7ZmNIZWFkZXJ9Ki87IH0NCg0KLyogSW50ZXJhY3Rpb24gc3RhdGVzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLnVpLXN0YXRlLWRlZmF1bHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQ6ICNlNmU2ZTYgLyp7YmdDb2xvckRlZmF1bHR9Ki8gLyp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUdRQ0FZQUFBQnZXQXJiQUFBQU5VbEVRVlE0amUzTE1Rb0FJQkFEd2IzOC82dDV3RlhhV0FpQ3RVaWFZWnZGOWhCQUNPRmJ1bnRWVmUxMUIwQ1NqamVFOEJ3VGhRSUo4ZGhFbDBZQUFBQUFTVVZPUks1Q1lJST0pKi8gLyp7YmdJbWdVcmxEZWZhdWx0fSovIDUwJSAvKntiZ0RlZmF1bHRYUG9zfSovIDUwJSAvKntiZ0RlZmF1bHRZUG9zfSovIHJlcGVhdC14Lyp7YmdEZWZhdWx0UmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDMvKntib3JkZXJDb2xvckRlZmF1bHR9Ki87DQogICAgY29sb3I6ICM1NTU1NTUvKntmY0RlZmF1bHR9Ki87DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbC8qe2Z3RGVmYXVsdH0qLzsNCn0NCg0KLnVpLXN0YXRlLWRlZmF1bHQgYSwgLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLCAudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQgew0KICAgIGNvbG9yOiAjNTU1NTU1Lyp7ZmNEZWZhdWx0fSovOw0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCg0KLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsIC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHsNCiAgICBiYWNrZ3JvdW5kOiAjZGFkYWRhIC8qe2JnQ29sb3JIb3Zlcn0qLyAvKnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBR1FDQVlBQUFCdldBcmJBQUFBTmtsRVFWUTRqV040OHVUSmZ5WUdCZ2FHVVdLVUdDV0dMZkh0Mnpjb2k1R1JFWU5nWW1KQ1ppRzQySWlCOTh3b01VcU1FdGdJQU1kakNkeWcrZUVCQUFBQUFFbEZUa1N1UW1DQykqLyAvKntiZ0ltZ1VybEhvdmVyfSovIDUwJSAvKntiZ0hvdmVyWFBvc30qLyA1MCUgLyp7YmdIb3ZlcllQb3N9Ki8gcmVwZWF0LXgvKntiZ0hvdmVyUmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk5OTkvKntib3JkZXJDb2xvckhvdmVyfSovOw0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNIb3Zlcn0qLzsNCiAgICBmb250LXdlaWdodDogbm9ybWFsLyp7ZndEZWZhdWx0fSovOw0KfQ0KDQoudWktc3RhdGUtaG92ZXIgYSwgLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIgew0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNIb3Zlcn0qLzsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoNCi51aS1zdGF0ZS1hY3RpdmUsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZlIHsNCiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmIC8qe2JnQ29sb3JBY3RpdmV9Ki8gLyp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMV1Z4ZFdsMlBTSkRiMjUwWlc1MExWUjVjR1VpSUdOdmJuUmxiblE5SW5SbGVIUXZhSFJ0YkRzZ1kyaGhjbk5sZEQxcGMyOHRPRGcxT1MweElpOCtEUW84ZEdsMGJHVStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZkR2wwYkdVK0RRbzhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGcwS1BDRXRMUTBLWW05a2VYdHRZWEpuYVc0Nk1EdG1iMjUwTFhOcGVtVTZMamRsYlR0bWIyNTBMV1poYldsc2VUcFdaWEprWVc1aExDQkJjbWxoYkN3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1PMkpoWTJ0bmNtOTFibVE2STBWRlJVVkZSVHQ5RFFwbWFXVnNaSE5sZEh0d1lXUmthVzVuT2pBZ01UVndlQ0F4TUhCNElERTFjSGc3ZlNBTkNtZ3hlMlp2Ym5RdGMybDZaVG95TGpSbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalJrWkdPMzBOQ21neWUyWnZiblF0YzJsNlpUb3hMamRsYlR0dFlYSm5hVzQ2TUR0amIyeHZjam9qUTBNd01EQXdPMzBnRFFwb00zdG1iMjUwTFhOcGVtVTZNUzR5WlcwN2JXRnlaMmx1T2pFd2NIZ2dNQ0F3SURBN1kyOXNiM0k2SXpBd01EQXdNRHQ5SUEwS0kyaGxZV1JsY250M2FXUjBhRG81TmlVN2JXRnlaMmx1T2pBZ01DQXdJREE3Y0dGa1pHbHVaem8yY0hnZ01pVWdObkI0SURJbE8yWnZiblF0Wm1GdGFXeDVPaUowY21WaWRXTm9aWFFnVFZNaUxDQldaWEprWVc1aExDQnpZVzV6TFhObGNtbG1PMk52Ykc5eU9pTkdSa1k3RFFwaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lNMU5UVTFOVFU3ZlEwS0kyTnZiblJsYm5SN2JXRnlaMmx1T2pBZ01DQXdJRElsTzNCdmMybDBhVzl1T25KbGJHRjBhWFpsTzMwTkNpNWpiMjUwWlc1MExXTnZiblJoYVc1bGNudGlZV05yWjNKdmRXNWtPaU5HUmtZN2QybGtkR2c2T1RZbE8yMWhjbWRwYmkxMGIzQTZPSEI0TzNCaFpHUnBibWM2TVRCd2VEdHdiM05wZEdsdmJqcHlaV3hoZEdsMlpUdDlEUW90TFQ0TkNqd3ZjM1I1YkdVK0RRbzhMMmhsWVdRK0RRbzhZbTlrZVQ0TkNqeGthWFlnYVdROUltaGxZV1JsY2lJK1BHZ3hQbE5sY25abGNpQkZjbkp2Y2p3dmFERStQQzlrYVhZK0RRbzhaR2wySUdsa1BTSmpiMjUwWlc1MElqNE5DaUE4WkdsMklHTnNZWE56UFNKamIyNTBaVzUwTFdOdmJuUmhhVzVsY2lJK1BHWnBaV3hrYzJWMFBnMEtJQ0E4YURJK05EQTBJQzBnUm1sc1pTQnZjaUJrYVhKbFkzUnZjbmtnYm05MElHWnZkVzVrTGp3dmFESStEUW9nSUR4b016NVVhR1VnY21WemIzVnlZMlVnZVc5MUlHRnlaU0JzYjI5cmFXNW5JR1p2Y2lCdGFXZG9kQ0JvWVhabElHSmxaVzRnY21WdGIzWmxaQ3dnYUdGa0lHbDBjeUJ1WVcxbElHTm9ZVzVuWldRc0lHOXlJR2x6SUhSbGJYQnZjbUZ5YVd4NUlIVnVZWFpoYVd4aFlteGxMand2YURNK0RRb2dQQzltYVdWc1pITmxkRDQ4TDJScGRqNE5Dand2WkdsMlBnMEtQQzlpYjJSNVBnMEtQQzlvZEcxc1BnMEspKi8gLyp7YmdJbWdVcmxBY3RpdmV9Ki8gNTAlIC8qe2JnQWN0aXZlWFBvc30qLyA1MCUgLyp7YmdBY3RpdmVZUG9zfSovIHJlcGVhdC14Lyp7YmdBY3RpdmVSZXBlYXR9Ki87DQogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYS8qe2JvcmRlckNvbG9yQWN0aXZlfSovOw0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNBY3RpdmV9Ki87DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbC8qe2Z3RGVmYXVsdH0qLzsNCn0NCg0KLnVpLXN0YXRlLWFjdGl2ZSBhLCAudWktc3RhdGUtYWN0aXZlIGE6bGluaywgLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQgew0KICAgIGNvbG9yOiAjMjEyMTIxLyp7ZmNBY3RpdmV9Ki87DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQoudWktd2lkZ2V0IDphY3RpdmUgeyBvdXRsaW5lOiBub25lOyB9DQoNCi8qIEludGVyYWN0aW9uIEN1ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoudWktc3RhdGUtaGlnaGxpZ2h0LCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7DQogICAgYmFja2dyb3VuZDogI2ZiZjllZSAvKntiZ0NvbG9ySGlnaGxpZ2h0fSovIC8qdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQQ0ZFVDBOVVdWQkZJR2gwYld3Z1VGVkNURWxESUNJdEx5OVhNME12TDBSVVJDQllTRlJOVENBeExqQWdVM1J5YVdOMEx5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTDFSU0wzaG9kRzFzTVM5RVZFUXZlR2gwYld3eExYTjBjbWxqZEM1a2RHUWlQZzBLUEdoMGJXd2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUdoMGJXd2lQZzBLUEdobFlXUStEUW84YldWMFlTQm9kSFJ3TFdWeGRXbDJQU0pEYjI1MFpXNTBMVlI1Y0dVaUlHTnZiblJsYm5ROUluUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMXBjMjh0T0RnMU9TMHhJaTgrRFFvOGRHbDBiR1UrTkRBMElDMGdSbWxzWlNCdmNpQmthWEpsWTNSdmNua2dibTkwSUdadmRXNWtMand2ZEdsMGJHVStEUW84YzNSNWJHVWdkSGx3WlQwaWRHVjRkQzlqYzNNaVBnMEtQQ0V0TFEwS1ltOWtlWHR0WVhKbmFXNDZNRHRtYjI1MExYTnBlbVU2TGpkbGJUdG1iMjUwTFdaaGJXbHNlVHBXWlhKa1lXNWhMQ0JCY21saGJDd2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtTzJKaFkydG5jbTkxYm1RNkkwVkZSVVZGUlR0OURRcG1hV1ZzWkhObGRIdHdZV1JrYVc1bk9qQWdNVFZ3ZUNBeE1IQjRJREUxY0hnN2ZTQU5DbWd4ZTJadmJuUXRjMmw2WlRveUxqUmxiVHR0WVhKbmFXNDZNRHRqYjJ4dmNqb2pSa1pHTzMwTkNtZ3llMlp2Ym5RdGMybDZaVG94TGpkbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalEwTXdNREF3TzMwZ0RRcG9NM3RtYjI1MExYTnBlbVU2TVM0eVpXMDdiV0Z5WjJsdU9qRXdjSGdnTUNBd0lEQTdZMjlzYjNJNkl6QXdNREF3TUR0OUlBMEtJMmhsWVdSbGNudDNhV1IwYURvNU5pVTdiV0Z5WjJsdU9qQWdNQ0F3SURBN2NHRmtaR2x1WnpvMmNIZ2dNaVVnTm5CNElESWxPMlp2Ym5RdFptRnRhV3g1T2lKMGNtVmlkV05vWlhRZ1RWTWlMQ0JXWlhKa1lXNWhMQ0J6WVc1ekxYTmxjbWxtTzJOdmJHOXlPaU5HUmtZN0RRcGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTTFOVFUxTlRVN2ZRMEtJMk52Ym5SbGJuUjdiV0Z5WjJsdU9qQWdNQ0F3SURJbE8zQnZjMmwwYVc5dU9uSmxiR0YwYVhabE8zME5DaTVqYjI1MFpXNTBMV052Ym5SaGFXNWxjbnRpWVdOclozSnZkVzVrT2lOR1JrWTdkMmxrZEdnNk9UWWxPMjFoY21kcGJpMTBiM0E2T0hCNE8zQmhaR1JwYm1jNk1UQndlRHR3YjNOcGRHbHZianB5Wld4aGRHbDJaVHQ5RFFvdExUNE5Dand2YzNSNWJHVStEUW84TDJobFlXUStEUW84WW05a2VUNE5DanhrYVhZZ2FXUTlJbWhsWVdSbGNpSStQR2d4UGxObGNuWmxjaUJGY25KdmNqd3ZhREUrUEM5a2FYWStEUW84WkdsMklHbGtQU0pqYjI1MFpXNTBJajROQ2lBOFpHbDJJR05zWVhOelBTSmpiMjUwWlc1MExXTnZiblJoYVc1bGNpSStQR1pwWld4a2MyVjBQZzBLSUNBOGFESStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZhREkrRFFvZ0lEeG9NejVVYUdVZ2NtVnpiM1Z5WTJVZ2VXOTFJR0Z5WlNCc2IyOXJhVzVuSUdadmNpQnRhV2RvZENCb1lYWmxJR0psWlc0Z2NtVnRiM1psWkN3Z2FHRmtJR2wwY3lCdVlXMWxJR05vWVc1blpXUXNJRzl5SUdseklIUmxiWEJ2Y21GeWFXeDVJSFZ1WVhaaGFXeGhZbXhsTGp3dmFETStEUW9nUEM5bWFXVnNaSE5sZEQ0OEwyUnBkajROQ2p3dlpHbDJQZzBLUEM5aWIyUjVQZzBLUEM5b2RHMXNQZzBLKSovIC8qe2JnSW1nVXJsSGlnaGxpZ2h0fSovIDUwJSAvKntiZ0hpZ2hsaWdodFhQb3N9Ki8gNTAlIC8qe2JnSGlnaGxpZ2h0WVBvc30qLyByZXBlYXQteC8qe2JnSGlnaGxpZ2h0UmVwZWF0fSovOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNmY2VmYTEvKntib3JkZXJDb2xvckhpZ2hsaWdodH0qLzsNCiAgICBjb2xvcjogIzM2MzYzNi8qe2ZjSGlnaGxpZ2h0fSovOw0KfQ0KDQoudWktc3RhdGUtaGlnaGxpZ2h0IGEsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYSB7IGNvbG9yOiAjMzYzNjM2Lyp7ZmNIaWdobGlnaHR9Ki87IH0NCg0KLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Igew0KICAgIGJhY2tncm91bmQ6ICNmZWYxZWMgLyp7YmdDb2xvckVycm9yfSovIC8qdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQQ0ZFVDBOVVdWQkZJR2gwYld3Z1VGVkNURWxESUNJdEx5OVhNME12TDBSVVJDQllTRlJOVENBeExqQWdVM1J5YVdOMEx5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTDFSU0wzaG9kRzFzTVM5RVZFUXZlR2gwYld3eExYTjBjbWxqZEM1a2RHUWlQZzBLUEdoMGJXd2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUdoMGJXd2lQZzBLUEdobFlXUStEUW84YldWMFlTQm9kSFJ3TFdWeGRXbDJQU0pEYjI1MFpXNTBMVlI1Y0dVaUlHTnZiblJsYm5ROUluUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMXBjMjh0T0RnMU9TMHhJaTgrRFFvOGRHbDBiR1UrTkRBMElDMGdSbWxzWlNCdmNpQmthWEpsWTNSdmNua2dibTkwSUdadmRXNWtMand2ZEdsMGJHVStEUW84YzNSNWJHVWdkSGx3WlQwaWRHVjRkQzlqYzNNaVBnMEtQQ0V0TFEwS1ltOWtlWHR0WVhKbmFXNDZNRHRtYjI1MExYTnBlbVU2TGpkbGJUdG1iMjUwTFdaaGJXbHNlVHBXWlhKa1lXNWhMQ0JCY21saGJDd2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtTzJKaFkydG5jbTkxYm1RNkkwVkZSVVZGUlR0OURRcG1hV1ZzWkhObGRIdHdZV1JrYVc1bk9qQWdNVFZ3ZUNBeE1IQjRJREUxY0hnN2ZTQU5DbWd4ZTJadmJuUXRjMmw2WlRveUxqUmxiVHR0WVhKbmFXNDZNRHRqYjJ4dmNqb2pSa1pHTzMwTkNtZ3llMlp2Ym5RdGMybDZaVG94TGpkbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalEwTXdNREF3TzMwZ0RRcG9NM3RtYjI1MExYTnBlbVU2TVM0eVpXMDdiV0Z5WjJsdU9qRXdjSGdnTUNBd0lEQTdZMjlzYjNJNkl6QXdNREF3TUR0OUlBMEtJMmhsWVdSbGNudDNhV1IwYURvNU5pVTdiV0Z5WjJsdU9qQWdNQ0F3SURBN2NHRmtaR2x1WnpvMmNIZ2dNaVVnTm5CNElESWxPMlp2Ym5RdFptRnRhV3g1T2lKMGNtVmlkV05vWlhRZ1RWTWlMQ0JXWlhKa1lXNWhMQ0J6WVc1ekxYTmxjbWxtTzJOdmJHOXlPaU5HUmtZN0RRcGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTTFOVFUxTlRVN2ZRMEtJMk52Ym5SbGJuUjdiV0Z5WjJsdU9qQWdNQ0F3SURJbE8zQnZjMmwwYVc5dU9uSmxiR0YwYVhabE8zME5DaTVqYjI1MFpXNTBMV052Ym5SaGFXNWxjbnRpWVdOclozSnZkVzVrT2lOR1JrWTdkMmxrZEdnNk9UWWxPMjFoY21kcGJpMTBiM0E2T0hCNE8zQmhaR1JwYm1jNk1UQndlRHR3YjNOcGRHbHZianB5Wld4aGRHbDJaVHQ5RFFvdExUNE5Dand2YzNSNWJHVStEUW84TDJobFlXUStEUW84WW05a2VUNE5DanhrYVhZZ2FXUTlJbWhsWVdSbGNpSStQR2d4UGxObGNuWmxjaUJGY25KdmNqd3ZhREUrUEM5a2FYWStEUW84WkdsMklHbGtQU0pqYjI1MFpXNTBJajROQ2lBOFpHbDJJR05zWVhOelBTSmpiMjUwWlc1MExXTnZiblJoYVc1bGNpSStQR1pwWld4a2MyVjBQZzBLSUNBOGFESStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZhREkrRFFvZ0lEeG9NejVVYUdVZ2NtVnpiM1Z5WTJVZ2VXOTFJR0Z5WlNCc2IyOXJhVzVuSUdadmNpQnRhV2RvZENCb1lYWmxJR0psWlc0Z2NtVnRiM1psWkN3Z2FHRmtJR2wwY3lCdVlXMWxJR05vWVc1blpXUXNJRzl5SUdseklIUmxiWEJ2Y21GeWFXeDVJSFZ1WVhaaGFXeGhZbXhsTGp3dmFETStEUW9nUEM5bWFXVnNaSE5sZEQ0OEwyUnBkajROQ2p3dlpHbDJQZzBLUEM5aWIyUjVQZzBLUEM5b2RHMXNQZzBLKSovIC8qe2JnSW1nVXJsRXJyb3J9Ki8gNTAlIC8qe2JnRXJyb3JYUG9zfSovIDUwJSAvKntiZ0Vycm9yWVBvc30qLyByZXBlYXQteC8qe2JnRXJyb3JSZXBlYXR9Ki87DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NkMGEwYS8qe2JvcmRlckNvbG9yRXJyb3J9Ki87DQogICAgY29sb3I6ICNjZDBhMGEvKntmY0Vycm9yfSovOw0KfQ0KDQoudWktc3RhdGUtZXJyb3IgYSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7IGNvbG9yOiAjY2QwYTBhLyp7ZmNFcnJvcn0qLzsgfQ0KDQoudWktc3RhdGUtZXJyb3ItdGV4dCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dCB7IGNvbG9yOiAjY2QwYTBhLyp7ZmNFcnJvcn0qLzsgfQ0KDQoudWktcHJpb3JpdHktcHJpbWFyeSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LCAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeSB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQoNCi51aS1wcmlvcml0eS1zZWNvbmRhcnksIC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktc2Vjb25kYXJ5LCAudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9NzApOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgb3BhY2l0eTogLjc7DQp9DQoNCi51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KICAgIGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zNSk7DQogICAgb3BhY2l0eTogLjM1Ow0KfQ0KDQovKiBJY29ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIHN0YXRlcyBhbmQgSW1hZ2VzICovDQoNCi51aS1pY29uIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFEd0NBTUFBQURZU1VyNUFBQUE3VkJNVkVVa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWkiKS8qe2ljb25zQ29udGVudH0qLzsNCiAgICBoZWlnaHQ6IDE2cHg7DQogICAgd2lkdGg6IDE2cHg7DQp9DQoNCi51aS13aWRnZXQtY29udGVudCAudWktaWNvbiB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVVrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaSIpLyp7aWNvbnNDb250ZW50fSovOyB9DQoNCi51aS13aWRnZXQtaGVhZGVyIC51aS1pY29uIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFVWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpUWtJaVFrSWlRa0lpIikvKntpY29uc0hlYWRlcn0qLzsgfQ0KDQoudWktc3RhdGUtZGVmYXVsdCAudWktaWNvbiB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVdJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSWlJaUlpSSIpLyp7aWNvbnNEZWZhdWx0fSovOyB9DQoNCi51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwgLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uIHsgLypiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMV1Z4ZFdsMlBTSkRiMjUwWlc1MExWUjVjR1VpSUdOdmJuUmxiblE5SW5SbGVIUXZhSFJ0YkRzZ1kyaGhjbk5sZEQxcGMyOHRPRGcxT1MweElpOCtEUW84ZEdsMGJHVStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZkR2wwYkdVK0RRbzhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGcwS1BDRXRMUTBLWW05a2VYdHRZWEpuYVc0Nk1EdG1iMjUwTFhOcGVtVTZMamRsYlR0bWIyNTBMV1poYldsc2VUcFdaWEprWVc1aExDQkJjbWxoYkN3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1PMkpoWTJ0bmNtOTFibVE2STBWRlJVVkZSVHQ5RFFwbWFXVnNaSE5sZEh0d1lXUmthVzVuT2pBZ01UVndlQ0F4TUhCNElERTFjSGc3ZlNBTkNtZ3hlMlp2Ym5RdGMybDZaVG95TGpSbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalJrWkdPMzBOQ21neWUyWnZiblF0YzJsNlpUb3hMamRsYlR0dFlYSm5hVzQ2TUR0amIyeHZjam9qUTBNd01EQXdPMzBnRFFwb00zdG1iMjUwTFhOcGVtVTZNUzR5WlcwN2JXRnlaMmx1T2pFd2NIZ2dNQ0F3SURBN1kyOXNiM0k2SXpBd01EQXdNRHQ5SUEwS0kyaGxZV1JsY250M2FXUjBhRG81TmlVN2JXRnlaMmx1T2pBZ01DQXdJREE3Y0dGa1pHbHVaem8yY0hnZ01pVWdObkI0SURJbE8yWnZiblF0Wm1GdGFXeDVPaUowY21WaWRXTm9aWFFnVFZNaUxDQldaWEprWVc1aExDQnpZVzV6TFhObGNtbG1PMk52Ykc5eU9pTkdSa1k3RFFwaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lNMU5UVTFOVFU3ZlEwS0kyTnZiblJsYm5SN2JXRnlaMmx1T2pBZ01DQXdJRElsTzNCdmMybDBhVzl1T25KbGJHRjBhWFpsTzMwTkNpNWpiMjUwWlc1MExXTnZiblJoYVc1bGNudGlZV05yWjNKdmRXNWtPaU5HUmtZN2QybGtkR2c2T1RZbE8yMWhjbWRwYmkxMGIzQTZPSEI0TzNCaFpHUnBibWM2TVRCd2VEdHdiM05wZEdsdmJqcHlaV3hoZEdsMlpUdDlEUW90TFQ0TkNqd3ZjM1I1YkdVK0RRbzhMMmhsWVdRK0RRbzhZbTlrZVQ0TkNqeGthWFlnYVdROUltaGxZV1JsY2lJK1BHZ3hQbE5sY25abGNpQkZjbkp2Y2p3dmFERStQQzlrYVhZK0RRbzhaR2wySUdsa1BTSmpiMjUwWlc1MElqNE5DaUE4WkdsMklHTnNZWE56UFNKamIyNTBaVzUwTFdOdmJuUmhhVzVsY2lJK1BHWnBaV3hrYzJWMFBnMEtJQ0E4YURJK05EQTBJQzBnUm1sc1pTQnZjaUJrYVhKbFkzUnZjbmtnYm05MElHWnZkVzVrTGp3dmFESStEUW9nSUR4b016NVVhR1VnY21WemIzVnlZMlVnZVc5MUlHRnlaU0JzYjI5cmFXNW5JR1p2Y2lCdGFXZG9kQ0JvWVhabElHSmxaVzRnY21WdGIzWmxaQ3dnYUdGa0lHbDBjeUJ1WVcxbElHTm9ZVzVuWldRc0lHOXlJR2x6SUhSbGJYQnZjbUZ5YVd4NUlIVnVZWFpoYVd4aFlteGxMand2YURNK0RRb2dQQzltYVdWc1pITmxkRDQ4TDJScGRqNE5Dand2WkdsMlBnMEtQQzlpYjJSNVBnMEtQQzlvZEcxc1BnMEspKi8vKntpY29uc0hvdmVyfSovOyB9DQoNCi51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24geyAvKmJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsUENGRVQwTlVXVkJGSUdoMGJXd2dVRlZDVEVsRElDSXRMeTlYTTBNdkwwUlVSQ0JZU0ZSTlRDQXhMakFnVTNSeWFXTjBMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMM2hvZEcxc01TOUVWRVF2ZUdoMGJXd3hMWE4wY21samRDNWtkR1FpUGcwS1BHaDBiV3dnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHaDBiV3dpUGcwS1BHaGxZV1ErRFFvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFwYzI4dE9EZzFPUzB4SWk4K0RRbzhkR2wwYkdVK05EQTBJQzBnUm1sc1pTQnZjaUJrYVhKbFkzUnZjbmtnYm05MElHWnZkVzVrTGp3dmRHbDBiR1UrRFFvOGMzUjViR1VnZEhsd1pUMGlkR1Y0ZEM5amMzTWlQZzBLUENFdExRMEtZbTlrZVh0dFlYSm5hVzQ2TUR0bWIyNTBMWE5wZW1VNkxqZGxiVHRtYjI1MExXWmhiV2xzZVRwV1pYSmtZVzVoTENCQmNtbGhiQ3dnU0dWc2RtVjBhV05oTENCellXNXpMWE5sY21sbU8ySmhZMnRuY205MWJtUTZJMFZGUlVWRlJUdDlEUXBtYVdWc1pITmxkSHR3WVdSa2FXNW5PakFnTVRWd2VDQXhNSEI0SURFMWNIZzdmU0FOQ21neGUyWnZiblF0YzJsNlpUb3lMalJsYlR0dFlYSm5hVzQ2TUR0amIyeHZjam9qUmtaR08zME5DbWd5ZTJadmJuUXRjMmw2WlRveExqZGxiVHR0WVhKbmFXNDZNRHRqYjJ4dmNqb2pRME13TURBd08zMGdEUXBvTTN0bWIyNTBMWE5wZW1VNk1TNHlaVzA3YldGeVoybHVPakV3Y0hnZ01DQXdJREE3WTI5c2IzSTZJekF3TURBd01EdDlJQTBLSTJobFlXUmxjbnQzYVdSMGFEbzVOaVU3YldGeVoybHVPakFnTUNBd0lEQTdjR0ZrWkdsdVp6bzJjSGdnTWlVZ05uQjRJRElsTzJadmJuUXRabUZ0YVd4NU9pSjBjbVZpZFdOb1pYUWdUVk1pTENCV1pYSmtZVzVoTENCellXNXpMWE5sY21sbU8yTnZiRzl5T2lOR1JrWTdEUXBpWVdOclozSnZkVzVrTFdOdmJHOXlPaU0xTlRVMU5UVTdmUTBLSTJOdmJuUmxiblI3YldGeVoybHVPakFnTUNBd0lESWxPM0J2YzJsMGFXOXVPbkpsYkdGMGFYWmxPMzBOQ2k1amIyNTBaVzUwTFdOdmJuUmhhVzVsY250aVlXTnJaM0p2ZFc1a09pTkdSa1k3ZDJsa2RHZzZPVFlsTzIxaGNtZHBiaTEwYjNBNk9IQjRPM0JoWkdScGJtYzZNVEJ3ZUR0d2IzTnBkR2x2YmpweVpXeGhkR2wyWlR0OURRb3RMVDROQ2p3dmMzUjViR1UrRFFvOEwyaGxZV1ErRFFvOFltOWtlVDROQ2p4a2FYWWdhV1E5SW1obFlXUmxjaUkrUEdneFBsTmxjblpsY2lCRmNuSnZjand2YURFK1BDOWthWFkrRFFvOFpHbDJJR2xrUFNKamIyNTBaVzUwSWo0TkNpQThaR2wySUdOc1lYTnpQU0pqYjI1MFpXNTBMV052Ym5SaGFXNWxjaUkrUEdacFpXeGtjMlYwUGcwS0lDQThhREkrTkRBMElDMGdSbWxzWlNCdmNpQmthWEpsWTNSdmNua2dibTkwSUdadmRXNWtMand2YURJK0RRb2dJRHhvTXo1VWFHVWdjbVZ6YjNWeVkyVWdlVzkxSUdGeVpTQnNiMjlyYVc1bklHWnZjaUJ0YVdkb2RDQm9ZWFpsSUdKbFpXNGdjbVZ0YjNabFpDd2dhR0ZrSUdsMGN5QnVZVzFsSUdOb1lXNW5aV1FzSUc5eUlHbHpJSFJsYlhCdmNtRnlhV3g1SUhWdVlYWmhhV3hoWW14bExqd3ZhRE0rRFFvZ1BDOW1hV1ZzWkhObGRENDhMMlJwZGo0TkNqd3ZaR2wyUGcwS1BDOWliMlI1UGcwS1BDOW9kRzFzUGcwSykqLy8qe2ljb25zQWN0aXZlfSovOyB9DQoNCi51aS1zdGF0ZS1oaWdobGlnaHQgLnVpLWljb24geyAvKmJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsUENGRVQwTlVXVkJGSUdoMGJXd2dVRlZDVEVsRElDSXRMeTlYTTBNdkwwUlVSQ0JZU0ZSTlRDQXhMakFnVTNSeWFXTjBMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMM2hvZEcxc01TOUVWRVF2ZUdoMGJXd3hMWE4wY21samRDNWtkR1FpUGcwS1BHaDBiV3dnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHaDBiV3dpUGcwS1BHaGxZV1ErRFFvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDFwYzI4dE9EZzFPUzB4SWk4K0RRbzhkR2wwYkdVK05EQTBJQzBnUm1sc1pTQnZjaUJrYVhKbFkzUnZjbmtnYm05MElHWnZkVzVrTGp3dmRHbDBiR1UrRFFvOGMzUjViR1VnZEhsd1pUMGlkR1Y0ZEM5amMzTWlQZzBLUENFdExRMEtZbTlrZVh0dFlYSm5hVzQ2TUR0bWIyNTBMWE5wZW1VNkxqZGxiVHRtYjI1MExXWmhiV2xzZVRwV1pYSmtZVzVoTENCQmNtbGhiQ3dnU0dWc2RtVjBhV05oTENCellXNXpMWE5sY21sbU8ySmhZMnRuY205MWJtUTZJMFZGUlVWRlJUdDlEUXBtYVdWc1pITmxkSHR3WVdSa2FXNW5PakFnTVRWd2VDQXhNSEI0SURFMWNIZzdmU0FOQ21neGUyWnZiblF0YzJsNlpUb3lMalJsYlR0dFlYSm5hVzQ2TUR0amIyeHZjam9qUmtaR08zME5DbWd5ZTJadmJuUXRjMmw2WlRveExqZGxiVHR0WVhKbmFXNDZNRHRqYjJ4dmNqb2pRME13TURBd08zMGdEUXBvTTN0bWIyNTBMWE5wZW1VNk1TNHlaVzA3YldGeVoybHVPakV3Y0hnZ01DQXdJREE3WTI5c2IzSTZJekF3TURBd01EdDlJQTBLSTJobFlXUmxjbnQzYVdSMGFEbzVOaVU3YldGeVoybHVPakFnTUNBd0lEQTdjR0ZrWkdsdVp6bzJjSGdnTWlVZ05uQjRJRElsTzJadmJuUXRabUZ0YVd4NU9pSjBjbVZpZFdOb1pYUWdUVk1pTENCV1pYSmtZVzVoTENCellXNXpMWE5sY21sbU8yTnZiRzl5T2lOR1JrWTdEUXBpWVdOclozSnZkVzVrTFdOdmJHOXlPaU0xTlRVMU5UVTdmUTBLSTJOdmJuUmxiblI3YldGeVoybHVPakFnTUNBd0lESWxPM0J2YzJsMGFXOXVPbkpsYkdGMGFYWmxPMzBOQ2k1amIyNTBaVzUwTFdOdmJuUmhhVzVsY250aVlXTnJaM0p2ZFc1a09pTkdSa1k3ZDJsa2RHZzZPVFlsTzIxaGNtZHBiaTEwYjNBNk9IQjRPM0JoWkdScGJtYzZNVEJ3ZUR0d2IzTnBkR2x2YmpweVpXeGhkR2wyWlR0OURRb3RMVDROQ2p3dmMzUjViR1UrRFFvOEwyaGxZV1ErRFFvOFltOWtlVDROQ2p4a2FYWWdhV1E5SW1obFlXUmxjaUkrUEdneFBsTmxjblpsY2lCRmNuSnZjand2YURFK1BDOWthWFkrRFFvOFpHbDJJR2xrUFNKamIyNTBaVzUwSWo0TkNpQThaR2wySUdOc1lYTnpQU0pqYjI1MFpXNTBMV052Ym5SaGFXNWxjaUkrUEdacFpXeGtjMlYwUGcwS0lDQThhREkrTkRBMElDMGdSbWxzWlNCdmNpQmthWEpsWTNSdmNua2dibTkwSUdadmRXNWtMand2YURJK0RRb2dJRHhvTXo1VWFHVWdjbVZ6YjNWeVkyVWdlVzkxSUdGeVpTQnNiMjlyYVc1bklHWnZjaUJ0YVdkb2RDQm9ZWFpsSUdKbFpXNGdjbVZ0YjNabFpDd2dhR0ZrSUdsMGN5QnVZVzFsSUdOb1lXNW5aV1FzSUc5eUlHbHpJSFJsYlhCdmNtRnlhV3g1SUhWdVlYWmhhV3hoWW14bExqd3ZhRE0rRFFvZ1BDOW1hV1ZzWkhObGRENDhMMlJwZGo0TkNqd3ZaR2wyUGcwS1BDOWliMlI1UGcwS1BDOW9kRzFzUGcwSykqLy8qe2ljb25zSGlnaGxpZ2h0fSovOyB9DQoNCi51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwgLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb24geyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFEd0NBTUFBQURZU1VyNUFBQUE3VkJNVkVYTUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2ciKS8qe2ljb25zRXJyb3J9Ki87IH0NCg0KLyogcG9zaXRpb25pbmcgKi8NCg0KLnVpLWljb24tY2FyYXQtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IDA7IH0NCg0KLnVpLWljb24tY2FyYXQtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IDA7IH0NCg0KLnVpLWljb24tY2FyYXQtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggMDsgfQ0KDQoudWktaWNvbi1jYXJhdC0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAwOyB9DQoNCi51aS1pY29uLWNhcmF0LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IDA7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2cHg7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHg7IH0NCg0KLnVpLWljb24tdHJpYW5nbGUtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweDsgfQ0KDQoudWktaWNvbi10cmlhbmdsZS0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLXRyaWFuZ2xlLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3ctMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvdy0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93LTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3dzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvd3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0zMnB4OyB9DQoNCi51aS1pY29uLWFycm93c3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTMycHg7IH0NCg0KLnVpLWljb24tYXJyb3dzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMzJweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2stMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTQ4cHg7IH0NCg0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC00OHB4OyB9DQoNCi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtNDhweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjRweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZXR1cm4tMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmVmcmVzaC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweDsgfQ0KDQoudWktaWNvbi1hcnJvd3JlZnJlc2gtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC02NHB4OyB9DQoNCi51aS1pY29uLWFycm93cmVmcmVzaC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTY0cHg7IH0NCg0KLnVpLWljb24tYXJyb3ctNCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHg7IH0NCg0KLnVpLWljb24tYXJyb3ctNC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTgwcHg7IH0NCg0KLnVpLWljb24tZXh0bGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4OyB9DQoNCi51aS1pY29uLW5ld3dpbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC04MHB4OyB9DQoNCi51aS1pY29uLXJlZnJlc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtODBweDsgfQ0KDQoudWktaWNvbi1zaHVmZmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHg7IH0NCg0KLnVpLWljb24tdHJhbnNmZXItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHg7IH0NCg0KLnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTgwcHg7IH0NCg0KLnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH0NCg0KLnVpLWljb24tZm9sZGVyLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1kb2N1bWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC05NnB4OyB9DQoNCi51aS1pY29uLWRvY3VtZW50LWIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweDsgfQ0KDQoudWktaWNvbi1ub3RlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTk2cHg7IH0NCg0KLnVpLWljb24tbWFpbC1jbG9zZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtOTZweDsgfQ0KDQoudWktaWNvbi1tYWlsLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1zdWl0Y2FzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweDsgfQ0KDQoudWktaWNvbi1jb21tZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC05NnB4OyB9DQoNCi51aS1pY29uLXBlcnNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDsgfQ0KDQoudWktaWNvbi1wcmludCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweDsgfQ0KDQoudWktaWNvbi10cmFzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtOTZweDsgfQ0KDQoudWktaWNvbi1sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7IH0NCg0KLnVpLWljb24tdW5sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTk2cHg7IH0NCg0KLnVpLWljb24tYm9va21hcmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTk2cHg7IH0NCg0KLnVpLWljb24tdGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4OyB9DQoNCi51aS1pY29uLWhvbWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMTJweDsgfQ0KDQoudWktaWNvbi1mbGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhbGVuZGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHg7IH0NCg0KLnVpLWljb24tcGVuY2lsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNsb2NrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLWRpc2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHg7IH0NCg0KLnVpLWljb24tY2FsY3VsYXRvciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTEycHg7IH0NCg0KLnVpLWljb24tem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweDsgfQ0KDQoudWktaWNvbi16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMTJweDsgfQ0KDQoudWktaWNvbi1zZWFyY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLXdyZW5jaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7IH0NCg0KLnVpLWljb24tZ2VhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHg7IH0NCg0KLnVpLWljb24taGVhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTExMnB4OyB9DQoNCi51aS1pY29uLXN0YXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4OyB9DQoNCi51aS1pY29uLWxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTExMnB4OyB9DQoNCi51aS1pY29uLWNhbmNlbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4OyB9DQoNCi51aS1pY29uLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tcGx1c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTEyOHB4OyB9DQoNCi51aS1pY29uLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLW1pbnVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY2xvc2V0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMjhweDsgfQ0KDQoudWktaWNvbi1rZXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWxpZ2h0YnVsYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tc2Npc3NvcnMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWNsaXBib2FyZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY29weSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTI4cHg7IH0NCg0KLnVpLWljb24tY29udGFjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTI4cHg7IH0NCg0KLnVpLWljb24taW1hZ2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4OyB9DQoNCi51aS1pY29uLXZpZGVvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweDsgfQ0KDQoudWktaWNvbi1zY3JpcHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTEyOHB4OyB9DQoNCi51aS1pY29uLWFsZXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH0NCg0KLnVpLWljb24taW5mbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1ub3RpY2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24taGVscCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1idWxsZXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24tcmFkaW8tb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9DQoNCi51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNDRweDsgfQ0KDQoudWktaWNvbi1waW4tdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTQ0cHg7IH0NCg0KLnVpLWljb24tcGluLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4OyB9DQoNCi51aS1pY29uLXBsYXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNjBweDsgfQ0KDQoudWktaWNvbi1wYXVzZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi1zZWVrLW5leHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHg7IH0NCg0KLnVpLWljb24tc2Vlay1wcmV2IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXNlZWstZW5kIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXNlZWstc3RhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH0NCi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi8NCg0KLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfQ0KDQoudWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9DQoNCi51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH0NCg0KLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH0NCg0KLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9DQoNCi51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfQ0KDQoudWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH0NCg0KLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9DQoNCi51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH0NCg0KLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfQ0KDQoudWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9DQoNCi51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfQ0KDQoudWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfQ0KDQoudWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfQ0KDQoudWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9DQoNCi51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9DQoNCi51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9DQoNCi51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH0NCg0KLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfQ0KDQoudWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9DQoNCi51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfQ0KDQoudWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH0NCg0KLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfQ0KDQoNCi8qIE1pc2MgdmlzdWFscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIENvcm5lciByYWRpdXMgKi8NCg0KLnVpLWNvcm5lci1hbGwsIC51aS1jb3JuZXItdG9wLCAudWktY29ybmVyLWxlZnQsIC51aS1jb3JuZXItdGwgew0KICAgIC1raHRtbC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQp9DQoNCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLXRvcCwgLnVpLWNvcm5lci1yaWdodCwgLnVpLWNvcm5lci10ciB7DQogICAgLWtodG1sLWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQp9DQoNCi51aS1jb3JuZXItYWxsLCAudWktY29ybmVyLWJvdHRvbSwgLnVpLWNvcm5lci1sZWZ0LCAudWktY29ybmVyLWJsIHsNCiAgICAta2h0bWwtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHgvKntjb3JuZXJSYWRpdXN9Ki87DQogICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KfQ0KDQoudWktY29ybmVyLWFsbCwgLnVpLWNvcm5lci1ib3R0b20sIC51aS1jb3JuZXItcmlnaHQsIC51aS1jb3JuZXItYnIgew0KICAgIC1raHRtbC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KICAgIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweC8qe2Nvcm5lclJhZGl1c30qLzsNCiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4Lyp7Y29ybmVyUmFkaXVzfSovOw0KfQ0KDQovKiBPdmVybGF5cyAqLw0KDQoudWktd2lkZ2V0LW92ZXJsYXkgew0KICAgIGJhY2tncm91bmQ6ICNhYWFhYWEgLyp7YmdDb2xvck92ZXJsYXl9Ki8gLyp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMV1Z4ZFdsMlBTSkRiMjUwWlc1MExWUjVjR1VpSUdOdmJuUmxiblE5SW5SbGVIUXZhSFJ0YkRzZ1kyaGhjbk5sZEQxcGMyOHRPRGcxT1MweElpOCtEUW84ZEdsMGJHVStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZkR2wwYkdVK0RRbzhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGcwS1BDRXRMUTBLWW05a2VYdHRZWEpuYVc0Nk1EdG1iMjUwTFhOcGVtVTZMamRsYlR0bWIyNTBMV1poYldsc2VUcFdaWEprWVc1aExDQkJjbWxoYkN3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1PMkpoWTJ0bmNtOTFibVE2STBWRlJVVkZSVHQ5RFFwbWFXVnNaSE5sZEh0d1lXUmthVzVuT2pBZ01UVndlQ0F4TUhCNElERTFjSGc3ZlNBTkNtZ3hlMlp2Ym5RdGMybDZaVG95TGpSbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalJrWkdPMzBOQ21neWUyWnZiblF0YzJsNlpUb3hMamRsYlR0dFlYSm5hVzQ2TUR0amIyeHZjam9qUTBNd01EQXdPMzBnRFFwb00zdG1iMjUwTFhOcGVtVTZNUzR5WlcwN2JXRnlaMmx1T2pFd2NIZ2dNQ0F3SURBN1kyOXNiM0k2SXpBd01EQXdNRHQ5SUEwS0kyaGxZV1JsY250M2FXUjBhRG81TmlVN2JXRnlaMmx1T2pBZ01DQXdJREE3Y0dGa1pHbHVaem8yY0hnZ01pVWdObkI0SURJbE8yWnZiblF0Wm1GdGFXeDVPaUowY21WaWRXTm9aWFFnVFZNaUxDQldaWEprWVc1aExDQnpZVzV6TFhObGNtbG1PMk52Ykc5eU9pTkdSa1k3RFFwaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lNMU5UVTFOVFU3ZlEwS0kyTnZiblJsYm5SN2JXRnlaMmx1T2pBZ01DQXdJRElsTzNCdmMybDBhVzl1T25KbGJHRjBhWFpsTzMwTkNpNWpiMjUwWlc1MExXTnZiblJoYVc1bGNudGlZV05yWjNKdmRXNWtPaU5HUmtZN2QybGtkR2c2T1RZbE8yMWhjbWRwYmkxMGIzQTZPSEI0TzNCaFpHUnBibWM2TVRCd2VEdHdiM05wZEdsdmJqcHlaV3hoZEdsMlpUdDlEUW90TFQ0TkNqd3ZjM1I1YkdVK0RRbzhMMmhsWVdRK0RRbzhZbTlrZVQ0TkNqeGthWFlnYVdROUltaGxZV1JsY2lJK1BHZ3hQbE5sY25abGNpQkZjbkp2Y2p3dmFERStQQzlrYVhZK0RRbzhaR2wySUdsa1BTSmpiMjUwWlc1MElqNE5DaUE4WkdsMklHTnNZWE56UFNKamIyNTBaVzUwTFdOdmJuUmhhVzVsY2lJK1BHWnBaV3hrYzJWMFBnMEtJQ0E4YURJK05EQTBJQzBnUm1sc1pTQnZjaUJrYVhKbFkzUnZjbmtnYm05MElHWnZkVzVrTGp3dmFESStEUW9nSUR4b016NVVhR1VnY21WemIzVnlZMlVnZVc5MUlHRnlaU0JzYjI5cmFXNW5JR1p2Y2lCdGFXZG9kQ0JvWVhabElHSmxaVzRnY21WdGIzWmxaQ3dnYUdGa0lHbDBjeUJ1WVcxbElHTm9ZVzVuWldRc0lHOXlJR2x6SUhSbGJYQnZjbUZ5YVd4NUlIVnVZWFpoYVd4aFlteGxMand2YURNK0RRb2dQQzltYVdWc1pITmxkRDQ4TDJScGRqNE5Dand2WkdsMlBnMEtQQzlpYjJSNVBnMEtQQzlvZEcxc1BnMEspKi8gLyp7YmdJbWdVcmxPdmVybGF5fSovIDUwJSAvKntiZ092ZXJsYXlYUG9zfSovIDUwJSAvKntiZ092ZXJsYXlZUG9zfSovIHJlcGVhdC14Lyp7YmdPdmVybGF5UmVwZWF0fSovOw0KICAgIGZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCkvKntvcGFjaXR5T3ZlcmxheX0qLzsNCiAgICBvcGFjaXR5OiAuMzsNCn0NCg0KLnVpLXdpZGdldC1zaGFkb3cgew0KICAgIC1raHRtbC1ib3JkZXItcmFkaXVzOiA4cHgvKntjb3JuZXJSYWRpdXNTaGFkb3d9Ki87DQogICAgLW1vei1ib3JkZXItcmFkaXVzOiA4cHgvKntjb3JuZXJSYWRpdXNTaGFkb3d9Ki87DQogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA4cHgvKntjb3JuZXJSYWRpdXNTaGFkb3d9Ki87DQogICAgYmFja2dyb3VuZDogI2FhYWFhYSAvKntiZ0NvbG9yU2hhZG93fSovIC8qdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQQ0ZFVDBOVVdWQkZJR2gwYld3Z1VGVkNURWxESUNJdEx5OVhNME12TDBSVVJDQllTRlJOVENBeExqQWdVM1J5YVdOMEx5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTDFSU0wzaG9kRzFzTVM5RVZFUXZlR2gwYld3eExYTjBjbWxqZEM1a2RHUWlQZzBLUEdoMGJXd2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUdoMGJXd2lQZzBLUEdobFlXUStEUW84YldWMFlTQm9kSFJ3TFdWeGRXbDJQU0pEYjI1MFpXNTBMVlI1Y0dVaUlHTnZiblJsYm5ROUluUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMXBjMjh0T0RnMU9TMHhJaTgrRFFvOGRHbDBiR1UrTkRBMElDMGdSbWxzWlNCdmNpQmthWEpsWTNSdmNua2dibTkwSUdadmRXNWtMand2ZEdsMGJHVStEUW84YzNSNWJHVWdkSGx3WlQwaWRHVjRkQzlqYzNNaVBnMEtQQ0V0TFEwS1ltOWtlWHR0WVhKbmFXNDZNRHRtYjI1MExYTnBlbVU2TGpkbGJUdG1iMjUwTFdaaGJXbHNlVHBXWlhKa1lXNWhMQ0JCY21saGJDd2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtTzJKaFkydG5jbTkxYm1RNkkwVkZSVVZGUlR0OURRcG1hV1ZzWkhObGRIdHdZV1JrYVc1bk9qQWdNVFZ3ZUNBeE1IQjRJREUxY0hnN2ZTQU5DbWd4ZTJadmJuUXRjMmw2WlRveUxqUmxiVHR0WVhKbmFXNDZNRHRqYjJ4dmNqb2pSa1pHTzMwTkNtZ3llMlp2Ym5RdGMybDZaVG94TGpkbGJUdHRZWEpuYVc0Nk1EdGpiMnh2Y2pvalEwTXdNREF3TzMwZ0RRcG9NM3RtYjI1MExYTnBlbVU2TVM0eVpXMDdiV0Z5WjJsdU9qRXdjSGdnTUNBd0lEQTdZMjlzYjNJNkl6QXdNREF3TUR0OUlBMEtJMmhsWVdSbGNudDNhV1IwYURvNU5pVTdiV0Z5WjJsdU9qQWdNQ0F3SURBN2NHRmtaR2x1WnpvMmNIZ2dNaVVnTm5CNElESWxPMlp2Ym5RdFptRnRhV3g1T2lKMGNtVmlkV05vWlhRZ1RWTWlMQ0JXWlhKa1lXNWhMQ0J6WVc1ekxYTmxjbWxtTzJOdmJHOXlPaU5HUmtZN0RRcGlZV05yWjNKdmRXNWtMV052Ykc5eU9pTTFOVFUxTlRVN2ZRMEtJMk52Ym5SbGJuUjdiV0Z5WjJsdU9qQWdNQ0F3SURJbE8zQnZjMmwwYVc5dU9uSmxiR0YwYVhabE8zME5DaTVqYjI1MFpXNTBMV052Ym5SaGFXNWxjbnRpWVdOclozSnZkVzVrT2lOR1JrWTdkMmxrZEdnNk9UWWxPMjFoY21kcGJpMTBiM0E2T0hCNE8zQmhaR1JwYm1jNk1UQndlRHR3YjNOcGRHbHZianB5Wld4aGRHbDJaVHQ5RFFvdExUNE5Dand2YzNSNWJHVStEUW84TDJobFlXUStEUW84WW05a2VUNE5DanhrYVhZZ2FXUTlJbWhsWVdSbGNpSStQR2d4UGxObGNuWmxjaUJGY25KdmNqd3ZhREUrUEM5a2FYWStEUW84WkdsMklHbGtQU0pqYjI1MFpXNTBJajROQ2lBOFpHbDJJR05zWVhOelBTSmpiMjUwWlc1MExXTnZiblJoYVc1bGNpSStQR1pwWld4a2MyVjBQZzBLSUNBOGFESStOREEwSUMwZ1JtbHNaU0J2Y2lCa2FYSmxZM1J2Y25rZ2JtOTBJR1p2ZFc1a0xqd3ZhREkrRFFvZ0lEeG9NejVVYUdVZ2NtVnpiM1Z5WTJVZ2VXOTFJR0Z5WlNCc2IyOXJhVzVuSUdadmNpQnRhV2RvZENCb1lYWmxJR0psWlc0Z2NtVnRiM1psWkN3Z2FHRmtJR2wwY3lCdVlXMWxJR05vWVc1blpXUXNJRzl5SUdseklIUmxiWEJ2Y21GeWFXeDVJSFZ1WVhaaGFXeGhZbXhsTGp3dmFETStEUW9nUEM5bWFXVnNaSE5sZEQ0OEwyUnBkajROQ2p3dlpHbDJQZzBLUEM5aWIyUjVQZzBLUEM5b2RHMXNQZzBLKSovIC8qe2JnSW1nVXJsU2hhZG93fSovIDUwJSAvKntiZ1NoYWRvd1hQb3N9Ki8gNTAlIC8qe2JnU2hhZG93WVBvc30qLyByZXBlYXQteC8qe2JnU2hhZG93UmVwZWF0fSovOw0KICAgIGJvcmRlci1yYWRpdXM6IDhweC8qe2Nvcm5lclJhZGl1c1NoYWRvd30qLzsNCiAgICBmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApLyp7b3BhY2l0eVNoYWRvd30qLzsNCiAgICBtYXJnaW46IC04cHggLyp7b2Zmc2V0VG9wU2hhZG93fSovIDAgMCAtOHB4Lyp7b2Zmc2V0TGVmdFNoYWRvd30qLzsNCiAgICBvcGFjaXR5OiAuMzsNCiAgICBwYWRkaW5nOiA4cHgvKnt0aGlja25lc3NTaGFkb3d9Ki87DQp9DQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQoudWktbXVsdGlzZWxlY3QgeyBwYWRkaW5nOjJweCAwIDJweCA0cHg7IHRleHQtYWxpZ246bGVmdCB9Ci51aS1tdWx0aXNlbGVjdCBzcGFuLnVpLWljb24geyBmbG9hdDpyaWdodCB9Ci51aS1tdWx0aXNlbGVjdC1zaW5nbGUgLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgaW5wdXQgeyBwb3NpdGlvbjphYnNvbHV0ZSAhaW1wb3J0YW50OyB0b3A6IGF1dG8gIWltcG9ydGFudDsgbGVmdDotOTk5OXB4OyB9Ci51aS1tdWx0aXNlbGVjdC1zaW5nbGUgLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgbGFiZWwgeyBwYWRkaW5nOjVweCAhaW1wb3J0YW50IH0KCi51aS1tdWx0aXNlbGVjdC1oZWFkZXIgeyBtYXJnaW4tYm90dG9tOjNweDsgcGFkZGluZzozcHggMCAzcHggNHB4IH0KLnVpLW11bHRpc2VsZWN0LWhlYWRlciB1bCB7IGZvbnQtc2l6ZTowLjllbSB9Ci51aS1tdWx0aXNlbGVjdC1oZWFkZXIgdWwgbGkgeyBmbG9hdDpsZWZ0OyBwYWRkaW5nOjAgMTBweCAwIDAgfQoudWktbXVsdGlzZWxlY3QtaGVhZGVyIGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZSB9Ci51aS1tdWx0aXNlbGVjdC1oZWFkZXIgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgfQoudWktbXVsdGlzZWxlY3QtaGVhZGVyIHNwYW4udWktaWNvbiB7IGZsb2F0OmxlZnQgfQoudWktbXVsdGlzZWxlY3QtaGVhZGVyIGxpLnVpLW11bHRpc2VsZWN0LWNsb3NlIHsgZmxvYXQ6cmlnaHQ7IHRleHQtYWxpZ246cmlnaHQ7IHBhZGRpbmctcmlnaHQ6MCB9CgoudWktbXVsdGlzZWxlY3QtbWVudSB7IGRpc3BsYXk6bm9uZTsgcGFkZGluZzozcHg7IHBvc2l0aW9uOmFic29sdXRlOyB6LWluZGV4OjEwMDAwOyB0ZXh0LWFsaWduOiBsZWZ0IH0KLnVpLW11bHRpc2VsZWN0LWNoZWNrYm94ZXMgeyBwb3NpdGlvbjpyZWxhdGl2ZSAvKiBmaXhlcyBidWcgaW4gSUU2LzcgKi87IG92ZXJmbG93LXk6YXV0byB9Ci51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxhYmVsIHsgY3Vyc29yOmRlZmF1bHQ7IGRpc3BsYXk6YmxvY2s7IGJvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7IHBhZGRpbmc6M3B4IDFweCB9Ci51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxhYmVsIGlucHV0IHsgcG9zaXRpb246cmVsYXRpdmU7IHRvcDoxcHggfQoudWktbXVsdGlzZWxlY3QtY2hlY2tib3hlcyBsaSB7IGNsZWFyOmJvdGg7IGZvbnQtc2l6ZTowLjllbTsgcGFkZGluZy1yaWdodDozcHggfQoudWktbXVsdGlzZWxlY3QtY2hlY2tib3hlcyBsaS51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCB7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXdlaWdodDpib2xkOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCB9Ci51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxpLnVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsIGEgeyBkaXNwbGF5OmJsb2NrOyBwYWRkaW5nOjNweDsgbWFyZ2luOjFweCAwOyB0ZXh0LWRlY29yYXRpb246bm9uZSB9CgovKiByZW1vdmUgbGFiZWwgYm9yZGVycyBpbiBJRTYgYmVjYXVzZSBJRTYgZG9lcyBub3Qgc3VwcG9ydCB0cmFuc3BhcmVuY3kgKi8KKiBodG1sIC51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxhYmVsIHsgYm9yZGVyOm5vbmUgfQoNCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCi51aS1tdWx0aXNlbGVjdC1oYXNmaWx0ZXIgdWwgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjJweCB9Ci51aS1tdWx0aXNlbGVjdC1maWx0ZXIgeyBmbG9hdDpsZWZ0OyBtYXJnaW4tcmlnaHQ6MTBweDsgZm9udC1zaXplOjExcHggfQoudWktbXVsdGlzZWxlY3QtZmlsdGVyIGlucHV0IHsgd2lkdGg6MTAwcHg7IGZvbnQtc2l6ZToxMHB4OyBtYXJnaW4tbGVmdDo1cHg7IGhlaWdodDoxNXB4OyBwYWRkaW5nOjJweDsgYm9yZGVyOjFweCBzb2xpZCAjMjkyOTI5OyAtd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOyAtd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7IH0KDQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQppbWcgew0KCWJvcmRlcjogMDsNCn0NCnAgew0KCWxpbmUtaGVpZ2h0OiAxLjNlbTsNCgltYXJnaW46IDEuM2VtIDA7DQoJcGFkZGluZzogMDsNCgl0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KfQ0KLmJsb2NrIHsNCglkaXNwbGF5OiBibG9jazsNCn0NCmEgew0KCWNvbG9yOiAjZmZmOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCmE6aG92ZXIgew0KCWNvbG9yOiAjMDAwOw0KCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KfQ0KLm1lbnUgew0KCW1hcmdpbjogMTBweCAwcHggMHB4IDE4MHB4DQp9DQouaG9yaXpvbnRhbF9tZW51IHsNCglwYWRkaW5nOiAwcHggMTBweCAwcHggMHB4Ow0KfQ0KLmhvcml6b250YWxfbWVudSB1bCB7DQoJYm9yZGVyOiAwOw0KCWZsb2F0OiBsZWZ0Ow0KCWxpc3Qtc3R5bGU6IG5vbmU7DQoJbWFyZ2luOiAwOw0KCXBhZGRpbmc6IDA7DQoJdGV4dC1hbGlnbjogbGVmdDsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgew0KCWJvcmRlcjogMDsNCglmbG9hdDogbGVmdDsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogMHB4IDEzcHggMTBweCAwcHg7DQp9DQouaG9yaXpvbnRhbF9tZW51IHVsIGxpIGEgew0KCWZsb2F0OiBsZWZ0Ow0KCWZvbnQ6IGJvbGQgMTRweCBhcmlhbDsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogMTBweCAwOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgYTpsaW5rIHsNCgljb2xvcjogIzgyODI4NDsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgYTp2aXNpdGVkIHsNCgljb2xvcjogIzgyODI4NDsNCn0NCi5ob3Jpem9udGFsX21lbnUgdWwgbGkgYTpob3ZlciB7DQoJY29sb3I6ICM2YmIxMTA7DQp9DQouaG9yaXpvbnRhbF9tZW51IHVsIGxpIGEuc2VsZWN0ZWQgew0KCWNvbG9yOiAjMDA0NDc4Ow0KfQ0KLnZlcnRpY2FsX21lbnUgew0KCWZsb2F0OiBsZWZ0Ow0KCWhlaWdodDogYXV0bzsNCgltYXJnaW46IDBweCAwcHggMHB4IDEwcHg7DQoJd2lkdGg6IDI1MHB4Ow0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgew0KCWJvcmRlcjogMDsNCglsaXN0LXN0eWxlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQW9BQUFBS0NBTUFBQUM2N0QrUEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBd0JRVEZSRjdmYjc3UFg3eDk3czh2bjk3L2Y4eXVEdG04TGFvc2JkbmNUYm1zSGFvTVhjeitQdjcvYjh6ZUx1eStEdW9jWGR5ZC90N2ZYN3BNamU4UGo4OGYiKSBJbnNpZGU7DQoJbWFyZ2luOiAwOw0KCXBhZGRpbmc6IDA7DQoJdGV4dC1hbGlnbjogbGVmdDsNCn0NCi52ZXJ0aWNhbF9tZW51IHVsIGxpIHsNCglib3JkZXI6IDA7DQoJbWFyZ2luOiAwOw0KCXBhZGRpbmc6IDVweCAwcHggMHB4IDBweDsNCn0NCi52ZXJ0aWNhbF9tZW51IHVsIGxpIGEgew0KCWZvbnQ6IG5vcm1hbCAxM3B4IGFyaWFsOw0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAwcHggMDsNCgl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoudmVydGljYWxfbWVudSB1bCBsaSBhOmxpbmsgew0KCWNvbG9yOiAjODdhZmNiOw0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgbGkgYTp2aXNpdGVkIHsNCgljb2xvcjogIzg3YWZjYjsNCn0NCi52ZXJ0aWNhbF9tZW51IHVsIGxpLlNlbGVjdGVkIGEgew0KCWNvbG9yOiAjMDA0NDc4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KLnZlcnRpY2FsX21lbnUgdWwgbGkgYTpob3ZlciB7DQoJY29sb3I6ICM2YmIxMTA7DQoJZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQouSGVscEljbyB7DQoJcGFkZGluZy1yaWdodDogNXB4Ow0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgl0b3A6IDRweDsNCn0NCmlucHV0W3JlYWRvbmx5XSwgdGV4dGFyZWFbcmVhZG9ubHldLCBzZWxlY3RbcmVhZG9ubHldDQp7DQogICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwICFpbXBvcnRhbnQ7DQp9DQouaW5mbyB7DQoJYmFja2dyb3VuZDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJNQUFBQVNDQUlBQUFBMmJuSStBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRHNNQUFBN0RBY2R2cUdRQUFBQWFkRVZZZEZOdlpuUjNZWEpsQUZCaGFXNTBMazVGVkNCMk15NDFMakV3TVBSeW9RQUFBb2xKUkVGVU9FK2RrODFyMUVBWXh2Y2tpSmZlUEhrUzZVVXNYcnlJRi84QnBlQkIwWU1YUGFoZ3IySTllQkpQZ2haRVJCIikgbm8tcmVwZWF0IDAgMDsNCgl3aWR0aDogMTlweDsNCgloZWlnaHQ6IDE4cHg7DQoJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgl0b3A6IDRweDsNCn0NCi5kaWFsb2ctbW9kYWwgew0KCWRpc3BsYXk6IG5vbmU7DQp9DQp0YWJsZS5kaXNwbGF5IHRkIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQp9DQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQpib2R5IHsNCiAgICBiYWNrZ3JvdW5kOiB1cmwoImRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwvOWovNEFBUVNrWkpSZ0FCQWdBQVpBQmtBQUQvN0FBUlJIVmphM2tBQVFBRUFBQUFVQUFBLys0QURrRmtiMkpsQUdUQUFBQUFBZi9iQUlRQUFnSUNBZ0lDQWdJQ0FnTUNBZ0lEQkFNQ0FnTUVCUVFFQkFRRUJRWUZCUVVGQlFVR0JnY0hDQWNIQmdrSkNnb0pDUXdNREF3TURBd01EQXdNREF3TURBRURBd01GQkFVSkJnWUpEUXNKQ3cwUERnNE9EZzhQREF3TURBd1BEd3dNREF3TURBOE1EQXdNREF3TURBd01EQXdNREEiKSB0b3AgcmVwZWF0LXg7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzliYzJkYTsNCiAgICBjb2xvcjogIzY0NjQ2NDsNCiAgICBmb250LWZhbWlseTogdGFob21hLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmOw0KfQ0KDQouY2xlYXIgeyBjbGVhcjogYm90aDsgfQ0KDQouaGlkZGVuLCAuaGlkZGVuU2VjdGlvbiB7DQogICAgZGlzcGxheTogbm9uZTsNCiAgICB2aXNpYmlsaXR5OiBoaWRkZW47DQp9DQoNCi5sYXlvdXRNYWluIHsNCiAgICBtYXJnaW46IDBweCBhdXRvOw0KICAgIHBhZGRpbmc6IDVweCA1cHggNXB4IDVweDsNCiAgICB3aWR0aDogOTAwcHg7DQp9DQoNCi5sYXlvdXRSb3cgeyBtYXJnaW4tYm90dG9tOiA1cHg7IH0NCg0KLmNhcHRpb24geyAvKndpZHRoOiAxMDAlOyBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggYmxhY2s7Ki8gfQ0KDQoubm9jYXB0aW9uID4gLmNhcHRpb24geyBib3JkZXI6IDBweCAhaW1wb3J0YW50OyB9DQoNCi5ub2NhcHRpb24gPiAuY2FwdGlvbiBzcGFuIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCg0KLmNhcHRpb24gLnRpdGxlIHsgcGFkZGluZy1sZWZ0OiA1cHg7IH0NCg0KLmNvbHVtbnMgew0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBtYXJnaW46IDBweDsNCiAgICBwYWRkaW5nOiAwcHg7DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi5jb2x1bW4gew0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBtYXJnaW46IDBweDsNCiAgICBwYWRkaW5nOiAwcHg7DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi5jZWxsIHsgbWFyZ2luOiA1cHggMCA1cHggNXB4OyB9DQoNCi50ZXh0Qm94IHsgd2lkdGg6IDE2MHB4OyB9DQoNCi5kYXRlcGlja2VyLCAuZGF0ZXBpY2tlcklTTyB7IHdpZHRoOiAxNjBweDsgfQ0KDQoudGltZSB7IHdpZHRoOiAxNjBweDsgfQ0KDQouZGF0ZXRpbWUgeyB3aWR0aDogMTYwcHg7IH0NCg0KLmRhdGVyYW5nZXBpY2tlciB7IHdpZHRoOiAxNjBweDsgfQ0KDQouY2hlY2tCb3hMaXN0IHNwYW4geyBkaXNwbGF5OiBibG9jazsgfQ0KDQoucmFkaW9CdXR0b25MaXN0IHNwYW4geyBkaXNwbGF5OiBibG9jazsgfQ0KDQoucmFkaW9CdXR0b25MaXN0IGlucHV0IHsgd2lkdGg6IDEwcHg7IH0NCg0KLmNvbWJvQm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5yZW1vdGVDb21ib0JveCB7IHdpZHRoOiAxNjZweDsgfQ0KDQoucmVtb3RlTG9va3VwIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5sb29rdXBDb25maWd1cmF0aW9uIHsgZGlzcGxheTpub25lOyB9DQoNCi5tdWx0aUNvbWJvYm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5saXN0Qm94IHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5idXR0b24geyBmb250LXNpemU6IDAuNTVlbSAhaW1wb3J0YW50OyB9DQoNCi5oaWVyYXJjaGljYWxUcmVlIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5jaG9zZW50cmVlIHsgd2lkdGg6IDE2NnB4OyB9DQoNCi5yYWRpb0J1dHRvbkxhYmVsLCAuY2hlY2tCb3hMYWJlbCwgLm9wdGlvbkxhYmVsIHsNCiAgICBmb250LXNpemU6IDAuNzVlbTsNCiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7DQp9DQoNCi5maWVsZExhYmVsIHsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBmb250LWZhbWlseTogYXJpYWw7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbGluZS1oZWlnaHQ6IDI1cHg7DQogICAgbWFyZ2luOiAwcHggMThweCAwcHggMHB4Ow0KICAgIHBhZGRpbmc6IDA7DQogICAgd2lkdGg6IDE5MHB4Ow0KfQ0KDQoudGV4dEFyZWEgeyBmb250LWZhbWlseTogYXJpYWw7ICBvdmVyZmxvdzphdXRvOyB9DQovKiB2w71uaW1rYSBwcmUgRmlyZWZveCAqLw0KDQpALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgeyAudGV4dEFyZWEgeyBmb250LXNpemU6IDExMiU7IH0gfQ0KDQoubGFiZWwgew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbDsNCiAgICBmb250LXNpemU6IDAuNzVlbTsNCiAgICBtYXJnaW46IDA7DQogICAgcGFkZGluZzogMDsNCn0NCg0KLmZpZWxkQ29udGVudCB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KICAgIG1hcmdpbjogMHB4Ow0KICAgIHBhZGRpbmc6IDBweDsNCiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KfQ0KDQouZmllbGRJbmZvIHsNCiAgICBsZWZ0OiAwcHg7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogMHB4Ow0KfQ0KDQojcmVwZXRpdGlvbkNvbW1hbmRzIHsNCiAgICBtYXJnaW46IDVweDsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCi5hZGRSZW1vdmVTZWN0aW9uIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KfQ0KDQoucmVtb3ZlU2VjdGlvbiB7IGRpc3BsYXk6IG5vbmU7IH0NCg0KZmllbGRzZXQgew0KICAgIGJvcmRlcjogMDsNCiAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgcGFkZGluZzogMDsNCn0NCg0Kc2VsZWN0LnRleHQgew0KICAgIG1hcmdpbi1ib3R0b206IDEycHg7DQogICAgcGFkZGluZzogLjRlbTsNCiAgICB3aWR0aDogOTUlOw0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIHsNCiAgICBib3JkZXI6IDJweCBzb2xpZCByZWQgIWltcG9ydGFudDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIGZvbnQtc2l6ZTogMC43NWVtOw0KICAgIG1hcmdpbjogMHB4IGF1dG87DQogICAgcGFkZGluZzogNXB4Ow0KICAgIHdpZHRoOiA5MDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIGxpIHsNCiAgICBjb2xvcjogcmVkOw0KICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCi5lcnJvcnNDb250YWluZXIgbGkgbGFiZWwgeyBjdXJzb3I6IHBvaW50ZXI7IH0NCg0KaW5wdXQuZXJyb3JbdHlwZT10ZXh0XSwNCnRleHRhcmVhLmVycm9yIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCByZWQ7DQogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHJlZDsNCn0NCg0Kc2VsZWN0LmVycm9yIHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9DQoNCmlucHV0LmVycm9yW3R5cGU9cmFkaW9dLA0KaW5wdXQuZXJyb3JbdHlwZT1jaGVja2JveF0gew0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHJlZDsNCiAgICBvdXRsaW5lOiAxcHggc29saWQgcmVkOw0KfQ0KDQppbnB1dC53YXJuaW5nW3R5cGU9dGV4dF0sDQp0ZXh0YXJlYS53YXJuaW5nIHsNCiAgICBib3JkZXI6IDFweCBzb2xpZCBvcmFuZ2U7DQogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIG9yYW5nZTsNCn0NCg0Kc2VsZWN0Lndhcm5pbmcgeyBib3JkZXI6IDFweCBzb2xpZCBvcmFuZ2U7IH0NCg0KaW5wdXQud2FybmluZ1t0eXBlPXJhZGlvXSwNCmlucHV0Lndhcm5pbmdbdHlwZT1jaGVja2JveF0gew0KICAgIGJvcmRlcjogMXB4IHNvbGlkIG9yYW5nZTsNCiAgICBvdXRsaW5lOiAxcHggc29saWQgb3JhbmdlOw0KfQ0KDQouZXJyb3JzQ29udGFpbmVyIGxpIGxhYmVsLndhcm5pbmcgew0KICAgIGNvbG9yOiAjQjM2RjAwOw0KCS8qY29sb3I6IG9yYW5nZTsqLw0KICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgICBwYWRkaW5nOiAwcHg7DQp9DQoNCmVtIHsNCiAgICBjb2xvcjogcmVkOw0KICAgIGZvbnQtc2l6ZTogMC44NWVtOw0KICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsNCiAgICBsaW5lLWhlaWdodDogMTZweDsNCn0NCg0KLmFycm93IHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHJpZ2h0OiAycHg7DQogICAgdG9wOiAycHg7DQp9DQoNCi5pbmZvSWNvbiB7IGZsb2F0OiBsZWZ0OyB9DQoNCi50YWJsZUZpbHRlciB7IHBhZGRpbmctYm90dG9tOiA0cHg7IH0NCg0KLnRhYmxlRmlsdGVyVGV4dCB7DQogICAgbWFyZ2luLXJpZ2h0OiA0cHg7DQogICAgd2lkdGg6IDE2MHB4Ow0KfQ0KDQp0YWJsZS5kaXNwbGF5IHsNCiAgICBjbGVhcjogYm90aDsNCiAgICBtYXJnaW46IDAgYXV0bzsNCiAgICB3aWR0aDogMTAwJTsNCn0NCg0KdGFibGUuZGlzcGxheSB0ci5ldmVuLnJvd19zZWxlY3RlZCB0ZCB7IGJhY2tncm91bmQtY29sb3I6ICNCMEJFRDk7IH0NCg0KdGFibGUuZGlzcGxheSB0ci5vZGQucm93X3NlbGVjdGVkIHRkIHsgYmFja2dyb3VuZC1jb2xvcjogIzlGQUZEMTsgfQ0KDQp0YWJsZS5kaXNwbGF5IHRoZWFkIHRoIHNwYW4geyBmbG9hdDogcmlnaHQ7IH0NCg0KLmRhdGFUYWJsZXNfZmlsdGVyIHsgcGFkZGluZzogMTBweCAwIDAgOHB4OyB9DQoNCi5kYXRhVGFibGVzX2luZm8gew0KICAgIGZsb2F0OiBsZWZ0Ow0KICAgIHdpZHRoOiA2MCU7DQp9DQoNCi5kYXRhVGFibGVzX3BhZ2luYXRlIHsNCiAgICBmbG9hdDogcmlnaHQ7DQogICAgdGV4dC1hbGlnbjogcmlnaHQ7DQogICAgd2lkdGg6IDQ0cHg7DQogICAgd2lkdGg6IDUwcHg7DQp9DQovKiBNYWluIGNzcyBlbmQgKi8NCi8qIGpxdWVyeSBjdXN0b20gc3R5bGVzIHN0YXJ0ICovDQoNCmRpdi51aS1kYXRlcGlja2VyIHsgZm9udC1zaXplOiAwLjgzZW07IH0NCg0KLnVpLWRpYWxvZyB7DQogICAgZm9udC1zaXplOiAwLjdlbTsNCiAgICBwYWRkaW5nOiAuM2VtOw0KfQ0KLyoganF1ZXJ5IGN1c3RvbSBzdHlsZXMgZW5kICovDQoNCnRhYmxlLmZvcm1zIHsgbWFyZ2luOiAwcHggMHB4IDVweCAwcHg7IH0NCg0KdGFibGUuZm9ybXMgdGggeyB0ZXh0LWFsaWduOiBsZWZ0OyB9DQoNCi50ZXh0bGVmdCB7IHRleHQtYWxpZ246IGxlZnQ7IH0NCg0KLnRleHRjZW50ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCg0KLnRleHRBcmVhT25lUm93IHsNCiAgICBoZWlnaHQ6IDE5cHg7DQogICAgd2lkdGg6IDgwNnB4Ow0KfQ0KDQouc3RhdHVzRGlhbG9nIGltZyB7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgbWFyZ2luOiAxNXB4IGF1dG87DQp9DQoNCi5zdGF0dXNEaWFsb2cgLnN0YXR1c01lc3NhZ2UgeyBmb250LXdlaWdodDogYm9sZDsgfQ0KDQoubm9zY3JpcHQgew0KICAgIGNvbG9yOiBSZWQ7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouaGVhZGVyY29ycmVjdGlvbiB7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbWFyZ2luOiAwcHg7DQp9DQoNCi5maWVsZFZpc3VhbGl6YXRpb24geyAgICANCiAgICBmb250LWZhbWlseTogYXJpYWw7DQogICAgZm9udC1zaXplOiAwLjc1ZW07DQogICAgbWFyZ2luOiAwcHg7DQogICAgcGFkZGluZzogMHB4OyANCn0NCg0KLndvcmR3cmFwIHsgDQogICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgICAgLyogQ1NTMyAqLyAgIA0KICAgd2hpdGUtc3BhY2U6IC1tb3otcHJlLXdyYXA7IC8qIEZpcmVmb3ggKi8gICAgDQogICB3aGl0ZS1zcGFjZTogLXByZS13cmFwOyAgICAgLyogT3BlcmEgPDcgKi8gICANCiAgIHdoaXRlLXNwYWNlOiAtby1wcmUtd3JhcDsgICAvKiBPcGVyYSA3ICovICAgIA0KICAgd29yZC13cmFwOiBicmVhay13b3JkOyAgICAgIC8qIElFICovDQp9DQoNCi5kYXRlLXJhbmdlLXNlbGVjdGVkID4gLnVpLXN0YXRlLWFjdGl2ZSwNCi5kYXRlLXJhbmdlLXNlbGVjdGVkID4gLnVpLXN0YXRlLWRlZmF1bHQgew0KICAgYmFja2dyb3VuZDogbm9uZTsNCiAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0c3RlZWxibHVlOw0KfQ0KDQoudWktd2lkZ2V0LW92ZXJsYXkgew0KICAgICAgIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50Ow0KfQ0KDQouY2xvc2VCdXR0b24gew0KICAgIGN1cnNvcjogcG9pbnRlcjsgIA0KfQ0KDQoud2l0aEhlYWRlciB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHRvcDogMnB4Ow0KICAgIHJpZ2h0OiAxNXB4Ow0KfQ0KDQoubm9IZWFkZXIgew0KICAgIGZsb2F0OiByaWdodDsNCn0NCg0KLmxvb2t1cGJ1dHRvbiB7DQogICAgbWFyZ2luLWxlZnQgOjJweDsNCn0NCg0KLkxvb2t1cERldGFpbEluZm8gew0KfQ0KDQoubG9va3VwQ29tcG9uZW50SWQgew0KfQ0KDQoubG9va3VwQ29tcG9uZW50TmFtZSB7DQp9DQoNCi5maWVsZElkIHsNCn0NCg0KLkxvb2t1cERldGFpbCB7DQp9DQoNCi5Mb29rdXBEZXRhaWxJbmZvVGV4dCB7DQp9DQoNCi5Mb29rdXBGb3JtIHsNCn0NCg0KLkZpbHRlckJ1dHRvbiB7DQp9DQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQoudHJlZXdyYXBwZXIgew0KICBwYWRkaW5nOjNweDsNCiAgbWFyZ2luLXRvcDogMnB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCAjOTk5Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KfQ0KDQoudHJlZXNlbGVjdCB7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQogIGZvbnQ6OTAlIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogIGNvbG9yOiM1NTU7DQogIGxpbmUtaGVpZ2h0OjE1MCU7DQogIHRleHQtYWxpZ246bGVmdDsNCn0NCg0KLnRyZWVzZWxlY3QgYSB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQogIGNvbG9yOiMwNTdmYWM7DQp9DQoNCi50cmVlc2VsZWN0IGE6aG92ZXJ7DQogIHRleHQtZGVjb3JhdGlvbjpub25lOw0KICBjb2xvcjojOTk5Ow0KfQ0KDQoudHJlZXNlbGVjdCwgLnRyZWVzZWxlY3QgdWwsIC50cmVlc2VsZWN0IC50cmVlbm9kZSB7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQogIGxpc3Qtc3R5bGU6bm9uZTsNCn0NCg0KLnRyZWVzZWxlY3QgdWwgew0KICBkaXNwbGF5Om5vbmU7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSB7DQogIGxpbmUtaGVpZ2h0OiAyNHB4Ow0KICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZjsNCiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZmZmOw0KICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZmZmOw0KICBwb3NpdGlvbjpyZWxhdGl2ZTsNCiAgd2lkdGg6MTAwJTsNCn0NCg0KLnRyZWVzZWxlY3QgLnRyZWVub2RlIHVsIHVsIHsNCiAgbWFyZ2luOiAwIDE1cHggMCAxNXB4Ow0KfQ0KDQoudHJlZXNlbGVjdCBsaS5ldmVuIHsNCiAgYmFja2dyb3VuZDojZjNmM2YzOw0KfQ0KLnRyZWVzZWxlY3QgbGkub2RkIHsNCiAgYmFja2dyb3VuZDojZjNmM2YzOw0KfQ0KDQoudHJlZXNlbGVjdCAudHJlZW5vZGUgaW5wdXQsIC50cmVlc2VsZWN0IC50cmVlbm9kZSAudHJlZW5vZGUtbm8tc2VsZWN0IHsNCiAgZmxvYXQ6bGVmdDsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIHRvcDozcHg7DQogIHdpZHRoOjEzcHg7DQogIGhlaWdodDoxM3B4Ow0KICBjdXJzb3I6YXV0bzsNCiAgZm9udC1zaXplOjA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kIHsNCiAgZmxvYXQ6bGVmdDsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIHRvcDo0cHg7DQogIHdpZHRoOjEzcHg7DQogIGhlaWdodDoxM3B4Ow0KICBjdXJzb3I6YXV0bzsNCiAgZm9udC1zaXplOjA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlc2VsZWN0LXNlbGVjdC1hbGwgew0KICBmb250LXdlaWdodDogYm9sZDsNCiAgbWFyZ2luLWxlZnQ6IDVweDsNCn0NCg0KLnRyZWVzZWxlY3QgLnRyZWVub2RlIHNwYW4udHJlZXNlbGVjdC1leHBhbmQsIC50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kLmNvbGxhcHNlZCB7DQogIGJhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaERRQU5BSkVBQUZWVlZlZm41Ly8vL3dBQUFDSDVCQUFBQUFBQUxBQUFBQUFOQUEwQUFBSWdqSThveXkzbUlveHRNdURzd2pWY0FIS1AxNGlMSnBnajFiRU1LaVd5VVFBQU93PT0pIG5vLXJlcGVhdCAwIDA7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kLmV4cGFuZGVkIHsNCiAgYmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRFFBTkFKRUFBRlZWVmVmbjUvLy8vd0FBQUNINUJBQUFBQUFBTEFBQUFBQU5BQTBBQUFJYmpJOG95eTNtSW94dDBtV3ZCWnl6VElGU2NIMWsrWnhsd2g0RkFEcz0pIG5vLXJlcGVhdCAwIDA7DQp9DQoNCi50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3ksIC50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3kudHJlZXNlbGVjdC1leHBhbmQuZXhwYW5kZWQsIC50cmVlc2VsZWN0IHNwYW4udHJlZWJ1c3kudHJlZXNlbGVjdC1leHBhbmQuY29sbGFwc2VkICB7DQogIGJhY2tncm91bmQ6dXJsKCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhEUUFOQU9NQUFQLy8vd0FBQUFBQUFJS0Nnbkp5Y3Fpb3FMeTh2TTdPenQ3ZTNwU1VsT2pvNkdob2FQLy8vLy8vLy8vLy8vLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoL2c1QmJHeFFiR0Y1WlhKekxtTnZiUUFoK1FRSkNnQVBBQ3dBQUFBQURRQU5BQUFFSXZESlNhdXRJdXU5UnpFSFltVWVLR0pDR1k3cHQ2THFTWkd1UEhHNGR1MThYMFVBSWZrRUNRb0FEd0FzQUFBQUFBMEFEUUFBQkNMd3lVIikgbm8tcmVwZWF0IDAgMDsNCiAgd2lkdGg6MTZweDsNCiAgaGVpZ2h0OjEwcHg7DQp9DQoNCi50cmVlc2VsZWN0IC50cmVlbm9kZSBzcGFuLnRyZWVzZWxlY3QtZXhwYW5kLnRyZWVidXN5IHsNCiAgdG9wOjVweDsNCn0NCg0KLnRyZWVzZWxlY3QtdGl0bGUgew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIG1hcmdpbi1yaWdodDogMTBweDsNCn0NCg0KLyogXV0+ICovDQo8L3N0eWxlPg0KDQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi8qIDwhW0NEQVRBWyAqLw0KLyogQGdyb3VwIEJhc2UgKi8KLmNoem50cmVlLWNvbnRhaW5lciB7CiAgZm9udC1zaXplOiAxM3B4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgem9vbTogMTsKICAqZGlzcGxheTogaW5saW5lOwp9Ci5jaHpudHJlZS1jb250YWluZXIgLmNoem50cmVlLWRyb3AgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICBib3JkZXItdG9wOiAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDI5cHg7CiAgbGVmdDogMDsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNHB4IDVweCByZ2JhKDAsMCwwLC4xNSk7CiAgLW1vei1ib3gtc2hhZG93ICAgOiAwIDRweCA1cHggcmdiYSgwLDAsMCwuMTUpOwogIC1vLWJveC1zaGFkb3cgICAgIDogMCA0cHggNXB4IHJnYmEoMCwwLDAsLjE1KTsKICBib3gtc2hhZG93ICAgICAgICA6IDAgNHB4IDVweCByZ2JhKDAsMCwwLC4xNSk7CiAgei1pbmRleDogOTk5Owp9Ci8qIEBlbmQgKi8KCi8qIEBncm91cCBTaW5nbGUgQ2hvc2VuICovCi5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zaW5nbGUgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLCAjZWVlZWVlKSwgY29sb3Itc3RvcCgwLjUsIHdoaXRlKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgI2VlZWVlZSAwJSwgd2hpdGUgNTAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZWVlZWVlIDAlLCB3aGl0ZSA1MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUgMCUsI2ZmZmZmZiA1MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlIDAlLCNmZmZmZmYgNTAlKTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nI2VlZWVlZScsIGVuZENvbG9yc3RyPScjZmZmZmZmJyxHcmFkaWVudFR5cGU9MCApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUgMCUsI2ZmZmZmZiA1MCUpOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OwogIC1tb3otYm9yZGVyLXJhZGl1cyAgIDogNHB4OwogIGJvcmRlci1yYWRpdXMgICAgICAgIDogNHB4OwogIC1tb3otYmFja2dyb3VuZC1jbGlwICAgOiBwYWRkaW5nOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kLWNsaXAgICAgICAgIDogcGFkZGluZy1ib3g7CiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICBkaXNwbGF5OiBibG9jazsKICBvdmVyZmxvdzogaGlkZGVuOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGhlaWdodDogMjZweDsKICBsaW5lLWhlaWdodDogMjZweDsKICBwYWRkaW5nOiAwIDAgMCA4cHg7CiAgY29sb3I6ICM0NDQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zaW5nbGUgc3BhbiB7CiAgbWFyZ2luLXJpZ2h0OiAyNnB4OwogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAtby10ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAtbXMtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNpbmdsZSBhYmJyIHsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDI2cHg7CiAgdG9wOiA4cHg7CiAgd2lkdGg6IDEycHg7CiAgaGVpZ2h0OiAxM3B4OwogIGZvbnQtc2l6ZTogMXB4OwogIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3crQ2p4b2RHMXNQZ29nSUR4b1pXRmtQZ29nSUNBZ1BHMWxkR0VnYUhSMGNDMWxjWFZwZGowaVEyOXVkR1Z1ZEMxMGVYQmxJaUJqYjI1MFpXNTBQU0owWlhoMEwyaDBiV3c3SUdOb1lYSnpaWFE5ZFhSbUxUZ2lQZ29nSUNBZ1BHMWxkR0VnYUhSMGNDMWxjWFZwZGowaVEyOXVkR1Z1ZEMxVFpXTjFjbWwwZVMxUWIyeHBZM2tpSUdOdmJuUmxiblE5SW1SbFptRjFiSFF0YzNKaklDZHViMiIpIHJpZ2h0IHRvcCBuby1yZXBlYXQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNpbmdsZSBhYmJyOmhvdmVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAtMTFweDsKfQouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2luZ2xlIGRpdiB7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDsKICAtbW96LWJvcmRlci1yYWRpdXMgICA6IDAgNHB4IDRweCAwOwogIGJvcmRlci1yYWRpdXMgICAgICAgIDogMCA0cHggNHB4IDA7CiAgLW1vei1iYWNrZ3JvdW5kLWNsaXAgICA6IHBhZGRpbmc7CiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIGJhY2tncm91bmQtY2xpcCAgICAgICAgOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kOiAjY2NjOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMCwgI2NjYyksIGNvbG9yLXN0b3AoMC42LCAjZWVlKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgI2NjYyAwJSwgI2VlZSA2MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNjY2MgMCUsICNlZWUgNjAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCAjY2NjIDAlLCAjZWVlIDYwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNjY2NjY2MgMCUsI2VlZWVlZSA2MCUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjY2NjY2NjJywgZW5kQ29sb3JzdHI9JyNlZWVlZWUnLEdyYWRpZW50VHlwZT0wICk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2NjY2NjYyAwJSwjZWVlZWVlIDYwJSk7CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWFhOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMDsKICB0b3A6IDA7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAxOHB4Owp9Ci5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zaW5nbGUgZGl2IGIgewogIGJhY2tncm91bmQ6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3crQ2p4b2RHMXNQZ29nSUR4b1pXRmtQZ29nSUNBZ1BHMWxkR0VnYUhSMGNDMWxjWFZwZGowaVEyOXVkR1Z1ZEMxMGVYQmxJaUJqYjI1MFpXNTBQU0owWlhoMEwyaDBiV3c3SUdOb1lYSnpaWFE5ZFhSbUxUZ2lQZ29nSUNBZ1BHMWxkR0VnYUhSMGNDMWxjWFZwZGowaVEyOXVkR1Z1ZEMxVFpXTjFjbWwwZVMxUWIyeHBZM2tpSUdOdmJuUmxiblE5SW1SbFptRjFiSFF0YzNKaklDZHViMicpIG5vLXJlcGVhdCAwIDFweDsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNlYXJjaCB7CiAgcGFkZGluZzogM3B4IDRweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiAwOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgei1pbmRleDogMTAxMDsKfQouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIGlucHV0W3R5cGU9J3RleHQnXSB7CiAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLjg1LCB3aGl0ZSksIGNvbG9yLXN0b3AoMC45OSwgI2VlZWVlZSkpOwogIGJhY2tncm91bmQ6IC0yMnB4LCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiAtMjJweCwgLW1vei1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgd2hpdGUgODUlLCAjZWVlZWVlIDk5JSk7CiAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgd2hpdGUgODUlLCAjZWVlZWVlIDk5JSk7CiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgODUlLCNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmIDg1JSwjZWVlZWVlIDk5JSk7CiAgbWFyZ2luOiAxcHggMDsKICBwYWRkaW5nOiA0cHggMjBweCA0cHggNXB4OwogIG91dGxpbmU6IDA7CiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEuMmVtOwogIGxpbmUtaGVpZ2h0OiAxLjhlbTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OwogIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87Cn0KCi5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1zZWFyY2gubWFudWFsc2VhcmNoIGlucHV0W3R5cGU9J3RleHQnXSB7CiAgd2lkdGg6IDg1JTsKfQoKLmNoem50cmVlLWNvbnRhaW5lci1zaW5nbGUgLmNoem50cmVlLXNlYXJjaC5tYW51YWxzZWFyY2ggaW5wdXQuY2hvc2VudHJlZS1zZWFyY2gtYnRuIHsKICBwYWRkaW5nOiA1cHggMjBweDsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5jaHpudHJlZS1jb250YWluZXItc2luZ2xlIC5jaHpudHJlZS1kcm9wIHsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4OwogIC1tb3otYm9yZGVyLXJhZGl1cyAgIDogMCAwIDRweCA0cHg7CiAgYm9yZGVyLXJhZGl1cyAgICAgICAgOiAwIDAgNHB4IDRweDsKICAtbW96LWJhY2tncm91bmQtY2xpcCAgIDogcGFkZGluZzsKICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYmFja2dyb3VuZC1jbGlwICAgICAgICA6IHBhZGRpbmctYm94Owp9Ci8qIEBlbmQgKi8KCi5jaHpudHJlZS1jb250YWluZXItc2luZ2xlLW5vc2VhcmNoIC5jaHpudHJlZS1zZWFyY2ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogLTkwMDBweDsKfQoKLyogQGdyb3VwIE11bHRpIENob3NlbiAqLwouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMC44NSwgd2hpdGUpLCBjb2xvci1zdG9wKDAuOTksICNlZWVlZWUpKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiA4NSUsI2VlZWVlZSA5OSUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjZmZmZmZmJywgZW5kQ29sb3JzdHI9JyNlZWVlZWUnLEdyYWRpZW50VHlwZT0wICk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiA4NSUsI2VlZWVlZSA5OSUpOwogIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgY3Vyc29yOiB0ZXh0OwogIG92ZXJmbG93OiBoaWRkZW47CiAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgaGVpZ2h0OiAxJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyBsaSB7CiAgZmxvYXQ6IGxlZnQ7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtZmllbGQgewogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWZpZWxkIGlucHV0W3R5cGU9J3RleHQnXSB7CiAgY29sb3I6ICM2NjY7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICBib3JkZXI6IDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiA1cHg7CiAgbWFyZ2luOiAxcHggMDsKICBvdXRsaW5lOiAwOwogIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAtbW96LWJveC1zaGFkb3cgICA6IG5vbmU7CiAgLW8tYm94LXNoYWRvdyAgICAgOiBub25lOwogIGJveC1zaGFkb3cgICAgICAgIDogbm9uZTsKfQouY2h6bnRyZWUtY29udGFpbmVyLW11bHRpIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtZmllbGQgLmRlZmF1bHQgewogIGNvbG9yOiAjOTk5Owp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1jaG9pY2UgewogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OwogIC1tb3otYm9yZGVyLXJhZGl1cyAgIDogM3B4OwogIGJvcmRlci1yYWRpdXMgICAgICAgIDogM3B4OwogIC1tb3otYmFja2dyb3VuZC1jbGlwICAgOiBwYWRkaW5nOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBiYWNrZ3JvdW5kLWNsaXAgICAgICAgIDogcGFkZGluZy1ib3g7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTRlNDsKICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAsICNlNGU0ZTQpLCBjb2xvci1zdG9wKDAuNywgI2VlZWVlZSkpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNlNGU0ZTQgMCUsICNlZWVlZWUgNzAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZTRlNGU0IDAlLCAjZWVlZWVlIDcwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSwgI2U0ZTRlNCAwJSwgI2VlZWVlZSA3MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZTRlNGU0IDAlLCNlZWVlZWUgNzAlKTsKICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nI2U0ZTRlNCcsIGVuZENvbG9yc3RyPScjZWVlZWVlJyxHcmFkaWVudFR5cGU9MCApOwogIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlNGU0ZTQgMCUsI2VlZWVlZSA3MCUpOwogIGNvbG9yOiAjMzMzOwogIGJvcmRlcjogMXB4IHNvbGlkICNiNGI0YjQ7CiAgbGluZS1oZWlnaHQ6IDEzcHg7CiAgcGFkZGluZzogM3B4IDE5cHggM3B4IDZweDsKICBtYXJnaW46IDNweCAwIDNweCA1cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1jaG9pY2Ugc3BhbiB7CiAgY3Vyc29yOiBkZWZhdWx0Owp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1jaG9pY2UtZm9jdXMgewogIGJhY2tncm91bmQ6ICNkNGQ0ZDQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSAuc2VhcmNoLWNob2ljZS1jbG9zZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAzcHg7CiAgdG9wOiA1cHg7CiAgd2lkdGg6IDEwcHg7CiAgaGVpZ2h0OiAxMHB4OwogIGZvbnQtc2l6ZTogMXB4OwogIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMVyIpIHJpZ2h0IHRvcCBuby1yZXBlYXQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSAuc2VhcmNoLWNob2ljZS1jbG9zZTpob3ZlciB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTExcHg7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZS1mb2N1cyAuc2VhcmNoLWNob2ljZS1jbG9zZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTExcHg7Cn0KLyogQGVuZCAqLwoKLyogQGdyb3VwIFJlc3VsdHMgKi8KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtcmVzdWx0cyB7CiAgbWFyZ2luOiAwIDRweCA0cHggMDsKICBtYXgtaGVpZ2h0OiAxOTBweDsKICBwYWRkaW5nOiAwIDAgMCA0cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICBvdmVyZmxvdy15OiBhdXRvOwp9Ci5jaHpudHJlZS1jb250YWluZXItbXVsdGkgLmNoem50cmVlLXJlc3VsdHMgewogIG1hcmdpbjogLTFweCAwIDA7CiAgcGFkZGluZzogMDsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIGxpIHsKICBkaXNwbGF5OiBub25lOwogIGxpbmUtaGVpZ2h0OiA4MCU7CiAgcGFkZGluZzogN3B4IDdweCA4cHg7CiAgbWFyZ2luOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtcmVzdWx0cyAuYWN0aXZlLXJlc3VsdCB7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGxpc3QtaXRlbTsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5oaWdobGlnaHRlZCB7CiAgYmFja2dyb3VuZDogIzM4NzVkNzsKICBjb2xvcjogI2ZmZjsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIGxpIGVtIHsKICBiYWNrZ3JvdW5kOiAjZmVmZmRlOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQouY2h6bnRyZWUtY29udGFpbmVyIC5jaHpudHJlZS1yZXN1bHRzIC5oaWdobGlnaHRlZCBlbSB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtcmVzdWx0cyAubm8tcmVzdWx0cyB7CiAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKICBkaXNwbGF5OiBsaXN0LWl0ZW07Cn0KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtcmVzdWx0cyAuZ3JvdXAtcmVzdWx0IHsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgY29sb3I6ICM5OTk7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KLmNoem50cmVlLWNvbnRhaW5lciAuY2h6bnRyZWUtcmVzdWx0cyAuZ3JvdXAtb3B0aW9uIHsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1tdWx0aSAuY2h6bnRyZWUtZHJvcCAucmVzdWx0LXNlbGVjdGVkIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qIEBlbmQgKi8KCi8qIEBncm91cCBBY3RpdmUgICovCi5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1zaW5nbGUgewogIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICAtbW96LWJveC1zaGFkb3cgICA6IDAgMCA1cHggcmdiYSgwLDAsMCwuMyk7CiAgLW8tYm94LXNoYWRvdyAgICAgOiAwIDAgNXB4IHJnYmEoMCwwLDAsLjMpOwogIGJveC1zaGFkb3cgICAgICAgIDogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOwp9Ci5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1zaW5nbGUtd2l0aC1kcm9wIHsKICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMCAjZmZmIGluc2V0OwogIC1tb3otYm94LXNoYWRvdyAgIDogMCAxcHggMCAjZmZmIGluc2V0OwogIC1vLWJveC1zaGFkb3cgICAgIDogMCAxcHggMCAjZmZmIGluc2V0OwogIGJveC1zaGFkb3cgICAgICAgIDogMCAxcHggMCAjZmZmIGluc2V0OwogIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLCB3aGl0ZSksIGNvbG9yLXN0b3AoMC41LCAjZWVlZWVlKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgd2hpdGUgMCUsICNlZWVlZWUgNTAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSAwJSwgI2VlZWVlZSA1MCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChib3R0b20sIHdoaXRlIDAlLCAjZWVlZWVlIDUwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgMCUsI2VlZWVlZSA1MCUpOwogIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjZmZmZmZmJywgZW5kQ29sb3JzdHI9JyNlZWVlZWUnLEdyYWRpZW50VHlwZT0wICk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiAwJSwjZWVlZWVlIDUwJSk7CiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIDogMDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IDogMDsKICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDA7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyA6IDA7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7Cn0KLmNoem50cmVlLWNvbnRhaW5lci1hY3RpdmUgLmNoem50cmVlLXNpbmdsZS13aXRoLWRyb3AgZGl2IHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXItbGVmdDogbm9uZTsKfQouY2h6bnRyZWUtY29udGFpbmVyLWFjdGl2ZSAuY2h6bnRyZWUtc2luZ2xlLXdpdGgtZHJvcCBkaXYgYiB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE4cHggMXB4Owp9Ci5jaHpudHJlZS1jb250YWluZXItYWN0aXZlIC5jaHpudHJlZS1jaG9pY2VzIHsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLDAsMCwuMyk7CiAgLW1vei1ib3gtc2hhZG93ICAgOiAwIDAgNXB4IHJnYmEoMCwwLDAsLjMpOwogIC1vLWJveC1zaGFkb3cgICAgIDogMCAwIDVweCByZ2JhKDAsMCwwLC4zKTsKICBib3gtc2hhZG93ICAgICAgICA6IDAgMCA1cHggcmdiYSgwLDAsMCwuMyk7CiAgYm9yZGVyOiAxcHggc29saWQgIzU4OTdmYjsKfQouY2h6bnRyZWUtY29udGFpbmVyLWFjdGl2ZSAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWZpZWxkIGlucHV0W3R5cGU9J3RleHQnXSB7CiAgY29sb3I6ICMxMTEgIWltcG9ydGFudDsKfQovKiBAZW5kICovCgovKiBAZ3JvdXAgRGlzYWJsZWQgU3VwcG9ydCAqLwouY2h6bnRyZWUtZGlzYWJsZWQgewogIGN1cnNvcjogZGVmYXVsdDsKICBvcGFjaXR5OjAuNSAhaW1wb3J0YW50Owp9Ci5jaHpudHJlZS1kaXNhYmxlZCAuY2h6bnRyZWUtc2luZ2xlIHsKICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLmNoem50cmVlLWRpc2FibGVkIC5jaHpudHJlZS1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIC5zZWFyY2gtY2hvaWNlLWNsb3NlIHsKICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi8qIEBncm91cCBSaWdodCB0byBMZWZ0ICovCi5jaHpudHJlZS1ydGwgeyBkaXJlY3Rpb246cnRsO3RleHQtYWxpZ246IHJpZ2h0OyB9Ci5jaHpudHJlZS1ydGwgLmNoem50cmVlLXNpbmdsZSB7IHBhZGRpbmctbGVmdDogMDsgcGFkZGluZy1yaWdodDogOHB4OyB9Ci5jaHpudHJlZS1ydGwgLmNoem50cmVlLXNpbmdsZSBzcGFuIHsgbWFyZ2luLWxlZnQ6IDI2cHg7IG1hcmdpbi1yaWdodDogMDsgfQouY2h6bnRyZWUtcnRsIC5jaHpudHJlZS1zaW5nbGUgZGl2IHsKICBsZWZ0OiAwOyByaWdodDogYXV0bzsKICBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYWFhYTsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4OwogIC1tb3otYm9yZGVyLXJhZGl1cyAgIDogNHB4IDAgMCA0cHg7CiAgYm9yZGVyLXJhZGl1cyAgICAgICAgOiA0cHggMCAwIDRweDsKfQouY2h6bnRyZWUtcnRsIC5jaHpudHJlZS1jaG9pY2VzIGxpIHsgZmxvYXQ6IHJpZ2h0OyB9Ci5jaHpudHJlZS1ydGwgLmNoem50cmVlLWNob2ljZXMgLnNlYXJjaC1jaG9pY2UgeyBwYWRkaW5nOiAzcHggNnB4IDNweCAxOXB4OyBtYXJnaW46IDNweCA1cHggM3B4IDA7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtY2hvaWNlcyAuc2VhcmNoLWNob2ljZSAuc2VhcmNoLWNob2ljZS1jbG9zZSB7IGxlZnQ6IDVweDsgcmlnaHQ6IGF1dG87IGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IHRvcDt9Ci5jaHpudHJlZS1ydGwuY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtcmVzdWx0cyB7IG1hcmdpbi1sZWZ0OiA0cHg7IG1hcmdpbi1yaWdodDogMDsgcGFkZGluZy1sZWZ0OiAwOyBwYWRkaW5nLXJpZ2h0OiA0cHg7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtcmVzdWx0cyAuZ3JvdXAtb3B0aW9uIHsgcGFkZGluZy1sZWZ0OiAwOyBwYWRkaW5nLXJpZ2h0OiAyMHB4OyB9Ci5jaHpudHJlZS1ydGwuY2h6bnRyZWUtY29udGFpbmVyLWFjdGl2ZSAuY2h6bnRyZWUtc2luZ2xlLXdpdGgtZHJvcCBkaXYgeyBib3JkZXItcmlnaHQ6IG5vbmU7IH0KLmNoem50cmVlLXJ0bCAuY2h6bnRyZWUtc2VhcmNoIGlucHV0W3R5cGU9J3RleHQnXSB7CiAgYmFja2dyb3VuZDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsUENGRVQwTlVXVkJGSUdoMGJXd2dVRlZDVEVsRElDSXRMeTlYTTBNdkwwUlVSQ0JZU0ZSTlRDQXhMakFnVTNSeWFXTjBMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMM2hvZEcxc01TOUVWRVF2ZUdoMGJXd3hMWE4wY21samRDNWtkR1FpUGcwS1BHaDBiV3dnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHaDBiV3dpUGcwS1BHaGxZV1ErRFFvOGJXVjBZU0JvZEhSd0xXIikgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAjZmZmZmZmOwogIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMVyIpIG5vLXJlcGVhdCAtMzhweCAtMjJweCwgLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLjg1LCB3aGl0ZSksIGNvbG9yLXN0b3AoMC45OSwgI2VlZWVlZSkpOwogIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMVyIpIG5vLXJlcGVhdCAtMzhweCAtMjJweCwgLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgd2hpdGUgODUlLCAjZWVlZWVlIDk5JSk7CiAgYmFja2dyb3VuZDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsUENGRVQwTlVXVkJGSUdoMGJXd2dVRlZDVEVsRElDSXRMeTlYTTBNdkwwUlVSQ0JZU0ZSTlRDQXhMakFnVTNSeWFXTjBMeTlGVGlJZ0ltaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMM2hvZEcxc01TOUVWRVF2ZUdoMGJXd3hMWE4wY21samRDNWtkR1FpUGcwS1BHaDBiV3dnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHaDBiV3dpUGcwS1BHaGxZV1ErRFFvOGJXVjBZU0JvZEhSd0xXIikgbm8tcmVwZWF0IC0zOHB4IC0yMnB4LCAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCB3aGl0ZSA4NSUsICNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQQ0ZFVDBOVVdWQkZJR2gwYld3Z1VGVkNURWxESUNJdEx5OVhNME12TDBSVVJDQllTRlJOVENBeExqQWdVM1J5YVdOMEx5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTDFSU0wzaG9kRzFzTVM5RVZFUXZlR2gwYld3eExYTjBjbWxqZEM1a2RHUWlQZzBLUEdoMGJXd2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUdoMGJXd2lQZzBLUEdobFlXUStEUW84YldWMFlTQm9kSFJ3TFciKSBuby1yZXBlYXQgLTM4cHggLTIycHgsIC1vLWxpbmVhci1ncmFkaWVudChib3R0b20sIHdoaXRlIDg1JSwgI2VlZWVlZSA5OSUpOwogIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFBDRkVUME5VV1ZCRklHaDBiV3dnVUZWQ1RFbERJQ0l0THk5WE0wTXZMMFJVUkNCWVNGUk5UQ0F4TGpBZ1UzUnlhV04wTHk5RlRpSWdJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTDNob2RHMXNNUzlFVkVRdmVHaDBiV3d4TFhOMGNtbGpkQzVrZEdRaVBnMEtQR2gwYld3Z2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR2gwYld3aVBnMEtQR2hsWVdRK0RRbzhiV1YwWVNCb2RIUndMVyIpIG5vLXJlcGVhdCAtMzhweCAtMjJweCwgLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgODUlLCNlZWVlZWUgOTklKTsKICBiYWNrZ3JvdW5kOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxQQ0ZFVDBOVVdWQkZJR2gwYld3Z1VGVkNURWxESUNJdEx5OVhNME12TDBSVVJDQllTRlJOVENBeExqQWdVM1J5YVdOMEx5OUZUaUlnSW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTDFSU0wzaG9kRzFzTVM5RVZFUXZlR2gwYld3eExYTjBjbWxqZEM1a2RHUWlQZzBLUEdoMGJXd2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUdoMGJXd2lQZzBLUEdobFlXUStEUW84YldWMFlTQm9kSFJ3TFciKSBuby1yZXBlYXQgLTM4cHggLTIycHgsIGxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYgODUlLCNlZWVlZWUgOTklKTsKICBwYWRkaW5nOiA0cHggNXB4IDRweCAyMHB4Owp9Ci8qIEBlbmQgKi8KCi5jaHpudHJlZS1jb250YWluZXIgewogIHdpZHRoOiAxMDAlOwp9CgouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIHsKICBwYWRkaW5nOiAwOwp9CgouY2h6bnRyZWUtY29udGFpbmVyLXNpbmdsZSAuY2h6bnRyZWUtc2VhcmNoIGlucHV0W3R5cGU9J3RleHQnXS5zZWFyY2hpbmcgewogIGJhY2tncm91bmQ6dXJsKCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhEUUFOQU9NQUFQLy8vd0FBQUFBQUFJS0Nnbkp5Y3Fpb3FMeTh2TTdPenQ3ZTNwU1VsT2pvNkdob2FQLy8vLy8vLy8vLy8vLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoL2c1QmJHeFFiR0Y1WlhKekxtTnZiUUFoK1FRSkNnQVBBQ3dBQUFBQURRQU5BQUFFSXZESlNhdXRJdXU5UnpFSFltVWVLR0pDR1k3cHQ2THFTWkd1UEhHNGR1MThYMFVBSWZrRUNRb0FEd0FzQUFBQUFBMEFEUUFBQkNMd3lVIikgbm8tcmVwZWF0IDk5JSAxMnB4ICFpbXBvcnRhbnQ7Cn0KCi5jaHpudHJlZS1zZWFyY2gtcmVzdWx0cyAudHJlZXNlbGVjdC10aXRsZXsKICBtYXJnaW4tbGVmdDogNXB4ICFpbXBvcnRhbnQ7Cn0KDQovKiBdXT4gKi8NCjwvc3R5bGU+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLyogPCFbQ0RBVEFbICovDQpib2R5IHsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnICFpbXBvcnRhbnQgOw0KICAgIGJhY2tncm91bmQgOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50IDsNCn0NCg0KaW5wdXRbcmVhZG9ubHk9InJlYWRvbmx5Il0gew0KICAgIGJhY2tncm91bmQgOiAjZjFmMWYxOw0KfQ0KDQppbnB1dFtkaXNhYmxlZD0iZGlzYWJsZWQiXSwgc2VsZWN0W2Rpc2FibGVkPSJkaXNhYmxlZCJdLCB0ZXh0YXJlYVtkaXNhYmxlZD0iZGlzYWJsZWQiXSB7DQogICAgY29sb3I6ICMwMDAwMDAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQ6ICNmMGYwZjAgIWltcG9ydGFudDsNCn0NCg0KLnRleHRCb3ggew0KICAgIGZvbnQtZmFtaWx5IDogJ09wZW4gU2Fucyc7DQogICAgd2lkdGggOiAxNjBweDsNCiAgICBoZWlnaHQgOiAyNXB4Ow0KICAgIGJvcmRlci1yYWRpdXMgOiAzcHg7DQogICAgYmFja2dyb3VuZCA6ICNmZmZmZmY7DQogICAgYm9yZGVyIDogI2QzZDBjZSBzb2xpZCAxcHg7DQogICAgY29sb3IgOiAjMjIyMjIyOw0KICAgIHBhZGRpbmctbGVmdCA6IDdweDsNCn0NCg0KLmNvbWJvQm94LCAucmVtb3RlQ29tYm9Cb3ggew0KICAgIHdpZHRoIDogMTY2cHg7DQogICAgaGVpZ2h0IDogMjlweDsNCiAgICBib3JkZXItcmFkaXVzIDogM3B4Ow0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmOw0KICAgIGJvcmRlciA6ICNkM2QwY2Ugc29saWQgMXB4Ow0KICAgIGNvbG9yIDogIzIyMjIyMjsNCiAgICBwYWRkaW5nLWxlZnQgOiA0cHg7DQp9DQoNCi50ZXh0QXJlYSB7DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJzsNCiAgICBvdmVyZmxvdyA6IGF1dG87DQogICAgYm9yZGVyLXJhZGl1cyA6IDNweDsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZjsNCiAgICBib3JkZXIgOiAjZDNkMGNlIHNvbGlkIDFweDsNCiAgICBjb2xvciA6ICMyMjIyMjI7DQogICAgcGFkZGluZy1sZWZ0IDogN3B4Ow0KfQ0KDQouZGF0ZXBpY2tlciwgLmRhdGVwaWNrZXJJU08sIC5kYXRldGltZSwgLnRpbWUgew0KICAgIGhlaWdodCA6IDI1cHg7DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJzsNCiAgICB3aWR0aCA6IDE2MHB4Ow0KICAgIGJvcmRlci1yYWRpdXMgOiAzcHg7DQogICAgYmFja2dyb3VuZCA6ICNmZmZmZmY7DQogICAgYm9yZGVyIDogI2QzZDBjZSBzb2xpZCAxcHg7DQogICAgY29sb3IgOiAjMjIyMjIyOw0KICAgIHBhZGRpbmctbGVmdCA6IDdweDsNCn0NCg0KLmZpZWxkTGFiZWwsIC5sYWJlbCB7DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJywgYXJpYWwsIHNhbnMtc2VyaWY7DQogICAgbGluZS1oZWlnaHQ6IDM0cHg7ICANCn0NCg0KZGl2LnVpLWRhdGVwaWNrZXIgew0KICAgIGZvbnQtc2l6ZSA6IDAuODNlbTsNCn0NCg0KLnVpLXdpZGdldC1jb250ZW50IHsNCiAgICBiYWNrZ3JvdW5kIDogNTAlIDUwJSByZXBlYXQteCAjZmZmZmZmOw0KICAgIGJvcmRlciA6ICNkNGQ0ZDQgc29saWQgMnB4Ow0KICAgIGNvbG9yIDogIzRmNGU0ZTsNCiAgICBib3JkZXItcmFkaXVzIDogM3B4Ow0KfQ0KDQoudWktd2lkZ2V0LWNvbnRlbnQgYSwgLnVpLXdpZGdldC1oZWFkZXIgYSB7DQogICAgY29sb3IgOiAjMjIyMjIyOw0KfQ0KDQoudWktd2lkZ2V0LWhlYWRlciB7DQogICAgY3Vyc29yIDogcG9pbnRlcjsNCiAgICBmb250LXNpemUgOiAwLjgwZW07DQogICAgY29sb3IgOiAjNDk0OTQ5Ow0KICAgIGJvcmRlciA6ICNlYWU5ZTggc29saWQgMXB4Ow0KICAgIGJhY2tncm91bmQtY29sb3IgOiAjZWFlOWU4Ow0KICAgIGJvcmRlci1yYWRpdXMgOiAzcHg7DQp9DQoNCi5oZWFkZXJjb3JyZWN0aW9uIHsNCiAgICBmb250LXNpemUgOiAxZW07DQogICAgcGFkZGluZyA6IDZweCAycHggNnB4IDVweDsNCn0NCg0KLnVpLXN0YXRlLWRlZmF1bHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQgew0KICAgIGJhY2tncm91bmQgOiA1MCUgNTAlIHJlcGVhdC14ICNiZDBhMjY7DQogICAgYm9yZGVyIDogI2JkMGEyNiBzb2xpZCAxcHg7DQogICAgY29sb3IgOiAjZmZmZmZmOw0KICAgIGZvbnQtd2VpZ2h0IDogYm9sZDsNCiAgICB0ZXh0LXRyYW5zZm9ybSA6IHVwcGVyY2FzZTsNCiAgICBwYWRkaW5nIDogNHB4IDhweCA0cHggOHB4Ow0KfQ0KDQouZGF0ZXJhbmdlcGlja2VyZGl2IC51aS1zdGF0ZS1kZWZhdWx0IHsNCglwYWRkaW5nIDogMXB4IDJweCAxcHggMnB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5kYXRlcmFuZ2VwaWNrZXJkaXYgLnVpLWRhdGVwaWNrZXIgew0KCXdpZHRoIDogQXV0byAhaW1wb3J0YW50Ow0KICAgIGhlaWdodCA6IEF1dG8gIWltcG9ydGFudDsNCn0NCg0KLmRhdGUtcmFuZ2Utc2VsZWN0ZWQgPiAudWktc3RhdGUtYWN0aXZlLA0KLmRhdGUtcmFuZ2Utc2VsZWN0ZWQgPiAudWktc3RhdGUtZGVmYXVsdCB7DQogICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUFFOUU4ICFpbXBvcnRhbnQ7DQp9DQoNCi51aS1zdGF0ZS1ob3ZlciwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLCAudWktc3RhdGUtZm9jdXMsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyB7DQogICAgYm9yZGVyIDogI2U1MjI0MSBzb2xpZCAxcHg7DQogICAgY29sb3IgOiAjZmZmZmZmOw0KICAgIGZvbnQtd2VpZ2h0IDogYm9sZDsNCn0NCg0KLnVpLXN0YXRlLWhvdmVyIGEsIC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyIHsNCiAgICBjb2xvciA6ICMyMTIxMjE7DQogICAgdGV4dC1kZWNvcmF0aW9uIDogbm9uZTsNCn0NCg0KLnJhZGlvQnV0dG9uTGFiZWwgew0KICAgIGZvbnQtc2l6ZSA6IDAuNzVlbTsNCiAgICB0b3AgOiAtMnB4Ow0KICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7DQogICAgcGFkZGluZy1sZWZ0IDogMTJweDsNCn0NCg0KLmZpZWxkQ29udGVudCBpbnB1dCB7DQogICAgYm9yZGVyLXJhZGl1cyA6IDNweDsNCn0NCg0KLmluZm8gew0KICAgIGJhY2tncm91bmQgOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBU0NBWUFBQUM1RE9WcEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFFblFBQUJKMEFkNW1IM2dBQUFLdVNVUkJWRGhQZFpUZlN4UlJGTWUvTTdNejIreTZxYXViaXYwd0VTVWxzQ0I5MElvUzZjRXk2a1dobnF4SElld2hpVUo2Q1luSVA2QmVndWpIVTJBYS9aQWdJNG9LUTBoRTJVVUxLa3MwZis3TTdzN3MzTzY5N3UiKSAwIDAgbm8tcmVwZWF0Ow0KICAgIHdpZHRoIDogMTlweDsNCiAgICBoZWlnaHQgOiAxOXB4Ow0KICAgIGRpc3BsYXkgOiBpbmxpbmUtYmxvY2s7DQogICAgcG9zaXRpb24gOiByZWxhdGl2ZTsNCiAgICB0b3AgOiA0cHg7DQogICAgbWFyZ2luLWxlZnQgOiA1cHg7DQp9DQoNCi5kaWFsb2ctbW9kYWwgew0KICAgIGRpc3BsYXkgOiBub25lOw0KfQ0KDQp0YWJsZS5kaXNwbGF5IHRkIHsNCiAgICBjdXJzb3IgOiBwb2ludGVyOw0KfQ0KDQouYnV0dG9uOmhvdmVyLCAubG9va3VwYnV0dG9uOmhvdmVyLCAudWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtaG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3IgOiAjZTUyMjQxICFpbXBvcnRhbnQgOw0KfQ0KDQouYWRkUmVtb3ZlU2VjdGlvbiBzcGFuIHsNCiAgICBmb250LXNpemUgOiAxLjFlbSAhaW1wb3J0YW50IDsNCiAgICBmb250LWZhbWlseSA6ICdPcGVuIFNhbnMnLCBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZjsNCn0NCg0KLmFkZFJlbW92ZVNlY3Rpb24gew0KICAgIG1hcmdpbi1yaWdodDogM3B4Ow0KfQ0KDQoudWktd2lkZ2V0LWhlYWRlciBidXR0b24gew0KICAgIGJhY2tncm91bmQtY29sb3IgOiB3aGl0ZSAhaW1wb3J0YW50IDsNCn0NCg0KLnVpLXByaW9yaXR5LXNlY29uZGFyeSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksIC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnkgew0KICAgIG9wYWNpdHkgOiAxOw0KfQ0KDQouY2hlY2tCb3hMaXN0IGxhYmVsIHsNCiAgICBmb250LXNpemUgOiAxZW07DQogICAgZm9udC1mYW1pbHkgOiAnT3BlbiBTYW5zJzsNCiAgICBwYWRkaW5nLWxlZnQgOiAxMHB4Ow0KfQ0KDQouYnV0dG9uIHsNCiAgICBsaW5lLWhlaWdodCA6IDEuNDsNCn0NCg0KI3Nob3dYbWwsICNzYXZlRm9ybSwgI2xvYWRGb3JtLCAjY2xlYXJGb3JtLCAjdmFsaWRhdGVGb3JtLCAjdmFsaWRhdGVGb3JtV2l0aFhzZCwgI3ZhbGlkYXRlRm9ybVdpdGhTZXJ2ZXIsICNwcmludEZvcm0sICNjbG9zZUZvcm0sICNjYW5jZWxGb3JtLCNsb2FkRm9ybVhtbCwgI3NhdmVUb1htbCB7DQogICAgZm9udC1zaXplOiAwLjU1ZW0gIWltcG9ydGFudDsNCn0NCg0KLm9wdGlvbkxhYmVsLCAuY2hlY2tCb3hMYWJlbCB7DQogICAgdG9wIDogLTJweDsNCiAgICBwb3NpdGlvbiA6IHJlbGF0aXZlOw0KfQ0KDQouZmllbGRDb250ZW50IHsNCiAgICBtYXJnaW4tdG9wIDogMnB4Ow0KICAgIG1hcmdpbi1ib3R0b20gOiAycHg7DQogICAgbWluLWhlaWdodDogMzBweDsNCn0NCg0KLmh5cGVyTGluaywgLmNyb3NzTGluayB7DQogICAgY29sb3IgOiAjYmQwYTI2ICFpbXBvcnRhbnQgOw0KICAgIGZvbnQtZmFtaWx5IDogJ09wZW4gU2Fucyc7DQp9DQoNCmlucHV0W3R5cGU9ImZpbGUiXSB7DQogICAgcGFkZGluZyA6IDNweCAwIDAgM3B4Ow0KfQ0KDQppbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIC5sb29rdXBidXR0b24gew0KICAgIHBhZGRpbmcgOiA4cHggMTJweCA4cHggMTJweCAhaW1wb3J0YW50IDsNCiAgICBmb250LXNpemUgOiAwLjc1ZW0gIWltcG9ydGFudCA7DQp9DQoNCi5sb29rdXBidXR0b24gew0KICAgIG1hcmdpbi10b3A6IC00cHg7DQp9DQoNCi5pbmZvSWNvbiB7DQogICAgYmFja2dyb3VuZC1pbWFnZSA6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVhNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZyIpICFpbXBvcnRhbnQgOw0KfQ0KDQojdWktZGF0ZXBpY2tlci1kaXYgew0KICAgIG1pbi13aWR0aCA6IDIwZW07DQogICAgYmFja2dyb3VuZCA6ICNmOWY5Zjk7DQp9DQoNCi51aS10aW1lcGlja2VyLWRpdiAudWktd2lkZ2V0LWhlYWRlciwgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCiAgICBtYXJnaW4gOiAycHggMnB4IDJweCAycHg7DQp9DQoNCi51aS1kYXRlcGlja2VyLWhlYWRlciAudWktaWNvbiB7DQogICAgYmFja2dyb3VuZC1pbWFnZSA6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUR3Q0FNQUFBRFlTVXI1QUFBQTdWQk1WRVhNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZyIpICFpbXBvcnRhbnQgOw0KfQ0KDQpkbCBkdCB7DQogICAgZmxvYXQgOiBsZWZ0Ow0KICAgIG1hcmdpbiA6IDEwcHggMTIwcHggMTBweCAwOw0KfQ0KDQpkbCBkZCB7DQogICAgd2lkdGggOiAxNGVtICFpbXBvcnRhbnQgOw0KICAgIG1hcmdpbiA6IDI1cHggMCAxMHB4IDcwcHg7DQp9DQoNCi51aV90cGlja2VyX3RpbWVfbGFiZWwgew0KICAgIHdpZHRoIDogMmVtICFpbXBvcnRhbnQgOw0KICAgIG1hcmdpbi1yaWdodCA6IDA7DQp9DQoNCi51aV90cGlja2VyX3RpbWUgew0KICAgIGJvcmRlciA6ICNlYWU5ZTggc29saWQgMXB4Ow0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmOw0KICAgIHdpZHRoIDogNGVtICFpbXBvcnRhbnQgOw0KICAgIGhlaWdodCA6IDEuNWVtOw0KICAgIHBhZGRpbmcgOiA1cHggMCA1cHggMTBweDsNCn0NCg0KLnVpX3RwaWNrZXJfdGltZV9sYWJlbCwgLnVpX3RwaWNrZXJfdGltZSwgLnVpX3RwaWNrZXJfaG91cl9sYWJlbCwgLnVpX3RwaWNrZXJfbWludXRlX2xhYmVsIHsNCiAgICBmb250LXNpemUgOiAwLjg1ZW07DQogICAgbWFyZ2luLWJvdHRvbSA6IDdweDsNCn0NCg0KYS51aS1zbGlkZXItaGFuZGxlIHsNCiAgICBwYWRkaW5nIDogMnB4IDAgM3B4IDAgIWltcG9ydGFudCA7DQogICAgbWFyZ2luLXRvcCA6IC00cHg7DQp9DQoNCi51aV90cGlja2VyX2hvdXJfc2xpZGVyLCAudWlfdHBpY2tlcl9taW51dGVfc2xpZGVyIHsNCiAgICBoZWlnaHQgOiA0cHg7DQogICAgYmFja2dyb3VuZCA6ICNjNWM1YzU7DQogICAgYm9yZGVyIDogMDsNCn0NCg0KLnVpLXByaW9yaXR5LXByaW1hcnkgew0KICAgIGJhY2tncm91bmQgOiAjYmQwYTI2ICFpbXBvcnRhbnQgOw0KfQ0KDQoudWktcHJpb3JpdHktc2Vjb25kYXJ5IHsNCiAgICBiYWNrZ3JvdW5kIDogIzQ5NDk0OSAhaW1wb3J0YW50IDsNCn0NCg0KLnVpLXByaW9yaXR5LXNlY29uZGFyeSwgLnVpLXByaW9yaXR5LXByaW1hcnkgew0KICAgIGJvcmRlciA6IDAgIWltcG9ydGFudCA7DQogICAgcGFkZGluZyA6IDhweCAxMnB4IDhweCAxMnB4ICFpbXBvcnRhbnQgOw0KICAgIGZvbnQtc2l6ZSA6IDAuNzBlbSAhaW1wb3J0YW50IDsNCn0NCg0KdGFibGUudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhIHsNCiAgICBiYWNrZ3JvdW5kIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCiAgICBjb2xvciA6ICNiZDBhMjYgIWltcG9ydGFudCA7DQogICAgYm9yZGVyIDogI2VhZTllOCBzb2xpZCAxcHggIWltcG9ydGFudCA7DQp9DQoNCnRhYmxlLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYS51aS1zdGF0ZS1oaWdobGlnaHQgew0KICAgIGNvbG9yIDogIzQ5NDk0OSAhaW1wb3J0YW50IDsNCn0NCg0KdGFibGUudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhOmhvdmVyLCB0YWJsZS51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEudWktc3RhdGUtYWN0aXZlIHsNCiAgICBiYWNrZ3JvdW5kIDogI2UxNWM3MSAhaW1wb3J0YW50IDsNCiAgICBjb2xvciA6ICNmZmZmZmYgIWltcG9ydGFudCA7DQogICAgYm9yZGVyIDogI2JkMGEyNiBzb2xpZCAxcHggIWltcG9ydGFudCA7DQp9DQoNCi51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIsIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIgew0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmICFpbXBvcnRhbnQgOw0KICAgIGJvcmRlciA6ICNmZmZmZmYgc29saWQgMXB4ICFpbXBvcnRhbnQgOw0KICAgIGNvbG9yIDogI2ZmZmZmZiAhaW1wb3J0YW50IDsNCn0NCg0KLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7DQogICAgYm9yZGVyIDogMDsNCn0NCg0KLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyIHsNCiAgICBib3JkZXIgOiAwOw0KICAgIGJhY2tncm91bmQgOiAjYmQwYTI2Ow0KICAgIGNvbG9yIDogI2JkMGEyNjsNCiAgICBwYWRkaW5nIDogNHB4IDhweCA0cHggOHB4Ow0KICAgIHdpZHRoIDogMjBweDsNCiAgICBmbG9hdCA6IHJpZ2h0Ow0KfQ0KDQoubG9va3VwLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyIHsNCiAgICBtYXJnaW4tdG9wIDogLTZweDsNCn0NCg0KLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZS51aS1zdGF0ZS1ob3ZlciB7DQogICAgYmFja2dyb3VuZCA6ICNlOWNlZDIgIWltcG9ydGFudCA7DQp9DQoNCi51aS1kaWFsb2cgew0KICAgIGJvcmRlciA6IDA7DQogICAgYmFja2dyb3VuZCA6ICNiZDBhMjYgIWltcG9ydGFudCA7DQogICAgb3BhY2l0eSA6IDAuOTsNCn0NCg0KLnVpLWRpYWxvZyAuZGlhbG9nLW1vZGFsIHsNCiAgICBtYXJnaW4gOiA1cHg7DQogICAgbWFyZ2luLXRvcCA6IDEwcHg7DQogICAgcGFkZGluZy1sZWZ0IDogN3B4Ow0KICAgIHBhZGRpbmctdG9wIDogMDsNCn0NCg0KLmRpYWxvZy1tb2RhbCBwIHNwYW4gew0KICAgIGNvbG9yIDogI2Y5ZjlmOTsNCiAgICBmb250LXNpemUgOiAxZW0gIWltcG9ydGFudCA7DQp9DQoNCmRpdltsb29rdXBkZXRhaWxdLnVpLWRpYWxvZy1jb250ZW50IHsNCiAgICBjb2xvcjogI2Y5ZjlmOSAhaW1wb3J0YW50Ow0KfQ0KDQouTG9va3VwRGV0YWlsSW5mb1RleHQgeyANCiAgICBjb2xvcjogI2Y5ZjlmOSAhaW1wb3J0YW50Ow0KfQ0KDQoudWktd2lkZ2V0LW92ZXJsYXkgew0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmOw0KfQ0KDQoudWktZGlhbG9nIC51aS13aWRnZXQtY29udGVudCB7DQogICAgYmFja2dyb3VuZCA6IG5vbmU7DQogICAgYm9yZGVyIDogMDsNCn0NCg0KLmxvb2t1cC1kaWFsb2cgew0KICAgIGNvbG9yIDogIzQ5NDk0OSAhaW1wb3J0YW50IDsNCiAgICBib3JkZXIgOiAjZDRkNGQ0IHNvbGlkIDJweDsNCiAgICBiYWNrZ3JvdW5kIDogI2Y5ZjlmOSAhaW1wb3J0YW50IDsNCiAgICBwYWRkaW5nIDogNXB4IDAgNXB4IDEwcHg7DQogICAgb3BhY2l0eSA6IDE7DQp9DQoNCi5sb29rdXAtZGlhbG9nIC51aS1oZWxwZXItY2xlYXJmaXggew0KICAgIGJhY2tncm91bmQgOiAjZjlmOWY5ICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAuZmctYnV0dG9uc2V0IHsNCiAgICB3aWR0aCA6IDEwMHB4Ow0KfQ0KDQoubG9va3VwLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlIHsNCiAgICBjb2xvciA6ICNmOWY5Zjk7DQp9DQoNCi5mZy1idXR0b24gew0KICAgIG1hcmdpbi1sZWZ0IDogM3B4ICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAudWktaWNvbi1jbG9zZXRoaWNrIHsNCiAgICBtYXJnaW4tcmlnaHQgOiA1cHg7DQp9DQoNCi5sb29rdXAtZGlhbG9nIC5mZy10b29sYmFyIHsNCiAgICBib3JkZXIgOiAjZDRkNGQ0IHNvbGlkIDFweDsNCiAgICBiYWNrZ3JvdW5kIDogI2VhZTllOCAhaW1wb3J0YW50IDsNCiAgICBjb2xvciA6ICNiZDBhMjY7DQp9DQoNCi5sb29rdXAtZGlhbG9nIHRhYmxlIHRoIHsNCiAgICBib3JkZXItY29sb3IgOiAjZDRkNGQ0ICFpbXBvcnRhbnQgOw0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmICFpbXBvcnRhbnQgOw0KICAgIGNvbG9yIDogIzQ5NDk0OSAhaW1wb3J0YW50IDsNCn0NCg0KLmZnLXRvb2xiYXIgew0KICAgIGJhY2tncm91bmQgOiAjZmZmZmZmOw0KICAgIHBhZGRpbmcgOiAwOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAuZmctYnV0dG9uIHsNCiAgICBiYWNrZ3JvdW5kIDogbm9uZTsNCiAgICBib3JkZXIgOiAwOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAjRmlsdGVyQnV0dG9uLCAubG9va3VwLWRpYWxvZyAudWktYnV0dG9uLXRleHQgew0KICAgIGZvbnQtc2l6ZSA6IDAuOGVtICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9va3VwLWRpYWxvZyAuZGF0YVRhYmxlc19wcm9jZXNzaW5nIHsNCiAgICBjb2xvciA6ICM0ZjRlNGU7DQp9DQoNCi5sb29rdXAtZGlhbG9nIC51aS1pY29uLCAudWktaWNvbi1jbG9zZXRoaWNrIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlIDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFWE1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnIikgIWltcG9ydGFudCA7DQp9DQoNCi5sb29rdXAtZGlhbG9nIHRoZWFkIHRoLCAubG9va3VwLWRpYWxvZyB0Ym9keSB0ciB7DQogICAgY29sb3IgOiAjYmQwYTI2ICFpbXBvcnRhbnQgOw0KfQ0KDQoubG9hZC1kaWFsb2cgew0KICAgIGNvbG9yIDogIzQ5NDk0OSAhaW1wb3J0YW50IDsNCiAgICBib3JkZXIgOiAjZDRkNGQ0IHNvbGlkIDJweDsNCiAgICBiYWNrZ3JvdW5kIDogI2Y5ZjlmOSAhaW1wb3J0YW50IDsNCiAgICBwYWRkaW5nIDogNXB4IDAgNXB4IDEwcHg7DQogICAgb3BhY2l0eSA6IDE7DQp9DQoNCi5sb2FkLWRpYWxvZyAudWktaWNvbi1jbG9zZXRoaWNrIHsNCiAgICBtYXJnaW4tcmlnaHQgOiA1cHg7DQp9DQoNCi5sb2FkLWRpYWxvZyAudWktaWNvbnsNCiAgICBiYWNrZ3JvdW5kLWltYWdlIDogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRHdDQU1BQUFEWVNVcjVBQUFBN1ZCTVZFWE1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnek1DZ3pNQ2d6TUNnIikgIWltcG9ydGFudCA7DQp9DQoNCi5sb2FkLWRpYWxvZyAudWktaGVscGVyLWNsZWFyZml4IHsNCiAgICBiYWNrZ3JvdW5kIDogI2Y5ZjlmOSAhaW1wb3J0YW50IDsNCn0NCg0KLmxvYWQtZGlhbG9nIC5mZy1idXR0b25zZXQgew0KICAgIHdpZHRoIDogMTAwcHg7DQp9DQoNCi5sb2FkLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlIHsNCiAgICBjb2xvciA6ICNmOWY5Zjk7DQp9DQoNCi5sb2FkLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyIHsNCiAgICBtYXJnaW4tdG9wIDogLTZweDsNCn0NCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQovKiA8IVtDREFUQVsgKi8NCkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdPcGVuIFNhbnMgTGlnaHQnKSwgbG9jYWwoJ09wZW5TYW5zLUxpZ2h0JyksIHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3Mvb3BlbnNhbnMvdjEzL0RYSTFPUkhDcHNRbTNWcDZtWG9hVFluRjV1RmREdHRNTHZtV3VKZGhoZ3MudHRmKSBmb3JtYXQoJ3RydWV0eXBlJyk7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ09wZW4gU2FucycpLCBsb2NhbCgnT3BlblNhbnMnKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9vcGVuc2Fucy92MTMvY0paS2VPdUJybjRrRVJ4cXRhVUgzYUNXY3luZl9jRHhYd0NMeGlpeEcxYy50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgc3JjOiBsb2NhbCgnT3BlbiBTYW5zIFNlbWlib2xkJyksIGxvY2FsKCdPcGVuU2Fucy1TZW1pYm9sZCcpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL29wZW5zYW5zL3YxMy9NVFBfeVNVSkhfYm40OFZCRzhzTlNvbkY1dUZkRHR0TUx2bVd1SmRoaGdzLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdPcGVuIFNhbnMgQm9sZCcpLCBsb2NhbCgnT3BlblNhbnMtQm9sZCcpLCB1cmwoaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbS9zL29wZW5zYW5zL3YxMy9rM2s3MDJaT0tpTEpjM1dWanVwbHpJbkY1dUZkRHR0TUx2bVd1SmRoaGdzLnR0ZikgZm9ybWF0KCd0cnVldHlwZScpOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdPcGVuIFNhbnMgSXRhbGljJyksIGxvY2FsKCdPcGVuU2Fucy1JdGFsaWMnKSwgdXJsKGh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20vcy9vcGVuc2Fucy92MTMveGpBSlhoMzhJMTV3eXBKWHh1R01CcDBFQVZ4dDBHMGJpRW50cDQzUXQ2RS50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTsKfQoNCi8qIF1dPiAqLw0KPC9zdHlsZT4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KLyohIGpRdWVyeSB2MS4xMS4xIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8NCiFmdW5jdGlvbiAoYSwgYikgeyAib2JqZWN0IiA9PSB0eXBlb2YgbW9kdWxlICYmICJvYmplY3QiID09IHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA/IG1vZHVsZS5leHBvcnRzID0gYS5kb2N1bWVudCA/IGIoYSwgITApIDogZnVuY3Rpb24gKGEpIHsgaWYgKCFhLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTsgcmV0dXJuIGIoYSkgfSA6IGIoYSkgfSgidW5kZWZpbmVkIiAhPSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKGEsIGIpIHsNCiAgICB2YXIgYyA9IFtdLCBkID0gYy5zbGljZSwgZSA9IGMuY29uY2F0LCBmID0gYy5wdXNoLCBnID0gYy5pbmRleE9mLCBoID0ge30sIGkgPSBoLnRvU3RyaW5nLCBqID0gaC5oYXNPd25Qcm9wZXJ0eSwgayA9IHt9LCBsID0gIjEuMTEuMSIsIG0gPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gbmV3IG0uZm4uaW5pdChhLCBiKSB9LCBuID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCBvID0gL14tbXMtLywgcCA9IC8tKFtcZGEtel0pL2dpLCBxID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudG9VcHBlckNhc2UoKSB9OyBtLmZuID0gbS5wcm90b3R5cGUgPSB7IGpxdWVyeTogbCwgY29uc3RydWN0b3I6IG0sIHNlbGVjdG9yOiAiIiwgbGVuZ3RoOiAwLCB0b0FycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkLmNhbGwodGhpcykgfSwgZ2V0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCAhPSBhID8gMCA+IGEgPyB0aGlzW2EgKyB0aGlzLmxlbmd0aF0gOiB0aGlzW2FdIDogZC5jYWxsKHRoaXMpIH0sIHB1c2hTdGFjazogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSwgYSk7IHJldHVybiBiLnByZXZPYmplY3QgPSB0aGlzLCBiLmNvbnRleHQgPSB0aGlzLmNvbnRleHQsIGIgfSwgZWFjaDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIG0uZWFjaCh0aGlzLCBhLCBiKSB9LCBtYXA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayhtLm1hcCh0aGlzLCBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gYS5jYWxsKGIsIGMsIGIpIH0pKSB9LCBzbGljZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB9LCBmaXJzdDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lcSgwKSB9LCBsYXN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVxKC0xKSB9LCBlcTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB0aGlzLmxlbmd0aCwgYyA9ICthICsgKDAgPiBhID8gYiA6IDApOyByZXR1cm4gdGhpcy5wdXNoU3RhY2soYyA+PSAwICYmIGIgPiBjID8gW3RoaXNbY11dIDogW10pIH0sIGVuZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCkgfSwgcHVzaDogZiwgc29ydDogYy5zb3J0LCBzcGxpY2U6IGMuc3BsaWNlIH0sIG0uZXh0ZW5kID0gbS5mbi5leHRlbmQgPSBmdW5jdGlvbiAoKSB7IHZhciBhLCBiLCBjLCBkLCBlLCBmLCBnID0gYXJndW1lbnRzWzBdIHx8IHt9LCBoID0gMSwgaSA9IGFyZ3VtZW50cy5sZW5ndGgsIGogPSAhMTsgZm9yICgiYm9vbGVhbiIgPT0gdHlwZW9mIGcgJiYgKGogPSBnLCBnID0gYXJndW1lbnRzW2hdIHx8IHt9LCBoKyspLCAib2JqZWN0IiA9PSB0eXBlb2YgZyB8fCBtLmlzRnVuY3Rpb24oZykgfHwgKGcgPSB7fSksIGggPT09IGkgJiYgKGcgPSB0aGlzLCBoLS0pIDsgaSA+IGg7IGgrKykgaWYgKG51bGwgIT0gKGUgPSBhcmd1bWVudHNbaF0pKSBmb3IgKGQgaW4gZSkgYSA9IGdbZF0sIGMgPSBlW2RdLCBnICE9PSBjICYmIChqICYmIGMgJiYgKG0uaXNQbGFpbk9iamVjdChjKSB8fCAoYiA9IG0uaXNBcnJheShjKSkpID8gKGIgPyAoYiA9ICExLCBmID0gYSAmJiBtLmlzQXJyYXkoYSkgPyBhIDogW10pIDogZiA9IGEgJiYgbS5pc1BsYWluT2JqZWN0KGEpID8gYSA6IHt9LCBnW2RdID0gbS5leHRlbmQoaiwgZiwgYykpIDogdm9pZCAwICE9PSBjICYmIChnW2RdID0gYykpOyByZXR1cm4gZyB9LCBtLmV4dGVuZCh7IGV4cGFuZG86ICJqUXVlcnkiICsgKGwgKyBNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCAiIiksIGlzUmVhZHk6ICEwLCBlcnJvcjogZnVuY3Rpb24gKGEpIHsgdGhyb3cgbmV3IEVycm9yKGEpIH0sIG5vb3A6IGZ1bmN0aW9uICgpIHsgfSwgaXNGdW5jdGlvbjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICJmdW5jdGlvbiIgPT09IG0udHlwZShhKSB9LCBpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiAiYXJyYXkiID09PSBtLnR5cGUoYSkgfSwgaXNXaW5kb3c6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsICE9IGEgJiYgYSA9PSBhLndpbmRvdyB9LCBpc051bWVyaWM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhbS5pc0FycmF5KGEpICYmIGEgLSBwYXJzZUZsb2F0KGEpID49IDAgfSwgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24gKGEpIHsgdmFyIGI7IGZvciAoYiBpbiBhKSByZXR1cm4gITE7IHJldHVybiAhMCB9LCBpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKCFhIHx8ICJvYmplY3QiICE9PSBtLnR5cGUoYSkgfHwgYS5ub2RlVHlwZSB8fCBtLmlzV2luZG93KGEpKSByZXR1cm4gITE7IHRyeSB7IGlmIChhLmNvbnN0cnVjdG9yICYmICFqLmNhbGwoYSwgImNvbnN0cnVjdG9yIikgJiYgIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKSkgcmV0dXJuICExIH0gY2F0Y2ggKGMpIHsgcmV0dXJuICExIH0gaWYgKGsub3duTGFzdCkgZm9yIChiIGluIGEpIHJldHVybiBqLmNhbGwoYSwgYik7IGZvciAoYiBpbiBhKTsgcmV0dXJuIHZvaWQgMCA9PT0gYiB8fCBqLmNhbGwoYSwgYikgfSwgdHlwZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgPT0gYSA/IGEgKyAiIiA6ICJvYmplY3QiID09IHR5cGVvZiBhIHx8ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGEgPyBoW2kuY2FsbChhKV0gfHwgIm9iamVjdCIgOiB0eXBlb2YgYSB9LCBnbG9iYWxFdmFsOiBmdW5jdGlvbiAoYikgeyBiICYmIG0udHJpbShiKSAmJiAoYS5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uIChiKSB7IGEuZXZhbC5jYWxsKGEsIGIpIH0pKGIpIH0sIGNhbWVsQ2FzZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEucmVwbGFjZShvLCAibXMtIikucmVwbGFjZShwLCBxKSB9LCBub2RlTmFtZTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEubm9kZU5hbWUgJiYgYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBiLnRvTG93ZXJDYXNlKCkgfSwgZWFjaDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUgPSAwLCBmID0gYS5sZW5ndGgsIGcgPSByKGEpOyBpZiAoYykgeyBpZiAoZykgeyBmb3IgKDsgZiA+IGU7IGUrKykgaWYgKGQgPSBiLmFwcGx5KGFbZV0sIGMpLCBkID09PSAhMSkgYnJlYWsgfSBlbHNlIGZvciAoZSBpbiBhKSBpZiAoZCA9IGIuYXBwbHkoYVtlXSwgYyksIGQgPT09ICExKSBicmVhayB9IGVsc2UgaWYgKGcpIHsgZm9yICg7IGYgPiBlOyBlKyspIGlmIChkID0gYi5jYWxsKGFbZV0sIGUsIGFbZV0pLCBkID09PSAhMSkgYnJlYWsgfSBlbHNlIGZvciAoZSBpbiBhKSBpZiAoZCA9IGIuY2FsbChhW2VdLCBlLCBhW2VdKSwgZCA9PT0gITEpIGJyZWFrOyByZXR1cm4gYSB9LCB0cmltOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbnVsbCA9PSBhID8gIiIgOiAoYSArICIiKS5yZXBsYWNlKG4sICIiKSB9LCBtYWtlQXJyYXk6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYiB8fCBbXTsgcmV0dXJuIG51bGwgIT0gYSAmJiAocihPYmplY3QoYSkpID8gbS5tZXJnZShjLCAic3RyaW5nIiA9PSB0eXBlb2YgYSA/IFthXSA6IGEpIDogZi5jYWxsKGMsIGEpKSwgYyB9LCBpbkFycmF5OiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgaWYgKGIpIHsgaWYgKGcpIHJldHVybiBnLmNhbGwoYiwgYSwgYyk7IGZvciAoZCA9IGIubGVuZ3RoLCBjID0gYyA/IDAgPiBjID8gTWF0aC5tYXgoMCwgZCArIGMpIDogYyA6IDA7IGQgPiBjOyBjKyspIGlmIChjIGluIGIgJiYgYltjXSA9PT0gYSkgcmV0dXJuIGMgfSByZXR1cm4gLTEgfSwgbWVyZ2U6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gK2IubGVuZ3RoLCBkID0gMCwgZSA9IGEubGVuZ3RoOyB3aGlsZSAoYyA+IGQpIGFbZSsrXSA9IGJbZCsrXTsgaWYgKGMgIT09IGMpIHdoaWxlICh2b2lkIDAgIT09IGJbZF0pIGFbZSsrXSA9IGJbZCsrXTsgcmV0dXJuIGEubGVuZ3RoID0gZSwgYSB9LCBncmVwOiBmdW5jdGlvbiAoYSwgYiwgYykgeyBmb3IgKHZhciBkLCBlID0gW10sIGYgPSAwLCBnID0gYS5sZW5ndGgsIGggPSAhYzsgZyA+IGY7IGYrKykgZCA9ICFiKGFbZl0sIGYpLCBkICE9PSBoICYmIGUucHVzaChhW2ZdKTsgcmV0dXJuIGUgfSwgbWFwOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZiA9IDAsIGcgPSBhLmxlbmd0aCwgaCA9IHIoYSksIGkgPSBbXTsgaWYgKGgpIGZvciAoOyBnID4gZjsgZisrKSBkID0gYihhW2ZdLCBmLCBjKSwgbnVsbCAhPSBkICYmIGkucHVzaChkKTsgZWxzZSBmb3IgKGYgaW4gYSkgZCA9IGIoYVtmXSwgZiwgYyksIG51bGwgIT0gZCAmJiBpLnB1c2goZCk7IHJldHVybiBlLmFwcGx5KFtdLCBpKSB9LCBndWlkOiAxLCBwcm94eTogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGUsIGY7IHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgYiAmJiAoZiA9IGFbYl0sIGIgPSBhLCBhID0gZiksIG0uaXNGdW5jdGlvbihhKSA/IChjID0gZC5jYWxsKGFyZ3VtZW50cywgMiksIGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhLmFwcGx5KGIgfHwgdGhpcywgYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKSB9LCBlLmd1aWQgPSBhLmd1aWQgPSBhLmd1aWQgfHwgbS5ndWlkKyssIGUpIDogdm9pZCAwIH0sIG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gK25ldyBEYXRlIH0sIHN1cHBvcnQ6IGsgfSksIG0uZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKGEsIGIpIHsgaFsiW29iamVjdCAiICsgYiArICJdIl0gPSBiLnRvTG93ZXJDYXNlKCkgfSk7IGZ1bmN0aW9uIHIoYSkgeyB2YXIgYiA9IGEubGVuZ3RoLCBjID0gbS50eXBlKGEpOyByZXR1cm4gImZ1bmN0aW9uIiA9PT0gYyB8fCBtLmlzV2luZG93KGEpID8gITEgOiAxID09PSBhLm5vZGVUeXBlICYmIGIgPyAhMCA6ICJhcnJheSIgPT09IGMgfHwgMCA9PT0gYiB8fCAibnVtYmVyIiA9PSB0eXBlb2YgYiAmJiBiID4gMCAmJiBiIC0gMSBpbiBhIH0gdmFyIHMgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcywgdCwgdSA9ICJzaXp6bGUiICsgLW5ldyBEYXRlLCB2ID0gYS5kb2N1bWVudCwgdyA9IDAsIHggPSAwLCB5ID0gZ2IoKSwgeiA9IGdiKCksIEEgPSBnYigpLCBCID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPT09IGIgJiYgKGwgPSAhMCksIDAgfSwgQyA9ICJ1bmRlZmluZWQiLCBEID0gMSA8PCAzMSwgRSA9IHt9Lmhhc093blByb3BlcnR5LCBGID0gW10sIEcgPSBGLnBvcCwgSCA9IEYucHVzaCwgSSA9IEYucHVzaCwgSiA9IEYuc2xpY2UsIEsgPSBGLmluZGV4T2YgfHwgZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9IDAsIGMgPSB0aGlzLmxlbmd0aDsgYyA+IGI7IGIrKykgaWYgKHRoaXNbYl0gPT09IGEpIHJldHVybiBiOyByZXR1cm4gLTEgfSwgTCA9ICJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsIE0gPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsIE4gPSAiKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCBPID0gTi5yZXBsYWNlKCJ3IiwgIncjIiksIFAgPSAiXFxbIiArIE0gKyAiKigiICsgTiArICIpKD86IiArIE0gKyAiKihbKl4kfCF+XT89KSIgKyBNICsgIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIiArIE8gKyAiKSl8KSIgKyBNICsgIipcXF0iLCBRID0gIjooIiArIE4gKyAiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIgKyBQICsgIikqKXwuKilcXCl8KSIsIFIgPSBuZXcgUmVnRXhwKCJeIiArIE0gKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIE0gKyAiKyQiLCAiZyIpLCBTID0gbmV3IFJlZ0V4cCgiXiIgKyBNICsgIiosIiArIE0gKyAiKiIpLCBUID0gbmV3IFJlZ0V4cCgiXiIgKyBNICsgIiooWz4rfl18IiArIE0gKyAiKSIgKyBNICsgIioiKSwgVSA9IG5ldyBSZWdFeHAoIj0iICsgTSArICIqKFteXFxdJ1wiXSo/KSIgKyBNICsgIipcXF0iLCAiZyIpLCBWID0gbmV3IFJlZ0V4cChRKSwgVyA9IG5ldyBSZWdFeHAoIl4iICsgTyArICIkIiksIFggPSB7IElEOiBuZXcgUmVnRXhwKCJeIygiICsgTiArICIpIiksIENMQVNTOiBuZXcgUmVnRXhwKCJeXFwuKCIgKyBOICsgIikiKSwgVEFHOiBuZXcgUmVnRXhwKCJeKCIgKyBOLnJlcGxhY2UoInciLCAidyoiKSArICIpIiksIEFUVFI6IG5ldyBSZWdFeHAoIl4iICsgUCksIFBTRVVETzogbmV3IFJlZ0V4cCgiXiIgKyBRKSwgQ0hJTEQ6IG5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIgKyBNICsgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgTSArICIqKD86KFsrLV18KSIgKyBNICsgIiooXFxkKyl8KSkiICsgTSArICIqXFwpfCkiLCAiaSIpLCBib29sOiBuZXcgUmVnRXhwKCJeKD86IiArIEwgKyAiKSQiLCAiaSIpLCBuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoIl4iICsgTSArICIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsgTSArICIqKCg/Oi1cXGQpP1xcZCopIiArIE0gKyAiKlxcKXwpKD89W14tXXwkKSIsICJpIikgfSwgWSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksIFogPSAvXmhcZCQvaSwgJCA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywgXyA9IC9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sIGFiID0gL1srfl0vLCBiYiA9IC8nfFxcL2csIGNiID0gbmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IiArIE0gKyAiP3woIiArIE0gKyAiKXwuKSIsICJpZyIpLCBkYiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gIjB4IiArIGIgLSA2NTUzNjsgcmV0dXJuIGQgIT09IGQgfHwgYyA/IGIgOiAwID4gZCA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZCArIDY1NTM2KSA6IFN0cmluZy5mcm9tQ2hhckNvZGUoZCA+PiAxMCB8IDU1Mjk2LCAxMDIzICYgZCB8IDU2MzIwKSB9OyB0cnkgeyBJLmFwcGx5KEYgPSBKLmNhbGwodi5jaGlsZE5vZGVzKSwgdi5jaGlsZE5vZGVzKSwgRlt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZSB9IGNhdGNoIChlYikgeyBJID0geyBhcHBseTogRi5sZW5ndGggPyBmdW5jdGlvbiAoYSwgYikgeyBILmFwcGx5KGEsIEouY2FsbChiKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYS5sZW5ndGgsIGQgPSAwOyB3aGlsZSAoYVtjKytdID0gYltkKytdKTsgYS5sZW5ndGggPSBjIC0gMSB9IH0gfSBmdW5jdGlvbiBmYihhLCBiLCBkLCBlKSB7IHZhciBmLCBoLCBqLCBrLCBsLCBvLCByLCBzLCB3LCB4OyBpZiAoKGIgPyBiLm93bmVyRG9jdW1lbnQgfHwgYiA6IHYpICE9PSBuICYmIG0oYiksIGIgPSBiIHx8IG4sIGQgPSBkIHx8IFtdLCAhYSB8fCAic3RyaW5nIiAhPSB0eXBlb2YgYSkgcmV0dXJuIGQ7IGlmICgxICE9PSAoayA9IGIubm9kZVR5cGUpICYmIDkgIT09IGspIHJldHVybiBbXTsgaWYgKHAgJiYgIWUpIHsgaWYgKGYgPSBfLmV4ZWMoYSkpIGlmIChqID0gZlsxXSkgeyBpZiAoOSA9PT0gaykgeyBpZiAoaCA9IGIuZ2V0RWxlbWVudEJ5SWQoaiksICFoIHx8ICFoLnBhcmVudE5vZGUpIHJldHVybiBkOyBpZiAoaC5pZCA9PT0gaikgcmV0dXJuIGQucHVzaChoKSwgZCB9IGVsc2UgaWYgKGIub3duZXJEb2N1bWVudCAmJiAoaCA9IGIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkgJiYgdChiLCBoKSAmJiBoLmlkID09PSBqKSByZXR1cm4gZC5wdXNoKGgpLCBkIH0gZWxzZSB7IGlmIChmWzJdKSByZXR1cm4gSS5hcHBseShkLCBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSwgZDsgaWYgKChqID0gZlszXSkgJiYgYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgcmV0dXJuIEkuYXBwbHkoZCwgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopKSwgZCB9IGlmIChjLnFzYSAmJiAoIXEgfHwgIXEudGVzdChhKSkpIHsgaWYgKHMgPSByID0gdSwgdyA9IGIsIHggPSA5ID09PSBrICYmIGEsIDEgPT09IGsgJiYgIm9iamVjdCIgIT09IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgeyBvID0gZyhhKSwgKHIgPSBiLmdldEF0dHJpYnV0ZSgiaWQiKSkgPyBzID0gci5yZXBsYWNlKGJiLCAiXFwkJiIpIDogYi5zZXRBdHRyaWJ1dGUoImlkIiwgcyksIHMgPSAiW2lkPSciICsgcyArICInXSAiLCBsID0gby5sZW5ndGg7IHdoaWxlIChsLS0pIG9bbF0gPSBzICsgcWIob1tsXSk7IHcgPSBhYi50ZXN0KGEpICYmIG9iKGIucGFyZW50Tm9kZSkgfHwgYiwgeCA9IG8uam9pbigiLCIpIH0gaWYgKHgpIHRyeSB7IHJldHVybiBJLmFwcGx5KGQsIHcucXVlcnlTZWxlY3RvckFsbCh4KSksIGQgfSBjYXRjaCAoeSkgeyB9IGZpbmFsbHkgeyByIHx8IGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpIH0gfSB9IHJldHVybiBpKGEucmVwbGFjZShSLCAiJDEiKSwgYiwgZCwgZSkgfSBmdW5jdGlvbiBnYigpIHsgdmFyIGEgPSBbXTsgZnVuY3Rpb24gYihjLCBlKSB7IHJldHVybiBhLnB1c2goYyArICIgIikgPiBkLmNhY2hlTGVuZ3RoICYmIGRlbGV0ZSBiW2Euc2hpZnQoKV0sIGJbYyArICIgIl0gPSBlIH0gcmV0dXJuIGIgfSBmdW5jdGlvbiBoYihhKSB7IHJldHVybiBhW3VdID0gITAsIGEgfSBmdW5jdGlvbiBpYihhKSB7IHZhciBiID0gbi5jcmVhdGVFbGVtZW50KCJkaXYiKTsgdHJ5IHsgcmV0dXJuICEhYShiKSB9IGNhdGNoIChjKSB7IHJldHVybiAhMSB9IGZpbmFsbHkgeyBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCB9IH0gZnVuY3Rpb24gamIoYSwgYikgeyB2YXIgYyA9IGEuc3BsaXQoInwiKSwgZSA9IGEubGVuZ3RoOyB3aGlsZSAoZS0tKSBkLmF0dHJIYW5kbGVbY1tlXV0gPSBiIH0gZnVuY3Rpb24ga2IoYSwgYikgeyB2YXIgYyA9IGIgJiYgYSwgZCA9IGMgJiYgMSA9PT0gYS5ub2RlVHlwZSAmJiAxID09PSBiLm5vZGVUeXBlICYmICh+Yi5zb3VyY2VJbmRleCB8fCBEKSAtICh+YS5zb3VyY2VJbmRleCB8fCBEKTsgaWYgKGQpIHJldHVybiBkOyBpZiAoYykgd2hpbGUgKGMgPSBjLm5leHRTaWJsaW5nKSBpZiAoYyA9PT0gYikgcmV0dXJuIC0xOyByZXR1cm4gYSA/IDEgOiAtMSB9IGZ1bmN0aW9uIGxiKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImlucHV0IiA9PT0gYyAmJiBiLnR5cGUgPT09IGEgfSB9IGZ1bmN0aW9uIG1iKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gKCJpbnB1dCIgPT09IGMgfHwgImJ1dHRvbiIgPT09IGMpICYmIGIudHlwZSA9PT0gYSB9IH0gZnVuY3Rpb24gbmIoYSkgeyByZXR1cm4gaGIoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIgPSArYiwgaGIoZnVuY3Rpb24gKGMsIGQpIHsgdmFyIGUsIGYgPSBhKFtdLCBjLmxlbmd0aCwgYiksIGcgPSBmLmxlbmd0aDsgd2hpbGUgKGctLSkgY1tlID0gZltnXV0gJiYgKGNbZV0gPSAhKGRbZV0gPSBjW2VdKSkgfSkgfSkgfSBmdW5jdGlvbiBvYihhKSB7IHJldHVybiBhICYmIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBDICYmIGEgfSBjID0gZmIuc3VwcG9ydCA9IHt9LCBmID0gZmIuaXNYTUwgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEgJiYgKGEub3duZXJEb2N1bWVudCB8fCBhKS5kb2N1bWVudEVsZW1lbnQ7IHJldHVybiBiID8gIkhUTUwiICE9PSBiLm5vZGVOYW1lIDogITEgfSwgbSA9IGZiLnNldERvY3VtZW50ID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGUgPSBhID8gYS5vd25lckRvY3VtZW50IHx8IGEgOiB2LCBnID0gZS5kZWZhdWx0VmlldzsgcmV0dXJuIGUgIT09IG4gJiYgOSA9PT0gZS5ub2RlVHlwZSAmJiBlLmRvY3VtZW50RWxlbWVudCA/IChuID0gZSwgbyA9IGUuZG9jdW1lbnRFbGVtZW50LCBwID0gIWYoZSksIGcgJiYgZyAhPT0gZy50b3AgJiYgKGcuYWRkRXZlbnRMaXN0ZW5lciA/IGcuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgZnVuY3Rpb24gKCkgeyBtKCkgfSwgITEpIDogZy5hdHRhY2hFdmVudCAmJiBnLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsIGZ1bmN0aW9uICgpIHsgbSgpIH0pKSwgYy5hdHRyaWJ1dGVzID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuY2xhc3NOYW1lID0gImkiLCAhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpIH0pLCBjLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuYXBwZW5kQ2hpbGQoZS5jcmVhdGVDb21tZW50KCIiKSksICFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoIH0pLCBjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSAkLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSAmJiBpYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLCBhLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID0gImkiLCAyID09PSBhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGggfSksIGMuZ2V0QnlJZCA9IGliKGZ1bmN0aW9uIChhKSB7IHJldHVybiBvLmFwcGVuZENoaWxkKGEpLmlkID0gdSwgIWUuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWUuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RoIH0pLCBjLmdldEJ5SWQgPyAoZC5maW5kLklEID0gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkICE9PSBDICYmIHApIHsgdmFyIGMgPSBiLmdldEVsZW1lbnRCeUlkKGEpOyByZXR1cm4gYyAmJiBjLnBhcmVudE5vZGUgPyBbY10gOiBbXSB9IH0sIGQuZmlsdGVyLklEID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UoY2IsIGRiKTsgcmV0dXJuIGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gYiB9IH0pIDogKGRlbGV0ZSBkLmZpbmQuSUQsIGQuZmlsdGVyLklEID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UoY2IsIGRiKTsgcmV0dXJuIGZ1bmN0aW9uIChhKSB7IHZhciBjID0gdHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSAhPT0gQyAmJiBhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7IHJldHVybiBjICYmIGMudmFsdWUgPT09IGIgfSB9KSwgZC5maW5kLlRBRyA9IGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IEMgPyBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpIDogdm9pZCAwIH0gOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCA9IFtdLCBlID0gMCwgZiA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7IGlmICgiKiIgPT09IGEpIHsgd2hpbGUgKGMgPSBmW2UrK10pIDEgPT09IGMubm9kZVR5cGUgJiYgZC5wdXNoKGMpOyByZXR1cm4gZCB9IHJldHVybiBmIH0sIGQuZmluZC5DTEFTUyA9IGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gQyAmJiBwID8gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpIDogdm9pZCAwIH0sIHIgPSBbXSwgcSA9IFtdLCAoYy5xc2EgPSAkLnRlc3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkgJiYgKGliKGZ1bmN0aW9uIChhKSB7IGEuaW5uZXJIVE1MID0gIjxzZWxlY3QgbXNhbGxvd2NsaXA9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2xpcF49JyddIikubGVuZ3RoICYmIHEucHVzaCgiWypeJF09IiArIE0gKyAiKig/OicnfFwiXCIpIiksIGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCB8fCBxLnB1c2goIlxcWyIgKyBNICsgIiooPzp2YWx1ZXwiICsgTCArICIpIiksIGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggfHwgcS5wdXNoKCI6Y2hlY2tlZCIpIH0pLCBpYihmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsgYi5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiaGlkZGVuIiksIGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwgIkQiKSwgYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCAmJiBxLnB1c2goIm5hbWUiICsgTSArICIqWypeJHwhfl0/PSIpLCBhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoIHx8IHEucHVzaCgiOmVuYWJsZWQiLCAiOmRpc2FibGVkIiksIGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLCBxLnB1c2goIiwuKjoiKSB9KSksIChjLm1hdGNoZXNTZWxlY3RvciA9ICQudGVzdChzID0gby5tYXRjaGVzIHx8IG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IG8ubW96TWF0Y2hlc1NlbGVjdG9yIHx8IG8ub01hdGNoZXNTZWxlY3RvciB8fCBvLm1zTWF0Y2hlc1NlbGVjdG9yKSkgJiYgaWIoZnVuY3Rpb24gKGEpIHsgYy5kaXNjb25uZWN0ZWRNYXRjaCA9IHMuY2FsbChhLCAiZGl2IiksIHMuY2FsbChhLCAiW3MhPScnXTp4IiksIHIucHVzaCgiIT0iLCBRKSB9KSwgcSA9IHEubGVuZ3RoICYmIG5ldyBSZWdFeHAocS5qb2luKCJ8IikpLCByID0gci5sZW5ndGggJiYgbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksIGIgPSAkLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksIHQgPSBiIHx8ICQudGVzdChvLmNvbnRhaW5zKSA/IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gOSA9PT0gYS5ub2RlVHlwZSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwgZCA9IGIgJiYgYi5wYXJlbnROb2RlOyByZXR1cm4gYSA9PT0gZCB8fCAhKCFkIHx8IDEgIT09IGQubm9kZVR5cGUgfHwgIShjLmNvbnRhaW5zID8gYy5jb250YWlucyhkKSA6IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgMTYgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSkgfSA6IGZ1bmN0aW9uIChhLCBiKSB7IGlmIChiKSB3aGlsZSAoYiA9IGIucGFyZW50Tm9kZSkgaWYgKGIgPT09IGEpIHJldHVybiAhMDsgcmV0dXJuICExIH0sIEIgPSBiID8gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGEgPT09IGIpIHJldHVybiBsID0gITAsIDA7IHZhciBkID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsgcmV0dXJuIGQgPyBkIDogKGQgPSAoYS5vd25lckRvY3VtZW50IHx8IGEpID09PSAoYi5vd25lckRvY3VtZW50IHx8IGIpID8gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSA6IDEsIDEgJiBkIHx8ICFjLnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpID09PSBkID8gYSA9PT0gZSB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHYgJiYgdCh2LCBhKSA/IC0xIDogYiA9PT0gZSB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHYgJiYgdCh2LCBiKSA/IDEgOiBrID8gSy5jYWxsKGssIGEpIC0gSy5jYWxsKGssIGIpIDogMCA6IDQgJiBkID8gLTEgOiAxKSB9IDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGEgPT09IGIpIHJldHVybiBsID0gITAsIDA7IHZhciBjLCBkID0gMCwgZiA9IGEucGFyZW50Tm9kZSwgZyA9IGIucGFyZW50Tm9kZSwgaCA9IFthXSwgaSA9IFtiXTsgaWYgKCFmIHx8ICFnKSByZXR1cm4gYSA9PT0gZSA/IC0xIDogYiA9PT0gZSA/IDEgOiBmID8gLTEgOiBnID8gMSA6IGsgPyBLLmNhbGwoaywgYSkgLSBLLmNhbGwoaywgYikgOiAwOyBpZiAoZiA9PT0gZykgcmV0dXJuIGtiKGEsIGIpOyBjID0gYTsgd2hpbGUgKGMgPSBjLnBhcmVudE5vZGUpIGgudW5zaGlmdChjKTsgYyA9IGI7IHdoaWxlIChjID0gYy5wYXJlbnROb2RlKSBpLnVuc2hpZnQoYyk7IHdoaWxlIChoW2RdID09PSBpW2RdKSBkKys7IHJldHVybiBkID8ga2IoaFtkXSwgaVtkXSkgOiBoW2RdID09PSB2ID8gLTEgOiBpW2RdID09PSB2ID8gMSA6IDAgfSwgZSkgOiBuIH0sIGZiLm1hdGNoZXMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gZmIoYSwgbnVsbCwgbnVsbCwgYikgfSwgZmIubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24gKGEsIGIpIHsgaWYgKChhLm93bmVyRG9jdW1lbnQgfHwgYSkgIT09IG4gJiYgbShhKSwgYiA9IGIucmVwbGFjZShVLCAiPSckMSddIiksICEoIWMubWF0Y2hlc1NlbGVjdG9yIHx8ICFwIHx8IHIgJiYgci50ZXN0KGIpIHx8IHEgJiYgcS50ZXN0KGIpKSkgdHJ5IHsgdmFyIGQgPSBzLmNhbGwoYSwgYik7IGlmIChkIHx8IGMuZGlzY29ubmVjdGVkTWF0Y2ggfHwgYS5kb2N1bWVudCAmJiAxMSAhPT0gYS5kb2N1bWVudC5ub2RlVHlwZSkgcmV0dXJuIGQgfSBjYXRjaCAoZSkgeyB9IHJldHVybiBmYihiLCBuLCBudWxsLCBbYV0pLmxlbmd0aCA+IDAgfSwgZmIuY29udGFpbnMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEub3duZXJEb2N1bWVudCB8fCBhKSAhPT0gbiAmJiBtKGEpLCB0KGEsIGIpIH0sIGZiLmF0dHIgPSBmdW5jdGlvbiAoYSwgYikgeyAoYS5vd25lckRvY3VtZW50IHx8IGEpICE9PSBuICYmIG0oYSk7IHZhciBlID0gZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sIGYgPSBlICYmIEUuY2FsbChkLmF0dHJIYW5kbGUsIGIudG9Mb3dlckNhc2UoKSkgPyBlKGEsIGIsICFwKSA6IHZvaWQgMDsgcmV0dXJuIHZvaWQgMCAhPT0gZiA/IGYgOiBjLmF0dHJpYnV0ZXMgfHwgIXAgPyBhLmdldEF0dHJpYnV0ZShiKSA6IChmID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSAmJiBmLnNwZWNpZmllZCA/IGYudmFsdWUgOiBudWxsIH0sIGZiLmVycm9yID0gZnVuY3Rpb24gKGEpIHsgdGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgYSkgfSwgZmIudW5pcXVlU29ydCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBkID0gW10sIGUgPSAwLCBmID0gMDsgaWYgKGwgPSAhYy5kZXRlY3REdXBsaWNhdGVzLCBrID0gIWMuc29ydFN0YWJsZSAmJiBhLnNsaWNlKDApLCBhLnNvcnQoQiksIGwpIHsgd2hpbGUgKGIgPSBhW2YrK10pIGIgPT09IGFbZl0gJiYgKGUgPSBkLnB1c2goZikpOyB3aGlsZSAoZS0tKSBhLnNwbGljZShkW2VdLCAxKSB9IHJldHVybiBrID0gbnVsbCwgYSB9LCBlID0gZmIuZ2V0VGV4dCA9IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gIiIsIGQgPSAwLCBmID0gYS5ub2RlVHlwZTsgaWYgKGYpIHsgaWYgKDEgPT09IGYgfHwgOSA9PT0gZiB8fCAxMSA9PT0gZikgeyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGEudGV4dENvbnRlbnQpIHJldHVybiBhLnRleHRDb250ZW50OyBmb3IgKGEgPSBhLmZpcnN0Q2hpbGQ7IGE7IGEgPSBhLm5leHRTaWJsaW5nKSBjICs9IGUoYSkgfSBlbHNlIGlmICgzID09PSBmIHx8IDQgPT09IGYpIHJldHVybiBhLm5vZGVWYWx1ZSB9IGVsc2Ugd2hpbGUgKGIgPSBhW2QrK10pIGMgKz0gZShiKTsgcmV0dXJuIGMgfSwgZCA9IGZiLnNlbGVjdG9ycyA9IHsgY2FjaGVMZW5ndGg6IDUwLCBjcmVhdGVQc2V1ZG86IGhiLCBtYXRjaDogWCwgYXR0ckhhbmRsZToge30sIGZpbmQ6IHt9LCByZWxhdGl2ZTogeyAiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiAhMCB9LCAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiAhMCB9LCAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9IH0sIHByZUZpbHRlcjogeyBBVFRSOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYVsxXSA9IGFbMV0ucmVwbGFjZShjYiwgZGIpLCBhWzNdID0gKGFbM10gfHwgYVs0XSB8fCBhWzVdIHx8ICIiKS5yZXBsYWNlKGNiLCBkYiksICJ+PSIgPT09IGFbMl0gJiYgKGFbM10gPSAiICIgKyBhWzNdICsgIiAiKSwgYS5zbGljZSgwLCA0KSB9LCBDSElMRDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGFbMV0gPSBhWzFdLnRvTG93ZXJDYXNlKCksICJudGgiID09PSBhWzFdLnNsaWNlKDAsIDMpID8gKGFbM10gfHwgZmIuZXJyb3IoYVswXSksIGFbNF0gPSArKGFbNF0gPyBhWzVdICsgKGFbNl0gfHwgMSkgOiAyICogKCJldmVuIiA9PT0gYVszXSB8fCAib2RkIiA9PT0gYVszXSkpLCBhWzVdID0gKyhhWzddICsgYVs4XSB8fCAib2RkIiA9PT0gYVszXSkpIDogYVszXSAmJiBmYi5lcnJvcihhWzBdKSwgYSB9LCBQU0VVRE86IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gIWFbNl0gJiYgYVsyXTsgcmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKSA/IG51bGwgOiAoYVszXSA/IGFbMl0gPSBhWzRdIHx8IGFbNV0gfHwgIiIgOiBjICYmIFYudGVzdChjKSAmJiAoYiA9IGcoYywgITApKSAmJiAoYiA9IGMuaW5kZXhPZigiKSIsIGMubGVuZ3RoIC0gYikgLSBjLmxlbmd0aCkgJiYgKGFbMF0gPSBhWzBdLnNsaWNlKDAsIGIpLCBhWzJdID0gYy5zbGljZSgwLCBiKSksIGEuc2xpY2UoMCwgMykpIH0gfSwgZmlsdGVyOiB7IFRBRzogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnJlcGxhY2UoY2IsIGRiKS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gIioiID09PSBhID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gITAgfSA6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLm5vZGVOYW1lICYmIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYiB9IH0sIENMQVNTOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IHlbYSArICIgIl07IHJldHVybiBiIHx8IChiID0gbmV3IFJlZ0V4cCgiKF58IiArIE0gKyAiKSIgKyBhICsgIigiICsgTSArICJ8JCkiKSkgJiYgeShhLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYi50ZXN0KCJzdHJpbmciID09IHR5cGVvZiBhLmNsYXNzTmFtZSAmJiBhLmNsYXNzTmFtZSB8fCB0eXBlb2YgYS5nZXRBdHRyaWJ1dGUgIT09IEMgJiYgYS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIpIH0pIH0sIEFUVFI6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBmdW5jdGlvbiAoZCkgeyB2YXIgZSA9IGZiLmF0dHIoZCwgYSk7IHJldHVybiBudWxsID09IGUgPyAiIT0iID09PSBiIDogYiA/IChlICs9ICIiLCAiPSIgPT09IGIgPyBlID09PSBjIDogIiE9IiA9PT0gYiA/IGUgIT09IGMgOiAiXj0iID09PSBiID8gYyAmJiAwID09PSBlLmluZGV4T2YoYykgOiAiKj0iID09PSBiID8gYyAmJiBlLmluZGV4T2YoYykgPiAtMSA6ICIkPSIgPT09IGIgPyBjICYmIGUuc2xpY2UoLWMubGVuZ3RoKSA9PT0gYyA6ICJ+PSIgPT09IGIgPyAoIiAiICsgZSArICIgIikuaW5kZXhPZihjKSA+IC0xIDogInw9IiA9PT0gYiA/IGUgPT09IGMgfHwgZS5zbGljZSgwLCBjLmxlbmd0aCArIDEpID09PSBjICsgIi0iIDogITEpIDogITAgfSB9LCBDSElMRDogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUpIHsgdmFyIGYgPSAibnRoIiAhPT0gYS5zbGljZSgwLCAzKSwgZyA9ICJsYXN0IiAhPT0gYS5zbGljZSgtNCksIGggPSAib2YtdHlwZSIgPT09IGI7IHJldHVybiAxID09PSBkICYmIDAgPT09IGUgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gISFhLnBhcmVudE5vZGUgfSA6IGZ1bmN0aW9uIChiLCBjLCBpKSB7IHZhciBqLCBrLCBsLCBtLCBuLCBvLCBwID0gZiAhPT0gZyA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwgcSA9IGIucGFyZW50Tm9kZSwgciA9IGggJiYgYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBzID0gIWkgJiYgIWg7IGlmIChxKSB7IGlmIChmKSB7IHdoaWxlIChwKSB7IGwgPSBiOyB3aGlsZSAobCA9IGxbcF0pIGlmIChoID8gbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSByIDogMSA9PT0gbC5ub2RlVHlwZSkgcmV0dXJuICExOyBvID0gcCA9ICJvbmx5IiA9PT0gYSAmJiAhbyAmJiAibmV4dFNpYmxpbmciIH0gcmV0dXJuICEwIH0gaWYgKG8gPSBbZyA/IHEuZmlyc3RDaGlsZCA6IHEubGFzdENoaWxkXSwgZyAmJiBzKSB7IGsgPSBxW3VdIHx8IChxW3VdID0ge30pLCBqID0ga1thXSB8fCBbXSwgbiA9IGpbMF0gPT09IHcgJiYgalsxXSwgbSA9IGpbMF0gPT09IHcgJiYgalsyXSwgbCA9IG4gJiYgcS5jaGlsZE5vZGVzW25dOyB3aGlsZSAobCA9ICsrbiAmJiBsICYmIGxbcF0gfHwgKG0gPSBuID0gMCkgfHwgby5wb3AoKSkgaWYgKDEgPT09IGwubm9kZVR5cGUgJiYgKyttICYmIGwgPT09IGIpIHsga1thXSA9IFt3LCBuLCBtXTsgYnJlYWsgfSB9IGVsc2UgaWYgKHMgJiYgKGogPSAoYlt1XSB8fCAoYlt1XSA9IHt9KSlbYV0pICYmIGpbMF0gPT09IHcpIG0gPSBqWzFdOyBlbHNlIHdoaWxlIChsID0gKytuICYmIGwgJiYgbFtwXSB8fCAobSA9IG4gPSAwKSB8fCBvLnBvcCgpKSBpZiAoKGggPyBsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHIgOiAxID09PSBsLm5vZGVUeXBlKSAmJiArK20gJiYgKHMgJiYgKChsW3VdIHx8IChsW3VdID0ge30pKVthXSA9IFt3LCBtXSksIGwgPT09IGIpKSBicmVhazsgcmV0dXJuIG0gLT0gZSwgbSA9PT0gZCB8fCBtICUgZCA9PT0gMCAmJiBtIC8gZCA+PSAwIH0gfSB9LCBQU0VVRE86IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBlID0gZC5wc2V1ZG9zW2FdIHx8IGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldIHx8IGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBhKTsgcmV0dXJuIGVbdV0gPyBlKGIpIDogZS5sZW5ndGggPiAxID8gKGMgPSBbYSwgYSwgIiIsIGJdLCBkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKSA/IGhiKGZ1bmN0aW9uIChhLCBjKSB7IHZhciBkLCBmID0gZShhLCBiKSwgZyA9IGYubGVuZ3RoOyB3aGlsZSAoZy0tKSBkID0gSy5jYWxsKGEsIGZbZ10pLCBhW2RdID0gIShjW2RdID0gZltnXSkgfSkgOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZShhLCAwLCBjKSB9KSA6IGUgfSB9LCBwc2V1ZG9zOiB7IG5vdDogaGIoZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBbXSwgYyA9IFtdLCBkID0gaChhLnJlcGxhY2UoUiwgIiQxIikpOyByZXR1cm4gZFt1XSA/IGhiKGZ1bmN0aW9uIChhLCBiLCBjLCBlKSB7IHZhciBmLCBnID0gZChhLCBudWxsLCBlLCBbXSksIGggPSBhLmxlbmd0aDsgd2hpbGUgKGgtLSkgKGYgPSBnW2hdKSAmJiAoYVtoXSA9ICEoYltoXSA9IGYpKSB9KSA6IGZ1bmN0aW9uIChhLCBlLCBmKSB7IHJldHVybiBiWzBdID0gYSwgZChiLCBudWxsLCBmLCBjKSwgIWMucG9wKCkgfSB9KSwgaGFzOiBoYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGZiKGEsIGIpLmxlbmd0aCA+IDAgfSB9KSwgY29udGFpbnM6IGhiKGZ1bmN0aW9uIChhKSB7IHJldHVybiBmdW5jdGlvbiAoYikgeyByZXR1cm4gKGIudGV4dENvbnRlbnQgfHwgYi5pbm5lclRleHQgfHwgZShiKSkuaW5kZXhPZihhKSA+IC0xIH0gfSksIGxhbmc6IGhiKGZ1bmN0aW9uIChhKSB7IHJldHVybiBXLnRlc3QoYSB8fCAiIikgfHwgZmIuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBhKSwgYSA9IGEucmVwbGFjZShjYiwgZGIpLnRvTG93ZXJDYXNlKCksIGZ1bmN0aW9uIChiKSB7IHZhciBjOyBkbyBpZiAoYyA9IHAgPyBiLmxhbmcgOiBiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKSB8fCBiLmdldEF0dHJpYnV0ZSgibGFuZyIpKSByZXR1cm4gYyA9IGMudG9Mb3dlckNhc2UoKSwgYyA9PT0gYSB8fCAwID09PSBjLmluZGV4T2YoYSArICItIik7IHdoaWxlICgoYiA9IGIucGFyZW50Tm9kZSkgJiYgMSA9PT0gYi5ub2RlVHlwZSk7IHJldHVybiAhMSB9IH0pLCB0YXJnZXQ6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0gYS5sb2NhdGlvbiAmJiBhLmxvY2F0aW9uLmhhc2g7IHJldHVybiBjICYmIGMuc2xpY2UoMSkgPT09IGIuaWQgfSwgcm9vdDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IG8gfSwgZm9jdXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID09PSBuLmFjdGl2ZUVsZW1lbnQgJiYgKCFuLmhhc0ZvY3VzIHx8IG4uaGFzRm9jdXMoKSkgJiYgISEoYS50eXBlIHx8IGEuaHJlZiB8fCB+YS50YWJJbmRleCkgfSwgZW5hYmxlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZGlzYWJsZWQgPT09ICExIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5kaXNhYmxlZCA9PT0gITAgfSwgY2hlY2tlZDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7IHJldHVybiAiaW5wdXQiID09PSBiICYmICEhYS5jaGVja2VkIHx8ICJvcHRpb24iID09PSBiICYmICEhYS5zZWxlY3RlZCB9LCBzZWxlY3RlZDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEucGFyZW50Tm9kZSAmJiBhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwgYS5zZWxlY3RlZCA9PT0gITAgfSwgZW1wdHk6IGZ1bmN0aW9uIChhKSB7IGZvciAoYSA9IGEuZmlyc3RDaGlsZDsgYTsgYSA9IGEubmV4dFNpYmxpbmcpIGlmIChhLm5vZGVUeXBlIDwgNikgcmV0dXJuICExOyByZXR1cm4gITAgfSwgcGFyZW50OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIWQucHNldWRvcy5lbXB0eShhKSB9LCBoZWFkZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBaLnRlc3QoYS5ub2RlTmFtZSkgfSwgaW5wdXQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBZLnRlc3QoYS5ub2RlTmFtZSkgfSwgYnV0dG9uOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsgcmV0dXJuICJpbnB1dCIgPT09IGIgJiYgImJ1dHRvbiIgPT09IGEudHlwZSB8fCAiYnV0dG9uIiA9PT0gYiB9LCB0ZXh0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgcmV0dXJuICJpbnB1dCIgPT09IGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAmJiAidGV4dCIgPT09IGEudHlwZSAmJiAobnVsbCA9PSAoYiA9IGEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpIHx8ICJ0ZXh0IiA9PT0gYi50b0xvd2VyQ2FzZSgpKSB9LCBmaXJzdDogbmIoZnVuY3Rpb24gKCkgeyByZXR1cm4gWzBdIH0pLCBsYXN0OiBuYihmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gW2IgLSAxXSB9KSwgZXE6IG5iKGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBbMCA+IGMgPyBjICsgYiA6IGNdIH0pLCBldmVuOiBuYihmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gMDsgYiA+IGM7IGMgKz0gMikgYS5wdXNoKGMpOyByZXR1cm4gYSB9KSwgb2RkOiBuYihmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjID0gMTsgYiA+IGM7IGMgKz0gMikgYS5wdXNoKGMpOyByZXR1cm4gYSB9KSwgbHQ6IG5iKGZ1bmN0aW9uIChhLCBiLCBjKSB7IGZvciAodmFyIGQgPSAwID4gYyA/IGMgKyBiIDogYzsgLS1kID49IDA7KSBhLnB1c2goZCk7IHJldHVybiBhIH0pLCBndDogbmIoZnVuY3Rpb24gKGEsIGIsIGMpIHsgZm9yICh2YXIgZCA9IDAgPiBjID8gYyArIGIgOiBjOyArK2QgPCBiOykgYS5wdXNoKGQpOyByZXR1cm4gYSB9KSB9IH0sIGQucHNldWRvcy5udGggPSBkLnBzZXVkb3MuZXE7IGZvciAoYiBpbiB7IHJhZGlvOiAhMCwgY2hlY2tib3g6ICEwLCBmaWxlOiAhMCwgcGFzc3dvcmQ6ICEwLCBpbWFnZTogITAgfSkgZC5wc2V1ZG9zW2JdID0gbGIoYik7IGZvciAoYiBpbiB7IHN1Ym1pdDogITAsIHJlc2V0OiAhMCB9KSBkLnBzZXVkb3NbYl0gPSBtYihiKTsgZnVuY3Rpb24gcGIoKSB7IH0gcGIucHJvdG90eXBlID0gZC5maWx0ZXJzID0gZC5wc2V1ZG9zLCBkLnNldEZpbHRlcnMgPSBuZXcgcGIsIGcgPSBmYi50b2tlbml6ZSA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBlLCBmLCBnLCBoLCBpLCBqLCBrID0gelthICsgIiAiXTsgaWYgKGspIHJldHVybiBiID8gMCA6IGsuc2xpY2UoMCk7IGggPSBhLCBpID0gW10sIGogPSBkLnByZUZpbHRlcjsgd2hpbGUgKGgpIHsgKCFjIHx8IChlID0gUy5leGVjKGgpKSkgJiYgKGUgJiYgKGggPSBoLnNsaWNlKGVbMF0ubGVuZ3RoKSB8fCBoKSwgaS5wdXNoKGYgPSBbXSkpLCBjID0gITEsIChlID0gVC5leGVjKGgpKSAmJiAoYyA9IGUuc2hpZnQoKSwgZi5wdXNoKHsgdmFsdWU6IGMsIHR5cGU6IGVbMF0ucmVwbGFjZShSLCAiICIpIH0pLCBoID0gaC5zbGljZShjLmxlbmd0aCkpOyBmb3IgKGcgaW4gZC5maWx0ZXIpICEoZSA9IFhbZ10uZXhlYyhoKSkgfHwgaltnXSAmJiAhKGUgPSBqW2ddKGUpKSB8fCAoYyA9IGUuc2hpZnQoKSwgZi5wdXNoKHsgdmFsdWU6IGMsIHR5cGU6IGcsIG1hdGNoZXM6IGUgfSksIGggPSBoLnNsaWNlKGMubGVuZ3RoKSk7IGlmICghYykgYnJlYWsgfSByZXR1cm4gYiA/IGgubGVuZ3RoIDogaCA/IGZiLmVycm9yKGEpIDogeihhLCBpKS5zbGljZSgwKSB9OyBmdW5jdGlvbiBxYihhKSB7IGZvciAodmFyIGIgPSAwLCBjID0gYS5sZW5ndGgsIGQgPSAiIjsgYyA+IGI7IGIrKykgZCArPSBhW2JdLnZhbHVlOyByZXR1cm4gZCB9IGZ1bmN0aW9uIHJiKGEsIGIsIGMpIHsgdmFyIGQgPSBiLmRpciwgZSA9IGMgJiYgInBhcmVudE5vZGUiID09PSBkLCBmID0geCsrOyByZXR1cm4gYi5maXJzdCA/IGZ1bmN0aW9uIChiLCBjLCBmKSB7IHdoaWxlIChiID0gYltkXSkgaWYgKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgcmV0dXJuIGEoYiwgYywgZikgfSA6IGZ1bmN0aW9uIChiLCBjLCBnKSB7IHZhciBoLCBpLCBqID0gW3csIGZdOyBpZiAoZykgeyB3aGlsZSAoYiA9IGJbZF0pIGlmICgoMSA9PT0gYi5ub2RlVHlwZSB8fCBlKSAmJiBhKGIsIGMsIGcpKSByZXR1cm4gITAgfSBlbHNlIHdoaWxlIChiID0gYltkXSkgaWYgKDEgPT09IGIubm9kZVR5cGUgfHwgZSkgeyBpZiAoaSA9IGJbdV0gfHwgKGJbdV0gPSB7fSksIChoID0gaVtkXSkgJiYgaFswXSA9PT0gdyAmJiBoWzFdID09PSBmKSByZXR1cm4galsyXSA9IGhbMl07IGlmIChpW2RdID0gaiwgalsyXSA9IGEoYiwgYywgZykpIHJldHVybiAhMCB9IH0gfSBmdW5jdGlvbiBzYihhKSB7IHJldHVybiBhLmxlbmd0aCA+IDEgPyBmdW5jdGlvbiAoYiwgYywgZCkgeyB2YXIgZSA9IGEubGVuZ3RoOyB3aGlsZSAoZS0tKSBpZiAoIWFbZV0oYiwgYywgZCkpIHJldHVybiAhMTsgcmV0dXJuICEwIH0gOiBhWzBdIH0gZnVuY3Rpb24gdGIoYSwgYiwgYykgeyBmb3IgKHZhciBkID0gMCwgZSA9IGIubGVuZ3RoOyBlID4gZDsgZCsrKSBmYihhLCBiW2RdLCBjKTsgcmV0dXJuIGMgfSBmdW5jdGlvbiB1YihhLCBiLCBjLCBkLCBlKSB7IGZvciAodmFyIGYsIGcgPSBbXSwgaCA9IDAsIGkgPSBhLmxlbmd0aCwgaiA9IG51bGwgIT0gYjsgaSA+IGg7IGgrKykgKGYgPSBhW2hdKSAmJiAoIWMgfHwgYyhmLCBkLCBlKSkgJiYgKGcucHVzaChmKSwgaiAmJiBiLnB1c2goaCkpOyByZXR1cm4gZyB9IGZ1bmN0aW9uIHZiKGEsIGIsIGMsIGQsIGUsIGYpIHsgcmV0dXJuIGQgJiYgIWRbdV0gJiYgKGQgPSB2YihkKSksIGUgJiYgIWVbdV0gJiYgKGUgPSB2YihlLCBmKSksIGhiKGZ1bmN0aW9uIChmLCBnLCBoLCBpKSB7IHZhciBqLCBrLCBsLCBtID0gW10sIG4gPSBbXSwgbyA9IGcubGVuZ3RoLCBwID0gZiB8fCB0YihiIHx8ICIqIiwgaC5ub2RlVHlwZSA/IFtoXSA6IGgsIFtdKSwgcSA9ICFhIHx8ICFmICYmIGIgPyBwIDogdWIocCwgbSwgYSwgaCwgaSksIHIgPSBjID8gZSB8fCAoZiA/IGEgOiBvIHx8IGQpID8gW10gOiBnIDogcTsgaWYgKGMgJiYgYyhxLCByLCBoLCBpKSwgZCkgeyBqID0gdWIociwgbiksIGQoaiwgW10sIGgsIGkpLCBrID0gai5sZW5ndGg7IHdoaWxlIChrLS0pIChsID0galtrXSkgJiYgKHJbbltrXV0gPSAhKHFbbltrXV0gPSBsKSkgfSBpZiAoZikgeyBpZiAoZSB8fCBhKSB7IGlmIChlKSB7IGogPSBbXSwgayA9IHIubGVuZ3RoOyB3aGlsZSAoay0tKSAobCA9IHJba10pICYmIGoucHVzaChxW2tdID0gbCk7IGUobnVsbCwgciA9IFtdLCBqLCBpKSB9IGsgPSByLmxlbmd0aDsgd2hpbGUgKGstLSkgKGwgPSByW2tdKSAmJiAoaiA9IGUgPyBLLmNhbGwoZiwgbCkgOiBtW2tdKSA+IC0xICYmIChmW2pdID0gIShnW2pdID0gbCkpIH0gfSBlbHNlIHIgPSB1YihyID09PSBnID8gci5zcGxpY2Uobywgci5sZW5ndGgpIDogciksIGUgPyBlKG51bGwsIGcsIHIsIGkpIDogSS5hcHBseShnLCByKSB9KSB9IGZ1bmN0aW9uIHdiKGEpIHsgZm9yICh2YXIgYiwgYywgZSwgZiA9IGEubGVuZ3RoLCBnID0gZC5yZWxhdGl2ZVthWzBdLnR5cGVdLCBoID0gZyB8fCBkLnJlbGF0aXZlWyIgIl0sIGkgPSBnID8gMSA6IDAsIGsgPSByYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA9PT0gYiB9LCBoLCAhMCksIGwgPSByYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gSy5jYWxsKGIsIGEpID4gLTEgfSwgaCwgITApLCBtID0gW2Z1bmN0aW9uIChhLCBjLCBkKSB7IHJldHVybiAhZyAmJiAoZCB8fCBjICE9PSBqKSB8fCAoKGIgPSBjKS5ub2RlVHlwZSA/IGsoYSwgYywgZCkgOiBsKGEsIGMsIGQpKSB9XTsgZiA+IGk7IGkrKykgaWYgKGMgPSBkLnJlbGF0aXZlW2FbaV0udHlwZV0pIG0gPSBbcmIoc2IobSksIGMpXTsgZWxzZSB7IGlmIChjID0gZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLCBhW2ldLm1hdGNoZXMpLCBjW3VdKSB7IGZvciAoZSA9ICsraTsgZiA+IGU7IGUrKykgaWYgKGQucmVsYXRpdmVbYVtlXS50eXBlXSkgYnJlYWs7IHJldHVybiB2YihpID4gMSAmJiBzYihtKSwgaSA+IDEgJiYgcWIoYS5zbGljZSgwLCBpIC0gMSkuY29uY2F0KHsgdmFsdWU6ICIgIiA9PT0gYVtpIC0gMl0udHlwZSA/ICIqIiA6ICIiIH0pKS5yZXBsYWNlKFIsICIkMSIpLCBjLCBlID4gaSAmJiB3YihhLnNsaWNlKGksIGUpKSwgZiA+IGUgJiYgd2IoYSA9IGEuc2xpY2UoZSkpLCBmID4gZSAmJiBxYihhKSkgfSBtLnB1c2goYykgfSByZXR1cm4gc2IobSkgfSBmdW5jdGlvbiB4YihhLCBiKSB7IHZhciBjID0gYi5sZW5ndGggPiAwLCBlID0gYS5sZW5ndGggPiAwLCBmID0gZnVuY3Rpb24gKGYsIGcsIGgsIGksIGspIHsgdmFyIGwsIG0sIG8sIHAgPSAwLCBxID0gIjAiLCByID0gZiAmJiBbXSwgcyA9IFtdLCB0ID0gaiwgdSA9IGYgfHwgZSAmJiBkLmZpbmQuVEFHKCIqIiwgayksIHYgPSB3ICs9IG51bGwgPT0gdCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IC4xLCB4ID0gdS5sZW5ndGg7IGZvciAoayAmJiAoaiA9IGcgIT09IG4gJiYgZykgOyBxICE9PSB4ICYmIG51bGwgIT0gKGwgPSB1W3FdKSA7IHErKykgeyBpZiAoZSAmJiBsKSB7IG0gPSAwOyB3aGlsZSAobyA9IGFbbSsrXSkgaWYgKG8obCwgZywgaCkpIHsgaS5wdXNoKGwpOyBicmVhayB9IGsgJiYgKHcgPSB2KSB9IGMgJiYgKChsID0gIW8gJiYgbCkgJiYgcC0tLCBmICYmIHIucHVzaChsKSkgfSBpZiAocCArPSBxLCBjICYmIHEgIT09IHApIHsgbSA9IDA7IHdoaWxlIChvID0gYlttKytdKSBvKHIsIHMsIGcsIGgpOyBpZiAoZikgeyBpZiAocCA+IDApIHdoaWxlIChxLS0pIHJbcV0gfHwgc1txXSB8fCAoc1txXSA9IEcuY2FsbChpKSk7IHMgPSB1YihzKSB9IEkuYXBwbHkoaSwgcyksIGsgJiYgIWYgJiYgcy5sZW5ndGggPiAwICYmIHAgKyBiLmxlbmd0aCA+IDEgJiYgZmIudW5pcXVlU29ydChpKSB9IHJldHVybiBrICYmICh3ID0gdiwgaiA9IHQpLCByIH07IHJldHVybiBjID8gaGIoZikgOiBmIH0gcmV0dXJuIGggPSBmYi5jb21waWxlID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSBbXSwgZSA9IFtdLCBmID0gQVthICsgIiAiXTsgaWYgKCFmKSB7IGIgfHwgKGIgPSBnKGEpKSwgYyA9IGIubGVuZ3RoOyB3aGlsZSAoYy0tKSBmID0gd2IoYltjXSksIGZbdV0gPyBkLnB1c2goZikgOiBlLnB1c2goZik7IGYgPSBBKGEsIHhiKGUsIGQpKSwgZi5zZWxlY3RvciA9IGEgfSByZXR1cm4gZiB9LCBpID0gZmIuc2VsZWN0ID0gZnVuY3Rpb24gKGEsIGIsIGUsIGYpIHsgdmFyIGksIGosIGssIGwsIG0sIG4gPSAiZnVuY3Rpb24iID09IHR5cGVvZiBhICYmIGEsIG8gPSAhZiAmJiBnKGEgPSBuLnNlbGVjdG9yIHx8IGEpOyBpZiAoZSA9IGUgfHwgW10sIDEgPT09IG8ubGVuZ3RoKSB7IGlmIChqID0gb1swXSA9IG9bMF0uc2xpY2UoMCksIGoubGVuZ3RoID4gMiAmJiAiSUQiID09PSAoayA9IGpbMF0pLnR5cGUgJiYgYy5nZXRCeUlkICYmIDkgPT09IGIubm9kZVR5cGUgJiYgcCAmJiBkLnJlbGF0aXZlW2pbMV0udHlwZV0pIHsgaWYgKGIgPSAoZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLCBkYiksIGIpIHx8IFtdKVswXSwgIWIpIHJldHVybiBlOyBuICYmIChiID0gYi5wYXJlbnROb2RlKSwgYSA9IGEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCkgfSBpID0gWC5uZWVkc0NvbnRleHQudGVzdChhKSA/IDAgOiBqLmxlbmd0aDsgd2hpbGUgKGktLSkgeyBpZiAoayA9IGpbaV0sIGQucmVsYXRpdmVbbCA9IGsudHlwZV0pIGJyZWFrOyBpZiAoKG0gPSBkLmZpbmRbbF0pICYmIChmID0gbShrLm1hdGNoZXNbMF0ucmVwbGFjZShjYiwgZGIpLCBhYi50ZXN0KGpbMF0udHlwZSkgJiYgb2IoYi5wYXJlbnROb2RlKSB8fCBiKSkpIHsgaWYgKGouc3BsaWNlKGksIDEpLCBhID0gZi5sZW5ndGggJiYgcWIoaiksICFhKSByZXR1cm4gSS5hcHBseShlLCBmKSwgZTsgYnJlYWsgfSB9IH0gcmV0dXJuIChuIHx8IGgoYSwgbykpKGYsIGIsICFwLCBlLCBhYi50ZXN0KGEpICYmIG9iKGIucGFyZW50Tm9kZSkgfHwgYiksIGUgfSwgYy5zb3J0U3RhYmxlID0gdS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKSA9PT0gdSwgYy5kZXRlY3REdXBsaWNhdGVzID0gISFsLCBtKCksIGMuc29ydERldGFjaGVkID0gaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIDEgJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpIH0pLCBpYihmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiIsICIjIiA9PT0gYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIH0pIHx8IGpiKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhLmdldEF0dHJpYnV0ZShiLCAidHlwZSIgPT09IGIudG9Mb3dlckNhc2UoKSA/IDEgOiAyKSB9KSwgYy5hdHRyaWJ1dGVzICYmIGliKGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmlubmVySFRNTCA9ICI8aW5wdXQvPiIsIGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgIiIpLCAiIiA9PT0gYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKSB9KSB8fCBqYigidmFsdWUiLCBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYyB8fCAiaW5wdXQiICE9PSBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPyB2b2lkIDAgOiBhLmRlZmF1bHRWYWx1ZSB9KSwgaWIoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG51bGwgPT0gYS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgfSkgfHwgamIoTCwgZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiBjID8gdm9pZCAwIDogYVtiXSA9PT0gITAgPyBiLnRvTG93ZXJDYXNlKCkgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgZC5zcGVjaWZpZWQgPyBkLnZhbHVlIDogbnVsbCB9KSwgZmIgfShhKTsgbS5maW5kID0gcywgbS5leHByID0gcy5zZWxlY3RvcnMsIG0uZXhwclsiOiJdID0gbS5leHByLnBzZXVkb3MsIG0udW5pcXVlID0gcy51bmlxdWVTb3J0LCBtLnRleHQgPSBzLmdldFRleHQsIG0uaXNYTUxEb2MgPSBzLmlzWE1MLCBtLmNvbnRhaW5zID0gcy5jb250YWluczsgdmFyIHQgPSBtLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LCB1ID0gL148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLywgdiA9IC9eLlteOiNcW1wuLF0qJC87IGZ1bmN0aW9uIHcoYSwgYiwgYykgeyBpZiAobS5pc0Z1bmN0aW9uKGIpKSByZXR1cm4gbS5ncmVwKGEsIGZ1bmN0aW9uIChhLCBkKSB7IHJldHVybiAhIWIuY2FsbChhLCBkLCBhKSAhPT0gYyB9KTsgaWYgKGIubm9kZVR5cGUpIHJldHVybiBtLmdyZXAoYSwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgPT09IGIgIT09IGMgfSk7IGlmICgic3RyaW5nIiA9PSB0eXBlb2YgYikgeyBpZiAodi50ZXN0KGIpKSByZXR1cm4gbS5maWx0ZXIoYiwgYSwgYyk7IGIgPSBtLmZpbHRlcihiLCBhKSB9IHJldHVybiBtLmdyZXAoYSwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uaW5BcnJheShhLCBiKSA+PSAwICE9PSBjIH0pIH0gbS5maWx0ZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9IGJbMF07IHJldHVybiBjICYmIChhID0gIjpub3QoIiArIGEgKyAiKSIpLCAxID09PSBiLmxlbmd0aCAmJiAxID09PSBkLm5vZGVUeXBlID8gbS5maW5kLm1hdGNoZXNTZWxlY3RvcihkLCBhKSA/IFtkXSA6IFtdIDogbS5maW5kLm1hdGNoZXMoYSwgbS5ncmVwKGIsIGZ1bmN0aW9uIChhKSB7IHJldHVybiAxID09PSBhLm5vZGVUeXBlIH0pKSB9LCBtLmZuLmV4dGVuZCh7IGZpbmQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gW10sIGQgPSB0aGlzLCBlID0gZC5sZW5ndGg7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgYSkgcmV0dXJuIHRoaXMucHVzaFN0YWNrKG0oYSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yIChiID0gMDsgZSA+IGI7IGIrKykgaWYgKG0uY29udGFpbnMoZFtiXSwgdGhpcykpIHJldHVybiAhMCB9KSk7IGZvciAoYiA9IDA7IGUgPiBiOyBiKyspIG0uZmluZChhLCBkW2JdLCBjKTsgcmV0dXJuIGMgPSB0aGlzLnB1c2hTdGFjayhlID4gMSA/IG0udW5pcXVlKGMpIDogYyksIGMuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArICIgIiArIGEgOiBhLCBjIH0sIGZpbHRlcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcywgYSB8fCBbXSwgITEpKSB9LCBub3Q6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLnB1c2hTdGFjayh3KHRoaXMsIGEgfHwgW10sICEwKSkgfSwgaXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAhIXcodGhpcywgInN0cmluZyIgPT0gdHlwZW9mIGEgJiYgdC50ZXN0KGEpID8gbShhKSA6IGEgfHwgW10sICExKS5sZW5ndGggfSB9KTsgdmFyIHgsIHkgPSBhLmRvY3VtZW50LCB6ID0gL14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLywgQSA9IG0uZm4uaW5pdCA9IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkOyBpZiAoIWEpIHJldHVybiB0aGlzOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGEpIHsgaWYgKGMgPSAiPCIgPT09IGEuY2hhckF0KDApICYmICI+IiA9PT0gYS5jaGFyQXQoYS5sZW5ndGggLSAxKSAmJiBhLmxlbmd0aCA+PSAzID8gW251bGwsIGEsIG51bGxdIDogei5leGVjKGEpLCAhYyB8fCAhY1sxXSAmJiBiKSByZXR1cm4gIWIgfHwgYi5qcXVlcnkgPyAoYiB8fCB4KS5maW5kKGEpIDogdGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpOyBpZiAoY1sxXSkgeyBpZiAoYiA9IGIgaW5zdGFuY2VvZiBtID8gYlswXSA6IGIsIG0ubWVyZ2UodGhpcywgbS5wYXJzZUhUTUwoY1sxXSwgYiAmJiBiLm5vZGVUeXBlID8gYi5vd25lckRvY3VtZW50IHx8IGIgOiB5LCAhMCkpLCB1LnRlc3QoY1sxXSkgJiYgbS5pc1BsYWluT2JqZWN0KGIpKSBmb3IgKGMgaW4gYikgbS5pc0Z1bmN0aW9uKHRoaXNbY10pID8gdGhpc1tjXShiW2NdKSA6IHRoaXMuYXR0cihjLCBiW2NdKTsgcmV0dXJuIHRoaXMgfSBpZiAoZCA9IHkuZ2V0RWxlbWVudEJ5SWQoY1syXSksIGQgJiYgZC5wYXJlbnROb2RlKSB7IGlmIChkLmlkICE9PSBjWzJdKSByZXR1cm4geC5maW5kKGEpOyB0aGlzLmxlbmd0aCA9IDEsIHRoaXNbMF0gPSBkIH0gcmV0dXJuIHRoaXMuY29udGV4dCA9IHksIHRoaXMuc2VsZWN0b3IgPSBhLCB0aGlzIH0gcmV0dXJuIGEubm9kZVR5cGUgPyAodGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IGEsIHRoaXMubGVuZ3RoID0gMSwgdGhpcykgOiBtLmlzRnVuY3Rpb24oYSkgPyAidW5kZWZpbmVkIiAhPSB0eXBlb2YgeC5yZWFkeSA/IHgucmVhZHkoYSkgOiBhKG0pIDogKHZvaWQgMCAhPT0gYS5zZWxlY3RvciAmJiAodGhpcy5zZWxlY3RvciA9IGEuc2VsZWN0b3IsIHRoaXMuY29udGV4dCA9IGEuY29udGV4dCksIG0ubWFrZUFycmF5KGEsIHRoaXMpKSB9OyBBLnByb3RvdHlwZSA9IG0uZm4sIHggPSBtKHkpOyB2YXIgQiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLCBDID0geyBjaGlsZHJlbjogITAsIGNvbnRlbnRzOiAhMCwgbmV4dDogITAsIHByZXY6ICEwIH07IG0uZXh0ZW5kKHsgZGlyOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9IFtdLCBlID0gYVtiXTsgd2hpbGUgKGUgJiYgOSAhPT0gZS5ub2RlVHlwZSAmJiAodm9pZCAwID09PSBjIHx8IDEgIT09IGUubm9kZVR5cGUgfHwgIW0oZSkuaXMoYykpKSAxID09PSBlLm5vZGVUeXBlICYmIGQucHVzaChlKSwgZSA9IGVbYl07IHJldHVybiBkIH0sIHNpYmxpbmc6IGZ1bmN0aW9uIChhLCBiKSB7IGZvciAodmFyIGMgPSBbXTsgYTsgYSA9IGEubmV4dFNpYmxpbmcpIDEgPT09IGEubm9kZVR5cGUgJiYgYSAhPT0gYiAmJiBjLnB1c2goYSk7IHJldHVybiBjIH0gfSksIG0uZm4uZXh0ZW5kKHsgaGFzOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IG0oYSwgdGhpcyksIGQgPSBjLmxlbmd0aDsgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uICgpIHsgZm9yIChiID0gMDsgZCA+IGI7IGIrKykgaWYgKG0uY29udGFpbnModGhpcywgY1tiXSkpIHJldHVybiAhMCB9KSB9LCBjbG9zZXN0OiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBjLCBkID0gMCwgZSA9IHRoaXMubGVuZ3RoLCBmID0gW10sIGcgPSB0LnRlc3QoYSkgfHwgInN0cmluZyIgIT0gdHlwZW9mIGEgPyBtKGEsIGIgfHwgdGhpcy5jb250ZXh0KSA6IDA7IGUgPiBkOyBkKyspIGZvciAoYyA9IHRoaXNbZF07IGMgJiYgYyAhPT0gYjsgYyA9IGMucGFyZW50Tm9kZSkgaWYgKGMubm9kZVR5cGUgPCAxMSAmJiAoZyA/IGcuaW5kZXgoYykgPiAtMSA6IDEgPT09IGMubm9kZVR5cGUgJiYgbS5maW5kLm1hdGNoZXNTZWxlY3RvcihjLCBhKSkpIHsgZi5wdXNoKGMpOyBicmVhayB9IHJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aCA+IDEgPyBtLnVuaXF1ZShmKSA6IGYpIH0sIGluZGV4OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSA/ICJzdHJpbmciID09IHR5cGVvZiBhID8gbS5pbkFycmF5KHRoaXNbMF0sIG0oYSkpIDogbS5pbkFycmF5KGEuanF1ZXJ5ID8gYVswXSA6IGEsIHRoaXMpIDogdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xIH0sIGFkZDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKG0udW5pcXVlKG0ubWVyZ2UodGhpcy5nZXQoKSwgbShhLCBiKSkpKSB9LCBhZGRCYWNrOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5hZGQobnVsbCA9PSBhID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSkgfSB9KTsgZnVuY3Rpb24gRChhLCBiKSB7IGRvIGEgPSBhW2JdOyB3aGlsZSAoYSAmJiAxICE9PSBhLm5vZGVUeXBlKTsgcmV0dXJuIGEgfSBtLmVhY2goeyBwYXJlbnQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5wYXJlbnROb2RlOyByZXR1cm4gYiAmJiAxMSAhPT0gYi5ub2RlVHlwZSA/IGIgOiBudWxsIH0sIHBhcmVudHM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLmRpcihhLCAicGFyZW50Tm9kZSIpIH0sIHBhcmVudHNVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIG0uZGlyKGEsICJwYXJlbnROb2RlIiwgYykgfSwgbmV4dDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIEQoYSwgIm5leHRTaWJsaW5nIikgfSwgcHJldjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIEQoYSwgInByZXZpb3VzU2libGluZyIpIH0sIG5leHRBbGw6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLmRpcihhLCAibmV4dFNpYmxpbmciKSB9LCBwcmV2QWxsOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5kaXIoYSwgInByZXZpb3VzU2libGluZyIpIH0sIG5leHRVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIG0uZGlyKGEsICJuZXh0U2libGluZyIsIGMpIH0sIHByZXZVbnRpbDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIG0uZGlyKGEsICJwcmV2aW91c1NpYmxpbmciLCBjKSB9LCBzaWJsaW5nczogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uc2libGluZygoYS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBhKSB9LCBjaGlsZHJlbjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uc2libGluZyhhLmZpcnN0Q2hpbGQpIH0sIGNvbnRlbnRzOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5ub2RlTmFtZShhLCAiaWZyYW1lIikgPyBhLmNvbnRlbnREb2N1bWVudCB8fCBhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOiBtLm1lcmdlKFtdLCBhLmNoaWxkTm9kZXMpIH0gfSwgZnVuY3Rpb24gKGEsIGIpIHsgbS5mblthXSA9IGZ1bmN0aW9uIChjLCBkKSB7IHZhciBlID0gbS5tYXAodGhpcywgYiwgYyk7IHJldHVybiAiVW50aWwiICE9PSBhLnNsaWNlKC01KSAmJiAoZCA9IGMpLCBkICYmICJzdHJpbmciID09IHR5cGVvZiBkICYmIChlID0gbS5maWx0ZXIoZCwgZSkpLCB0aGlzLmxlbmd0aCA+IDEgJiYgKENbYV0gfHwgKGUgPSBtLnVuaXF1ZShlKSksIEIudGVzdChhKSAmJiAoZSA9IGUucmV2ZXJzZSgpKSksIHRoaXMucHVzaFN0YWNrKGUpIH0gfSk7IHZhciBFID0gL1xTKy9nLCBGID0ge307IGZ1bmN0aW9uIEcoYSkgeyB2YXIgYiA9IEZbYV0gPSB7fTsgcmV0dXJuIG0uZWFjaChhLm1hdGNoKEUpIHx8IFtdLCBmdW5jdGlvbiAoYSwgYykgeyBiW2NdID0gITAgfSksIGIgfSBtLkNhbGxiYWNrcyA9IGZ1bmN0aW9uIChhKSB7IGEgPSAic3RyaW5nIiA9PSB0eXBlb2YgYSA/IEZbYV0gfHwgRyhhKSA6IG0uZXh0ZW5kKHt9LCBhKTsgdmFyIGIsIGMsIGQsIGUsIGYsIGcsIGggPSBbXSwgaSA9ICFhLm9uY2UgJiYgW10sIGogPSBmdW5jdGlvbiAobCkgeyBmb3IgKGMgPSBhLm1lbW9yeSAmJiBsLCBkID0gITAsIGYgPSBnIHx8IDAsIGcgPSAwLCBlID0gaC5sZW5ndGgsIGIgPSAhMDsgaCAmJiBlID4gZjsgZisrKSBpZiAoaFtmXS5hcHBseShsWzBdLCBsWzFdKSA9PT0gITEgJiYgYS5zdG9wT25GYWxzZSkgeyBjID0gITE7IGJyZWFrIH0gYiA9ICExLCBoICYmIChpID8gaS5sZW5ndGggJiYgaihpLnNoaWZ0KCkpIDogYyA/IGggPSBbXSA6IGsuZGlzYWJsZSgpKSB9LCBrID0geyBhZGQ6IGZ1bmN0aW9uICgpIHsgaWYgKGgpIHsgdmFyIGQgPSBoLmxlbmd0aDsgIWZ1bmN0aW9uIGYoYikgeyBtLmVhY2goYiwgZnVuY3Rpb24gKGIsIGMpIHsgdmFyIGQgPSBtLnR5cGUoYyk7ICJmdW5jdGlvbiIgPT09IGQgPyBhLnVuaXF1ZSAmJiBrLmhhcyhjKSB8fCBoLnB1c2goYykgOiBjICYmIGMubGVuZ3RoICYmICJzdHJpbmciICE9PSBkICYmIGYoYykgfSkgfShhcmd1bWVudHMpLCBiID8gZSA9IGgubGVuZ3RoIDogYyAmJiAoZyA9IGQsIGooYykpIH0gcmV0dXJuIHRoaXMgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoICYmIG0uZWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uIChhLCBjKSB7IHZhciBkOyB3aGlsZSAoKGQgPSBtLmluQXJyYXkoYywgaCwgZCkpID4gLTEpIGguc3BsaWNlKGQsIDEpLCBiICYmIChlID49IGQgJiYgZS0tLCBmID49IGQgJiYgZi0tKSB9KSwgdGhpcyB9LCBoYXM6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID8gbS5pbkFycmF5KGEsIGgpID4gLTEgOiAhKCFoIHx8ICFoLmxlbmd0aCkgfSwgZW1wdHk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGggPSBbXSwgZSA9IDAsIHRoaXMgfSwgZGlzYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gaCA9IGkgPSBjID0gdm9pZCAwLCB0aGlzIH0sIGRpc2FibGVkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhaCB9LCBsb2NrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBpID0gdm9pZCAwLCBjIHx8IGsuZGlzYWJsZSgpLCB0aGlzIH0sIGxvY2tlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIWkgfSwgZmlyZVdpdGg6IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiAhaCB8fCBkICYmICFpIHx8IChjID0gYyB8fCBbXSwgYyA9IFthLCBjLnNsaWNlID8gYy5zbGljZSgpIDogY10sIGIgPyBpLnB1c2goYykgOiBqKGMpKSwgdGhpcyB9LCBmaXJlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBrLmZpcmVXaXRoKHRoaXMsIGFyZ3VtZW50cyksIHRoaXMgfSwgZmlyZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEhZCB9IH07IHJldHVybiBrIH0sIG0uZXh0ZW5kKHsgRGVmZXJyZWQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gW1sicmVzb2x2ZSIsICJkb25lIiwgbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZXNvbHZlZCJdLCBbInJlamVjdCIsICJmYWlsIiwgbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZWplY3RlZCJdLCBbIm5vdGlmeSIsICJwcm9ncmVzcyIsIG0uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLCBjID0gInBlbmRpbmciLCBkID0geyBzdGF0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gYyB9LCBhbHdheXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSwgdGhpcyB9LCB0aGVuOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gYXJndW1lbnRzOyByZXR1cm4gbS5EZWZlcnJlZChmdW5jdGlvbiAoYykgeyBtLmVhY2goYiwgZnVuY3Rpb24gKGIsIGYpIHsgdmFyIGcgPSBtLmlzRnVuY3Rpb24oYVtiXSkgJiYgYVtiXTsgZVtmWzFdXShmdW5jdGlvbiAoKSB7IHZhciBhID0gZyAmJiBnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGEgJiYgbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSkgPyBhLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpIDogY1tmWzBdICsgIldpdGgiXSh0aGlzID09PSBkID8gYy5wcm9taXNlKCkgOiB0aGlzLCBnID8gW2FdIDogYXJndW1lbnRzKSB9KSB9KSwgYSA9IG51bGwgfSkucHJvbWlzZSgpIH0sIHByb21pc2U6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsICE9IGEgPyBtLmV4dGVuZChhLCBkKSA6IGQgfSB9LCBlID0ge307IHJldHVybiBkLnBpcGUgPSBkLnRoZW4sIG0uZWFjaChiLCBmdW5jdGlvbiAoYSwgZikgeyB2YXIgZyA9IGZbMl0sIGggPSBmWzNdOyBkW2ZbMV1dID0gZy5hZGQsIGggJiYgZy5hZGQoZnVuY3Rpb24gKCkgeyBjID0gaCB9LCBiWzEgXiBhXVsyXS5kaXNhYmxlLCBiWzJdWzJdLmxvY2spLCBlW2ZbMF1dID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZVtmWzBdICsgIldpdGgiXSh0aGlzID09PSBlID8gZCA6IHRoaXMsIGFyZ3VtZW50cyksIHRoaXMgfSwgZVtmWzBdICsgIldpdGgiXSA9IGcuZmlyZVdpdGggfSksIGQucHJvbWlzZShlKSwgYSAmJiBhLmNhbGwoZSwgZSksIGUgfSwgd2hlbjogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSAwLCBjID0gZC5jYWxsKGFyZ3VtZW50cyksIGUgPSBjLmxlbmd0aCwgZiA9IDEgIT09IGUgfHwgYSAmJiBtLmlzRnVuY3Rpb24oYS5wcm9taXNlKSA/IGUgOiAwLCBnID0gMSA9PT0gZiA/IGEgOiBtLkRlZmVycmVkKCksIGggPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgYlthXSA9IHRoaXMsIGNbYV0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGQuY2FsbChhcmd1bWVudHMpIDogZSwgYyA9PT0gaSA/IGcubm90aWZ5V2l0aChiLCBjKSA6IC0tZiB8fCBnLnJlc29sdmVXaXRoKGIsIGMpIH0gfSwgaSwgaiwgazsgaWYgKGUgPiAxKSBmb3IgKGkgPSBuZXcgQXJyYXkoZSksIGogPSBuZXcgQXJyYXkoZSksIGsgPSBuZXcgQXJyYXkoZSkgOyBlID4gYjsgYisrKSBjW2JdICYmIG0uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpID8gY1tiXS5wcm9taXNlKCkuZG9uZShoKGIsIGssIGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsIGosIGkpKSA6IC0tZjsgcmV0dXJuIGYgfHwgZy5yZXNvbHZlV2l0aChrLCBjKSwgZy5wcm9taXNlKCkgfSB9KTsgdmFyIEg7IG0uZm4ucmVhZHkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSwgdGhpcyB9LCBtLmV4dGVuZCh7IGlzUmVhZHk6ICExLCByZWFkeVdhaXQ6IDEsIGhvbGRSZWFkeTogZnVuY3Rpb24gKGEpIHsgYSA/IG0ucmVhZHlXYWl0KysgOiBtLnJlYWR5KCEwKSB9LCByZWFkeTogZnVuY3Rpb24gKGEpIHsgaWYgKGEgPT09ICEwID8gIS0tbS5yZWFkeVdhaXQgOiAhbS5pc1JlYWR5KSB7IGlmICgheS5ib2R5KSByZXR1cm4gc2V0VGltZW91dChtLnJlYWR5KTsgbS5pc1JlYWR5ID0gITAsIGEgIT09ICEwICYmIC0tbS5yZWFkeVdhaXQgPiAwIHx8IChILnJlc29sdmVXaXRoKHksIFttXSksIG0uZm4udHJpZ2dlckhhbmRsZXIgJiYgKG0oeSkudHJpZ2dlckhhbmRsZXIoInJlYWR5IiksIG0oeSkub2ZmKCJyZWFkeSIpKSkgfSB9IH0pOyBmdW5jdGlvbiBJKCkgeyB5LmFkZEV2ZW50TGlzdGVuZXIgPyAoeS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgSiwgITEpLCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLCBKLCAhMSkpIDogKHkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIEopLCBhLmRldGFjaEV2ZW50KCJvbmxvYWQiLCBKKSkgfSBmdW5jdGlvbiBKKCkgeyAoeS5hZGRFdmVudExpc3RlbmVyIHx8ICJsb2FkIiA9PT0gZXZlbnQudHlwZSB8fCAiY29tcGxldGUiID09PSB5LnJlYWR5U3RhdGUpICYmIChJKCksIG0ucmVhZHkoKSkgfSBtLnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiAoYikgeyBpZiAoIUgpIGlmIChIID0gbS5EZWZlcnJlZCgpLCAiY29tcGxldGUiID09PSB5LnJlYWR5U3RhdGUpIHNldFRpbWVvdXQobS5yZWFkeSk7IGVsc2UgaWYgKHkuYWRkRXZlbnRMaXN0ZW5lcikgeS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgSiwgITEpLCBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBKLCAhMSk7IGVsc2UgeyB5LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBKKSwgYS5hdHRhY2hFdmVudCgib25sb2FkIiwgSik7IHZhciBjID0gITE7IHRyeSB7IGMgPSBudWxsID09IGEuZnJhbWVFbGVtZW50ICYmIHkuZG9jdW1lbnRFbGVtZW50IH0gY2F0Y2ggKGQpIHsgfSBjICYmIGMuZG9TY3JvbGwgJiYgIWZ1bmN0aW9uIGUoKSB7IGlmICghbS5pc1JlYWR5KSB7IHRyeSB7IGMuZG9TY3JvbGwoImxlZnQiKSB9IGNhdGNoIChhKSB7IHJldHVybiBzZXRUaW1lb3V0KGUsIDUwKSB9IEkoKSwgbS5yZWFkeSgpIH0gfSgpIH0gcmV0dXJuIEgucHJvbWlzZShiKSB9OyB2YXIgSyA9ICJ1bmRlZmluZWQiLCBMOyBmb3IgKEwgaW4gbShrKSkgYnJlYWs7IGsub3duTGFzdCA9ICIwIiAhPT0gTCwgay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gITEsIG0oZnVuY3Rpb24gKCkgeyB2YXIgYSwgYiwgYywgZDsgYyA9IHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSwgYyAmJiBjLnN0eWxlICYmIChiID0geS5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZCA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsIGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksIHR5cGVvZiBiLnN0eWxlLnpvb20gIT09IEsgJiYgKGIuc3R5bGUuY3NzVGV4dCA9ICJkaXNwbGF5OmlubGluZTttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjFweDt3aWR0aDoxcHg7em9vbToxIiwgay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gYSA9IDMgPT09IGIub2Zmc2V0V2lkdGgsIGEgJiYgKGMuc3R5bGUuem9vbSA9IDEpKSwgYy5yZW1vdmVDaGlsZChkKSkgfSksIGZ1bmN0aW9uICgpIHsgdmFyIGEgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyBpZiAobnVsbCA9PSBrLmRlbGV0ZUV4cGFuZG8pIHsgay5kZWxldGVFeHBhbmRvID0gITA7IHRyeSB7IGRlbGV0ZSBhLnRlc3QgfSBjYXRjaCAoYikgeyBrLmRlbGV0ZUV4cGFuZG8gPSAhMSB9IH0gYSA9IG51bGwgfSgpLCBtLmFjY2VwdERhdGEgPSBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IG0ubm9EYXRhWyhhLm5vZGVOYW1lICsgIiAiKS50b0xvd2VyQ2FzZSgpXSwgYyA9ICthLm5vZGVUeXBlIHx8IDE7IHJldHVybiAxICE9PSBjICYmIDkgIT09IGMgPyAhMSA6ICFiIHx8IGIgIT09ICEwICYmIGEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikgPT09IGIgfTsgdmFyIE0gPSAvXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLCBOID0gLyhbQS1aXSkvZzsgZnVuY3Rpb24gTyhhLCBiLCBjKSB7IGlmICh2b2lkIDAgPT09IGMgJiYgMSA9PT0gYS5ub2RlVHlwZSkgeyB2YXIgZCA9ICJkYXRhLSIgKyBiLnJlcGxhY2UoTiwgIi0kMSIpLnRvTG93ZXJDYXNlKCk7IGlmIChjID0gYS5nZXRBdHRyaWJ1dGUoZCksICJzdHJpbmciID09IHR5cGVvZiBjKSB7IHRyeSB7IGMgPSAidHJ1ZSIgPT09IGMgPyAhMCA6ICJmYWxzZSIgPT09IGMgPyAhMSA6ICJudWxsIiA9PT0gYyA/IG51bGwgOiArYyArICIiID09PSBjID8gK2MgOiBNLnRlc3QoYykgPyBtLnBhcnNlSlNPTihjKSA6IGMgfSBjYXRjaCAoZSkgeyB9IG0uZGF0YShhLCBiLCBjKSB9IGVsc2UgYyA9IHZvaWQgMCB9IHJldHVybiBjIH0gZnVuY3Rpb24gUChhKSB7IHZhciBiOyBmb3IgKGIgaW4gYSkgaWYgKCgiZGF0YSIgIT09IGIgfHwgIW0uaXNFbXB0eU9iamVjdChhW2JdKSkgJiYgInRvSlNPTiIgIT09IGIpIHJldHVybiAhMTsgcmV0dXJuICEwIH0gZnVuY3Rpb24gUShhLCBiLCBkLCBlKSB7DQogICAgICAgIGlmIChtLmFjY2VwdERhdGEoYSkpIHsNCiAgICAgICAgICAgIHZhciBmLCBnLCBoID0gbS5leHBhbmRvLCBpID0gYS5ub2RlVHlwZSwgaiA9IGkgPyBtLmNhY2hlIDogYSwgayA9IGkgPyBhW2hdIDogYVtoXSAmJiBoOw0KICAgICAgICAgICAgaWYgKGsgJiYgaltrXSAmJiAoZSB8fCBqW2tdLmRhdGEpIHx8IHZvaWQgMCAhPT0gZCB8fCAic3RyaW5nIiAhPSB0eXBlb2YgYikgcmV0dXJuIGsgfHwgKGsgPSBpID8gYVtoXSA9IGMucG9wKCkgfHwgbS5ndWlkKysgOiBoKSwgaltrXSB8fCAoaltrXSA9IGkgPyB7fSA6IHsgdG9KU09OOiBtLm5vb3AgfSksICgib2JqZWN0IiA9PSB0eXBlb2YgYiB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiBiKSAmJiAoZSA/IGpba10gPSBtLmV4dGVuZChqW2tdLCBiKSA6IGpba10uZGF0YSA9IG0uZXh0ZW5kKGpba10uZGF0YSwgYikpLCBnID0galtrXSwgZSB8fCAoZy5kYXRhIHx8IChnLmRhdGEgPSB7fSksIGcgPSBnLmRhdGEpLCB2b2lkIDAgIT09IGQgJiYgKGdbbS5jYW1lbENhc2UoYildID0gZCksICJzdHJpbmciID09IHR5cGVvZiBiID8gKGYgPSBnW2JdLCBudWxsID09IGYgJiYgKGYgPSBnW20uY2FtZWxDYXNlKGIpXSkpIDogZiA9IGcsIGYNCiAgICAgICAgfQ0KICAgIH0gZnVuY3Rpb24gUihhLCBiLCBjKSB7IGlmIChtLmFjY2VwdERhdGEoYSkpIHsgdmFyIGQsIGUsIGYgPSBhLm5vZGVUeXBlLCBnID0gZiA/IG0uY2FjaGUgOiBhLCBoID0gZiA/IGFbbS5leHBhbmRvXSA6IG0uZXhwYW5kbzsgaWYgKGdbaF0pIHsgaWYgKGIgJiYgKGQgPSBjID8gZ1toXSA6IGdbaF0uZGF0YSkpIHsgbS5pc0FycmF5KGIpID8gYiA9IGIuY29uY2F0KG0ubWFwKGIsIG0uY2FtZWxDYXNlKSkgOiBiIGluIGQgPyBiID0gW2JdIDogKGIgPSBtLmNhbWVsQ2FzZShiKSwgYiA9IGIgaW4gZCA/IFtiXSA6IGIuc3BsaXQoIiAiKSksIGUgPSBiLmxlbmd0aDsgd2hpbGUgKGUtLSkgZGVsZXRlIGRbYltlXV07IGlmIChjID8gIVAoZCkgOiAhbS5pc0VtcHR5T2JqZWN0KGQpKSByZXR1cm4gfSAoYyB8fCAoZGVsZXRlIGdbaF0uZGF0YSwgUChnW2hdKSkpICYmIChmID8gbS5jbGVhbkRhdGEoW2FdLCAhMCkgOiBrLmRlbGV0ZUV4cGFuZG8gfHwgZyAhPSBnLndpbmRvdyA/IGRlbGV0ZSBnW2hdIDogZ1toXSA9IG51bGwpIH0gfSB9IG0uZXh0ZW5kKHsgY2FjaGU6IHt9LCBub0RhdGE6IHsgImFwcGxldCAiOiAhMCwgImVtYmVkICI6ICEwLCAib2JqZWN0ICI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiIH0sIGhhc0RhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID0gYS5ub2RlVHlwZSA/IG0uY2FjaGVbYVttLmV4cGFuZG9dXSA6IGFbbS5leHBhbmRvXSwgISFhICYmICFQKGEpIH0sIGRhdGE6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBRKGEsIGIsIGMpIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBSKGEsIGIpIH0sIF9kYXRhOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gUShhLCBiLCBjLCAhMCkgfSwgX3JlbW92ZURhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBSKGEsIGIsICEwKSB9IH0pLCBtLmZuLmV4dGVuZCh7IGRhdGE6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjLCBkLCBlLCBmID0gdGhpc1swXSwgZyA9IGYgJiYgZi5hdHRyaWJ1dGVzOyBpZiAodm9pZCAwID09PSBhKSB7IGlmICh0aGlzLmxlbmd0aCAmJiAoZSA9IG0uZGF0YShmKSwgMSA9PT0gZi5ub2RlVHlwZSAmJiAhbS5fZGF0YShmLCAicGFyc2VkQXR0cnMiKSkpIHsgYyA9IGcubGVuZ3RoOyB3aGlsZSAoYy0tKSBnW2NdICYmIChkID0gZ1tjXS5uYW1lLCAwID09PSBkLmluZGV4T2YoImRhdGEtIikgJiYgKGQgPSBtLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSwgTyhmLCBkLCBlW2RdKSkpOyBtLl9kYXRhKGYsICJwYXJzZWRBdHRycyIsICEwKSB9IHJldHVybiBlIH0gcmV0dXJuICJvYmplY3QiID09IHR5cGVvZiBhID8gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgbS5kYXRhKHRoaXMsIGEpIH0pIDogYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLmRhdGEodGhpcywgYSwgYikgfSkgOiBmID8gTyhmLCBhLCBtLmRhdGEoZiwgYSkpIDogdm9pZCAwIH0sIHJlbW92ZURhdGE6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLnJlbW92ZURhdGEodGhpcywgYSkgfSkgfSB9KSwgbS5leHRlbmQoeyBxdWV1ZTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQ7IHJldHVybiBhID8gKGIgPSAoYiB8fCAiZngiKSArICJxdWV1ZSIsIGQgPSBtLl9kYXRhKGEsIGIpLCBjICYmICghZCB8fCBtLmlzQXJyYXkoYykgPyBkID0gbS5fZGF0YShhLCBiLCBtLm1ha2VBcnJheShjKSkgOiBkLnB1c2goYykpLCBkIHx8IFtdKSA6IHZvaWQgMCB9LCBkZXF1ZXVlOiBmdW5jdGlvbiAoYSwgYikgeyBiID0gYiB8fCAiZngiOyB2YXIgYyA9IG0ucXVldWUoYSwgYiksIGQgPSBjLmxlbmd0aCwgZSA9IGMuc2hpZnQoKSwgZiA9IG0uX3F1ZXVlSG9va3MoYSwgYiksIGcgPSBmdW5jdGlvbiAoKSB7IG0uZGVxdWV1ZShhLCBiKSB9OyAiaW5wcm9ncmVzcyIgPT09IGUgJiYgKGUgPSBjLnNoaWZ0KCksIGQtLSksIGUgJiYgKCJmeCIgPT09IGIgJiYgYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksIGRlbGV0ZSBmLnN0b3AsIGUuY2FsbChhLCBnLCBmKSksICFkICYmIGYgJiYgZi5lbXB0eS5maXJlKCkgfSwgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gYiArICJxdWV1ZUhvb2tzIjsgcmV0dXJuIG0uX2RhdGEoYSwgYykgfHwgbS5fZGF0YShhLCBjLCB7IGVtcHR5OiBtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24gKCkgeyBtLl9yZW1vdmVEYXRhKGEsIGIgKyAicXVldWUiKSwgbS5fcmVtb3ZlRGF0YShhLCBjKSB9KSB9KSB9IH0pLCBtLmZuLmV4dGVuZCh7IHF1ZXVlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IDI7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgYSAmJiAoYiA9IGEsIGEgPSAiZngiLCBjLS0pLCBhcmd1bWVudHMubGVuZ3RoIDwgYyA/IG0ucXVldWUodGhpc1swXSwgYSkgOiB2b2lkIDAgPT09IGIgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBtLnF1ZXVlKHRoaXMsIGEsIGIpOyBtLl9xdWV1ZUhvb2tzKHRoaXMsIGEpLCAiZngiID09PSBhICYmICJpbnByb2dyZXNzIiAhPT0gY1swXSAmJiBtLmRlcXVldWUodGhpcywgYSkgfSkgfSwgZGVxdWV1ZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IG0uZGVxdWV1ZSh0aGlzLCBhKSB9KSB9LCBjbGVhclF1ZXVlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5xdWV1ZShhIHx8ICJmeCIsIFtdKSB9LCBwcm9taXNlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCA9IDEsIGUgPSBtLkRlZmVycmVkKCksIGYgPSB0aGlzLCBnID0gdGhpcy5sZW5ndGgsIGggPSBmdW5jdGlvbiAoKSB7IC0tZCB8fCBlLnJlc29sdmVXaXRoKGYsIFtmXSkgfTsgInN0cmluZyIgIT0gdHlwZW9mIGEgJiYgKGIgPSBhLCBhID0gdm9pZCAwKSwgYSA9IGEgfHwgImZ4Ijsgd2hpbGUgKGctLSkgYyA9IG0uX2RhdGEoZltnXSwgYSArICJxdWV1ZUhvb2tzIiksIGMgJiYgYy5lbXB0eSAmJiAoZCsrLCBjLmVtcHR5LmFkZChoKSk7IHJldHVybiBoKCksIGUucHJvbWlzZShiKSB9IH0pOyB2YXIgUyA9IC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLCBUID0gWyJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiXSwgVSA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID0gYiB8fCBhLCAibm9uZSIgPT09IG0uY3NzKGEsICJkaXNwbGF5IikgfHwgIW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LCBhKSB9LCBWID0gbS5hY2Nlc3MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZiwgZykgeyB2YXIgaCA9IDAsIGkgPSBhLmxlbmd0aCwgaiA9IG51bGwgPT0gYzsgaWYgKCJvYmplY3QiID09PSBtLnR5cGUoYykpIHsgZSA9ICEwOyBmb3IgKGggaW4gYykgbS5hY2Nlc3MoYSwgYiwgaCwgY1toXSwgITAsIGYsIGcpIH0gZWxzZSBpZiAodm9pZCAwICE9PSBkICYmIChlID0gITAsIG0uaXNGdW5jdGlvbihkKSB8fCAoZyA9ICEwKSwgaiAmJiAoZyA/IChiLmNhbGwoYSwgZCksIGIgPSBudWxsKSA6IChqID0gYiwgYiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiBqLmNhbGwobShhKSwgYykgfSkpLCBiKSkgZm9yICg7IGkgPiBoOyBoKyspIGIoYVtoXSwgYywgZyA/IGQgOiBkLmNhbGwoYVtoXSwgaCwgYihhW2hdLCBjKSkpOyByZXR1cm4gZSA/IGEgOiBqID8gYi5jYWxsKGEpIDogaSA/IGIoYVswXSwgYykgOiBmIH0sIFcgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvaTsgIWZ1bmN0aW9uICgpIHsgdmFyIGEgPSB5LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksIGIgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBjID0geS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7IGlmIChiLmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLCBrLmxlYWRpbmdXaGl0ZXNwYWNlID0gMyA9PT0gYi5maXJzdENoaWxkLm5vZGVUeXBlLCBrLnRib2R5ID0gIWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLCBrLmh0bWxTZXJpYWxpemUgPSAhIWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsIGsuaHRtbDVDbG9uZSA9ICI8Om5hdj48LzpuYXY+IiAhPT0geS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCwgYS50eXBlID0gImNoZWNrYm94IiwgYS5jaGVja2VkID0gITAsIGMuYXBwZW5kQ2hpbGQoYSksIGsuYXBwZW5kQ2hlY2tlZCA9IGEuY2hlY2tlZCwgYi5pbm5lckhUTUwgPSAiPHRleHRhcmVhPng8L3RleHRhcmVhPiIsIGsubm9DbG9uZUNoZWNrZWQgPSAhIWIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLCBjLmFwcGVuZENoaWxkKGIpLCBiLmlubmVySFRNTCA9ICI8aW5wdXQgdHlwZT0ncmFkaW8nIGNoZWNrZWQ9J2NoZWNrZWQnIG5hbWU9J3QnLz4iLCBrLmNoZWNrQ2xvbmUgPSBiLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCwgay5ub0Nsb25lRXZlbnQgPSAhMCwgYi5hdHRhY2hFdmVudCAmJiAoYi5hdHRhY2hFdmVudCgib25jbGljayIsIGZ1bmN0aW9uICgpIHsgay5ub0Nsb25lRXZlbnQgPSAhMSB9KSwgYi5jbG9uZU5vZGUoITApLmNsaWNrKCkpLCBudWxsID09IGsuZGVsZXRlRXhwYW5kbykgeyBrLmRlbGV0ZUV4cGFuZG8gPSAhMDsgdHJ5IHsgZGVsZXRlIGIudGVzdCB9IGNhdGNoIChkKSB7IGsuZGVsZXRlRXhwYW5kbyA9ICExIH0gfSB9KCksIGZ1bmN0aW9uICgpIHsgdmFyIGIsIGMsIGQgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyBmb3IgKGIgaW4geyBzdWJtaXQ6ICEwLCBjaGFuZ2U6ICEwLCBmb2N1c2luOiAhMCB9KSBjID0gIm9uIiArIGIsIChrW2IgKyAiQnViYmxlcyJdID0gYyBpbiBhKSB8fCAoZC5zZXRBdHRyaWJ1dGUoYywgInQiKSwga1tiICsgIkJ1YmJsZXMiXSA9IGQuYXR0cmlidXRlc1tjXS5leHBhbmRvID09PSAhMSk7IGQgPSBudWxsIH0oKTsgdmFyIFggPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksIFkgPSAvXmtleS8sIFogPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywgJCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywgXyA9IC9eKFteLl0qKSg/OlwuKC4rKXwpJC87IGZ1bmN0aW9uIGFiKCkgeyByZXR1cm4gITAgfSBmdW5jdGlvbiBiYigpIHsgcmV0dXJuICExIH0gZnVuY3Rpb24gY2IoKSB7IHRyeSB7IHJldHVybiB5LmFjdGl2ZUVsZW1lbnQgfSBjYXRjaCAoYSkgeyB9IH0gbS5ldmVudCA9IHsgZ2xvYmFsOiB7fSwgYWRkOiBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgeyB2YXIgZiwgZywgaCwgaSwgaiwgaywgbCwgbiwgbywgcCwgcSwgciA9IG0uX2RhdGEoYSk7IGlmIChyKSB7IGMuaGFuZGxlciAmJiAoaSA9IGMsIGMgPSBpLmhhbmRsZXIsIGUgPSBpLnNlbGVjdG9yKSwgYy5ndWlkIHx8IChjLmd1aWQgPSBtLmd1aWQrKyksIChnID0gci5ldmVudHMpIHx8IChnID0gci5ldmVudHMgPSB7fSksIChrID0gci5oYW5kbGUpIHx8IChrID0gci5oYW5kbGUgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdHlwZW9mIG0gPT09IEsgfHwgYSAmJiBtLmV2ZW50LnRyaWdnZXJlZCA9PT0gYS50eXBlID8gdm9pZCAwIDogbS5ldmVudC5kaXNwYXRjaC5hcHBseShrLmVsZW0sIGFyZ3VtZW50cykgfSwgay5lbGVtID0gYSksIGIgPSAoYiB8fCAiIikubWF0Y2goRSkgfHwgWyIiXSwgaCA9IGIubGVuZ3RoOyB3aGlsZSAoaC0tKSBmID0gXy5leGVjKGJbaF0pIHx8IFtdLCBvID0gcSA9IGZbMV0sIHAgPSAoZlsyXSB8fCAiIikuc3BsaXQoIi4iKS5zb3J0KCksIG8gJiYgKGogPSBtLmV2ZW50LnNwZWNpYWxbb10gfHwge30sIG8gPSAoZSA/IGouZGVsZWdhdGVUeXBlIDogai5iaW5kVHlwZSkgfHwgbywgaiA9IG0uZXZlbnQuc3BlY2lhbFtvXSB8fCB7fSwgbCA9IG0uZXh0ZW5kKHsgdHlwZTogbywgb3JpZ1R5cGU6IHEsIGRhdGE6IGQsIGhhbmRsZXI6IGMsIGd1aWQ6IGMuZ3VpZCwgc2VsZWN0b3I6IGUsIG5lZWRzQ29udGV4dDogZSAmJiBtLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoZSksIG5hbWVzcGFjZTogcC5qb2luKCIuIikgfSwgaSksIChuID0gZ1tvXSkgfHwgKG4gPSBnW29dID0gW10sIG4uZGVsZWdhdGVDb3VudCA9IDAsIGouc2V0dXAgJiYgai5zZXR1cC5jYWxsKGEsIGQsIHAsIGspICE9PSAhMSB8fCAoYS5hZGRFdmVudExpc3RlbmVyID8gYS5hZGRFdmVudExpc3RlbmVyKG8sIGssICExKSA6IGEuYXR0YWNoRXZlbnQgJiYgYS5hdHRhY2hFdmVudCgib24iICsgbywgaykpKSwgai5hZGQgJiYgKGouYWRkLmNhbGwoYSwgbCksIGwuaGFuZGxlci5ndWlkIHx8IChsLmhhbmRsZXIuZ3VpZCA9IGMuZ3VpZCkpLCBlID8gbi5zcGxpY2Uobi5kZWxlZ2F0ZUNvdW50KyssIDAsIGwpIDogbi5wdXNoKGwpLCBtLmV2ZW50Lmdsb2JhbFtvXSA9ICEwKTsgYSA9IG51bGwgfSB9LCByZW1vdmU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlKSB7IHZhciBmLCBnLCBoLCBpLCBqLCBrLCBsLCBuLCBvLCBwLCBxLCByID0gbS5oYXNEYXRhKGEpICYmIG0uX2RhdGEoYSk7IGlmIChyICYmIChrID0gci5ldmVudHMpKSB7IGIgPSAoYiB8fCAiIikubWF0Y2goRSkgfHwgWyIiXSwgaiA9IGIubGVuZ3RoOyB3aGlsZSAoai0tKSBpZiAoaCA9IF8uZXhlYyhiW2pdKSB8fCBbXSwgbyA9IHEgPSBoWzFdLCBwID0gKGhbMl0gfHwgIiIpLnNwbGl0KCIuIikuc29ydCgpLCBvKSB7IGwgPSBtLmV2ZW50LnNwZWNpYWxbb10gfHwge30sIG8gPSAoZCA/IGwuZGVsZWdhdGVUeXBlIDogbC5iaW5kVHlwZSkgfHwgbywgbiA9IGtbb10gfHwgW10sIGggPSBoWzJdICYmIG5ldyBSZWdFeHAoIihefFxcLikiICsgcC5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIpLCBpID0gZiA9IG4ubGVuZ3RoOyB3aGlsZSAoZi0tKSBnID0gbltmXSwgIWUgJiYgcSAhPT0gZy5vcmlnVHlwZSB8fCBjICYmIGMuZ3VpZCAhPT0gZy5ndWlkIHx8IGggJiYgIWgudGVzdChnLm5hbWVzcGFjZSkgfHwgZCAmJiBkICE9PSBnLnNlbGVjdG9yICYmICgiKioiICE9PSBkIHx8ICFnLnNlbGVjdG9yKSB8fCAobi5zcGxpY2UoZiwgMSksIGcuc2VsZWN0b3IgJiYgbi5kZWxlZ2F0ZUNvdW50LS0sIGwucmVtb3ZlICYmIGwucmVtb3ZlLmNhbGwoYSwgZykpOyBpICYmICFuLmxlbmd0aCAmJiAobC50ZWFyZG93biAmJiBsLnRlYXJkb3duLmNhbGwoYSwgcCwgci5oYW5kbGUpICE9PSAhMSB8fCBtLnJlbW92ZUV2ZW50KGEsIG8sIHIuaGFuZGxlKSwgZGVsZXRlIGtbb10pIH0gZWxzZSBmb3IgKG8gaW4gaykgbS5ldmVudC5yZW1vdmUoYSwgbyArIGJbal0sIGMsIGQsICEwKTsgbS5pc0VtcHR5T2JqZWN0KGspICYmIChkZWxldGUgci5oYW5kbGUsIG0uX3JlbW92ZURhdGEoYSwgImV2ZW50cyIpKSB9IH0sIHRyaWdnZXI6IGZ1bmN0aW9uIChiLCBjLCBkLCBlKSB7IHZhciBmLCBnLCBoLCBpLCBrLCBsLCBuLCBvID0gW2QgfHwgeV0sIHAgPSBqLmNhbGwoYiwgInR5cGUiKSA/IGIudHlwZSA6IGIsIHEgPSBqLmNhbGwoYiwgIm5hbWVzcGFjZSIpID8gYi5uYW1lc3BhY2Uuc3BsaXQoIi4iKSA6IFtdOyBpZiAoaCA9IGwgPSBkID0gZCB8fCB5LCAzICE9PSBkLm5vZGVUeXBlICYmIDggIT09IGQubm9kZVR5cGUgJiYgISQudGVzdChwICsgbS5ldmVudC50cmlnZ2VyZWQpICYmIChwLmluZGV4T2YoIi4iKSA+PSAwICYmIChxID0gcC5zcGxpdCgiLiIpLCBwID0gcS5zaGlmdCgpLCBxLnNvcnQoKSksIGcgPSBwLmluZGV4T2YoIjoiKSA8IDAgJiYgIm9uIiArIHAsIGIgPSBiW20uZXhwYW5kb10gPyBiIDogbmV3IG0uRXZlbnQocCwgIm9iamVjdCIgPT0gdHlwZW9mIGIgJiYgYiksIGIuaXNUcmlnZ2VyID0gZSA/IDIgOiAzLCBiLm5hbWVzcGFjZSA9IHEuam9pbigiLiIpLCBiLm5hbWVzcGFjZV9yZSA9IGIubmFtZXNwYWNlID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBxLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsLCBiLnJlc3VsdCA9IHZvaWQgMCwgYi50YXJnZXQgfHwgKGIudGFyZ2V0ID0gZCksIGMgPSBudWxsID09IGMgPyBbYl0gOiBtLm1ha2VBcnJheShjLCBbYl0pLCBrID0gbS5ldmVudC5zcGVjaWFsW3BdIHx8IHt9LCBlIHx8ICFrLnRyaWdnZXIgfHwgay50cmlnZ2VyLmFwcGx5KGQsIGMpICE9PSAhMSkpIHsgaWYgKCFlICYmICFrLm5vQnViYmxlICYmICFtLmlzV2luZG93KGQpKSB7IGZvciAoaSA9IGsuZGVsZWdhdGVUeXBlIHx8IHAsICQudGVzdChpICsgcCkgfHwgKGggPSBoLnBhcmVudE5vZGUpIDsgaDsgaCA9IGgucGFyZW50Tm9kZSkgby5wdXNoKGgpLCBsID0gaDsgbCA9PT0gKGQub3duZXJEb2N1bWVudCB8fCB5KSAmJiBvLnB1c2gobC5kZWZhdWx0VmlldyB8fCBsLnBhcmVudFdpbmRvdyB8fCBhKSB9IG4gPSAwOyB3aGlsZSAoKGggPSBvW24rK10pICYmICFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIGIudHlwZSA9IG4gPiAxID8gaSA6IGsuYmluZFR5cGUgfHwgcCwgZiA9IChtLl9kYXRhKGgsICJldmVudHMiKSB8fCB7fSlbYi50eXBlXSAmJiBtLl9kYXRhKGgsICJoYW5kbGUiKSwgZiAmJiBmLmFwcGx5KGgsIGMpLCBmID0gZyAmJiBoW2ddLCBmICYmIGYuYXBwbHkgJiYgbS5hY2NlcHREYXRhKGgpICYmIChiLnJlc3VsdCA9IGYuYXBwbHkoaCwgYyksIGIucmVzdWx0ID09PSAhMSAmJiBiLnByZXZlbnREZWZhdWx0KCkpOyBpZiAoYi50eXBlID0gcCwgIWUgJiYgIWIuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgKCFrLl9kZWZhdWx0IHx8IGsuX2RlZmF1bHQuYXBwbHkoby5wb3AoKSwgYykgPT09ICExKSAmJiBtLmFjY2VwdERhdGEoZCkgJiYgZyAmJiBkW3BdICYmICFtLmlzV2luZG93KGQpKSB7IGwgPSBkW2ddLCBsICYmIChkW2ddID0gbnVsbCksIG0uZXZlbnQudHJpZ2dlcmVkID0gcDsgdHJ5IHsgZFtwXSgpIH0gY2F0Y2ggKHIpIHsgfSBtLmV2ZW50LnRyaWdnZXJlZCA9IHZvaWQgMCwgbCAmJiAoZFtnXSA9IGwpIH0gcmV0dXJuIGIucmVzdWx0IH0gfSwgZGlzcGF0Y2g6IGZ1bmN0aW9uIChhKSB7IGEgPSBtLmV2ZW50LmZpeChhKTsgdmFyIGIsIGMsIGUsIGYsIGcsIGggPSBbXSwgaSA9IGQuY2FsbChhcmd1bWVudHMpLCBqID0gKG0uX2RhdGEodGhpcywgImV2ZW50cyIpIHx8IHt9KVthLnR5cGVdIHx8IFtdLCBrID0gbS5ldmVudC5zcGVjaWFsW2EudHlwZV0gfHwge307IGlmIChpWzBdID0gYSwgYS5kZWxlZ2F0ZVRhcmdldCA9IHRoaXMsICFrLnByZURpc3BhdGNoIHx8IGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLCBhKSAhPT0gITEpIHsgaCA9IG0uZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLCBhLCBqKSwgYiA9IDA7IHdoaWxlICgoZiA9IGhbYisrXSkgJiYgIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgeyBhLmN1cnJlbnRUYXJnZXQgPSBmLmVsZW0sIGcgPSAwOyB3aGlsZSAoKGUgPSBmLmhhbmRsZXJzW2crK10pICYmICFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpICghYS5uYW1lc3BhY2VfcmUgfHwgYS5uYW1lc3BhY2VfcmUudGVzdChlLm5hbWVzcGFjZSkpICYmIChhLmhhbmRsZU9iaiA9IGUsIGEuZGF0YSA9IGUuZGF0YSwgYyA9ICgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdIHx8IHt9KS5oYW5kbGUgfHwgZS5oYW5kbGVyKS5hcHBseShmLmVsZW0sIGkpLCB2b2lkIDAgIT09IGMgJiYgKGEucmVzdWx0ID0gYykgPT09ICExICYmIChhLnByZXZlbnREZWZhdWx0KCksIGEuc3RvcFByb3BhZ2F0aW9uKCkpKSB9IHJldHVybiBrLnBvc3REaXNwYXRjaCAmJiBrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsIGEpLCBhLnJlc3VsdCB9IH0sIGhhbmRsZXJzOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSwgZiwgZyA9IFtdLCBoID0gYi5kZWxlZ2F0ZUNvdW50LCBpID0gYS50YXJnZXQ7IGlmIChoICYmIGkubm9kZVR5cGUgJiYgKCFhLmJ1dHRvbiB8fCAiY2xpY2siICE9PSBhLnR5cGUpKSBmb3IgKDsgaSAhPSB0aGlzOyBpID0gaS5wYXJlbnROb2RlIHx8IHRoaXMpIGlmICgxID09PSBpLm5vZGVUeXBlICYmIChpLmRpc2FibGVkICE9PSAhMCB8fCAiY2xpY2siICE9PSBhLnR5cGUpKSB7IGZvciAoZSA9IFtdLCBmID0gMDsgaCA+IGY7IGYrKykgZCA9IGJbZl0sIGMgPSBkLnNlbGVjdG9yICsgIiAiLCB2b2lkIDAgPT09IGVbY10gJiYgKGVbY10gPSBkLm5lZWRzQ29udGV4dCA/IG0oYywgdGhpcykuaW5kZXgoaSkgPj0gMCA6IG0uZmluZChjLCB0aGlzLCBudWxsLCBbaV0pLmxlbmd0aCksIGVbY10gJiYgZS5wdXNoKGQpOyBlLmxlbmd0aCAmJiBnLnB1c2goeyBlbGVtOiBpLCBoYW5kbGVyczogZSB9KSB9IHJldHVybiBoIDwgYi5sZW5ndGggJiYgZy5wdXNoKHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGIuc2xpY2UoaCkgfSksIGcgfSwgZml4OiBmdW5jdGlvbiAoYSkgeyBpZiAoYVttLmV4cGFuZG9dKSByZXR1cm4gYTsgdmFyIGIsIGMsIGQsIGUgPSBhLnR5cGUsIGYgPSBhLCBnID0gdGhpcy5maXhIb29rc1tlXTsgZyB8fCAodGhpcy5maXhIb29rc1tlXSA9IGcgPSBaLnRlc3QoZSkgPyB0aGlzLm1vdXNlSG9va3MgOiBZLnRlc3QoZSkgPyB0aGlzLmtleUhvb2tzIDoge30pLCBkID0gZy5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpIDogdGhpcy5wcm9wcywgYSA9IG5ldyBtLkV2ZW50KGYpLCBiID0gZC5sZW5ndGg7IHdoaWxlIChiLS0pIGMgPSBkW2JdLCBhW2NdID0gZltjXTsgcmV0dXJuIGEudGFyZ2V0IHx8IChhLnRhcmdldCA9IGYuc3JjRWxlbWVudCB8fCB5KSwgMyA9PT0gYS50YXJnZXQubm9kZVR5cGUgJiYgKGEudGFyZ2V0ID0gYS50YXJnZXQucGFyZW50Tm9kZSksIGEubWV0YUtleSA9ICEhYS5tZXRhS2V5LCBnLmZpbHRlciA/IGcuZmlsdGVyKGEsIGYpIDogYSB9LCBwcm9wczogImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwgZml4SG9va3M6IHt9LCBrZXlIb29rczogeyBwcm9wczogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksIGZpbHRlcjogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIG51bGwgPT0gYS53aGljaCAmJiAoYS53aGljaCA9IG51bGwgIT0gYi5jaGFyQ29kZSA/IGIuY2hhckNvZGUgOiBiLmtleUNvZGUpLCBhIH0gfSwgbW91c2VIb29rczogeyBwcm9wczogImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSwgZmlsdGVyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSwgZiA9IGIuYnV0dG9uLCBnID0gYi5mcm9tRWxlbWVudDsgcmV0dXJuIG51bGwgPT0gYS5wYWdlWCAmJiBudWxsICE9IGIuY2xpZW50WCAmJiAoZCA9IGEudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgeSwgZSA9IGQuZG9jdW1lbnRFbGVtZW50LCBjID0gZC5ib2R5LCBhLnBhZ2VYID0gYi5jbGllbnRYICsgKGUgJiYgZS5zY3JvbGxMZWZ0IHx8IGMgJiYgYy5zY3JvbGxMZWZ0IHx8IDApIC0gKGUgJiYgZS5jbGllbnRMZWZ0IHx8IGMgJiYgYy5jbGllbnRMZWZ0IHx8IDApLCBhLnBhZ2VZID0gYi5jbGllbnRZICsgKGUgJiYgZS5zY3JvbGxUb3AgfHwgYyAmJiBjLnNjcm9sbFRvcCB8fCAwKSAtIChlICYmIGUuY2xpZW50VG9wIHx8IGMgJiYgYy5jbGllbnRUb3AgfHwgMCkpLCAhYS5yZWxhdGVkVGFyZ2V0ICYmIGcgJiYgKGEucmVsYXRlZFRhcmdldCA9IGcgPT09IGEudGFyZ2V0ID8gYi50b0VsZW1lbnQgOiBnKSwgYS53aGljaCB8fCB2b2lkIDAgPT09IGYgfHwgKGEud2hpY2ggPSAxICYgZiA/IDEgOiAyICYgZiA/IDMgOiA0ICYgZiA/IDIgOiAwKSwgYSB9IH0sIHNwZWNpYWw6IHsgbG9hZDogeyBub0J1YmJsZTogITAgfSwgZm9jdXM6IHsgdHJpZ2dlcjogZnVuY3Rpb24gKCkgeyBpZiAodGhpcyAhPT0gY2IoKSAmJiB0aGlzLmZvY3VzKSB0cnkgeyByZXR1cm4gdGhpcy5mb2N1cygpLCAhMSB9IGNhdGNoIChhKSB7IH0gfSwgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIgfSwgYmx1cjogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzID09PSBjYigpICYmIHRoaXMuYmx1ciA/ICh0aGlzLmJsdXIoKSwgITEpIDogdm9pZCAwIH0sIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IiB9LCBjbGljazogeyB0cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtLm5vZGVOYW1lKHRoaXMsICJpbnB1dCIpICYmICJjaGVja2JveCIgPT09IHRoaXMudHlwZSAmJiB0aGlzLmNsaWNrID8gKHRoaXMuY2xpY2soKSwgITEpIDogdm9pZCAwIH0sIF9kZWZhdWx0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwgImEiKSB9IH0sIGJlZm9yZXVubG9hZDogeyBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uIChhKSB7IHZvaWQgMCAhPT0gYS5yZXN1bHQgJiYgYS5vcmlnaW5hbEV2ZW50ICYmIChhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBhLnJlc3VsdCkgfSB9IH0sIHNpbXVsYXRlOiBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyB2YXIgZSA9IG0uZXh0ZW5kKG5ldyBtLkV2ZW50LCBjLCB7IHR5cGU6IGEsIGlzU2ltdWxhdGVkOiAhMCwgb3JpZ2luYWxFdmVudDoge30gfSk7IGQgPyBtLmV2ZW50LnRyaWdnZXIoZSwgbnVsbCwgYikgOiBtLmV2ZW50LmRpc3BhdGNoLmNhbGwoYiwgZSksIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgYy5wcmV2ZW50RGVmYXVsdCgpIH0gfSwgbS5yZW1vdmVFdmVudCA9IHkucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IGZ1bmN0aW9uIChhLCBiLCBjKSB7IGEucmVtb3ZlRXZlbnRMaXN0ZW5lciAmJiBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYiwgYywgITEpIH0gOiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCA9ICJvbiIgKyBiOyBhLmRldGFjaEV2ZW50ICYmICh0eXBlb2YgYVtkXSA9PT0gSyAmJiAoYVtkXSA9IG51bGwpLCBhLmRldGFjaEV2ZW50KGQsIGMpKSB9LCBtLkV2ZW50ID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtLkV2ZW50ID8gKGEgJiYgYS50eXBlID8gKHRoaXMub3JpZ2luYWxFdmVudCA9IGEsIHRoaXMudHlwZSA9IGEudHlwZSwgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBhLmRlZmF1bHRQcmV2ZW50ZWQgfHwgdm9pZCAwID09PSBhLmRlZmF1bHRQcmV2ZW50ZWQgJiYgYS5yZXR1cm5WYWx1ZSA9PT0gITEgPyBhYiA6IGJiKSA6IHRoaXMudHlwZSA9IGEsIGIgJiYgbS5leHRlbmQodGhpcywgYiksIHRoaXMudGltZVN0YW1wID0gYSAmJiBhLnRpbWVTdGFtcCB8fCBtLm5vdygpLCB2b2lkICh0aGlzW20uZXhwYW5kb10gPSAhMCkpIDogbmV3IG0uRXZlbnQoYSwgYikgfSwgbS5FdmVudC5wcm90b3R5cGUgPSB7IGlzRGVmYXVsdFByZXZlbnRlZDogYmIsIGlzUHJvcGFnYXRpb25TdG9wcGVkOiBiYiwgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IGJiLCBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMub3JpZ2luYWxFdmVudDsgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBhYiwgYSAmJiAoYS5wcmV2ZW50RGVmYXVsdCA/IGEucHJldmVudERlZmF1bHQoKSA6IGEucmV0dXJuVmFsdWUgPSAhMSkgfSwgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5vcmlnaW5hbEV2ZW50OyB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gYWIsIGEgJiYgKGEuc3RvcFByb3BhZ2F0aW9uICYmIGEuc3RvcFByb3BhZ2F0aW9uKCksIGEuY2FuY2VsQnViYmxlID0gITApIH0sIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMub3JpZ2luYWxFdmVudDsgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGFiLCBhICYmIGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uICYmIGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkgfSB9LCBtLmVhY2goeyBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwgbW91c2VsZWF2ZTogIm1vdXNlb3V0IiwgcG9pbnRlcmVudGVyOiAicG9pbnRlcm92ZXIiLCBwb2ludGVybGVhdmU6ICJwb2ludGVyb3V0IiB9LCBmdW5jdGlvbiAoYSwgYikgeyBtLmV2ZW50LnNwZWNpYWxbYV0gPSB7IGRlbGVnYXRlVHlwZTogYiwgYmluZFR5cGU6IGIsIGhhbmRsZTogZnVuY3Rpb24gKGEpIHsgdmFyIGMsIGQgPSB0aGlzLCBlID0gYS5yZWxhdGVkVGFyZ2V0LCBmID0gYS5oYW5kbGVPYmo7IHJldHVybiAoIWUgfHwgZSAhPT0gZCAmJiAhbS5jb250YWlucyhkLCBlKSkgJiYgKGEudHlwZSA9IGYub3JpZ1R5cGUsIGMgPSBmLmhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgYS50eXBlID0gYiksIGMgfSB9IH0pLCBrLnN1Ym1pdEJ1YmJsZXMgfHwgKG0uZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7IHNldHVwOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtLm5vZGVOYW1lKHRoaXMsICJmb3JtIikgPyAhMSA6IHZvaWQgbS5ldmVudC5hZGQodGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsIGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS50YXJnZXQsIGMgPSBtLm5vZGVOYW1lKGIsICJpbnB1dCIpIHx8IG0ubm9kZU5hbWUoYiwgImJ1dHRvbiIpID8gYi5mb3JtIDogdm9pZCAwOyBjICYmICFtLl9kYXRhKGMsICJzdWJtaXRCdWJibGVzIikgJiYgKG0uZXZlbnQuYWRkKGMsICJzdWJtaXQuX3N1Ym1pdCIsIGZ1bmN0aW9uIChhKSB7IGEuX3N1Ym1pdF9idWJibGUgPSAhMCB9KSwgbS5fZGF0YShjLCAic3VibWl0QnViYmxlcyIsICEwKSkgfSkgfSwgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiAoYSkgeyBhLl9zdWJtaXRfYnViYmxlICYmIChkZWxldGUgYS5fc3VibWl0X2J1YmJsZSwgdGhpcy5wYXJlbnROb2RlICYmICFhLmlzVHJpZ2dlciAmJiBtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLCB0aGlzLnBhcmVudE5vZGUsIGEsICEwKSkgfSwgdGVhcmRvd246IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG0ubm9kZU5hbWUodGhpcywgImZvcm0iKSA/ICExIDogdm9pZCBtLmV2ZW50LnJlbW92ZSh0aGlzLCAiLl9zdWJtaXQiKSB9IH0pLCBrLmNoYW5nZUJ1YmJsZXMgfHwgKG0uZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7IHNldHVwOiBmdW5jdGlvbiAoKSB7IHJldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSkgPyAoKCJjaGVja2JveCIgPT09IHRoaXMudHlwZSB8fCAicmFkaW8iID09PSB0aGlzLnR5cGUpICYmIChtLmV2ZW50LmFkZCh0aGlzLCAicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uIChhKSB7ICJjaGVja2VkIiA9PT0gYS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSAmJiAodGhpcy5fanVzdF9jaGFuZ2VkID0gITApIH0pLCBtLmV2ZW50LmFkZCh0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uIChhKSB7IHRoaXMuX2p1c3RfY2hhbmdlZCAmJiAhYS5pc1RyaWdnZXIgJiYgKHRoaXMuX2p1c3RfY2hhbmdlZCA9ICExKSwgbS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIiwgdGhpcywgYSwgITApIH0pKSwgITEpIDogdm9pZCBtLmV2ZW50LmFkZCh0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS50YXJnZXQ7IFgudGVzdChiLm5vZGVOYW1lKSAmJiAhbS5fZGF0YShiLCAiY2hhbmdlQnViYmxlcyIpICYmIChtLmV2ZW50LmFkZChiLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiAoYSkgeyAhdGhpcy5wYXJlbnROb2RlIHx8IGEuaXNTaW11bGF0ZWQgfHwgYS5pc1RyaWdnZXIgfHwgbS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIiwgdGhpcy5wYXJlbnROb2RlLCBhLCAhMCkgfSksIG0uX2RhdGEoYiwgImNoYW5nZUJ1YmJsZXMiLCAhMCkpIH0pIH0sIGhhbmRsZTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnRhcmdldDsgcmV0dXJuIHRoaXMgIT09IGIgfHwgYS5pc1NpbXVsYXRlZCB8fCBhLmlzVHJpZ2dlciB8fCAicmFkaW8iICE9PSBiLnR5cGUgJiYgImNoZWNrYm94IiAhPT0gYi50eXBlID8gYS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdm9pZCAwIH0sIHRlYXJkb3duOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCAiLl9jaGFuZ2UiKSwgIVgudGVzdCh0aGlzLm5vZGVOYW1lKSB9IH0pLCBrLmZvY3VzaW5CdWJibGVzIHx8IG0uZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSBmdW5jdGlvbiAoYSkgeyBtLmV2ZW50LnNpbXVsYXRlKGIsIGEudGFyZ2V0LCBtLmV2ZW50LmZpeChhKSwgITApIH07IG0uZXZlbnQuc3BlY2lhbFtiXSA9IHsgc2V0dXA6IGZ1bmN0aW9uICgpIHsgdmFyIGQgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywgZSA9IG0uX2RhdGEoZCwgYik7IGUgfHwgZC5hZGRFdmVudExpc3RlbmVyKGEsIGMsICEwKSwgbS5fZGF0YShkLCBiLCAoZSB8fCAwKSArIDEpIH0sIHRlYXJkb3duOiBmdW5jdGlvbiAoKSB7IHZhciBkID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsIGUgPSBtLl9kYXRhKGQsIGIpIC0gMTsgZSA/IG0uX2RhdGEoZCwgYiwgZSkgOiAoZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsIGMsICEwKSwgbS5fcmVtb3ZlRGF0YShkLCBiKSkgfSB9IH0pLCBtLmZuLmV4dGVuZCh7IG9uOiBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSkgeyB2YXIgZiwgZzsgaWYgKCJvYmplY3QiID09IHR5cGVvZiBhKSB7ICJzdHJpbmciICE9IHR5cGVvZiBiICYmIChjID0gYyB8fCBiLCBiID0gdm9pZCAwKTsgZm9yIChmIGluIGEpIHRoaXMub24oZiwgYiwgYywgYVtmXSwgZSk7IHJldHVybiB0aGlzIH0gaWYgKG51bGwgPT0gYyAmJiBudWxsID09IGQgPyAoZCA9IGIsIGMgPSBiID0gdm9pZCAwKSA6IG51bGwgPT0gZCAmJiAoInN0cmluZyIgPT0gdHlwZW9mIGIgPyAoZCA9IGMsIGMgPSB2b2lkIDApIDogKGQgPSBjLCBjID0gYiwgYiA9IHZvaWQgMCkpLCBkID09PSAhMSkgZCA9IGJiOyBlbHNlIGlmICghZCkgcmV0dXJuIHRoaXM7IHJldHVybiAxID09PSBlICYmIChnID0gZCwgZCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtKCkub2ZmKGEpLCBnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSwgZC5ndWlkID0gZy5ndWlkIHx8IChnLmd1aWQgPSBtLmd1aWQrKykpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLmV2ZW50LmFkZCh0aGlzLCBhLCBkLCBjLCBiKSB9KSB9LCBvbmU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiB0aGlzLm9uKGEsIGIsIGMsIGQsIDEpIH0sIG9mZjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGU7IGlmIChhICYmIGEucHJldmVudERlZmF1bHQgJiYgYS5oYW5kbGVPYmopIHJldHVybiBkID0gYS5oYW5kbGVPYmosIG0oYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGQubmFtZXNwYWNlID8gZC5vcmlnVHlwZSArICIuIiArIGQubmFtZXNwYWNlIDogZC5vcmlnVHlwZSwgZC5zZWxlY3RvciwgZC5oYW5kbGVyKSwgdGhpczsgaWYgKCJvYmplY3QiID09IHR5cGVvZiBhKSB7IGZvciAoZSBpbiBhKSB0aGlzLm9mZihlLCBiLCBhW2VdKTsgcmV0dXJuIHRoaXMgfSByZXR1cm4gKGIgPT09ICExIHx8ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGIpICYmIChjID0gYiwgYiA9IHZvaWQgMCksIGMgPT09ICExICYmIChjID0gYmIpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBtLmV2ZW50LnJlbW92ZSh0aGlzLCBhLCBjLCBiKSB9KSB9LCB0cmlnZ2VyOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgbS5ldmVudC50cmlnZ2VyKGEsIGIsIHRoaXMpIH0pIH0sIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IHRoaXNbMF07IHJldHVybiBjID8gbS5ldmVudC50cmlnZ2VyKGEsIGIsIGMsICEwKSA6IHZvaWQgMCB9IH0pOyBmdW5jdGlvbiBkYihhKSB7IHZhciBiID0gZWIuc3BsaXQoInwiKSwgYyA9IGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOyBpZiAoYy5jcmVhdGVFbGVtZW50KSB3aGlsZSAoYi5sZW5ndGgpIGMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTsgcmV0dXJuIGMgfSB2YXIgZWIgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsIGZiID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZywgZ2IgPSBuZXcgUmVnRXhwKCI8KD86IiArIGViICsgIilbXFxzLz5dIiwgImkiKSwgaGIgPSAvXlxzKy8sIGliID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSwgamIgPSAvPChbXHc6XSspLywga2IgPSAvPHRib2R5L2ksIGxiID0gLzx8JiM/XHcrOy8sIG1iID0gLzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSwgbmIgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwgb2IgPSAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksIHBiID0gL150cnVlXC8oLiopLywgcWIgPSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csIHJiID0geyBvcHRpb246IFsxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iXSwgbGVnZW5kOiBbMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iXSwgYXJlYTogWzEsICI8bWFwPiIsICI8L21hcD4iXSwgcGFyYW06IFsxLCAiPG9iamVjdD4iLCAiPC9vYmplY3Q+Il0sIHRoZWFkOiBbMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iXSwgdHI6IFsyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiJdLCBjb2w6IFsyLCAiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiJdLCB0ZDogWzMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sIF9kZWZhdWx0OiBrLmh0bWxTZXJpYWxpemUgPyBbMCwgIiIsICIiXSA6IFsxLCAiWDxkaXY+IiwgIjwvZGl2PiJdIH0sIHNiID0gZGIoeSksIHRiID0gc2IuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7IHJiLm9wdGdyb3VwID0gcmIub3B0aW9uLCByYi50Ym9keSA9IHJiLnRmb290ID0gcmIuY29sZ3JvdXAgPSByYi5jYXB0aW9uID0gcmIudGhlYWQsIHJiLnRoID0gcmIudGQ7IGZ1bmN0aW9uIHViKGEsIGIpIHsgdmFyIGMsIGQsIGUgPSAwLCBmID0gdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IEsgPyBhLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIgfHwgIioiKSA6IHR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IEsgPyBhLnF1ZXJ5U2VsZWN0b3JBbGwoYiB8fCAiKiIpIDogdm9pZCAwOyBpZiAoIWYpIGZvciAoZiA9IFtdLCBjID0gYS5jaGlsZE5vZGVzIHx8IGE7IG51bGwgIT0gKGQgPSBjW2VdKSA7IGUrKykgIWIgfHwgbS5ub2RlTmFtZShkLCBiKSA/IGYucHVzaChkKSA6IG0ubWVyZ2UoZiwgdWIoZCwgYikpOyByZXR1cm4gdm9pZCAwID09PSBiIHx8IGIgJiYgbS5ub2RlTmFtZShhLCBiKSA/IG0ubWVyZ2UoW2FdLCBmKSA6IGYgfSBmdW5jdGlvbiB2YihhKSB7IFcudGVzdChhLnR5cGUpICYmIChhLmRlZmF1bHRDaGVja2VkID0gYS5jaGVja2VkKSB9IGZ1bmN0aW9uIHdiKGEsIGIpIHsgcmV0dXJuIG0ubm9kZU5hbWUoYSwgInRhYmxlIikgJiYgbS5ub2RlTmFtZSgxMSAhPT0gYi5ub2RlVHlwZSA/IGIgOiBiLmZpcnN0Q2hpbGQsICJ0ciIpID8gYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXSB8fCBhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKSA6IGEgfSBmdW5jdGlvbiB4YihhKSB7IHJldHVybiBhLnR5cGUgPSAobnVsbCAhPT0gbS5maW5kLmF0dHIoYSwgInR5cGUiKSkgKyAiLyIgKyBhLnR5cGUsIGEgfSBmdW5jdGlvbiB5YihhKSB7IHZhciBiID0gcGIuZXhlYyhhLnR5cGUpOyByZXR1cm4gYiA/IGEudHlwZSA9IGJbMV0gOiBhLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLCBhIH0gZnVuY3Rpb24gemIoYSwgYikgeyBmb3IgKHZhciBjLCBkID0gMDsgbnVsbCAhPSAoYyA9IGFbZF0pIDsgZCsrKSBtLl9kYXRhKGMsICJnbG9iYWxFdmFsIiwgIWIgfHwgbS5fZGF0YShiW2RdLCAiZ2xvYmFsRXZhbCIpKSB9IGZ1bmN0aW9uIEFiKGEsIGIpIHsgaWYgKDEgPT09IGIubm9kZVR5cGUgJiYgbS5oYXNEYXRhKGEpKSB7IHZhciBjLCBkLCBlLCBmID0gbS5fZGF0YShhKSwgZyA9IG0uX2RhdGEoYiwgZiksIGggPSBmLmV2ZW50czsgaWYgKGgpIHsgZGVsZXRlIGcuaGFuZGxlLCBnLmV2ZW50cyA9IHt9OyBmb3IgKGMgaW4gaCkgZm9yIChkID0gMCwgZSA9IGhbY10ubGVuZ3RoOyBlID4gZDsgZCsrKSBtLmV2ZW50LmFkZChiLCBjLCBoW2NdW2RdKSB9IGcuZGF0YSAmJiAoZy5kYXRhID0gbS5leHRlbmQoe30sIGcuZGF0YSkpIH0gfSBmdW5jdGlvbiBCYihhLCBiKSB7IHZhciBjLCBkLCBlOyBpZiAoMSA9PT0gYi5ub2RlVHlwZSkgeyBpZiAoYyA9IGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgIWsubm9DbG9uZUV2ZW50ICYmIGJbbS5leHBhbmRvXSkgeyBlID0gbS5fZGF0YShiKTsgZm9yIChkIGluIGUuZXZlbnRzKSBtLnJlbW92ZUV2ZW50KGIsIGQsIGUuaGFuZGxlKTsgYi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKSB9ICJzY3JpcHQiID09PSBjICYmIGIudGV4dCAhPT0gYS50ZXh0ID8gKHhiKGIpLnRleHQgPSBhLnRleHQsIHliKGIpKSA6ICJvYmplY3QiID09PSBjID8gKGIucGFyZW50Tm9kZSAmJiAoYi5vdXRlckhUTUwgPSBhLm91dGVySFRNTCksIGsuaHRtbDVDbG9uZSAmJiBhLmlubmVySFRNTCAmJiAhbS50cmltKGIuaW5uZXJIVE1MKSAmJiAoYi5pbm5lckhUTUwgPSBhLmlubmVySFRNTCkpIDogImlucHV0IiA9PT0gYyAmJiBXLnRlc3QoYS50eXBlKSA/IChiLmRlZmF1bHRDaGVja2VkID0gYi5jaGVja2VkID0gYS5jaGVja2VkLCBiLnZhbHVlICE9PSBhLnZhbHVlICYmIChiLnZhbHVlID0gYS52YWx1ZSkpIDogIm9wdGlvbiIgPT09IGMgPyBiLmRlZmF1bHRTZWxlY3RlZCA9IGIuc2VsZWN0ZWQgPSBhLmRlZmF1bHRTZWxlY3RlZCA6ICgiaW5wdXQiID09PSBjIHx8ICJ0ZXh0YXJlYSIgPT09IGMpICYmIChiLmRlZmF1bHRWYWx1ZSA9IGEuZGVmYXVsdFZhbHVlKSB9IH0gbS5leHRlbmQoeyBjbG9uZTogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcsIGgsIGkgPSBtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCwgYSk7IGlmIChrLmh0bWw1Q2xvbmUgfHwgbS5pc1hNTERvYyhhKSB8fCAhZ2IudGVzdCgiPCIgKyBhLm5vZGVOYW1lICsgIj4iKSA/IGYgPSBhLmNsb25lTm9kZSghMCkgOiAodGIuaW5uZXJIVE1MID0gYS5vdXRlckhUTUwsIHRiLnJlbW92ZUNoaWxkKGYgPSB0Yi5maXJzdENoaWxkKSksICEoay5ub0Nsb25lRXZlbnQgJiYgay5ub0Nsb25lQ2hlY2tlZCB8fCAxICE9PSBhLm5vZGVUeXBlICYmIDExICE9PSBhLm5vZGVUeXBlIHx8IG0uaXNYTUxEb2MoYSkpKSBmb3IgKGQgPSB1YihmKSwgaCA9IHViKGEpLCBnID0gMDsgbnVsbCAhPSAoZSA9IGhbZ10pIDsgKytnKSBkW2ddICYmIEJiKGUsIGRbZ10pOyBpZiAoYikgaWYgKGMpIGZvciAoaCA9IGggfHwgdWIoYSksIGQgPSBkIHx8IHViKGYpLCBnID0gMDsgbnVsbCAhPSAoZSA9IGhbZ10pIDsgZysrKSBBYihlLCBkW2ddKTsgZWxzZSBBYihhLCBmKTsgcmV0dXJuIGQgPSB1YihmLCAic2NyaXB0IiksIGQubGVuZ3RoID4gMCAmJiB6YihkLCAhaSAmJiB1YihhLCAic2NyaXB0IikpLCBkID0gaCA9IGUgPSBudWxsLCBmIH0sIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IGZvciAodmFyIGUsIGYsIGcsIGgsIGksIGosIGwsIG4gPSBhLmxlbmd0aCwgbyA9IGRiKGIpLCBwID0gW10sIHEgPSAwOyBuID4gcTsgcSsrKSBpZiAoZiA9IGFbcV0sIGYgfHwgMCA9PT0gZikgaWYgKCJvYmplY3QiID09PSBtLnR5cGUoZikpIG0ubWVyZ2UocCwgZi5ub2RlVHlwZSA/IFtmXSA6IGYpOyBlbHNlIGlmIChsYi50ZXN0KGYpKSB7IGggPSBoIHx8IG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksIGkgPSAoamIuZXhlYyhmKSB8fCBbIiIsICIiXSlbMV0udG9Mb3dlckNhc2UoKSwgbCA9IHJiW2ldIHx8IHJiLl9kZWZhdWx0LCBoLmlubmVySFRNTCA9IGxbMV0gKyBmLnJlcGxhY2UoaWIsICI8JDE+PC8kMj4iKSArIGxbMl0sIGUgPSBsWzBdOyB3aGlsZSAoZS0tKSBoID0gaC5sYXN0Q2hpbGQ7IGlmICghay5sZWFkaW5nV2hpdGVzcGFjZSAmJiBoYi50ZXN0KGYpICYmIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhiLmV4ZWMoZilbMF0pKSwgIWsudGJvZHkpIHsgZiA9ICJ0YWJsZSIgIT09IGkgfHwga2IudGVzdChmKSA/ICI8dGFibGU+IiAhPT0gbFsxXSB8fCBrYi50ZXN0KGYpID8gMCA6IGggOiBoLmZpcnN0Q2hpbGQsIGUgPSBmICYmIGYuY2hpbGROb2Rlcy5sZW5ndGg7IHdoaWxlIChlLS0pIG0ubm9kZU5hbWUoaiA9IGYuY2hpbGROb2Rlc1tlXSwgInRib2R5IikgJiYgIWouY2hpbGROb2Rlcy5sZW5ndGggJiYgZi5yZW1vdmVDaGlsZChqKSB9IG0ubWVyZ2UocCwgaC5jaGlsZE5vZGVzKSwgaC50ZXh0Q29udGVudCA9ICIiOyB3aGlsZSAoaC5maXJzdENoaWxkKSBoLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7IGggPSBvLmxhc3RDaGlsZCB9IGVsc2UgcC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZikpOyBoICYmIG8ucmVtb3ZlQ2hpbGQoaCksIGsuYXBwZW5kQ2hlY2tlZCB8fCBtLmdyZXAodWIocCwgImlucHV0IiksIHZiKSwgcSA9IDA7IHdoaWxlIChmID0gcFtxKytdKSBpZiAoKCFkIHx8IC0xID09PSBtLmluQXJyYXkoZiwgZCkpICYmIChnID0gbS5jb250YWlucyhmLm93bmVyRG9jdW1lbnQsIGYpLCBoID0gdWIoby5hcHBlbmRDaGlsZChmKSwgInNjcmlwdCIpLCBnICYmIHpiKGgpLCBjKSkgeyBlID0gMDsgd2hpbGUgKGYgPSBoW2UrK10pIG9iLnRlc3QoZi50eXBlIHx8ICIiKSAmJiBjLnB1c2goZikgfSByZXR1cm4gaCA9IG51bGwsIG8gfSwgY2xlYW5EYXRhOiBmdW5jdGlvbiAoYSwgYikgeyBmb3IgKHZhciBkLCBlLCBmLCBnLCBoID0gMCwgaSA9IG0uZXhwYW5kbywgaiA9IG0uY2FjaGUsIGwgPSBrLmRlbGV0ZUV4cGFuZG8sIG4gPSBtLmV2ZW50LnNwZWNpYWw7IG51bGwgIT0gKGQgPSBhW2hdKSA7IGgrKykgaWYgKChiIHx8IG0uYWNjZXB0RGF0YShkKSkgJiYgKGYgPSBkW2ldLCBnID0gZiAmJiBqW2ZdKSkgeyBpZiAoZy5ldmVudHMpIGZvciAoZSBpbiBnLmV2ZW50cykgbltlXSA/IG0uZXZlbnQucmVtb3ZlKGQsIGUpIDogbS5yZW1vdmVFdmVudChkLCBlLCBnLmhhbmRsZSk7IGpbZl0gJiYgKGRlbGV0ZSBqW2ZdLCBsID8gZGVsZXRlIGRbaV0gOiB0eXBlb2YgZC5yZW1vdmVBdHRyaWJ1dGUgIT09IEsgPyBkLnJlbW92ZUF0dHJpYnV0ZShpKSA6IGRbaV0gPSBudWxsLCBjLnB1c2goZikpIH0gfSB9KSwgbS5mbi5leHRlbmQoeyB0ZXh0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gVih0aGlzLCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdm9pZCAwID09PSBhID8gbS50ZXh0KHRoaXMpIDogdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgeSkuY3JlYXRlVGV4dE5vZGUoYSkpIH0sIG51bGwsIGEsIGFyZ3VtZW50cy5sZW5ndGgpIH0sIGFwcGVuZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZ1bmN0aW9uIChhKSB7IGlmICgxID09PSB0aGlzLm5vZGVUeXBlIHx8IDExID09PSB0aGlzLm5vZGVUeXBlIHx8IDkgPT09IHRoaXMubm9kZVR5cGUpIHsgdmFyIGIgPSB3Yih0aGlzLCBhKTsgYi5hcHBlbmRDaGlsZChhKSB9IH0pIH0sIHByZXBlbmQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmdW5jdGlvbiAoYSkgeyBpZiAoMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCAxMSA9PT0gdGhpcy5ub2RlVHlwZSB8fCA5ID09PSB0aGlzLm5vZGVUeXBlKSB7IHZhciBiID0gd2IodGhpcywgYSk7IGIuaW5zZXJ0QmVmb3JlKGEsIGIuZmlyc3RDaGlsZCkgfSB9KSB9LCBiZWZvcmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmdW5jdGlvbiAoYSkgeyB0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCB0aGlzKSB9KSB9LCBhZnRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZ1bmN0aW9uIChhKSB7IHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsIHRoaXMubmV4dFNpYmxpbmcpIH0pIH0sIHJlbW92ZTogZnVuY3Rpb24gKGEsIGIpIHsgZm9yICh2YXIgYywgZCA9IGEgPyBtLmZpbHRlcihhLCB0aGlzKSA6IHRoaXMsIGUgPSAwOyBudWxsICE9IChjID0gZFtlXSkgOyBlKyspIGIgfHwgMSAhPT0gYy5ub2RlVHlwZSB8fCBtLmNsZWFuRGF0YSh1YihjKSksIGMucGFyZW50Tm9kZSAmJiAoYiAmJiBtLmNvbnRhaW5zKGMub3duZXJEb2N1bWVudCwgYykgJiYgemIodWIoYywgInNjcmlwdCIpKSwgYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTsgcmV0dXJuIHRoaXMgfSwgZW1wdHk6IGZ1bmN0aW9uICgpIHsgZm9yICh2YXIgYSwgYiA9IDA7IG51bGwgIT0gKGEgPSB0aGlzW2JdKSA7IGIrKykgeyAxID09PSBhLm5vZGVUeXBlICYmIG0uY2xlYW5EYXRhKHViKGEsICExKSk7IHdoaWxlIChhLmZpcnN0Q2hpbGQpIGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTsgYS5vcHRpb25zICYmIG0ubm9kZU5hbWUoYSwgInNlbGVjdCIpICYmIChhLm9wdGlvbnMubGVuZ3RoID0gMCkgfSByZXR1cm4gdGhpcyB9LCBjbG9uZTogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgPSBudWxsID09IGEgPyAhMSA6IGEsIGIgPSBudWxsID09IGIgPyBhIDogYiwgdGhpcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gbS5jbG9uZSh0aGlzLCBhLCBiKSB9KSB9LCBodG1sOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gVih0aGlzLCBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IHRoaXNbMF0gfHwge30sIGMgPSAwLCBkID0gdGhpcy5sZW5ndGg7IGlmICh2b2lkIDAgPT09IGEpIHJldHVybiAxID09PSBiLm5vZGVUeXBlID8gYi5pbm5lckhUTUwucmVwbGFjZShmYiwgIiIpIDogdm9pZCAwOyBpZiAoISgic3RyaW5nIiAhPSB0eXBlb2YgYSB8fCBtYi50ZXN0KGEpIHx8ICFrLmh0bWxTZXJpYWxpemUgJiYgZ2IudGVzdChhKSB8fCAhay5sZWFkaW5nV2hpdGVzcGFjZSAmJiBoYi50ZXN0KGEpIHx8IHJiWyhqYi5leGVjKGEpIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpIHsgYSA9IGEucmVwbGFjZShpYiwgIjwkMT48LyQyPiIpOyB0cnkgeyBmb3IgKDsgZCA+IGM7IGMrKykgYiA9IHRoaXNbY10gfHwge30sIDEgPT09IGIubm9kZVR5cGUgJiYgKG0uY2xlYW5EYXRhKHViKGIsICExKSksIGIuaW5uZXJIVE1MID0gYSk7IGIgPSAwIH0gY2F0Y2ggKGUpIHsgfSB9IGIgJiYgdGhpcy5lbXB0eSgpLmFwcGVuZChhKSB9LCBudWxsLCBhLCBhcmd1bWVudHMubGVuZ3RoKSB9LCByZXBsYWNlV2l0aDogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IGFyZ3VtZW50c1swXTsgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmdW5jdGlvbiAoYikgeyBhID0gdGhpcy5wYXJlbnROb2RlLCBtLmNsZWFuRGF0YSh1Yih0aGlzKSksIGEgJiYgYS5yZXBsYWNlQ2hpbGQoYiwgdGhpcykgfSksIGEgJiYgKGEubGVuZ3RoIHx8IGEubm9kZVR5cGUpID8gdGhpcyA6IHRoaXMucmVtb3ZlKCkgfSwgZGV0YWNoOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5yZW1vdmUoYSwgITApIH0sIGRvbU1hbmlwOiBmdW5jdGlvbiAoYSwgYikgeyBhID0gZS5hcHBseShbXSwgYSk7IHZhciBjLCBkLCBmLCBnLCBoLCBpLCBqID0gMCwgbCA9IHRoaXMubGVuZ3RoLCBuID0gdGhpcywgbyA9IGwgLSAxLCBwID0gYVswXSwgcSA9IG0uaXNGdW5jdGlvbihwKTsgaWYgKHEgfHwgbCA+IDEgJiYgInN0cmluZyIgPT0gdHlwZW9mIHAgJiYgIWsuY2hlY2tDbG9uZSAmJiBuYi50ZXN0KHApKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIChjKSB7IHZhciBkID0gbi5lcShjKTsgcSAmJiAoYVswXSA9IHAuY2FsbCh0aGlzLCBjLCBkLmh0bWwoKSkpLCBkLmRvbU1hbmlwKGEsIGIpIH0pOyBpZiAobCAmJiAoaSA9IG0uYnVpbGRGcmFnbWVudChhLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQsICExLCB0aGlzKSwgYyA9IGkuZmlyc3RDaGlsZCwgMSA9PT0gaS5jaGlsZE5vZGVzLmxlbmd0aCAmJiAoaSA9IGMpLCBjKSkgeyBmb3IgKGcgPSBtLm1hcCh1YihpLCAic2NyaXB0IiksIHhiKSwgZiA9IGcubGVuZ3RoOyBsID4gajsgaisrKSBkID0gaSwgaiAhPT0gbyAmJiAoZCA9IG0uY2xvbmUoZCwgITAsICEwKSwgZiAmJiBtLm1lcmdlKGcsIHViKGQsICJzY3JpcHQiKSkpLCBiLmNhbGwodGhpc1tqXSwgZCwgaik7IGlmIChmKSBmb3IgKGggPSBnW2cubGVuZ3RoIC0gMV0ub3duZXJEb2N1bWVudCwgbS5tYXAoZywgeWIpLCBqID0gMDsgZiA+IGo7IGorKykgZCA9IGdbal0sIG9iLnRlc3QoZC50eXBlIHx8ICIiKSAmJiAhbS5fZGF0YShkLCAiZ2xvYmFsRXZhbCIpICYmIG0uY29udGFpbnMoaCwgZCkgJiYgKGQuc3JjID8gbS5fZXZhbFVybCAmJiBtLl9ldmFsVXJsKGQuc3JjKSA6IG0uZ2xvYmFsRXZhbCgoZC50ZXh0IHx8IGQudGV4dENvbnRlbnQgfHwgZC5pbm5lckhUTUwgfHwgIiIpLnJlcGxhY2UocWIsICIiKSkpOyBpID0gYyA9IG51bGwgfSByZXR1cm4gdGhpcyB9IH0pLCBtLmVhY2goeyBhcHBlbmRUbzogImFwcGVuZCIsIHByZXBlbmRUbzogInByZXBlbmQiLCBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLCBpbnNlcnRBZnRlcjogImFmdGVyIiwgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIiB9LCBmdW5jdGlvbiAoYSwgYikgeyBtLmZuW2FdID0gZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYywgZCA9IDAsIGUgPSBbXSwgZyA9IG0oYSksIGggPSBnLmxlbmd0aCAtIDE7IGggPj0gZDsgZCsrKSBjID0gZCA9PT0gaCA/IHRoaXMgOiB0aGlzLmNsb25lKCEwKSwgbShnW2RdKVtiXShjKSwgZi5hcHBseShlLCBjLmdldCgpKTsgcmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpIH0gfSk7IHZhciBDYiwgRGIgPSB7fTsgZnVuY3Rpb24gRWIoYiwgYykgeyB2YXIgZCwgZSA9IG0oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLCBmID0gYS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSAmJiAoZCA9IGEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpID8gZC5kaXNwbGF5IDogbS5jc3MoZVswXSwgImRpc3BsYXkiKTsgcmV0dXJuIGUuZGV0YWNoKCksIGYgfSBmdW5jdGlvbiBGYihhKSB7IHZhciBiID0geSwgYyA9IERiW2FdOyByZXR1cm4gYyB8fCAoYyA9IEViKGEsIGIpLCAibm9uZSIgIT09IGMgJiYgYyB8fCAoQ2IgPSAoQ2IgfHwgbSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksIGIgPSAoQ2JbMF0uY29udGVudFdpbmRvdyB8fCBDYlswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LCBiLndyaXRlKCksIGIuY2xvc2UoKSwgYyA9IEViKGEsIGIpLCBDYi5kZXRhY2goKSksIERiW2FdID0gYyksIGMgfSAhZnVuY3Rpb24gKCkgeyB2YXIgYTsgay5zaHJpbmtXcmFwQmxvY2tzID0gZnVuY3Rpb24gKCkgeyBpZiAobnVsbCAhPSBhKSByZXR1cm4gYTsgYSA9ICExOyB2YXIgYiwgYywgZDsgcmV0dXJuIGMgPSB5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sIGMgJiYgYy5zdHlsZSA/IChiID0geS5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZCA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsIGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksIHR5cGVvZiBiLnN0eWxlLnpvb20gIT09IEsgJiYgKGIuc3R5bGUuY3NzVGV4dCA9ICItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjFweDt3aWR0aDoxcHg7em9vbToxIiwgYi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS53aWR0aCA9ICI1cHgiLCBhID0gMyAhPT0gYi5vZmZzZXRXaWR0aCksIGMucmVtb3ZlQ2hpbGQoZCksIGEpIDogdm9pZCAwIH0gfSgpOyB2YXIgR2IgPSAvXm1hcmdpbi8sIEhiID0gbmV3IFJlZ0V4cCgiXigiICsgUyArICIpKD8hcHgpW2EteiVdKyQiLCAiaSIpLCBJYiwgSmIsIEtiID0gL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvOyBhLmdldENvbXB1dGVkU3R5bGUgPyAoSWIgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkgfSwgSmIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCA9IGEuc3R5bGU7IHJldHVybiBjID0gYyB8fCBJYihhKSwgZyA9IGMgPyBjLmdldFByb3BlcnR5VmFsdWUoYikgfHwgY1tiXSA6IHZvaWQgMCwgYyAmJiAoIiIgIT09IGcgfHwgbS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsIGEpIHx8IChnID0gbS5zdHlsZShhLCBiKSksIEhiLnRlc3QoZykgJiYgR2IudGVzdChiKSAmJiAoZCA9IGgud2lkdGgsIGUgPSBoLm1pbldpZHRoLCBmID0gaC5tYXhXaWR0aCwgaC5taW5XaWR0aCA9IGgubWF4V2lkdGggPSBoLndpZHRoID0gZywgZyA9IGMud2lkdGgsIGgud2lkdGggPSBkLCBoLm1pbldpZHRoID0gZSwgaC5tYXhXaWR0aCA9IGYpKSwgdm9pZCAwID09PSBnID8gZyA6IGcgKyAiIiB9KSA6IHkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSAmJiAoSWIgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5jdXJyZW50U3R5bGUgfSwgSmIgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCA9IGEuc3R5bGU7IHJldHVybiBjID0gYyB8fCBJYihhKSwgZyA9IGMgPyBjW2JdIDogdm9pZCAwLCBudWxsID09IGcgJiYgaCAmJiBoW2JdICYmIChnID0gaFtiXSksIEhiLnRlc3QoZykgJiYgIUtiLnRlc3QoYikgJiYgKGQgPSBoLmxlZnQsIGUgPSBhLnJ1bnRpbWVTdHlsZSwgZiA9IGUgJiYgZS5sZWZ0LCBmICYmIChlLmxlZnQgPSBhLmN1cnJlbnRTdHlsZS5sZWZ0KSwgaC5sZWZ0ID0gImZvbnRTaXplIiA9PT0gYiA/ICIxZW0iIDogZywgZyA9IGgucGl4ZWxMZWZ0ICsgInB4IiwgaC5sZWZ0ID0gZCwgZiAmJiAoZS5sZWZ0ID0gZikpLCB2b2lkIDAgPT09IGcgPyBnIDogZyArICIiIHx8ICJhdXRvIiB9KTsgZnVuY3Rpb24gTGIoYSwgYikgeyByZXR1cm4geyBnZXQ6IGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBhKCk7IGlmIChudWxsICE9IGMpIHJldHVybiBjID8gdm9pZCBkZWxldGUgdGhpcy5nZXQgOiAodGhpcy5nZXQgPSBiKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0gfSB9ICFmdW5jdGlvbiAoKSB7IHZhciBiLCBjLCBkLCBlLCBmLCBnLCBoOyBpZiAoYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGIuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsIGQgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIGMgPSBkICYmIGQuc3R5bGUpIHsgYy5jc3NUZXh0ID0gImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsIGsub3BhY2l0eSA9ICIwLjUiID09PSBjLm9wYWNpdHksIGsuY3NzRmxvYXQgPSAhIWMuY3NzRmxvYXQsIGIuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiY29udGVudC1ib3giLCBiLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSAiIiwgay5jbGVhckNsb25lU3R5bGUgPSAiY29udGVudC1ib3giID09PSBiLnN0eWxlLmJhY2tncm91bmRDbGlwLCBrLmJveFNpemluZyA9ICIiID09PSBjLmJveFNpemluZyB8fCAiIiA9PT0gYy5Nb3pCb3hTaXppbmcgfHwgIiIgPT09IGMuV2Via2l0Qm94U2l6aW5nLCBtLmV4dGVuZChrLCB7IHJlbGlhYmxlSGlkZGVuT2Zmc2V0czogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbCA9PSBnICYmIGkoKSwgZyB9LCBib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbCA9PSBmICYmIGkoKSwgZiB9LCBwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsID09IGUgJiYgaSgpLCBlIH0sIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGwgPT0gaCAmJiBpKCksIGggfSB9KTsgZnVuY3Rpb24gaSgpIHsgdmFyIGIsIGMsIGQsIGk7IGMgPSB5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sIGMgJiYgYy5zdHlsZSAmJiAoYiA9IHkuY3JlYXRlRWxlbWVudCgiZGl2IiksIGQgPSB5LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBkLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLCBjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLCBiLnN0eWxlLmNzc1RleHQgPSAiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLCBlID0gZiA9ICExLCBoID0gITAsIGEuZ2V0Q29tcHV0ZWRTdHlsZSAmJiAoZSA9ICIxJSIgIT09IChhLmdldENvbXB1dGVkU3R5bGUoYiwgbnVsbCkgfHwge30pLnRvcCwgZiA9ICI0cHgiID09PSAoYS5nZXRDb21wdXRlZFN0eWxlKGIsIG51bGwpIHx8IHsgd2lkdGg6ICI0cHgiIH0pLndpZHRoLCBpID0gYi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgaS5zdHlsZS5jc3NUZXh0ID0gYi5zdHlsZS5jc3NUZXh0ID0gIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsIGkuc3R5bGUubWFyZ2luUmlnaHQgPSBpLnN0eWxlLndpZHRoID0gIjAiLCBiLnN0eWxlLndpZHRoID0gIjFweCIsIGggPSAhcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGksIG51bGwpIHx8IHt9KS5tYXJnaW5SaWdodCkpLCBiLmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IiwgaSA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksIGlbMF0uc3R5bGUuY3NzVGV4dCA9ICJtYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjA7ZGlzcGxheTpub25lIiwgZyA9IDAgPT09IGlbMF0ub2Zmc2V0SGVpZ2h0LCBnICYmIChpWzBdLnN0eWxlLmRpc3BsYXkgPSAiIiwgaVsxXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiLCBnID0gMCA9PT0gaVswXS5vZmZzZXRIZWlnaHQpLCBjLnJlbW92ZUNoaWxkKGQpKSB9IH0gfSgpLCBtLnN3YXAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZyA9IHt9OyBmb3IgKGYgaW4gYikgZ1tmXSA9IGEuc3R5bGVbZl0sIGEuc3R5bGVbZl0gPSBiW2ZdOyBlID0gYy5hcHBseShhLCBkIHx8IFtdKTsgZm9yIChmIGluIGIpIGEuc3R5bGVbZl0gPSBnW2ZdOyByZXR1cm4gZSB9OyB2YXIgTWIgPSAvYWxwaGFcKFteKV0qXCkvaSwgTmIgPSAvb3BhY2l0eVxzKj1ccyooW14pXSopLywgT2IgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sIFBiID0gbmV3IFJlZ0V4cCgiXigiICsgUyArICIpKC4qKSQiLCAiaSIpLCBRYiA9IG5ldyBSZWdFeHAoIl4oWystXSk9KCIgKyBTICsgIikiLCAiaSIpLCBSYiA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sIFNiID0geyBsZXR0ZXJTcGFjaW5nOiAiMCIsIGZvbnRXZWlnaHQ6ICI0MDAiIH0sIFRiID0gWyJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiXTsgZnVuY3Rpb24gVWIoYSwgYikgeyBpZiAoYiBpbiBhKSByZXR1cm4gYjsgdmFyIGMgPSBiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYi5zbGljZSgxKSwgZCA9IGIsIGUgPSBUYi5sZW5ndGg7IHdoaWxlIChlLS0pIGlmIChiID0gVGJbZV0gKyBjLCBiIGluIGEpIHJldHVybiBiOyByZXR1cm4gZCB9IGZ1bmN0aW9uIFZiKGEsIGIpIHsgZm9yICh2YXIgYywgZCwgZSwgZiA9IFtdLCBnID0gMCwgaCA9IGEubGVuZ3RoOyBoID4gZzsgZysrKSBkID0gYVtnXSwgZC5zdHlsZSAmJiAoZltnXSA9IG0uX2RhdGEoZCwgIm9sZGRpc3BsYXkiKSwgYyA9IGQuc3R5bGUuZGlzcGxheSwgYiA/IChmW2ddIHx8ICJub25lIiAhPT0gYyB8fCAoZC5zdHlsZS5kaXNwbGF5ID0gIiIpLCAiIiA9PT0gZC5zdHlsZS5kaXNwbGF5ICYmIFUoZCkgJiYgKGZbZ10gPSBtLl9kYXRhKGQsICJvbGRkaXNwbGF5IiwgRmIoZC5ub2RlTmFtZSkpKSkgOiAoZSA9IFUoZCksIChjICYmICJub25lIiAhPT0gYyB8fCAhZSkgJiYgbS5fZGF0YShkLCAib2xkZGlzcGxheSIsIGUgPyBjIDogbS5jc3MoZCwgImRpc3BsYXkiKSkpKTsgZm9yIChnID0gMDsgaCA+IGc7IGcrKykgZCA9IGFbZ10sIGQuc3R5bGUgJiYgKGIgJiYgIm5vbmUiICE9PSBkLnN0eWxlLmRpc3BsYXkgJiYgIiIgIT09IGQuc3R5bGUuZGlzcGxheSB8fCAoZC5zdHlsZS5kaXNwbGF5ID0gYiA/IGZbZ10gfHwgIiIgOiAibm9uZSIpKTsgcmV0dXJuIGEgfSBmdW5jdGlvbiBXYihhLCBiLCBjKSB7IHZhciBkID0gUGIuZXhlYyhiKTsgcmV0dXJuIGQgPyBNYXRoLm1heCgwLCBkWzFdIC0gKGMgfHwgMCkpICsgKGRbMl0gfHwgInB4IikgOiBiIH0gZnVuY3Rpb24gWGIoYSwgYiwgYywgZCwgZSkgeyBmb3IgKHZhciBmID0gYyA9PT0gKGQgPyAiYm9yZGVyIiA6ICJjb250ZW50IikgPyA0IDogIndpZHRoIiA9PT0gYiA/IDEgOiAwLCBnID0gMDsgNCA+IGY7IGYgKz0gMikgIm1hcmdpbiIgPT09IGMgJiYgKGcgKz0gbS5jc3MoYSwgYyArIFRbZl0sICEwLCBlKSksIGQgPyAoImNvbnRlbnQiID09PSBjICYmIChnIC09IG0uY3NzKGEsICJwYWRkaW5nIiArIFRbZl0sICEwLCBlKSksICJtYXJnaW4iICE9PSBjICYmIChnIC09IG0uY3NzKGEsICJib3JkZXIiICsgVFtmXSArICJXaWR0aCIsICEwLCBlKSkpIDogKGcgKz0gbS5jc3MoYSwgInBhZGRpbmciICsgVFtmXSwgITAsIGUpLCAicGFkZGluZyIgIT09IGMgJiYgKGcgKz0gbS5jc3MoYSwgImJvcmRlciIgKyBUW2ZdICsgIldpZHRoIiwgITAsIGUpKSk7IHJldHVybiBnIH0gZnVuY3Rpb24gWWIoYSwgYiwgYykgeyB2YXIgZCA9ICEwLCBlID0gIndpZHRoIiA9PT0gYiA/IGEub2Zmc2V0V2lkdGggOiBhLm9mZnNldEhlaWdodCwgZiA9IEliKGEpLCBnID0gay5ib3hTaXppbmcgJiYgImJvcmRlci1ib3giID09PSBtLmNzcyhhLCAiYm94U2l6aW5nIiwgITEsIGYpOyBpZiAoMCA+PSBlIHx8IG51bGwgPT0gZSkgeyBpZiAoZSA9IEpiKGEsIGIsIGYpLCAoMCA+IGUgfHwgbnVsbCA9PSBlKSAmJiAoZSA9IGEuc3R5bGVbYl0pLCBIYi50ZXN0KGUpKSByZXR1cm4gZTsgZCA9IGcgJiYgKGsuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBlID09PSBhLnN0eWxlW2JdKSwgZSA9IHBhcnNlRmxvYXQoZSkgfHwgMCB9IHJldHVybiBlICsgWGIoYSwgYiwgYyB8fCAoZyA/ICJib3JkZXIiIDogImNvbnRlbnQiKSwgZCwgZikgKyAicHgiIH0gbS5leHRlbmQoeyBjc3NIb29rczogeyBvcGFjaXR5OiB7IGdldDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKGIpIHsgdmFyIGMgPSBKYihhLCAib3BhY2l0eSIpOyByZXR1cm4gIiIgPT09IGMgPyAiMSIgOiBjIH0gfSB9IH0sIGNzc051bWJlcjogeyBjb2x1bW5Db3VudDogITAsIGZpbGxPcGFjaXR5OiAhMCwgZmxleEdyb3c6ICEwLCBmbGV4U2hyaW5rOiAhMCwgZm9udFdlaWdodDogITAsIGxpbmVIZWlnaHQ6ICEwLCBvcGFjaXR5OiAhMCwgb3JkZXI6ICEwLCBvcnBoYW5zOiAhMCwgd2lkb3dzOiAhMCwgekluZGV4OiAhMCwgem9vbTogITAgfSwgY3NzUHJvcHM6IHsgImZsb2F0Ijogay5jc3NGbG9hdCA/ICJjc3NGbG9hdCIgOiAic3R5bGVGbG9hdCIgfSwgc3R5bGU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IGlmIChhICYmIDMgIT09IGEubm9kZVR5cGUgJiYgOCAhPT0gYS5ub2RlVHlwZSAmJiBhLnN0eWxlKSB7IHZhciBlLCBmLCBnLCBoID0gbS5jYW1lbENhc2UoYiksIGkgPSBhLnN0eWxlOyBpZiAoYiA9IG0uY3NzUHJvcHNbaF0gfHwgKG0uY3NzUHJvcHNbaF0gPSBVYihpLCBoKSksIGcgPSBtLmNzc0hvb2tzW2JdIHx8IG0uY3NzSG9va3NbaF0sIHZvaWQgMCA9PT0gYykgcmV0dXJuIGcgJiYgImdldCIgaW4gZyAmJiB2b2lkIDAgIT09IChlID0gZy5nZXQoYSwgITEsIGQpKSA/IGUgOiBpW2JdOyBpZiAoZiA9IHR5cGVvZiBjLCAic3RyaW5nIiA9PT0gZiAmJiAoZSA9IFFiLmV4ZWMoYykpICYmIChjID0gKGVbMV0gKyAxKSAqIGVbMl0gKyBwYXJzZUZsb2F0KG0uY3NzKGEsIGIpKSwgZiA9ICJudW1iZXIiKSwgbnVsbCAhPSBjICYmIGMgPT09IGMgJiYgKCJudW1iZXIiICE9PSBmIHx8IG0uY3NzTnVtYmVyW2hdIHx8IChjICs9ICJweCIpLCBrLmNsZWFyQ2xvbmVTdHlsZSB8fCAiIiAhPT0gYyB8fCAwICE9PSBiLmluZGV4T2YoImJhY2tncm91bmQiKSB8fCAoaVtiXSA9ICJpbmhlcml0IiksICEoZyAmJiAic2V0IiBpbiBnICYmIHZvaWQgMCA9PT0gKGMgPSBnLnNldChhLCBjLCBkKSkpKSkgdHJ5IHsgaVtiXSA9IGMgfSBjYXRjaCAoaikgeyB9IH0gfSwgY3NzOiBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCA9IG0uY2FtZWxDYXNlKGIpOyByZXR1cm4gYiA9IG0uY3NzUHJvcHNbaF0gfHwgKG0uY3NzUHJvcHNbaF0gPSBVYihhLnN0eWxlLCBoKSksIGcgPSBtLmNzc0hvb2tzW2JdIHx8IG0uY3NzSG9va3NbaF0sIGcgJiYgImdldCIgaW4gZyAmJiAoZiA9IGcuZ2V0KGEsICEwLCBjKSksIHZvaWQgMCA9PT0gZiAmJiAoZiA9IEpiKGEsIGIsIGQpKSwgIm5vcm1hbCIgPT09IGYgJiYgYiBpbiBTYiAmJiAoZiA9IFNiW2JdKSwgIiIgPT09IGMgfHwgYyA/IChlID0gcGFyc2VGbG9hdChmKSwgYyA9PT0gITAgfHwgbS5pc051bWVyaWMoZSkgPyBlIHx8IDAgOiBmKSA6IGYgfSB9KSwgbS5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uY3NzSG9va3NbYl0gPSB7IGdldDogZnVuY3Rpb24gKGEsIGMsIGQpIHsgcmV0dXJuIGMgPyBPYi50ZXN0KG0uY3NzKGEsICJkaXNwbGF5IikpICYmIDAgPT09IGEub2Zmc2V0V2lkdGggPyBtLnN3YXAoYSwgUmIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIFliKGEsIGIsIGQpIH0pIDogWWIoYSwgYiwgZCkgOiB2b2lkIDAgfSwgc2V0OiBmdW5jdGlvbiAoYSwgYywgZCkgeyB2YXIgZSA9IGQgJiYgSWIoYSk7IHJldHVybiBXYihhLCBjLCBkID8gWGIoYSwgYiwgZCwgay5ib3hTaXppbmcgJiYgImJvcmRlci1ib3giID09PSBtLmNzcyhhLCAiYm94U2l6aW5nIiwgITEsIGUpLCBlKSA6IDApIH0gfSB9KSwgay5vcGFjaXR5IHx8IChtLmNzc0hvb2tzLm9wYWNpdHkgPSB7IGdldDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIE5iLnRlc3QoKGIgJiYgYS5jdXJyZW50U3R5bGUgPyBhLmN1cnJlbnRTdHlsZS5maWx0ZXIgOiBhLnN0eWxlLmZpbHRlcikgfHwgIiIpID8gLjAxICogcGFyc2VGbG9hdChSZWdFeHAuJDEpICsgIiIgOiBiID8gIjEiIDogIiIgfSwgc2V0OiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGEuc3R5bGUsIGQgPSBhLmN1cnJlbnRTdHlsZSwgZSA9IG0uaXNOdW1lcmljKGIpID8gImFscGhhKG9wYWNpdHk9IiArIDEwMCAqIGIgKyAiKSIgOiAiIiwgZiA9IGQgJiYgZC5maWx0ZXIgfHwgYy5maWx0ZXIgfHwgIiI7IGMuem9vbSA9IDEsIChiID49IDEgfHwgIiIgPT09IGIpICYmICIiID09PSBtLnRyaW0oZi5yZXBsYWNlKE1iLCAiIikpICYmIGMucmVtb3ZlQXR0cmlidXRlICYmIChjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksICIiID09PSBiIHx8IGQgJiYgIWQuZmlsdGVyKSB8fCAoYy5maWx0ZXIgPSBNYi50ZXN0KGYpID8gZi5yZXBsYWNlKE1iLCBlKSA6IGYgKyAiICIgKyBlKSB9IH0pLCBtLmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gTGIoay5yZWxpYWJsZU1hcmdpblJpZ2h0LCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYiA/IG0uc3dhcChhLCB7IGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siIH0sIEpiLCBbYSwgIm1hcmdpblJpZ2h0Il0pIDogdm9pZCAwIH0pLCBtLmVhY2goeyBtYXJnaW46ICIiLCBwYWRkaW5nOiAiIiwgYm9yZGVyOiAiV2lkdGgiIH0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uY3NzSG9va3NbYSArIGJdID0geyBleHBhbmQ6IGZ1bmN0aW9uIChjKSB7IGZvciAodmFyIGQgPSAwLCBlID0ge30sIGYgPSAic3RyaW5nIiA9PSB0eXBlb2YgYyA/IGMuc3BsaXQoIiAiKSA6IFtjXTsgNCA+IGQ7IGQrKykgZVthICsgVFtkXSArIGJdID0gZltkXSB8fCBmW2QgLSAyXSB8fCBmWzBdOyByZXR1cm4gZSB9IH0sIEdiLnRlc3QoYSkgfHwgKG0uY3NzSG9va3NbYSArIGJdLnNldCA9IFdiKSB9KSwgbS5mbi5leHRlbmQoeyBjc3M6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBWKHRoaXMsIGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkLCBlLCBmID0ge30sIGcgPSAwOyBpZiAobS5pc0FycmF5KGIpKSB7IGZvciAoZCA9IEliKGEpLCBlID0gYi5sZW5ndGg7IGUgPiBnOyBnKyspIGZbYltnXV0gPSBtLmNzcyhhLCBiW2ddLCAhMSwgZCk7IHJldHVybiBmIH0gcmV0dXJuIHZvaWQgMCAhPT0gYyA/IG0uc3R5bGUoYSwgYiwgYykgOiBtLmNzcyhhLCBiKSB9LCBhLCBiLCBhcmd1bWVudHMubGVuZ3RoID4gMSkgfSwgc2hvdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gVmIodGhpcywgITApIH0sIGhpZGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFZiKHRoaXMpIH0sIHRvZ2dsZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgYSA/IGEgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgVSh0aGlzKSA/IG0odGhpcykuc2hvdygpIDogbSh0aGlzKS5oaWRlKCkgfSkgfSB9KTsgZnVuY3Rpb24gWmIoYSwgYiwgYywgZCwgZSkgeyByZXR1cm4gbmV3IFpiLnByb3RvdHlwZS5pbml0KGEsIGIsIGMsIGQsIGUpIH0gbS5Ud2VlbiA9IFpiLCBaYi5wcm90b3R5cGUgPSB7DQogICAgICAgIGNvbnN0cnVjdG9yOiBaYiwgaW5pdDogZnVuY3Rpb24gKGEsIGIsIGMsIGQsIGUsIGYpIHsNCiAgICAgICAgICAgIHRoaXMuZWxlbSA9IGEsIHRoaXMucHJvcCA9IGMsIHRoaXMuZWFzaW5nID0gZSB8fCAic3dpbmciLCB0aGlzLm9wdGlvbnMgPSBiLCB0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpLCB0aGlzLmVuZCA9IGQsIHRoaXMudW5pdCA9IGYgfHwgKG0uY3NzTnVtYmVyW2NdID8gIiIgOiAicHgiKQ0KICAgICAgICB9LCBjdXI6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBaYi5wcm9wSG9va3NbdGhpcy5wcm9wXTsgcmV0dXJuIGEgJiYgYS5nZXQgPyBhLmdldCh0aGlzKSA6IFpiLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcykgfSwgcnVuOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYyA9IFpiLnByb3BIb29rc1t0aGlzLnByb3BdOyByZXR1cm4gdGhpcy5wb3MgPSBiID0gdGhpcy5vcHRpb25zLmR1cmF0aW9uID8gbS5lYXNpbmdbdGhpcy5lYXNpbmddKGEsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIGEsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvbikgOiBhLCB0aGlzLm5vdyA9ICh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogYiArIHRoaXMuc3RhcnQsIHRoaXMub3B0aW9ucy5zdGVwICYmIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyksIGMgJiYgYy5zZXQgPyBjLnNldCh0aGlzKSA6IFpiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksIHRoaXMgfQ0KICAgIH0sIFpiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFpiLnByb3RvdHlwZSwgWmIucHJvcEhvb2tzID0geyBfZGVmYXVsdDogeyBnZXQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiOyByZXR1cm4gbnVsbCA9PSBhLmVsZW1bYS5wcm9wXSB8fCBhLmVsZW0uc3R5bGUgJiYgbnVsbCAhPSBhLmVsZW0uc3R5bGVbYS5wcm9wXSA/IChiID0gbS5jc3MoYS5lbGVtLCBhLnByb3AsICIiKSwgYiAmJiAiYXV0byIgIT09IGIgPyBiIDogMCkgOiBhLmVsZW1bYS5wcm9wXSB9LCBzZXQ6IGZ1bmN0aW9uIChhKSB7IG0uZnguc3RlcFthLnByb3BdID8gbS5meC5zdGVwW2EucHJvcF0oYSkgOiBhLmVsZW0uc3R5bGUgJiYgKG51bGwgIT0gYS5lbGVtLnN0eWxlW20uY3NzUHJvcHNbYS5wcm9wXV0gfHwgbS5jc3NIb29rc1thLnByb3BdKSA/IG0uc3R5bGUoYS5lbGVtLCBhLnByb3AsIGEubm93ICsgYS51bml0KSA6IGEuZWxlbVthLnByb3BdID0gYS5ub3cgfSB9IH0sIFpiLnByb3BIb29rcy5zY3JvbGxUb3AgPSBaYi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsgc2V0OiBmdW5jdGlvbiAoYSkgeyBhLmVsZW0ubm9kZVR5cGUgJiYgYS5lbGVtLnBhcmVudE5vZGUgJiYgKGEuZWxlbVthLnByb3BdID0gYS5ub3cpIH0gfSwgbS5lYXNpbmcgPSB7IGxpbmVhcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgfSwgc3dpbmc6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAuNSAtIE1hdGguY29zKGEgKiBNYXRoLlBJKSAvIDIgfSB9LCBtLmZ4ID0gWmIucHJvdG90eXBlLmluaXQsIG0uZnguc3RlcCA9IHt9OyB2YXIgJGIsIF9iLCBhYyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywgYmMgPSBuZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIgKyBTICsgIikoW2EteiVdKikkIiwgImkiKSwgY2MgPSAvcXVldWVIb29rcyQvLCBkYyA9IFtpY10sIGVjID0geyAiKiI6IFtmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IHRoaXMuY3JlYXRlVHdlZW4oYSwgYiksIGQgPSBjLmN1cigpLCBlID0gYmMuZXhlYyhiKSwgZiA9IGUgJiYgZVszXSB8fCAobS5jc3NOdW1iZXJbYV0gPyAiIiA6ICJweCIpLCBnID0gKG0uY3NzTnVtYmVyW2FdIHx8ICJweCIgIT09IGYgJiYgK2QpICYmIGJjLmV4ZWMobS5jc3MoYy5lbGVtLCBhKSksIGggPSAxLCBpID0gMjA7IGlmIChnICYmIGdbM10gIT09IGYpIHsgZiA9IGYgfHwgZ1szXSwgZSA9IGUgfHwgW10sIGcgPSArZCB8fCAxOyBkbyBoID0gaCB8fCAiLjUiLCBnIC89IGgsIG0uc3R5bGUoYy5lbGVtLCBhLCBnICsgZik7IHdoaWxlIChoICE9PSAoaCA9IGMuY3VyKCkgLyBkKSAmJiAxICE9PSBoICYmIC0taSkgfSByZXR1cm4gZSAmJiAoZyA9IGMuc3RhcnQgPSArZyB8fCArZCB8fCAwLCBjLnVuaXQgPSBmLCBjLmVuZCA9IGVbMV0gPyBnICsgKGVbMV0gKyAxKSAqIGVbMl0gOiArZVsyXSksIGMgfV0gfTsgZnVuY3Rpb24gZmMoKSB7IHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJGIgPSB2b2lkIDAgfSksICRiID0gbS5ub3coKSB9IGZ1bmN0aW9uIGdjKGEsIGIpIHsgdmFyIGMsIGQgPSB7IGhlaWdodDogYSB9LCBlID0gMDsgZm9yIChiID0gYiA/IDEgOiAwOyA0ID4gZTsgZSArPSAyIC0gYikgYyA9IFRbZV0sIGRbIm1hcmdpbiIgKyBjXSA9IGRbInBhZGRpbmciICsgY10gPSBhOyByZXR1cm4gYiAmJiAoZC5vcGFjaXR5ID0gZC53aWR0aCA9IGEpLCBkIH0gZnVuY3Rpb24gaGMoYSwgYiwgYykgeyBmb3IgKHZhciBkLCBlID0gKGVjW2JdIHx8IFtdKS5jb25jYXQoZWNbIioiXSksIGYgPSAwLCBnID0gZS5sZW5ndGg7IGcgPiBmOyBmKyspIGlmIChkID0gZVtmXS5jYWxsKGMsIGIsIGEpKSByZXR1cm4gZCB9IGZ1bmN0aW9uIGljKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcsIGgsIGksIGosIGwsIG4gPSB0aGlzLCBvID0ge30sIHAgPSBhLnN0eWxlLCBxID0gYS5ub2RlVHlwZSAmJiBVKGEpLCByID0gbS5fZGF0YShhLCAiZnhzaG93Iik7IGMucXVldWUgfHwgKGggPSBtLl9xdWV1ZUhvb2tzKGEsICJmeCIpLCBudWxsID09IGgudW5xdWV1ZWQgJiYgKGgudW5xdWV1ZWQgPSAwLCBpID0gaC5lbXB0eS5maXJlLCBoLmVtcHR5LmZpcmUgPSBmdW5jdGlvbiAoKSB7IGgudW5xdWV1ZWQgfHwgaSgpIH0pLCBoLnVucXVldWVkKyssIG4uYWx3YXlzKGZ1bmN0aW9uICgpIHsgbi5hbHdheXMoZnVuY3Rpb24gKCkgeyBoLnVucXVldWVkLS0sIG0ucXVldWUoYSwgImZ4IikubGVuZ3RoIHx8IGguZW1wdHkuZmlyZSgpIH0pIH0pKSwgMSA9PT0gYS5ub2RlVHlwZSAmJiAoImhlaWdodCIgaW4gYiB8fCAid2lkdGgiIGluIGIpICYmIChjLm92ZXJmbG93ID0gW3Aub3ZlcmZsb3csIHAub3ZlcmZsb3dYLCBwLm92ZXJmbG93WV0sIGogPSBtLmNzcyhhLCAiZGlzcGxheSIpLCBsID0gIm5vbmUiID09PSBqID8gbS5fZGF0YShhLCAib2xkZGlzcGxheSIpIHx8IEZiKGEubm9kZU5hbWUpIDogaiwgImlubGluZSIgPT09IGwgJiYgIm5vbmUiID09PSBtLmNzcyhhLCAiZmxvYXQiKSAmJiAoay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ICYmICJpbmxpbmUiICE9PSBGYihhLm5vZGVOYW1lKSA/IHAuem9vbSA9IDEgOiBwLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIikpLCBjLm92ZXJmbG93ICYmIChwLm92ZXJmbG93ID0gImhpZGRlbiIsIGsuc2hyaW5rV3JhcEJsb2NrcygpIHx8IG4uYWx3YXlzKGZ1bmN0aW9uICgpIHsgcC5vdmVyZmxvdyA9IGMub3ZlcmZsb3dbMF0sIHAub3ZlcmZsb3dYID0gYy5vdmVyZmxvd1sxXSwgcC5vdmVyZmxvd1kgPSBjLm92ZXJmbG93WzJdIH0pKTsgZm9yIChkIGluIGIpIGlmIChlID0gYltkXSwgYWMuZXhlYyhlKSkgeyBpZiAoZGVsZXRlIGJbZF0sIGYgPSBmIHx8ICJ0b2dnbGUiID09PSBlLCBlID09PSAocSA/ICJoaWRlIiA6ICJzaG93IikpIHsgaWYgKCJzaG93IiAhPT0gZSB8fCAhciB8fCB2b2lkIDAgPT09IHJbZF0pIGNvbnRpbnVlOyBxID0gITAgfSBvW2RdID0gciAmJiByW2RdIHx8IG0uc3R5bGUoYSwgZCkgfSBlbHNlIGogPSB2b2lkIDA7IGlmIChtLmlzRW1wdHlPYmplY3QobykpICJpbmxpbmUiID09PSAoIm5vbmUiID09PSBqID8gRmIoYS5ub2RlTmFtZSkgOiBqKSAmJiAocC5kaXNwbGF5ID0gaik7IGVsc2UgeyByID8gImhpZGRlbiIgaW4gciAmJiAocSA9IHIuaGlkZGVuKSA6IHIgPSBtLl9kYXRhKGEsICJmeHNob3ciLCB7fSksIGYgJiYgKHIuaGlkZGVuID0gIXEpLCBxID8gbShhKS5zaG93KCkgOiBuLmRvbmUoZnVuY3Rpb24gKCkgeyBtKGEpLmhpZGUoKSB9KSwgbi5kb25lKGZ1bmN0aW9uICgpIHsgdmFyIGI7IG0uX3JlbW92ZURhdGEoYSwgImZ4c2hvdyIpOyBmb3IgKGIgaW4gbykgbS5zdHlsZShhLCBiLCBvW2JdKSB9KTsgZm9yIChkIGluIG8pIGcgPSBoYyhxID8gcltkXSA6IDAsIGQsIG4pLCBkIGluIHIgfHwgKHJbZF0gPSBnLnN0YXJ0LCBxICYmIChnLmVuZCA9IGcuc3RhcnQsIGcuc3RhcnQgPSAid2lkdGgiID09PSBkIHx8ICJoZWlnaHQiID09PSBkID8gMSA6IDApKSB9IH0gZnVuY3Rpb24gamMoYSwgYikgeyB2YXIgYywgZCwgZSwgZiwgZzsgZm9yIChjIGluIGEpIGlmIChkID0gbS5jYW1lbENhc2UoYyksIGUgPSBiW2RdLCBmID0gYVtjXSwgbS5pc0FycmF5KGYpICYmIChlID0gZlsxXSwgZiA9IGFbY10gPSBmWzBdKSwgYyAhPT0gZCAmJiAoYVtkXSA9IGYsIGRlbGV0ZSBhW2NdKSwgZyA9IG0uY3NzSG9va3NbZF0sIGcgJiYgImV4cGFuZCIgaW4gZykgeyBmID0gZy5leHBhbmQoZiksIGRlbGV0ZSBhW2RdOyBmb3IgKGMgaW4gZikgYyBpbiBhIHx8IChhW2NdID0gZltjXSwgYltjXSA9IGUpIH0gZWxzZSBiW2RdID0gZSB9IGZ1bmN0aW9uIGtjKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYgPSAwLCBnID0gZGMubGVuZ3RoLCBoID0gbS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbiAoKSB7IGRlbGV0ZSBpLmVsZW0gfSksIGkgPSBmdW5jdGlvbiAoKSB7IGlmIChlKSByZXR1cm4gITE7IGZvciAodmFyIGIgPSAkYiB8fCBmYygpLCBjID0gTWF0aC5tYXgoMCwgai5zdGFydFRpbWUgKyBqLmR1cmF0aW9uIC0gYiksIGQgPSBjIC8gai5kdXJhdGlvbiB8fCAwLCBmID0gMSAtIGQsIGcgPSAwLCBpID0gai50d2VlbnMubGVuZ3RoOyBpID4gZzsgZysrKSBqLnR3ZWVuc1tnXS5ydW4oZik7IHJldHVybiBoLm5vdGlmeVdpdGgoYSwgW2osIGYsIGNdKSwgMSA+IGYgJiYgaSA/IGMgOiAoaC5yZXNvbHZlV2l0aChhLCBbal0pLCAhMSkgfSwgaiA9IGgucHJvbWlzZSh7IGVsZW06IGEsIHByb3BzOiBtLmV4dGVuZCh7fSwgYiksIG9wdHM6IG0uZXh0ZW5kKCEwLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIGMpLCBvcmlnaW5hbFByb3BlcnRpZXM6IGIsIG9yaWdpbmFsT3B0aW9uczogYywgc3RhcnRUaW1lOiAkYiB8fCBmYygpLCBkdXJhdGlvbjogYy5kdXJhdGlvbiwgdHdlZW5zOiBbXSwgY3JlYXRlVHdlZW46IGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkID0gbS5Ud2VlbihhLCBqLm9wdHMsIGIsIGMsIGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdIHx8IGoub3B0cy5lYXNpbmcpOyByZXR1cm4gai50d2VlbnMucHVzaChkKSwgZCB9LCBzdG9wOiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IDAsIGQgPSBiID8gai50d2VlbnMubGVuZ3RoIDogMDsgaWYgKGUpIHJldHVybiB0aGlzOyBmb3IgKGUgPSAhMDsgZCA+IGM7IGMrKykgai50d2VlbnNbY10ucnVuKDEpOyByZXR1cm4gYiA/IGgucmVzb2x2ZVdpdGgoYSwgW2osIGJdKSA6IGgucmVqZWN0V2l0aChhLCBbaiwgYl0pLCB0aGlzIH0gfSksIGsgPSBqLnByb3BzOyBmb3IgKGpjKGssIGoub3B0cy5zcGVjaWFsRWFzaW5nKSA7IGcgPiBmOyBmKyspIGlmIChkID0gZGNbZl0uY2FsbChqLCBhLCBrLCBqLm9wdHMpKSByZXR1cm4gZDsgcmV0dXJuIG0ubWFwKGssIGhjLCBqKSwgbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkgJiYgai5vcHRzLnN0YXJ0LmNhbGwoYSwgaiksIG0uZngudGltZXIobS5leHRlbmQoaSwgeyBlbGVtOiBhLCBhbmltOiBqLCBxdWV1ZTogai5vcHRzLnF1ZXVlIH0pKSwgai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsIGoub3B0cy5jb21wbGV0ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpIH0gbS5BbmltYXRpb24gPSBtLmV4dGVuZChrYywgeyB0d2VlbmVyOiBmdW5jdGlvbiAoYSwgYikgeyBtLmlzRnVuY3Rpb24oYSkgPyAoYiA9IGEsIGEgPSBbIioiXSkgOiBhID0gYS5zcGxpdCgiICIpOyBmb3IgKHZhciBjLCBkID0gMCwgZSA9IGEubGVuZ3RoOyBlID4gZDsgZCsrKSBjID0gYVtkXSwgZWNbY10gPSBlY1tjXSB8fCBbXSwgZWNbY10udW5zaGlmdChiKSB9LCBwcmVmaWx0ZXI6IGZ1bmN0aW9uIChhLCBiKSB7IGIgPyBkYy51bnNoaWZ0KGEpIDogZGMucHVzaChhKSB9IH0pLCBtLnNwZWVkID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQgPSBhICYmICJvYmplY3QiID09IHR5cGVvZiBhID8gbS5leHRlbmQoe30sIGEpIDogeyBjb21wbGV0ZTogYyB8fCAhYyAmJiBiIHx8IG0uaXNGdW5jdGlvbihhKSAmJiBhLCBkdXJhdGlvbjogYSwgZWFzaW5nOiBjICYmIGIgfHwgYiAmJiAhbS5pc0Z1bmN0aW9uKGIpICYmIGIgfTsgcmV0dXJuIGQuZHVyYXRpb24gPSBtLmZ4Lm9mZiA/IDAgOiAibnVtYmVyIiA9PSB0eXBlb2YgZC5kdXJhdGlvbiA/IGQuZHVyYXRpb24gOiBkLmR1cmF0aW9uIGluIG0uZnguc3BlZWRzID8gbS5meC5zcGVlZHNbZC5kdXJhdGlvbl0gOiBtLmZ4LnNwZWVkcy5fZGVmYXVsdCwgKG51bGwgPT0gZC5xdWV1ZSB8fCBkLnF1ZXVlID09PSAhMCkgJiYgKGQucXVldWUgPSAiZngiKSwgZC5vbGQgPSBkLmNvbXBsZXRlLCBkLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyBtLmlzRnVuY3Rpb24oZC5vbGQpICYmIGQub2xkLmNhbGwodGhpcyksIGQucXVldWUgJiYgbS5kZXF1ZXVlKHRoaXMsIGQucXVldWUpIH0sIGQgfSwgbS5mbi5leHRlbmQoeyBmYWRlVG86IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiB0aGlzLmZpbHRlcihVKS5jc3MoIm9wYWNpdHkiLCAwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IGIgfSwgYSwgYywgZCkgfSwgYW5pbWF0ZTogZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgdmFyIGUgPSBtLmlzRW1wdHlPYmplY3QoYSksIGYgPSBtLnNwZWVkKGIsIGMsIGQpLCBnID0gZnVuY3Rpb24gKCkgeyB2YXIgYiA9IGtjKHRoaXMsIG0uZXh0ZW5kKHt9LCBhKSwgZik7IChlIHx8IG0uX2RhdGEodGhpcywgImZpbmlzaCIpKSAmJiBiLnN0b3AoITApIH07IHJldHVybiBnLmZpbmlzaCA9IGcsIGUgfHwgZi5xdWV1ZSA9PT0gITEgPyB0aGlzLmVhY2goZykgOiB0aGlzLnF1ZXVlKGYucXVldWUsIGcpIH0sIHN0b3A6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLnN0b3A7IGRlbGV0ZSBhLnN0b3AsIGIoYykgfTsgcmV0dXJuICJzdHJpbmciICE9IHR5cGVvZiBhICYmIChjID0gYiwgYiA9IGEsIGEgPSB2b2lkIDApLCBiICYmIGEgIT09ICExICYmIHRoaXMucXVldWUoYSB8fCAiZngiLCBbXSksIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBiID0gITAsIGUgPSBudWxsICE9IGEgJiYgYSArICJxdWV1ZUhvb2tzIiwgZiA9IG0udGltZXJzLCBnID0gbS5fZGF0YSh0aGlzKTsgaWYgKGUpIGdbZV0gJiYgZ1tlXS5zdG9wICYmIGQoZ1tlXSk7IGVsc2UgZm9yIChlIGluIGcpIGdbZV0gJiYgZ1tlXS5zdG9wICYmIGNjLnRlc3QoZSkgJiYgZChnW2VdKTsgZm9yIChlID0gZi5sZW5ndGg7IGUtLTspIGZbZV0uZWxlbSAhPT0gdGhpcyB8fCBudWxsICE9IGEgJiYgZltlXS5xdWV1ZSAhPT0gYSB8fCAoZltlXS5hbmltLnN0b3AoYyksIGIgPSAhMSwgZi5zcGxpY2UoZSwgMSkpOyAoYiB8fCAhYykgJiYgbS5kZXF1ZXVlKHRoaXMsIGEpIH0pIH0sIGZpbmlzaDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgIT09ICExICYmIChhID0gYSB8fCAiZngiKSwgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGIsIGMgPSBtLl9kYXRhKHRoaXMpLCBkID0gY1thICsgInF1ZXVlIl0sIGUgPSBjW2EgKyAicXVldWVIb29rcyJdLCBmID0gbS50aW1lcnMsIGcgPSBkID8gZC5sZW5ndGggOiAwOyBmb3IgKGMuZmluaXNoID0gITAsIG0ucXVldWUodGhpcywgYSwgW10pLCBlICYmIGUuc3RvcCAmJiBlLnN0b3AuY2FsbCh0aGlzLCAhMCksIGIgPSBmLmxlbmd0aDsgYi0tOykgZltiXS5lbGVtID09PSB0aGlzICYmIGZbYl0ucXVldWUgPT09IGEgJiYgKGZbYl0uYW5pbS5zdG9wKCEwKSwgZi5zcGxpY2UoYiwgMSkpOyBmb3IgKGIgPSAwOyBnID4gYjsgYisrKSBkW2JdICYmIGRbYl0uZmluaXNoICYmIGRbYl0uZmluaXNoLmNhbGwodGhpcyk7IGRlbGV0ZSBjLmZpbmlzaCB9KSB9IH0pLCBtLmVhY2goWyJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIl0sIGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gbS5mbltiXTsgbS5mbltiXSA9IGZ1bmN0aW9uIChhLCBkLCBlKSB7IHJldHVybiBudWxsID09IGEgfHwgImJvb2xlYW4iID09IHR5cGVvZiBhID8gYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogdGhpcy5hbmltYXRlKGdjKGIsICEwKSwgYSwgZCwgZSkgfSB9KSwgbS5lYWNoKHsgc2xpZGVEb3duOiBnYygic2hvdyIpLCBzbGlkZVVwOiBnYygiaGlkZSIpLCBzbGlkZVRvZ2dsZTogZ2MoInRvZ2dsZSIpLCBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sIGZhZGVPdXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfSB9LCBmdW5jdGlvbiAoYSwgYikgeyBtLmZuW2FdID0gZnVuY3Rpb24gKGEsIGMsIGQpIHsgcmV0dXJuIHRoaXMuYW5pbWF0ZShiLCBhLCBjLCBkKSB9IH0pLCBtLnRpbWVycyA9IFtdLCBtLmZ4LnRpY2sgPSBmdW5jdGlvbiAoKSB7IHZhciBhLCBiID0gbS50aW1lcnMsIGMgPSAwOyBmb3IgKCRiID0gbS5ub3coKSA7IGMgPCBiLmxlbmd0aDsgYysrKSBhID0gYltjXSwgYSgpIHx8IGJbY10gIT09IGEgfHwgYi5zcGxpY2UoYy0tLCAxKTsgYi5sZW5ndGggfHwgbS5meC5zdG9wKCksICRiID0gdm9pZCAwIH0sIG0uZngudGltZXIgPSBmdW5jdGlvbiAoYSkgeyBtLnRpbWVycy5wdXNoKGEpLCBhKCkgPyBtLmZ4LnN0YXJ0KCkgOiBtLnRpbWVycy5wb3AoKSB9LCBtLmZ4LmludGVydmFsID0gMTMsIG0uZnguc3RhcnQgPSBmdW5jdGlvbiAoKSB7IF9iIHx8IChfYiA9IHNldEludGVydmFsKG0uZngudGljaywgbS5meC5pbnRlcnZhbCkpIH0sIG0uZnguc3RvcCA9IGZ1bmN0aW9uICgpIHsgY2xlYXJJbnRlcnZhbChfYiksIF9iID0gbnVsbCB9LCBtLmZ4LnNwZWVkcyA9IHsgc2xvdzogNjAwLCBmYXN0OiAyMDAsIF9kZWZhdWx0OiA0MDAgfSwgbS5mbi5kZWxheSA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhID0gbS5meCA/IG0uZnguc3BlZWRzW2FdIHx8IGEgOiBhLCBiID0gYiB8fCAiZngiLCB0aGlzLnF1ZXVlKGIsIGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkID0gc2V0VGltZW91dChiLCBhKTsgYy5zdG9wID0gZnVuY3Rpb24gKCkgeyBjbGVhclRpbWVvdXQoZCkgfSB9KSB9LCBmdW5jdGlvbiAoKSB7IHZhciBhLCBiLCBjLCBkLCBlOyBiID0geS5jcmVhdGVFbGVtZW50KCJkaXYiKSwgYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsICJ0IiksIGIuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsIGQgPSBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIGMgPSB5LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLCBlID0gYy5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSwgYSA9IGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sIGQuc3R5bGUuY3NzVGV4dCA9ICJ0b3A6MXB4Iiwgay5nZXRTZXRBdHRyaWJ1dGUgPSAidCIgIT09IGIuY2xhc3NOYW1lLCBrLnN0eWxlID0gL3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksIGsuaHJlZk5vcm1hbGl6ZWQgPSAiL2EiID09PSBkLmdldEF0dHJpYnV0ZSgiaHJlZiIpLCBrLmNoZWNrT24gPSAhIWEudmFsdWUsIGsub3B0U2VsZWN0ZWQgPSBlLnNlbGVjdGVkLCBrLmVuY3R5cGUgPSAhIXkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsIGMuZGlzYWJsZWQgPSAhMCwgay5vcHREaXNhYmxlZCA9ICFlLmRpc2FibGVkLCBhID0geS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLCBhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCAiIiksIGsuaW5wdXQgPSAiIiA9PT0gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksIGEudmFsdWUgPSAidCIsIGEuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInJhZGlvIiksIGsucmFkaW9WYWx1ZSA9ICJ0IiA9PT0gYS52YWx1ZSB9KCk7IHZhciBsYyA9IC9cci9nOyBtLmZuLmV4dGVuZCh7IHZhbDogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUgPSB0aGlzWzBdOyB7IGlmIChhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZCA9IG0uaXNGdW5jdGlvbihhKSwgdGhpcy5lYWNoKGZ1bmN0aW9uIChjKSB7IHZhciBlOyAxID09PSB0aGlzLm5vZGVUeXBlICYmIChlID0gZCA/IGEuY2FsbCh0aGlzLCBjLCBtKHRoaXMpLnZhbCgpKSA6IGEsIG51bGwgPT0gZSA/IGUgPSAiIiA6ICJudW1iZXIiID09IHR5cGVvZiBlID8gZSArPSAiIiA6IG0uaXNBcnJheShlKSAmJiAoZSA9IG0ubWFwKGUsIGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsID09IGEgPyAiIiA6IGEgKyAiIiB9KSksIGIgPSBtLnZhbEhvb2tzW3RoaXMudHlwZV0gfHwgbS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLCBiICYmICJzZXQiIGluIGIgJiYgdm9pZCAwICE9PSBiLnNldCh0aGlzLCBlLCAidmFsdWUiKSB8fCAodGhpcy52YWx1ZSA9IGUpKSB9KTsgaWYgKGUpIHJldHVybiBiID0gbS52YWxIb29rc1tlLnR5cGVdIHx8IG0udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSwgYiAmJiAiZ2V0IiBpbiBiICYmIHZvaWQgMCAhPT0gKGMgPSBiLmdldChlLCAidmFsdWUiKSkgPyBjIDogKGMgPSBlLnZhbHVlLCAic3RyaW5nIiA9PSB0eXBlb2YgYyA/IGMucmVwbGFjZShsYywgIiIpIDogbnVsbCA9PSBjID8gIiIgOiBjKSB9IH0gfSksIG0uZXh0ZW5kKHsgdmFsSG9va3M6IHsgb3B0aW9uOiB7IGdldDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmZpbmQuYXR0cihhLCAidmFsdWUiKTsgcmV0dXJuIG51bGwgIT0gYiA/IGIgOiBtLnRyaW0obS50ZXh0KGEpKSB9IH0sIHNlbGVjdDogeyBnZXQ6IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIsIGMsIGQgPSBhLm9wdGlvbnMsIGUgPSBhLnNlbGVjdGVkSW5kZXgsIGYgPSAic2VsZWN0LW9uZSIgPT09IGEudHlwZSB8fCAwID4gZSwgZyA9IGYgPyBudWxsIDogW10sIGggPSBmID8gZSArIDEgOiBkLmxlbmd0aCwgaSA9IDAgPiBlID8gaCA6IGYgPyBlIDogMDsgaCA+IGk7IGkrKykgaWYgKGMgPSBkW2ldLCAhKCFjLnNlbGVjdGVkICYmIGkgIT09IGUgfHwgKGsub3B0RGlzYWJsZWQgPyBjLmRpc2FibGVkIDogbnVsbCAhPT0gYy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpIHx8IGMucGFyZW50Tm9kZS5kaXNhYmxlZCAmJiBtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwgIm9wdGdyb3VwIikpKSB7IGlmIChiID0gbShjKS52YWwoKSwgZikgcmV0dXJuIGI7IGcucHVzaChiKSB9IHJldHVybiBnIH0sIHNldDogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQsIGUgPSBhLm9wdGlvbnMsIGYgPSBtLm1ha2VBcnJheShiKSwgZyA9IGUubGVuZ3RoOyB3aGlsZSAoZy0tKSBpZiAoZCA9IGVbZ10sIG0uaW5BcnJheShtLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksIGYpID49IDApIHRyeSB7IGQuc2VsZWN0ZWQgPSBjID0gITAgfSBjYXRjaCAoaCkgeyBkLnNjcm9sbEhlaWdodCB9IGVsc2UgZC5zZWxlY3RlZCA9ICExOyByZXR1cm4gYyB8fCAoYS5zZWxlY3RlZEluZGV4ID0gLTEpLCBlIH0gfSB9IH0pLCBtLmVhY2goWyJyYWRpbyIsICJjaGVja2JveCJdLCBmdW5jdGlvbiAoKSB7IG0udmFsSG9va3NbdGhpc10gPSB7IHNldDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIG0uaXNBcnJheShiKSA/IGEuY2hlY2tlZCA9IG0uaW5BcnJheShtKGEpLnZhbCgpLCBiKSA+PSAwIDogdm9pZCAwIH0gfSwgay5jaGVja09uIHx8IChtLnZhbEhvb2tzW3RoaXNdLmdldCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBudWxsID09PSBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA/ICJvbiIgOiBhLnZhbHVlIH0pIH0pOyB2YXIgbWMsIG5jLCBvYyA9IG0uZXhwci5hdHRySGFuZGxlLCBwYyA9IC9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksIHFjID0gay5nZXRTZXRBdHRyaWJ1dGUsIHJjID0gay5pbnB1dDsgbS5mbi5leHRlbmQoeyBhdHRyOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gVih0aGlzLCBtLmF0dHIsIGEsIGIsIGFyZ3VtZW50cy5sZW5ndGggPiAxKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgbS5yZW1vdmVBdHRyKHRoaXMsIGEpIH0pIH0gfSksIG0uZXh0ZW5kKHsgYXR0cjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYgPSBhLm5vZGVUeXBlOyBpZiAoYSAmJiAzICE9PSBmICYmIDggIT09IGYgJiYgMiAhPT0gZikgcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZSA9PT0gSyA/IG0ucHJvcChhLCBiLCBjKSA6ICgxID09PSBmICYmIG0uaXNYTUxEb2MoYSkgfHwgKGIgPSBiLnRvTG93ZXJDYXNlKCksIGQgPSBtLmF0dHJIb29rc1tiXSB8fCAobS5leHByLm1hdGNoLmJvb2wudGVzdChiKSA/IG5jIDogbWMpKSwgdm9pZCAwID09PSBjID8gZCAmJiAiZ2V0IiBpbiBkICYmIG51bGwgIT09IChlID0gZC5nZXQoYSwgYikpID8gZSA6IChlID0gbS5maW5kLmF0dHIoYSwgYiksIG51bGwgPT0gZSA/IHZvaWQgMCA6IGUpIDogbnVsbCAhPT0gYyA/IGQgJiYgInNldCIgaW4gZCAmJiB2b2lkIDAgIT09IChlID0gZC5zZXQoYSwgYywgYikpID8gZSA6IChhLnNldEF0dHJpYnV0ZShiLCBjICsgIiIpLCBjKSA6IHZvaWQgbS5yZW1vdmVBdHRyKGEsIGIpKSB9LCByZW1vdmVBdHRyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYywgZCwgZSA9IDAsIGYgPSBiICYmIGIubWF0Y2goRSk7IGlmIChmICYmIDEgPT09IGEubm9kZVR5cGUpIHdoaWxlIChjID0gZltlKytdKSBkID0gbS5wcm9wRml4W2NdIHx8IGMsIG0uZXhwci5tYXRjaC5ib29sLnRlc3QoYykgPyByYyAmJiBxYyB8fCAhcGMudGVzdChjKSA/IGFbZF0gPSAhMSA6IGFbbS5jYW1lbENhc2UoImRlZmF1bHQtIiArIGMpXSA9IGFbZF0gPSAhMSA6IG0uYXR0cihhLCBjLCAiIiksIGEucmVtb3ZlQXR0cmlidXRlKHFjID8gYyA6IGQpIH0sIGF0dHJIb29rczogeyB0eXBlOiB7IHNldDogZnVuY3Rpb24gKGEsIGIpIHsgaWYgKCFrLnJhZGlvVmFsdWUgJiYgInJhZGlvIiA9PT0gYiAmJiBtLm5vZGVOYW1lKGEsICJpbnB1dCIpKSB7IHZhciBjID0gYS52YWx1ZTsgcmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIiwgYiksIGMgJiYgKGEudmFsdWUgPSBjKSwgYiB9IH0gfSB9IH0pLCBuYyA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gYiA9PT0gITEgPyBtLnJlbW92ZUF0dHIoYSwgYykgOiByYyAmJiBxYyB8fCAhcGMudGVzdChjKSA/IGEuc2V0QXR0cmlidXRlKCFxYyAmJiBtLnByb3BGaXhbY10gfHwgYywgYykgOiBhW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIgKyBjKV0gPSBhW2NdID0gITAsIGMgfSB9LCBtLmVhY2gobS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksIGZ1bmN0aW9uIChhLCBiKSB7IHZhciBjID0gb2NbYl0gfHwgbS5maW5kLmF0dHI7IG9jW2JdID0gcmMgJiYgcWMgfHwgIXBjLnRlc3QoYikgPyBmdW5jdGlvbiAoYSwgYiwgZCkgeyB2YXIgZSwgZjsgcmV0dXJuIGQgfHwgKGYgPSBvY1tiXSwgb2NbYl0gPSBlLCBlID0gbnVsbCAhPSBjKGEsIGIsIGQpID8gYi50b0xvd2VyQ2FzZSgpIDogbnVsbCwgb2NbYl0gPSBmKSwgZSB9IDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGMgPyB2b2lkIDAgOiBhW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIgKyBiKV0gPyBiLnRvTG93ZXJDYXNlKCkgOiBudWxsIH0gfSksIHJjICYmIHFjIHx8IChtLmF0dHJIb29rcy52YWx1ZSA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5ub2RlTmFtZShhLCAiaW5wdXQiKSA/IHZvaWQgKGEuZGVmYXVsdFZhbHVlID0gYikgOiBtYyAmJiBtYy5zZXQoYSwgYiwgYykgfSB9KSwgcWMgfHwgKG1jID0geyBzZXQ6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHZhciBkID0gYS5nZXRBdHRyaWJ1dGVOb2RlKGMpOyByZXR1cm4gZCB8fCBhLnNldEF0dHJpYnV0ZU5vZGUoZCA9IGEub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoYykpLCBkLnZhbHVlID0gYiArPSAiIiwgInZhbHVlIiA9PT0gYyB8fCBiID09PSBhLmdldEF0dHJpYnV0ZShjKSA/IGIgOiB2b2lkIDAgfSB9LCBvYy5pZCA9IG9jLm5hbWUgPSBvYy5jb29yZHMgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZDsgcmV0dXJuIGMgPyB2b2lkIDAgOiAoZCA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKSkgJiYgIiIgIT09IGQudmFsdWUgPyBkLnZhbHVlIDogbnVsbCB9LCBtLnZhbEhvb2tzLmJ1dHRvbiA9IHsgZ2V0OiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGEuZ2V0QXR0cmlidXRlTm9kZShiKTsgcmV0dXJuIGMgJiYgYy5zcGVjaWZpZWQgPyBjLnZhbHVlIDogdm9pZCAwIH0sIHNldDogbWMuc2V0IH0sIG0uYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHsgc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyBtYy5zZXQoYSwgIiIgPT09IGIgPyAhMSA6IGIsIGMpIH0gfSwgbS5lYWNoKFsid2lkdGgiLCAiaGVpZ2h0Il0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uYXR0ckhvb2tzW2JdID0geyBzZXQ6IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiAiIiA9PT0gYyA/IChhLnNldEF0dHJpYnV0ZShiLCAiYXV0byIpLCBjKSA6IHZvaWQgMCB9IH0gfSkpLCBrLnN0eWxlIHx8IChtLmF0dHJIb29rcy5zdHlsZSA9IHsgZ2V0OiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5zdHlsZS5jc3NUZXh0IHx8IHZvaWQgMCB9LCBzZXQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLnN0eWxlLmNzc1RleHQgPSBiICsgIiIgfSB9KTsgdmFyIHNjID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksIHRjID0gL14oPzphfGFyZWEpJC9pOyBtLmZuLmV4dGVuZCh7IHByb3A6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBWKHRoaXMsIG0ucHJvcCwgYSwgYiwgYXJndW1lbnRzLmxlbmd0aCA+IDEpIH0sIHJlbW92ZVByb3A6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhID0gbS5wcm9wRml4W2FdIHx8IGEsIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHRyeSB7IHRoaXNbYV0gPSB2b2lkIDAsIGRlbGV0ZSB0aGlzW2FdIH0gY2F0Y2ggKGIpIHsgfSB9KSB9IH0pLCBtLmV4dGVuZCh7IHByb3BGaXg6IHsgImZvciI6ICJodG1sRm9yIiwgImNsYXNzIjogImNsYXNzTmFtZSIgfSwgcHJvcDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgdmFyIGQsIGUsIGYsIGcgPSBhLm5vZGVUeXBlOyBpZiAoYSAmJiAzICE9PSBnICYmIDggIT09IGcgJiYgMiAhPT0gZykgcmV0dXJuIGYgPSAxICE9PSBnIHx8ICFtLmlzWE1MRG9jKGEpLCBmICYmIChiID0gbS5wcm9wRml4W2JdIHx8IGIsIGUgPSBtLnByb3BIb29rc1tiXSksIHZvaWQgMCAhPT0gYyA/IGUgJiYgInNldCIgaW4gZSAmJiB2b2lkIDAgIT09IChkID0gZS5zZXQoYSwgYywgYikpID8gZCA6IGFbYl0gPSBjIDogZSAmJiAiZ2V0IiBpbiBlICYmIG51bGwgIT09IChkID0gZS5nZXQoYSwgYikpID8gZCA6IGFbYl0gfSwgcHJvcEhvb2tzOiB7IHRhYkluZGV4OiB7IGdldDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmZpbmQuYXR0cihhLCAidGFiaW5kZXgiKTsgcmV0dXJuIGIgPyBwYXJzZUludChiLCAxMCkgOiBzYy50ZXN0KGEubm9kZU5hbWUpIHx8IHRjLnRlc3QoYS5ub2RlTmFtZSkgJiYgYS5ocmVmID8gMCA6IC0xIH0gfSB9IH0pLCBrLmhyZWZOb3JtYWxpemVkIHx8IG0uZWFjaChbImhyZWYiLCAic3JjIl0sIGZ1bmN0aW9uIChhLCBiKSB7IG0ucHJvcEhvb2tzW2JdID0geyBnZXQ6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhLmdldEF0dHJpYnV0ZShiLCA0KSB9IH0gfSksIGsub3B0U2VsZWN0ZWQgfHwgKG0ucHJvcEhvb2tzLnNlbGVjdGVkID0geyBnZXQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gYS5wYXJlbnROb2RlOyByZXR1cm4gYiAmJiAoYi5zZWxlY3RlZEluZGV4LCBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLCBudWxsIH0gfSksIG0uZWFjaChbInRhYkluZGV4IiwgInJlYWRPbmx5IiwgIm1heExlbmd0aCIsICJjZWxsU3BhY2luZyIsICJjZWxsUGFkZGluZyIsICJyb3dTcGFuIiwgImNvbFNwYW4iLCAidXNlTWFwIiwgImZyYW1lQm9yZGVyIiwgImNvbnRlbnRFZGl0YWJsZSJdLCBmdW5jdGlvbiAoKSB7IG0ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldID0gdGhpcyB9KSwgay5lbmN0eXBlIHx8IChtLnByb3BGaXguZW5jdHlwZSA9ICJlbmNvZGluZyIpOyB2YXIgdWMgPSAvW1x0XHJcblxmXS9nOyBtLmZuLmV4dGVuZCh7IGFkZENsYXNzOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiwgYywgZCwgZSwgZiwgZywgaCA9IDAsIGkgPSB0aGlzLmxlbmd0aCwgaiA9ICJzdHJpbmciID09IHR5cGVvZiBhICYmIGE7IGlmIChtLmlzRnVuY3Rpb24oYSkpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcywgYiwgdGhpcy5jbGFzc05hbWUpKSB9KTsgaWYgKGopIGZvciAoYiA9IChhIHx8ICIiKS5tYXRjaChFKSB8fCBbXTsgaSA+IGg7IGgrKykgaWYgKGMgPSB0aGlzW2hdLCBkID0gMSA9PT0gYy5ub2RlVHlwZSAmJiAoYy5jbGFzc05hbWUgPyAoIiAiICsgYy5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UodWMsICIgIikgOiAiICIpKSB7IGYgPSAwOyB3aGlsZSAoZSA9IGJbZisrXSkgZC5pbmRleE9mKCIgIiArIGUgKyAiICIpIDwgMCAmJiAoZCArPSBlICsgIiAiKTsgZyA9IG0udHJpbShkKSwgYy5jbGFzc05hbWUgIT09IGcgJiYgKGMuY2xhc3NOYW1lID0gZykgfSByZXR1cm4gdGhpcyB9LCByZW1vdmVDbGFzczogZnVuY3Rpb24gKGEpIHsgdmFyIGIsIGMsIGQsIGUsIGYsIGcsIGggPSAwLCBpID0gdGhpcy5sZW5ndGgsIGogPSAwID09PSBhcmd1bWVudHMubGVuZ3RoIHx8ICJzdHJpbmciID09IHR5cGVvZiBhICYmIGE7IGlmIChtLmlzRnVuY3Rpb24oYSkpIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcywgYiwgdGhpcy5jbGFzc05hbWUpKSB9KTsgaWYgKGopIGZvciAoYiA9IChhIHx8ICIiKS5tYXRjaChFKSB8fCBbXTsgaSA+IGg7IGgrKykgaWYgKGMgPSB0aGlzW2hdLCBkID0gMSA9PT0gYy5ub2RlVHlwZSAmJiAoYy5jbGFzc05hbWUgPyAoIiAiICsgYy5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UodWMsICIgIikgOiAiIikpIHsgZiA9IDA7IHdoaWxlIChlID0gYltmKytdKSB3aGlsZSAoZC5pbmRleE9mKCIgIiArIGUgKyAiICIpID49IDApIGQgPSBkLnJlcGxhY2UoIiAiICsgZSArICIgIiwgIiAiKTsgZyA9IGEgPyBtLnRyaW0oZCkgOiAiIiwgYy5jbGFzc05hbWUgIT09IGcgJiYgKGMuY2xhc3NOYW1lID0gZykgfSByZXR1cm4gdGhpcyB9LCB0b2dnbGVDbGFzczogZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMgPSB0eXBlb2YgYTsgcmV0dXJuICJib29sZWFuIiA9PSB0eXBlb2YgYiAmJiAic3RyaW5nIiA9PT0gYyA/IGIgPyB0aGlzLmFkZENsYXNzKGEpIDogdGhpcy5yZW1vdmVDbGFzcyhhKSA6IHRoaXMuZWFjaChtLmlzRnVuY3Rpb24oYSkgPyBmdW5jdGlvbiAoYykgeyBtKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLCBjLCB0aGlzLmNsYXNzTmFtZSwgYiksIGIpIH0gOiBmdW5jdGlvbiAoKSB7IGlmICgic3RyaW5nIiA9PT0gYykgeyB2YXIgYiwgZCA9IDAsIGUgPSBtKHRoaXMpLCBmID0gYS5tYXRjaChFKSB8fCBbXTsgd2hpbGUgKGIgPSBmW2QrK10pIGUuaGFzQ2xhc3MoYikgPyBlLnJlbW92ZUNsYXNzKGIpIDogZS5hZGRDbGFzcyhiKSB9IGVsc2UgKGMgPT09IEsgfHwgImJvb2xlYW4iID09PSBjKSAmJiAodGhpcy5jbGFzc05hbWUgJiYgbS5fZGF0YSh0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lKSwgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCBhID09PSAhMSA/ICIiIDogbS5fZGF0YSh0aGlzLCAiX19jbGFzc05hbWVfXyIpIHx8ICIiKSB9KSB9LCBoYXNDbGFzczogZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9ICIgIiArIGEgKyAiICIsIGMgPSAwLCBkID0gdGhpcy5sZW5ndGg7IGQgPiBjOyBjKyspIGlmICgxID09PSB0aGlzW2NdLm5vZGVUeXBlICYmICgiICIgKyB0aGlzW2NdLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSh1YywgIiAiKS5pbmRleE9mKGIpID49IDApIHJldHVybiAhMDsgcmV0dXJuICExIH0gfSksIG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKGEsIGIpIHsgbS5mbltiXSA9IGZ1bmN0aW9uIChhLCBjKSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/IHRoaXMub24oYiwgbnVsbCwgYSwgYykgOiB0aGlzLnRyaWdnZXIoYikgfSB9KSwgbS5mbi5leHRlbmQoeyBob3ZlcjogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGIgfHwgYSkgfSwgYmluZDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHRoaXMub24oYSwgbnVsbCwgYiwgYykgfSwgdW5iaW5kOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5vZmYoYSwgbnVsbCwgYikgfSwgZGVsZWdhdGU6IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiB0aGlzLm9uKGIsIGEsIGMsIGQpIH0sIHVuZGVsZWdhdGU6IGZ1bmN0aW9uIChhLCBiLCBjKSB7IHJldHVybiAxID09PSBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy5vZmYoYSwgIioqIikgOiB0aGlzLm9mZihiLCBhIHx8ICIqKiIsIGMpIH0gfSk7IHZhciB2YyA9IG0ubm93KCksIHdjID0gL1w/LywgeGMgPSAvKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nOyBtLnBhcnNlSlNPTiA9IGZ1bmN0aW9uIChiKSB7IGlmIChhLkpTT04gJiYgYS5KU09OLnBhcnNlKSByZXR1cm4gYS5KU09OLnBhcnNlKGIgKyAiIik7IHZhciBjLCBkID0gbnVsbCwgZSA9IG0udHJpbShiICsgIiIpOyByZXR1cm4gZSAmJiAhbS50cmltKGUucmVwbGFjZSh4YywgZnVuY3Rpb24gKGEsIGIsIGUsIGYpIHsgcmV0dXJuIGMgJiYgYiAmJiAoZCA9IDApLCAwID09PSBkID8gYSA6IChjID0gZSB8fCBiLCBkICs9ICFmIC0gIWUsICIiKSB9KSkgPyBGdW5jdGlvbigicmV0dXJuICIgKyBlKSgpIDogbS5lcnJvcigiSW52YWxpZCBKU09OOiAiICsgYikgfSwgbS5wYXJzZVhNTCA9IGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkOyBpZiAoIWIgfHwgInN0cmluZyIgIT0gdHlwZW9mIGIpIHJldHVybiBudWxsOyB0cnkgeyBhLkRPTVBhcnNlciA/IChkID0gbmV3IERPTVBhcnNlciwgYyA9IGQucGFyc2VGcm9tU3RyaW5nKGIsICJ0ZXh0L3htbCIpKSA6IChjID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSwgYy5hc3luYyA9ICJmYWxzZSIsIGMubG9hZFhNTChiKSkgfSBjYXRjaCAoZSkgeyBjID0gdm9pZCAwIH0gcmV0dXJuIGMgJiYgYy5kb2N1bWVudEVsZW1lbnQgJiYgIWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoIHx8IG0uZXJyb3IoIkludmFsaWQgWE1MOiAiICsgYiksIGMgfTsgdmFyIHljLCB6YywgQWMgPSAvIy4qJC8sIEJjID0gLyhbPyZdKV89W14mXSovLCBDYyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvZ20sIERjID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sIEVjID0gL14oPzpHRVR8SEVBRCkkLywgRmMgPSAvXlwvXC8vLCBHYyA9IC9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLCBIYyA9IHt9LCBJYyA9IHt9LCBKYyA9ICIqLyIuY29uY2F0KCIqIik7IHRyeSB7IHpjID0gbG9jYXRpb24uaHJlZiB9IGNhdGNoIChLYykgeyB6YyA9IHkuY3JlYXRlRWxlbWVudCgiYSIpLCB6Yy5ocmVmID0gIiIsIHpjID0gemMuaHJlZiB9IHljID0gR2MuZXhlYyh6Yy50b0xvd2VyQ2FzZSgpKSB8fCBbXTsgZnVuY3Rpb24gTGMoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIsIGMpIHsgInN0cmluZyIgIT0gdHlwZW9mIGIgJiYgKGMgPSBiLCBiID0gIioiKTsgdmFyIGQsIGUgPSAwLCBmID0gYi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpIHx8IFtdOyBpZiAobS5pc0Z1bmN0aW9uKGMpKSB3aGlsZSAoZCA9IGZbZSsrXSkgIisiID09PSBkLmNoYXJBdCgwKSA/IChkID0gZC5zbGljZSgxKSB8fCAiKiIsIChhW2RdID0gYVtkXSB8fCBbXSkudW5zaGlmdChjKSkgOiAoYVtkXSA9IGFbZF0gfHwgW10pLnB1c2goYykgfSB9IGZ1bmN0aW9uIE1jKGEsIGIsIGMsIGQpIHsgdmFyIGUgPSB7fSwgZiA9IGEgPT09IEljOyBmdW5jdGlvbiBnKGgpIHsgdmFyIGk7IHJldHVybiBlW2hdID0gITAsIG0uZWFjaChhW2hdIHx8IFtdLCBmdW5jdGlvbiAoYSwgaCkgeyB2YXIgaiA9IGgoYiwgYywgZCk7IHJldHVybiAic3RyaW5nIiAhPSB0eXBlb2YgaiB8fCBmIHx8IGVbal0gPyBmID8gIShpID0gaikgOiB2b2lkIDAgOiAoYi5kYXRhVHlwZXMudW5zaGlmdChqKSwgZyhqKSwgITEpIH0pLCBpIH0gcmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0pIHx8ICFlWyIqIl0gJiYgZygiKiIpIH0gZnVuY3Rpb24gTmMoYSwgYikgeyB2YXIgYywgZCwgZSA9IG0uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OyBmb3IgKGQgaW4gYikgdm9pZCAwICE9PSBiW2RdICYmICgoZVtkXSA/IGEgOiBjIHx8IChjID0ge30pKVtkXSA9IGJbZF0pOyByZXR1cm4gYyAmJiBtLmV4dGVuZCghMCwgYSwgYyksIGEgfSBmdW5jdGlvbiBPYyhhLCBiLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoID0gYS5jb250ZW50cywgaSA9IGEuZGF0YVR5cGVzOyB3aGlsZSAoIioiID09PSBpWzBdKSBpLnNoaWZ0KCksIHZvaWQgMCA9PT0gZSAmJiAoZSA9IGEubWltZVR5cGUgfHwgYi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpOyBpZiAoZSkgZm9yIChnIGluIGgpIGlmIChoW2ddICYmIGhbZ10udGVzdChlKSkgeyBpLnVuc2hpZnQoZyk7IGJyZWFrIH0gaWYgKGlbMF0gaW4gYykgZiA9IGlbMF07IGVsc2UgeyBmb3IgKGcgaW4gYykgeyBpZiAoIWlbMF0gfHwgYS5jb252ZXJ0ZXJzW2cgKyAiICIgKyBpWzBdXSkgeyBmID0gZzsgYnJlYWsgfSBkIHx8IChkID0gZykgfSBmID0gZiB8fCBkIH0gcmV0dXJuIGYgPyAoZiAhPT0gaVswXSAmJiBpLnVuc2hpZnQoZiksIGNbZl0pIDogdm9pZCAwIH0gZnVuY3Rpb24gUGMoYSwgYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCwgaSwgaiA9IHt9LCBrID0gYS5kYXRhVHlwZXMuc2xpY2UoKTsgaWYgKGtbMV0pIGZvciAoZyBpbiBhLmNvbnZlcnRlcnMpIGpbZy50b0xvd2VyQ2FzZSgpXSA9IGEuY29udmVydGVyc1tnXTsgZiA9IGsuc2hpZnQoKTsgd2hpbGUgKGYpIGlmIChhLnJlc3BvbnNlRmllbGRzW2ZdICYmIChjW2EucmVzcG9uc2VGaWVsZHNbZl1dID0gYiksICFpICYmIGQgJiYgYS5kYXRhRmlsdGVyICYmIChiID0gYS5kYXRhRmlsdGVyKGIsIGEuZGF0YVR5cGUpKSwgaSA9IGYsIGYgPSBrLnNoaWZ0KCkpIGlmICgiKiIgPT09IGYpIGYgPSBpOyBlbHNlIGlmICgiKiIgIT09IGkgJiYgaSAhPT0gZikgeyBpZiAoZyA9IGpbaSArICIgIiArIGZdIHx8IGpbIiogIiArIGZdLCAhZykgZm9yIChlIGluIGopIGlmIChoID0gZS5zcGxpdCgiICIpLCBoWzFdID09PSBmICYmIChnID0galtpICsgIiAiICsgaFswXV0gfHwgalsiKiAiICsgaFswXV0pKSB7IGcgPT09ICEwID8gZyA9IGpbZV0gOiBqW2VdICE9PSAhMCAmJiAoZiA9IGhbMF0sIGsudW5zaGlmdChoWzFdKSk7IGJyZWFrIH0gaWYgKGcgIT09ICEwKSBpZiAoZyAmJiBhWyJ0aHJvd3MiXSkgYiA9IGcoYik7IGVsc2UgdHJ5IHsgYiA9IGcoYikgfSBjYXRjaCAobCkgeyByZXR1cm4geyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJyb3I6IGcgPyBsIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgaSArICIgdG8gIiArIGYgfSB9IH0gcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogYiB9IH0gbS5leHRlbmQoeyBhY3RpdmU6IDAsIGxhc3RNb2RpZmllZDoge30sIGV0YWc6IHt9LCBhamF4U2V0dGluZ3M6IHsgdXJsOiB6YywgdHlwZTogIkdFVCIsIGlzTG9jYWw6IERjLnRlc3QoeWNbMV0pLCBnbG9iYWw6ICEwLCBwcm9jZXNzRGF0YTogITAsIGFzeW5jOiAhMCwgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLCBhY2NlcHRzOiB7ICIqIjogSmMsIHRleHQ6ICJ0ZXh0L3BsYWluIiwgaHRtbDogInRleHQvaHRtbCIsIHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLCBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiB9LCBjb250ZW50czogeyB4bWw6IC94bWwvLCBodG1sOiAvaHRtbC8sIGpzb246IC9qc29uLyB9LCByZXNwb25zZUZpZWxkczogeyB4bWw6ICJyZXNwb25zZVhNTCIsIHRleHQ6ICJyZXNwb25zZVRleHQiLCBqc29uOiAicmVzcG9uc2VKU09OIiB9LCBjb252ZXJ0ZXJzOiB7ICIqIHRleHQiOiBTdHJpbmcsICJ0ZXh0IGh0bWwiOiAhMCwgInRleHQganNvbiI6IG0ucGFyc2VKU09OLCAidGV4dCB4bWwiOiBtLnBhcnNlWE1MIH0sIGZsYXRPcHRpb25zOiB7IHVybDogITAsIGNvbnRleHQ6ICEwIH0gfSwgYWpheFNldHVwOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYiA/IE5jKE5jKGEsIG0uYWpheFNldHRpbmdzKSwgYikgOiBOYyhtLmFqYXhTZXR0aW5ncywgYSkgfSwgYWpheFByZWZpbHRlcjogTGMoSGMpLCBhamF4VHJhbnNwb3J0OiBMYyhJYyksIGFqYXg6IGZ1bmN0aW9uIChhLCBiKSB7ICJvYmplY3QiID09IHR5cGVvZiBhICYmIChiID0gYSwgYSA9IHZvaWQgMCksIGIgPSBiIHx8IHt9OyB2YXIgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IG0uYWpheFNldHVwKHt9LCBiKSwgbCA9IGsuY29udGV4dCB8fCBrLCBuID0gay5jb250ZXh0ICYmIChsLm5vZGVUeXBlIHx8IGwuanF1ZXJ5KSA/IG0obCkgOiBtLmV2ZW50LCBvID0gbS5EZWZlcnJlZCgpLCBwID0gbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksIHEgPSBrLnN0YXR1c0NvZGUgfHwge30sIHIgPSB7fSwgcyA9IHt9LCB0ID0gMCwgdSA9ICJjYW5jZWxlZCIsIHYgPSB7IHJlYWR5U3RhdGU6IDAsIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKDIgPT09IHQpIHsgaWYgKCFqKSB7IGogPSB7fTsgd2hpbGUgKGIgPSBDYy5leGVjKGYpKSBqW2JbMV0udG9Mb3dlckNhc2UoKV0gPSBiWzJdIH0gYiA9IGpbYS50b0xvd2VyQ2FzZSgpXSB9IHJldHVybiBudWxsID09IGIgPyBudWxsIDogYiB9LCBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDIgPT09IHQgPyBmIDogbnVsbCB9LCBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IGEudG9Mb3dlckNhc2UoKTsgcmV0dXJuIHQgfHwgKGEgPSBzW2NdID0gc1tjXSB8fCBhLCByW2FdID0gYiksIHRoaXMgfSwgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHQgfHwgKGsubWltZVR5cGUgPSBhKSwgdGhpcyB9LCBzdGF0dXNDb2RlOiBmdW5jdGlvbiAoYSkgeyB2YXIgYjsgaWYgKGEpIGlmICgyID4gdCkgZm9yIChiIGluIGEpIHFbYl0gPSBbcVtiXSwgYVtiXV07IGVsc2Ugdi5hbHdheXMoYVt2LnN0YXR1c10pOyByZXR1cm4gdGhpcyB9LCBhYm9ydDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhIHx8IHU7IHJldHVybiBpICYmIGkuYWJvcnQoYiksIHgoMCwgYiksIHRoaXMgfSB9OyBpZiAoby5wcm9taXNlKHYpLmNvbXBsZXRlID0gcC5hZGQsIHYuc3VjY2VzcyA9IHYuZG9uZSwgdi5lcnJvciA9IHYuZmFpbCwgay51cmwgPSAoKGEgfHwgay51cmwgfHwgemMpICsgIiIpLnJlcGxhY2UoQWMsICIiKS5yZXBsYWNlKEZjLCB5Y1sxXSArICIvLyIpLCBrLnR5cGUgPSBiLm1ldGhvZCB8fCBiLnR5cGUgfHwgay5tZXRob2QgfHwgay50eXBlLCBrLmRhdGFUeXBlcyA9IG0udHJpbShrLmRhdGFUeXBlIHx8ICIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChFKSB8fCBbIiJdLCBudWxsID09IGsuY3Jvc3NEb21haW4gJiYgKGMgPSBHYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLCBrLmNyb3NzRG9tYWluID0gISghYyB8fCBjWzFdID09PSB5Y1sxXSAmJiBjWzJdID09PSB5Y1syXSAmJiAoY1szXSB8fCAoImh0dHA6IiA9PT0gY1sxXSA/ICI4MCIgOiAiNDQzIikpID09PSAoeWNbM10gfHwgKCJodHRwOiIgPT09IHljWzFdID8gIjgwIiA6ICI0NDMiKSkpKSwgay5kYXRhICYmIGsucHJvY2Vzc0RhdGEgJiYgInN0cmluZyIgIT0gdHlwZW9mIGsuZGF0YSAmJiAoay5kYXRhID0gbS5wYXJhbShrLmRhdGEsIGsudHJhZGl0aW9uYWwpKSwgTWMoSGMsIGssIGIsIHYpLCAyID09PSB0KSByZXR1cm4gdjsgaCA9IGsuZ2xvYmFsLCBoICYmIDAgPT09IG0uYWN0aXZlKysgJiYgbS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSwgay50eXBlID0gay50eXBlLnRvVXBwZXJDYXNlKCksIGsuaGFzQ29udGVudCA9ICFFYy50ZXN0KGsudHlwZSksIGUgPSBrLnVybCwgay5oYXNDb250ZW50IHx8IChrLmRhdGEgJiYgKGUgPSBrLnVybCArPSAod2MudGVzdChlKSA/ICImIiA6ICI/IikgKyBrLmRhdGEsIGRlbGV0ZSBrLmRhdGEpLCBrLmNhY2hlID09PSAhMSAmJiAoay51cmwgPSBCYy50ZXN0KGUpID8gZS5yZXBsYWNlKEJjLCAiJDFfPSIgKyB2YysrKSA6IGUgKyAod2MudGVzdChlKSA/ICImIiA6ICI/IikgKyAiXz0iICsgdmMrKykpLCBrLmlmTW9kaWZpZWQgJiYgKG0ubGFzdE1vZGlmaWVkW2VdICYmIHYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLCBtLmxhc3RNb2RpZmllZFtlXSksIG0uZXRhZ1tlXSAmJiB2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLCBtLmV0YWdbZV0pKSwgKGsuZGF0YSAmJiBrLmhhc0NvbnRlbnQgJiYgay5jb250ZW50VHlwZSAhPT0gITEgfHwgYi5jb250ZW50VHlwZSkgJiYgdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCBrLmNvbnRlbnRUeXBlKSwgdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCBrLmRhdGFUeXBlc1swXSAmJiBrLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dID8gay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXSArICgiKiIgIT09IGsuZGF0YVR5cGVzWzBdID8gIiwgIiArIEpjICsgIjsgcT0wLjAxIiA6ICIiKSA6IGsuYWNjZXB0c1siKiJdKTsgZm9yIChkIGluIGsuaGVhZGVycykgdi5zZXRSZXF1ZXN0SGVhZGVyKGQsIGsuaGVhZGVyc1tkXSk7IGlmIChrLmJlZm9yZVNlbmQgJiYgKGsuYmVmb3JlU2VuZC5jYWxsKGwsIHYsIGspID09PSAhMSB8fCAyID09PSB0KSkgcmV0dXJuIHYuYWJvcnQoKTsgdSA9ICJhYm9ydCI7IGZvciAoZCBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9KSB2W2RdKGtbZF0pOyBpZiAoaSA9IE1jKEljLCBrLCBiLCB2KSkgeyB2LnJlYWR5U3RhdGUgPSAxLCBoICYmIG4udHJpZ2dlcigiYWpheFNlbmQiLCBbdiwga10pLCBrLmFzeW5jICYmIGsudGltZW91dCA+IDAgJiYgKGcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdi5hYm9ydCgidGltZW91dCIpIH0sIGsudGltZW91dCkpOyB0cnkgeyB0ID0gMSwgaS5zZW5kKHIsIHgpIH0gY2F0Y2ggKHcpIHsgaWYgKCEoMiA+IHQpKSB0aHJvdyB3OyB4KC0xLCB3KSB9IH0gZWxzZSB4KC0xLCAiTm8gVHJhbnNwb3J0Iik7IGZ1bmN0aW9uIHgoYSwgYiwgYywgZCkgeyB2YXIgaiwgciwgcywgdSwgdywgeCA9IGI7IDIgIT09IHQgJiYgKHQgPSAyLCBnICYmIGNsZWFyVGltZW91dChnKSwgaSA9IHZvaWQgMCwgZiA9IGQgfHwgIiIsIHYucmVhZHlTdGF0ZSA9IGEgPiAwID8gNCA6IDAsIGogPSBhID49IDIwMCAmJiAzMDAgPiBhIHx8IDMwNCA9PT0gYSwgYyAmJiAodSA9IE9jKGssIHYsIGMpKSwgdSA9IFBjKGssIHUsIHYsIGopLCBqID8gKGsuaWZNb2RpZmllZCAmJiAodyA9IHYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSwgdyAmJiAobS5sYXN0TW9kaWZpZWRbZV0gPSB3KSwgdyA9IHYuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSwgdyAmJiAobS5ldGFnW2VdID0gdykpLCAyMDQgPT09IGEgfHwgIkhFQUQiID09PSBrLnR5cGUgPyB4ID0gIm5vY29udGVudCIgOiAzMDQgPT09IGEgPyB4ID0gIm5vdG1vZGlmaWVkIiA6ICh4ID0gdS5zdGF0ZSwgciA9IHUuZGF0YSwgcyA9IHUuZXJyb3IsIGogPSAhcykpIDogKHMgPSB4LCAoYSB8fCAheCkgJiYgKHggPSAiZXJyb3IiLCAwID4gYSAmJiAoYSA9IDApKSksIHYuc3RhdHVzID0gYSwgdi5zdGF0dXNUZXh0ID0gKGIgfHwgeCkgKyAiIiwgaiA/IG8ucmVzb2x2ZVdpdGgobCwgW3IsIHgsIHZdKSA6IG8ucmVqZWN0V2l0aChsLCBbdiwgeCwgc10pLCB2LnN0YXR1c0NvZGUocSksIHEgPSB2b2lkIDAsIGggJiYgbi50cmlnZ2VyKGogPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhFcnJvciIsIFt2LCBrLCBqID8gciA6IHNdKSwgcC5maXJlV2l0aChsLCBbdiwgeF0pLCBoICYmIChuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsIFt2LCBrXSksIC0tbS5hY3RpdmUgfHwgbS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSkgfSByZXR1cm4gdiB9LCBnZXRKU09OOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gbS5nZXQoYSwgYiwgYywgImpzb24iKSB9LCBnZXRTY3JpcHQ6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBtLmdldChhLCB2b2lkIDAsIGIsICJzY3JpcHQiKSB9IH0pLCBtLmVhY2goWyJnZXQiLCAicG9zdCJdLCBmdW5jdGlvbiAoYSwgYikgeyBtW2JdID0gZnVuY3Rpb24gKGEsIGMsIGQsIGUpIHsgcmV0dXJuIG0uaXNGdW5jdGlvbihjKSAmJiAoZSA9IGUgfHwgZCwgZCA9IGMsIGMgPSB2b2lkIDApLCBtLmFqYXgoeyB1cmw6IGEsIHR5cGU6IGIsIGRhdGFUeXBlOiBlLCBkYXRhOiBjLCBzdWNjZXNzOiBkIH0pIH0gfSksIG0uZWFjaChbImFqYXhTdGFydCIsICJhamF4U3RvcCIsICJhamF4Q29tcGxldGUiLCAiYWpheEVycm9yIiwgImFqYXhTdWNjZXNzIiwgImFqYXhTZW5kIl0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uZm5bYl0gPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5vbihiLCBhKSB9IH0pLCBtLl9ldmFsVXJsID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uYWpheCh7IHVybDogYSwgdHlwZTogIkdFVCIsIGRhdGFUeXBlOiAic2NyaXB0IiwgYXN5bmM6ICExLCBnbG9iYWw6ICExLCAidGhyb3dzIjogITAgfSkgfSwgbS5mbi5leHRlbmQoeyB3cmFwQWxsOiBmdW5jdGlvbiAoYSkgeyBpZiAobS5pc0Z1bmN0aW9uKGEpKSByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIChiKSB7IG0odGhpcykud3JhcEFsbChhLmNhbGwodGhpcywgYikpIH0pOyBpZiAodGhpc1swXSkgeyB2YXIgYiA9IG0oYSwgdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7IHRoaXNbMF0ucGFyZW50Tm9kZSAmJiBiLmluc2VydEJlZm9yZSh0aGlzWzBdKSwgYi5tYXAoZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXM7IHdoaWxlIChhLmZpcnN0Q2hpbGQgJiYgMSA9PT0gYS5maXJzdENoaWxkLm5vZGVUeXBlKSBhID0gYS5maXJzdENoaWxkOyByZXR1cm4gYSB9KS5hcHBlbmQodGhpcykgfSByZXR1cm4gdGhpcyB9LCB3cmFwSW5uZXI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiB0aGlzLmVhY2gobS5pc0Z1bmN0aW9uKGEpID8gZnVuY3Rpb24gKGIpIHsgbSh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsIGIpKSB9IDogZnVuY3Rpb24gKCkgeyB2YXIgYiA9IG0odGhpcyksIGMgPSBiLmNvbnRlbnRzKCk7IGMubGVuZ3RoID8gYy53cmFwQWxsKGEpIDogYi5hcHBlbmQoYSkgfSkgfSwgd3JhcDogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBtLmlzRnVuY3Rpb24oYSk7IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKGMpIHsgbSh0aGlzKS53cmFwQWxsKGIgPyBhLmNhbGwodGhpcywgYykgOiBhKSB9KSB9LCB1bndyYXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbiAoKSB7IG0ubm9kZU5hbWUodGhpcywgImJvZHkiKSB8fCBtKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2RlcykgfSkuZW5kKCkgfSB9KSwgbS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEub2Zmc2V0V2lkdGggPD0gMCAmJiBhLm9mZnNldEhlaWdodCA8PSAwIHx8ICFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpICYmICJub25lIiA9PT0gKGEuc3R5bGUgJiYgYS5zdHlsZS5kaXNwbGF5IHx8IG0uY3NzKGEsICJkaXNwbGF5IikpIH0sIG0uZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIW0uZXhwci5maWx0ZXJzLmhpZGRlbihhKSB9OyB2YXIgUWMgPSAvJTIwL2csIFJjID0gL1xbXF0kLywgU2MgPSAvXHI/XG4vZywgVGMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksIFVjID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pOyBmdW5jdGlvbiBWYyhhLCBiLCBjLCBkKSB7IHZhciBlOyBpZiAobS5pc0FycmF5KGIpKSBtLmVhY2goYiwgZnVuY3Rpb24gKGIsIGUpIHsgYyB8fCBSYy50ZXN0KGEpID8gZChhLCBlKSA6IFZjKGEgKyAiWyIgKyAoIm9iamVjdCIgPT0gdHlwZW9mIGUgPyBiIDogIiIpICsgIl0iLCBlLCBjLCBkKSB9KTsgZWxzZSBpZiAoYyB8fCAib2JqZWN0IiAhPT0gbS50eXBlKGIpKSBkKGEsIGIpOyBlbHNlIGZvciAoZSBpbiBiKSBWYyhhICsgIlsiICsgZSArICJdIiwgYltlXSwgYywgZCkgfSBtLnBhcmFtID0gZnVuY3Rpb24gKGEsIGIpIHsgdmFyIGMsIGQgPSBbXSwgZSA9IGZ1bmN0aW9uIChhLCBiKSB7IGIgPSBtLmlzRnVuY3Rpb24oYikgPyBiKCkgOiBudWxsID09IGIgPyAiIiA6IGIsIGRbZC5sZW5ndGhdID0gZW5jb2RlVVJJQ29tcG9uZW50KGEpICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGIpIH07IGlmICh2b2lkIDAgPT09IGIgJiYgKGIgPSBtLmFqYXhTZXR0aW5ncyAmJiBtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksIG0uaXNBcnJheShhKSB8fCBhLmpxdWVyeSAmJiAhbS5pc1BsYWluT2JqZWN0KGEpKSBtLmVhY2goYSwgZnVuY3Rpb24gKCkgeyBlKHRoaXMubmFtZSwgdGhpcy52YWx1ZSkgfSk7IGVsc2UgZm9yIChjIGluIGEpIFZjKGMsIGFbY10sIGIsIGUpOyByZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShRYywgIisiKSB9LCBtLmZuLmV4dGVuZCh7IHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpIH0sIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBhID0gbS5wcm9wKHRoaXMsICJlbGVtZW50cyIpOyByZXR1cm4gYSA/IG0ubWFrZUFycmF5KGEpIDogdGhpcyB9KS5maWx0ZXIoZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMudHlwZTsgcmV0dXJuIHRoaXMubmFtZSAmJiAhbSh0aGlzKS5pcygiOmRpc2FibGVkIikgJiYgVWMudGVzdCh0aGlzLm5vZGVOYW1lKSAmJiAhVGMudGVzdChhKSAmJiAodGhpcy5jaGVja2VkIHx8ICFXLnRlc3QoYSkpIH0pLm1hcChmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IG0odGhpcykudmFsKCk7IHJldHVybiBudWxsID09IGMgPyBudWxsIDogbS5pc0FycmF5KGMpID8gbS5tYXAoYywgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHsgbmFtZTogYi5uYW1lLCB2YWx1ZTogYS5yZXBsYWNlKFNjLCAiXHJcbiIpIH0gfSkgOiB7IG5hbWU6IGIubmFtZSwgdmFsdWU6IGMucmVwbGFjZShTYywgIlxyXG4iKSB9IH0pLmdldCgpIH0gfSksIG0uYWpheFNldHRpbmdzLnhociA9IHZvaWQgMCAhPT0gYS5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiAvXihnZXR8cG9zdHxoZWFkfHB1dHxkZWxldGV8b3B0aW9ucykkL2kudGVzdCh0aGlzLnR5cGUpICYmIFpjKCkgfHwgJGMoKSB9IDogWmM7IHZhciBXYyA9IDAsIFhjID0ge30sIFljID0gbS5hamF4U2V0dGluZ3MueGhyKCk7IGEuQWN0aXZlWE9iamVjdCAmJiBtKGEpLm9uKCJ1bmxvYWQiLCBmdW5jdGlvbiAoKSB7IGZvciAodmFyIGEgaW4gWGMpIFhjW2FdKHZvaWQgMCwgITApIH0pLCBrLmNvcnMgPSAhIVljICYmICJ3aXRoQ3JlZGVudGlhbHMiIGluIFljLCBZYyA9IGsuYWpheCA9ICEhWWMsIFljICYmIG0uYWpheFRyYW5zcG9ydChmdW5jdGlvbiAoYSkgeyBpZiAoIWEuY3Jvc3NEb21haW4gfHwgay5jb3JzKSB7IHZhciBiOyByZXR1cm4geyBzZW5kOiBmdW5jdGlvbiAoYywgZCkgeyB2YXIgZSwgZiA9IGEueGhyKCksIGcgPSArK1djOyBpZiAoZi5vcGVuKGEudHlwZSwgYS51cmwsIGEuYXN5bmMsIGEudXNlcm5hbWUsIGEucGFzc3dvcmQpLCBhLnhockZpZWxkcykgZm9yIChlIGluIGEueGhyRmllbGRzKSBmW2VdID0gYS54aHJGaWVsZHNbZV07IGEubWltZVR5cGUgJiYgZi5vdmVycmlkZU1pbWVUeXBlICYmIGYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSwgYS5jcm9zc0RvbWFpbiB8fCBjWyJYLVJlcXVlc3RlZC1XaXRoIl0gfHwgKGNbIlgtUmVxdWVzdGVkLVdpdGgiXSA9ICJYTUxIdHRwUmVxdWVzdCIpOyBmb3IgKGUgaW4gYykgdm9pZCAwICE9PSBjW2VdICYmIGYuc2V0UmVxdWVzdEhlYWRlcihlLCBjW2VdICsgIiIpOyBmLnNlbmQoYS5oYXNDb250ZW50ICYmIGEuZGF0YSB8fCBudWxsKSwgYiA9IGZ1bmN0aW9uIChjLCBlKSB7IHZhciBoLCBpLCBqOyBpZiAoYiAmJiAoZSB8fCA0ID09PSBmLnJlYWR5U3RhdGUpKSBpZiAoZGVsZXRlIFhjW2ddLCBiID0gdm9pZCAwLCBmLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG0ubm9vcCwgZSkgNCAhPT0gZi5yZWFkeVN0YXRlICYmIGYuYWJvcnQoKTsgZWxzZSB7IGogPSB7fSwgaCA9IGYuc3RhdHVzLCAic3RyaW5nIiA9PSB0eXBlb2YgZi5yZXNwb25zZVRleHQgJiYgKGoudGV4dCA9IGYucmVzcG9uc2VUZXh0KTsgdHJ5IHsgaSA9IGYuc3RhdHVzVGV4dCB9IGNhdGNoIChrKSB7IGkgPSAiIiB9IGggfHwgIWEuaXNMb2NhbCB8fCBhLmNyb3NzRG9tYWluID8gMTIyMyA9PT0gaCAmJiAoaCA9IDIwNCkgOiBoID0gai50ZXh0ID8gMjAwIDogNDA0IH0gaiAmJiBkKGgsIGksIGosIGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIH0sIGEuYXN5bmMgPyA0ID09PSBmLnJlYWR5U3RhdGUgPyBzZXRUaW1lb3V0KGIpIDogZi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBYY1tnXSA9IGIgOiBiKCkgfSwgYWJvcnQ6IGZ1bmN0aW9uICgpIHsgYiAmJiBiKHZvaWQgMCwgITApIH0gfSB9IH0pOyBmdW5jdGlvbiBaYygpIHsgdHJ5IHsgcmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0IH0gY2F0Y2ggKGIpIHsgfSB9IGZ1bmN0aW9uICRjKCkgeyB0cnkgeyByZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKSB9IGNhdGNoIChiKSB7IH0gfSBtLmFqYXhTZXR1cCh7IGFjY2VwdHM6IHsgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiIH0sIGNvbnRlbnRzOiB7IHNjcmlwdDogLyg/OmphdmF8ZWNtYSlzY3JpcHQvIH0sIGNvbnZlcnRlcnM6IHsgInRleHQgc2NyaXB0IjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIG0uZ2xvYmFsRXZhbChhKSwgYSB9IH0gfSksIG0uYWpheFByZWZpbHRlcigic2NyaXB0IiwgZnVuY3Rpb24gKGEpIHsgdm9pZCAwID09PSBhLmNhY2hlICYmIChhLmNhY2hlID0gITEpLCBhLmNyb3NzRG9tYWluICYmIChhLnR5cGUgPSAiR0VUIiwgYS5nbG9iYWwgPSAhMSkgfSksIG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IiwgZnVuY3Rpb24gKGEpIHsgaWYgKGEuY3Jvc3NEb21haW4pIHsgdmFyIGIsIGMgPSB5LmhlYWQgfHwgbSgiaGVhZCIpWzBdIHx8IHkuZG9jdW1lbnRFbGVtZW50OyByZXR1cm4geyBzZW5kOiBmdW5jdGlvbiAoZCwgZSkgeyBiID0geS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSwgYi5hc3luYyA9ICEwLCBhLnNjcmlwdENoYXJzZXQgJiYgKGIuY2hhcnNldCA9IGEuc2NyaXB0Q2hhcnNldCksIGIuc3JjID0gYS51cmwsIGIub25sb2FkID0gYi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoYSwgYykgeyAoYyB8fCAhYi5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkgJiYgKGIub25sb2FkID0gYi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsLCBiLnBhcmVudE5vZGUgJiYgYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLCBiID0gbnVsbCwgYyB8fCBlKDIwMCwgInN1Y2Nlc3MiKSkgfSwgYy5pbnNlcnRCZWZvcmUoYiwgYy5maXJzdENoaWxkKSB9LCBhYm9ydDogZnVuY3Rpb24gKCkgeyBiICYmIGIub25sb2FkKHZvaWQgMCwgITApIH0gfSB9IH0pOyB2YXIgX2MgPSBbXSwgYWQgPSAvKD0pXD8oPz0mfCQpfFw/XD8vOyBtLmFqYXhTZXR1cCh7IGpzb25wOiAiY2FsbGJhY2siLCBqc29ucENhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gX2MucG9wKCkgfHwgbS5leHBhbmRvICsgIl8iICsgdmMrKzsgcmV0dXJuIHRoaXNbYV0gPSAhMCwgYSB9IH0pLCBtLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLCBmdW5jdGlvbiAoYiwgYywgZCkgeyB2YXIgZSwgZiwgZywgaCA9IGIuanNvbnAgIT09ICExICYmIChhZC50ZXN0KGIudXJsKSA/ICJ1cmwiIDogInN0cmluZyIgPT0gdHlwZW9mIGIuZGF0YSAmJiAhKGIuY29udGVudFR5cGUgfHwgIiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpICYmIGFkLnRlc3QoYi5kYXRhKSAmJiAiZGF0YSIpOyByZXR1cm4gaCB8fCAianNvbnAiID09PSBiLmRhdGFUeXBlc1swXSA/IChlID0gYi5qc29ucENhbGxiYWNrID0gbS5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjaykgPyBiLmpzb25wQ2FsbGJhY2soKSA6IGIuanNvbnBDYWxsYmFjaywgaCA/IGJbaF0gPSBiW2hdLnJlcGxhY2UoYWQsICIkMSIgKyBlKSA6IGIuanNvbnAgIT09ICExICYmIChiLnVybCArPSAod2MudGVzdChiLnVybCkgPyAiJiIgOiAiPyIpICsgYi5qc29ucCArICI9IiArIGUpLCBiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBnIHx8IG0uZXJyb3IoZSArICIgd2FzIG5vdCBjYWxsZWQiKSwgZ1swXSB9LCBiLmRhdGFUeXBlc1swXSA9ICJqc29uIiwgZiA9IGFbZV0sIGFbZV0gPSBmdW5jdGlvbiAoKSB7IGcgPSBhcmd1bWVudHMgfSwgZC5hbHdheXMoZnVuY3Rpb24gKCkgeyBhW2VdID0gZiwgYltlXSAmJiAoYi5qc29ucENhbGxiYWNrID0gYy5qc29ucENhbGxiYWNrLCBfYy5wdXNoKGUpKSwgZyAmJiBtLmlzRnVuY3Rpb24oZikgJiYgZihnWzBdKSwgZyA9IGYgPSB2b2lkIDAgfSksICJzY3JpcHQiKSA6IHZvaWQgMCB9KSwgbS5wYXJzZUhUTUwgPSBmdW5jdGlvbiAoYSwgYiwgYykgeyBpZiAoIWEgfHwgInN0cmluZyIgIT0gdHlwZW9mIGEpIHJldHVybiBudWxsOyAiYm9vbGVhbiIgPT0gdHlwZW9mIGIgJiYgKGMgPSBiLCBiID0gITEpLCBiID0gYiB8fCB5OyB2YXIgZCA9IHUuZXhlYyhhKSwgZSA9ICFjICYmIFtdOyByZXR1cm4gZCA/IFtiLmNyZWF0ZUVsZW1lbnQoZFsxXSldIDogKGQgPSBtLmJ1aWxkRnJhZ21lbnQoW2FdLCBiLCBlKSwgZSAmJiBlLmxlbmd0aCAmJiBtKGUpLnJlbW92ZSgpLCBtLm1lcmdlKFtdLCBkLmNoaWxkTm9kZXMpKSB9OyB2YXIgYmQgPSBtLmZuLmxvYWQ7IG0uZm4ubG9hZCA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7IGlmICgic3RyaW5nIiAhPSB0eXBlb2YgYSAmJiBiZCkgcmV0dXJuIGJkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IHZhciBkLCBlLCBmLCBnID0gdGhpcywgaCA9IGEuaW5kZXhPZigiICIpOyByZXR1cm4gaCA+PSAwICYmIChkID0gbS50cmltKGEuc2xpY2UoaCwgYS5sZW5ndGgpKSwgYSA9IGEuc2xpY2UoMCwgaCkpLCBtLmlzRnVuY3Rpb24oYikgPyAoYyA9IGIsIGIgPSB2b2lkIDApIDogYiAmJiAib2JqZWN0IiA9PSB0eXBlb2YgYiAmJiAoZiA9ICJQT1NUIiksIGcubGVuZ3RoID4gMCAmJiBtLmFqYXgoeyB1cmw6IGEsIHR5cGU6IGYsIGRhdGFUeXBlOiAiaHRtbCIsIGRhdGE6IGIgfSkuZG9uZShmdW5jdGlvbiAoYSkgeyBlID0gYXJndW1lbnRzLCBnLmh0bWwoZCA/IG0oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpIDogYSkgfSkuY29tcGxldGUoYyAmJiBmdW5jdGlvbiAoYSwgYikgeyBnLmVhY2goYywgZSB8fCBbYS5yZXNwb25zZVRleHQsIGIsIGFdKSB9KSwgdGhpcyB9LCBtLmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBtLmdyZXAobS50aW1lcnMsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBhID09PSBiLmVsZW0gfSkubGVuZ3RoIH07IHZhciBjZCA9IGEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyBmdW5jdGlvbiBkZChhKSB7IHJldHVybiBtLmlzV2luZG93KGEpID8gYSA6IDkgPT09IGEubm9kZVR5cGUgPyBhLmRlZmF1bHRWaWV3IHx8IGEucGFyZW50V2luZG93IDogITEgfSBtLm9mZnNldCA9IHsgc2V0T2Zmc2V0OiBmdW5jdGlvbiAoYSwgYiwgYykgeyB2YXIgZCwgZSwgZiwgZywgaCwgaSwgaiwgayA9IG0uY3NzKGEsICJwb3NpdGlvbiIpLCBsID0gbShhKSwgbiA9IHt9OyAic3RhdGljIiA9PT0gayAmJiAoYS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSIpLCBoID0gbC5vZmZzZXQoKSwgZiA9IG0uY3NzKGEsICJ0b3AiKSwgaSA9IG0uY3NzKGEsICJsZWZ0IiksIGogPSAoImFic29sdXRlIiA9PT0gayB8fCAiZml4ZWQiID09PSBrKSAmJiBtLmluQXJyYXkoImF1dG8iLCBbZiwgaV0pID4gLTEsIGogPyAoZCA9IGwucG9zaXRpb24oKSwgZyA9IGQudG9wLCBlID0gZC5sZWZ0KSA6IChnID0gcGFyc2VGbG9hdChmKSB8fCAwLCBlID0gcGFyc2VGbG9hdChpKSB8fCAwKSwgbS5pc0Z1bmN0aW9uKGIpICYmIChiID0gYi5jYWxsKGEsIGMsIGgpKSwgbnVsbCAhPSBiLnRvcCAmJiAobi50b3AgPSBiLnRvcCAtIGgudG9wICsgZyksIG51bGwgIT0gYi5sZWZ0ICYmIChuLmxlZnQgPSBiLmxlZnQgLSBoLmxlZnQgKyBlKSwgInVzaW5nIiBpbiBiID8gYi51c2luZy5jYWxsKGEsIG4pIDogbC5jc3MobikgfSB9LCBtLmZuLmV4dGVuZCh7IG9mZnNldDogZnVuY3Rpb24gKGEpIHsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB2b2lkIDAgPT09IGEgPyB0aGlzIDogdGhpcy5lYWNoKGZ1bmN0aW9uIChiKSB7IG0ub2Zmc2V0LnNldE9mZnNldCh0aGlzLCBhLCBiKSB9KTsgdmFyIGIsIGMsIGQgPSB7IHRvcDogMCwgbGVmdDogMCB9LCBlID0gdGhpc1swXSwgZiA9IGUgJiYgZS5vd25lckRvY3VtZW50OyBpZiAoZikgcmV0dXJuIGIgPSBmLmRvY3VtZW50RWxlbWVudCwgbS5jb250YWlucyhiLCBlKSA/ICh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09IEsgJiYgKGQgPSBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSwgYyA9IGRkKGYpLCB7IHRvcDogZC50b3AgKyAoYy5wYWdlWU9mZnNldCB8fCBiLnNjcm9sbFRvcCkgLSAoYi5jbGllbnRUb3AgfHwgMCksIGxlZnQ6IGQubGVmdCArIChjLnBhZ2VYT2Zmc2V0IHx8IGIuc2Nyb2xsTGVmdCkgLSAoYi5jbGllbnRMZWZ0IHx8IDApIH0pIDogZCB9LCBwb3NpdGlvbjogZnVuY3Rpb24gKCkgeyBpZiAodGhpc1swXSkgeyB2YXIgYSwgYiwgYyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sIGQgPSB0aGlzWzBdOyByZXR1cm4gImZpeGVkIiA9PT0gbS5jc3MoZCwgInBvc2l0aW9uIikgPyBiID0gZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IChhID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwgYiA9IHRoaXMub2Zmc2V0KCksIG0ubm9kZU5hbWUoYVswXSwgImh0bWwiKSB8fCAoYyA9IGEub2Zmc2V0KCkpLCBjLnRvcCArPSBtLmNzcyhhWzBdLCAiYm9yZGVyVG9wV2lkdGgiLCAhMCksIGMubGVmdCArPSBtLmNzcyhhWzBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgITApKSwgeyB0b3A6IGIudG9wIC0gYy50b3AgLSBtLmNzcyhkLCAibWFyZ2luVG9wIiwgITApLCBsZWZ0OiBiLmxlZnQgLSBjLmxlZnQgLSBtLmNzcyhkLCAibWFyZ2luTGVmdCIsICEwKSB9IH0gfSwgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgY2Q7IHdoaWxlIChhICYmICFtLm5vZGVOYW1lKGEsICJodG1sIikgJiYgInN0YXRpYyIgPT09IG0uY3NzKGEsICJwb3NpdGlvbiIpKSBhID0gYS5vZmZzZXRQYXJlbnQ7IHJldHVybiBhIHx8IGNkIH0pIH0gfSksIG0uZWFjaCh7IHNjcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IC9ZLy50ZXN0KGIpOyBtLmZuW2FdID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGEsIGQsIGUpIHsgdmFyIGYgPSBkZChhKTsgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IGYgPyBiIGluIGYgPyBmW2JdIDogZi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF0gOiBhW2RdIDogdm9pZCAoZiA/IGYuc2Nyb2xsVG8oYyA/IG0oZikuc2Nyb2xsTGVmdCgpIDogZSwgYyA/IGUgOiBtKGYpLnNjcm9sbFRvcCgpKSA6IGFbZF0gPSBlKSB9LCBhLCBkLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsKSB9IH0pLCBtLmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAoYSwgYikgeyBtLmNzc0hvb2tzW2JdID0gTGIoay5waXhlbFBvc2l0aW9uLCBmdW5jdGlvbiAoYSwgYykgeyByZXR1cm4gYyA/IChjID0gSmIoYSwgYiksIEhiLnRlc3QoYykgPyBtKGEpLnBvc2l0aW9uKClbYl0gKyAicHgiIDogYykgOiB2b2lkIDAgfSkgfSksIG0uZWFjaCh7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uIChhLCBiKSB7IG0uZWFjaCh7IHBhZGRpbmc6ICJpbm5lciIgKyBhLCBjb250ZW50OiBiLCAiIjogIm91dGVyIiArIGEgfSwgZnVuY3Rpb24gKGMsIGQpIHsgbS5mbltkXSA9IGZ1bmN0aW9uIChkLCBlKSB7IHZhciBmID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoYyB8fCAiYm9vbGVhbiIgIT0gdHlwZW9mIGQpLCBnID0gYyB8fCAoZCA9PT0gITAgfHwgZSA9PT0gITAgPyAibWFyZ2luIiA6ICJib3JkZXIiKTsgcmV0dXJuIFYodGhpcywgZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGU7IHJldHVybiBtLmlzV2luZG93KGIpID8gYi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIgKyBhXSA6IDkgPT09IGIubm9kZVR5cGUgPyAoZSA9IGIuZG9jdW1lbnRFbGVtZW50LCBNYXRoLm1heChiLmJvZHlbInNjcm9sbCIgKyBhXSwgZVsic2Nyb2xsIiArIGFdLCBiLmJvZHlbIm9mZnNldCIgKyBhXSwgZVsib2Zmc2V0IiArIGFdLCBlWyJjbGllbnQiICsgYV0pKSA6IHZvaWQgMCA9PT0gZCA/IG0uY3NzKGIsIGMsIGcpIDogbS5zdHlsZShiLCBjLCBkLCBnKSB9LCBiLCBmID8gZCA6IHZvaWQgMCwgZiwgbnVsbCkgfSB9KSB9KSwgbS5mbi5zaXplID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5sZW5ndGggfSwgbS5mbi5hbmRTZWxmID0gbS5mbi5hZGRCYWNrLCAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUoImpxdWVyeSIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtIH0pOyB2YXIgZWQgPSBhLmpRdWVyeSwgZmQgPSBhLiQ7IHJldHVybiBtLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoYikgeyByZXR1cm4gYS4kID09PSBtICYmIChhLiQgPSBmZCksIGIgJiYgYS5qUXVlcnkgPT09IG0gJiYgKGEualF1ZXJ5ID0gZWQpLCBtIH0sIHR5cGVvZiBiID09PSBLICYmIChhLmpRdWVyeSA9IGEuJCA9IG0pLCBtDQp9KTsNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qISBqUXVlcnkgTWlncmF0ZSB2MS4yLjEgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCmpRdWVyeS5taWdyYXRlTXV0ZT09PXZvaWQgMCYmKGpRdWVyeS5taWdyYXRlTXV0ZT0hMCksZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIobil7dmFyIHI9dC5jb25zb2xlO2lbbl18fChpW25dPSEwLGUubWlncmF0ZVdhcm5pbmdzLnB1c2gobiksciYmci53YXJuJiYhZS5taWdyYXRlTXV0ZSYmKHIud2FybigiSlFNSUdSQVRFOiAiK24pLGUubWlncmF0ZVRyYWNlJiZyLnRyYWNlJiZyLnRyYWNlKCkpKX1mdW5jdGlvbiBhKHQsYSxpLG8pe2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKG8pLGl9LHNldDpmdW5jdGlvbihlKXtyKG8pLGk9ZX19KSxufWNhdGNoKHMpe31lLl9kZWZpbmVQcm9wZXJ0eUJyb2tlbj0hMCx0W2FdPWl9dmFyIGk9e307ZS5taWdyYXRlV2FybmluZ3M9W10sIWUubWlncmF0ZU11dGUmJnQuY29uc29sZSYmdC5jb25zb2xlLmxvZyYmdC5jb25zb2xlLmxvZygiSlFNSUdSQVRFOiBMb2dnaW5nIGlzIGFjdGl2ZSIpLGUubWlncmF0ZVRyYWNlPT09biYmKGUubWlncmF0ZVRyYWNlPSEwKSxlLm1pZ3JhdGVSZXNldD1mdW5jdGlvbigpe2k9e30sZS5taWdyYXRlV2FybmluZ3MubGVuZ3RoPTB9LCJCYWNrQ29tcGF0Ij09PWRvY3VtZW50LmNvbXBhdE1vZGUmJnIoImpRdWVyeSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFF1aXJrcyBNb2RlIik7dmFyIG89ZSgiPGlucHV0Lz4iLHtzaXplOjF9KS5hdHRyKCJzaXplIikmJmUuYXR0ckZuLHM9ZS5hdHRyLHU9ZS5hdHRySG9va3MudmFsdWUmJmUuYXR0ckhvb2tzLnZhbHVlLmdldHx8ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYz1lLmF0dHJIb29rcy52YWx1ZSYmZS5hdHRySG9va3MudmFsdWUuc2V0fHxmdW5jdGlvbigpe3JldHVybiBufSxsPS9eKD86aW5wdXR8YnV0dG9uKSQvaSxkPS9eWzIzOF0kLyxwPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLGY9L14oPzpjaGVja2VkfHNlbGVjdGVkKSQvaTthKGUsImF0dHJGbiIsb3x8e30sImpRdWVyeS5hdHRyRm4gaXMgZGVwcmVjYXRlZCIpLGUuYXR0cj1mdW5jdGlvbih0LGEsaSx1KXt2YXIgYz1hLnRvTG93ZXJDYXNlKCksZz10JiZ0Lm5vZGVUeXBlO3JldHVybiB1JiYoND5zLmxlbmd0aCYmcigialF1ZXJ5LmZuLmF0dHIoIHByb3BzLCBwYXNzICkgaXMgZGVwcmVjYXRlZCIpLHQmJiFkLnRlc3QoZykmJihvP2EgaW4gbzplLmlzRnVuY3Rpb24oZS5mblthXSkpKT9lKHQpW2FdKGkpOigidHlwZSI9PT1hJiZpIT09biYmbC50ZXN0KHQubm9kZU5hbWUpJiZ0LnBhcmVudE5vZGUmJnIoIkNhbid0IGNoYW5nZSB0aGUgJ3R5cGUnIG9mIGFuIGlucHV0IG9yIGJ1dHRvbiBpbiBJRSA2LzcvOCIpLCFlLmF0dHJIb29rc1tjXSYmcC50ZXN0KGMpJiYoZS5hdHRySG9va3NbY109e2dldDpmdW5jdGlvbih0LHIpe3ZhciBhLGk9ZS5wcm9wKHQscik7cmV0dXJuIGk9PT0hMHx8ImJvb2xlYW4iIT10eXBlb2YgaSYmKGE9dC5nZXRBdHRyaWJ1dGVOb2RlKHIpKSYmYS5ub2RlVmFsdWUhPT0hMT9yLnRvTG93ZXJDYXNlKCk6bn0sc2V0OmZ1bmN0aW9uKHQsbixyKXt2YXIgYTtyZXR1cm4gbj09PSExP2UucmVtb3ZlQXR0cih0LHIpOihhPWUucHJvcEZpeFtyXXx8cixhIGluIHQmJih0W2FdPSEwKSx0LnNldEF0dHJpYnV0ZShyLHIudG9Mb3dlckNhc2UoKSkpLHJ9fSxmLnRlc3QoYykmJnIoImpRdWVyeS5mbi5hdHRyKCciK2MrIicpIG1heSB1c2UgcHJvcGVydHkgaW5zdGVhZCBvZiBhdHRyaWJ1dGUiKSkscy5jYWxsKGUsdCxhLGkpKX0sZS5hdHRySG9va3MudmFsdWU9e2dldDpmdW5jdGlvbihlLHQpe3ZhciBuPShlLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4iYnV0dG9uIj09PW4/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KCJpbnB1dCIhPT1uJiYib3B0aW9uIiE9PW4mJnIoImpRdWVyeS5mbi5hdHRyKCd2YWx1ZScpIG5vIGxvbmdlciBnZXRzIHByb3BlcnRpZXMiKSx0IGluIGU/ZS52YWx1ZTpudWxsKX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIGE9KGUubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiJidXR0b24iPT09YT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTooImlucHV0IiE9PWEmJiJvcHRpb24iIT09YSYmcigialF1ZXJ5LmZuLmF0dHIoJ3ZhbHVlJywgdmFsKSBubyBsb25nZXIgc2V0cyBwcm9wZXJ0aWVzIiksZS52YWx1ZT10LG4pfX07dmFyIGcsaCx2PWUuZm4uaW5pdCxtPWUucGFyc2VKU09OLHk9L14oW148XSopKDxbXHdcV10rPikoW14+XSopJC87ZS5mbi5pbml0PWZ1bmN0aW9uKHQsbixhKXt2YXIgaTtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0JiYhZS5pc1BsYWluT2JqZWN0KG4pJiYoaT15LmV4ZWMoZS50cmltKHQpKSkmJmlbMF0mJigiPCIhPT10LmNoYXJBdCgwKSYmcigiJChodG1sKSBIVE1MIHN0cmluZ3MgbXVzdCBzdGFydCB3aXRoICc8JyBjaGFyYWN0ZXIiKSxpWzNdJiZyKCIkKGh0bWwpIEhUTUwgdGV4dCBhZnRlciBsYXN0IHRhZyBpcyBpZ25vcmVkIiksIiMiPT09aVswXS5jaGFyQXQoMCkmJihyKCJIVE1MIHN0cmluZyBjYW5ub3Qgc3RhcnQgd2l0aCBhICcjJyBjaGFyYWN0ZXIiKSxlLmVycm9yKCJKUU1JR1JBVEU6IEludmFsaWQgc2VsZWN0b3Igc3RyaW5nIChYU1MpIikpLG4mJm4uY29udGV4dCYmKG49bi5jb250ZXh0KSxlLnBhcnNlSFRNTCk/di5jYWxsKHRoaXMsZS5wYXJzZUhUTUwoaVsyXSxuLCEwKSxuLGEpOnYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5wYXJzZUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fG51bGw9PT1lP20uYXBwbHkodGhpcyxhcmd1bWVudHMpOihyKCJqUXVlcnkucGFyc2VKU09OIHJlcXVpcmVzIGEgdmFsaWQgSlNPTiBzdHJpbmciKSxudWxsKX0sZS51YU1hdGNoPWZ1bmN0aW9uKGUpe2U9ZS50b0xvd2VyQ2FzZSgpO3ZhciB0PS8oY2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG1zaWUpIChbXHcuXSspLy5leGVjKGUpfHwwPmUuaW5kZXhPZigiY29tcGF0aWJsZSIpJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMoZSl8fFtdO3JldHVybnticm93c2VyOnRbMV18fCIiLHZlcnNpb246dFsyXXx8IjAifX0sZS5icm93c2VyfHwoZz1lLnVhTWF0Y2gobmF2aWdhdG9yLnVzZXJBZ2VudCksaD17fSxnLmJyb3dzZXImJihoW2cuYnJvd3Nlcl09ITAsaC52ZXJzaW9uPWcudmVyc2lvbiksaC5jaHJvbWU/aC53ZWJraXQ9ITA6aC53ZWJraXQmJihoLnNhZmFyaT0hMCksZS5icm93c2VyPWgpLGEoZSwiYnJvd3NlciIsZS5icm93c2VyLCJqUXVlcnkuYnJvd3NlciBpcyBkZXByZWNhdGVkIiksZS5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbil7cmV0dXJuIG5ldyB0LmZuLmluaXQoZSxuKX1lLmV4dGVuZCghMCx0LHRoaXMpLHQuc3VwZXJjbGFzcz10aGlzLHQuZm49dC5wcm90b3R5cGU9dGhpcygpLHQuZm4uY29uc3RydWN0b3I9dCx0LnN1Yj10aGlzLnN1Yix0LmZuLmluaXQ9ZnVuY3Rpb24ocixhKXtyZXR1cm4gYSYmYSBpbnN0YW5jZW9mIGUmJiEoYSBpbnN0YW5jZW9mIHQpJiYoYT10KGEpKSxlLmZuLmluaXQuY2FsbCh0aGlzLHIsYSxuKX0sdC5mbi5pbml0LnByb3RvdHlwZT10LmZuO3ZhciBuPXQoZG9jdW1lbnQpO3JldHVybiByKCJqUXVlcnkuc3ViKCkgaXMgZGVwcmVjYXRlZCIpLHR9LGUuYWpheFNldHVwKHtjb252ZXJ0ZXJzOnsidGV4dCBqc29uIjplLnBhcnNlSlNPTn19KTt2YXIgYj1lLmZuLmRhdGE7ZS5mbi5kYXRhPWZ1bmN0aW9uKHQpe3ZhciBhLGksbz10aGlzWzBdO3JldHVybiFvfHwiZXZlbnRzIiE9PXR8fDEhPT1hcmd1bWVudHMubGVuZ3RofHwoYT1lLmRhdGEobyx0KSxpPWUuX2RhdGEobyx0KSxhIT09biYmYSE9PWl8fGk9PT1uKT9iLmFwcGx5KHRoaXMsYXJndW1lbnRzKToocigiVXNlIG9mIGpRdWVyeS5mbi5kYXRhKCdldmVudHMnKSBpcyBkZXByZWNhdGVkIiksaSl9O3ZhciBqPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksdz1lLmZuLmFuZFNlbGZ8fGUuZm4uYWRkQmFjaztlLmZuLmFuZFNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gcigialF1ZXJ5LmZuLmFuZFNlbGYoKSByZXBsYWNlZCBieSBqUXVlcnkuZm4uYWRkQmFjaygpIiksdy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuY2xlYW58fChlLmNsZWFuPWZ1bmN0aW9uKHQsYSxpLG8pe2E9YXx8ZG9jdW1lbnQsYT0hYS5ub2RlVHlwZSYmYVswXXx8YSxhPWEub3duZXJEb2N1bWVudHx8YSxyKCJqUXVlcnkuY2xlYW4oKSBpcyBkZXByZWNhdGVkIik7dmFyIHMsdSxjLGwsZD1bXTtpZihlLm1lcmdlKGQsZS5idWlsZEZyYWdtZW50KHQsYSkuY2hpbGROb2RlcyksaSlmb3IoYz1mdW5jdGlvbihlKXtyZXR1cm4hZS50eXBlfHxqLnRlc3QoZS50eXBlKT9vP28ucHVzaChlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpOmUpOmkuYXBwZW5kQ2hpbGQoZSk6bn0scz0wO251bGwhPSh1PWRbc10pO3MrKyllLm5vZGVOYW1lKHUsInNjcmlwdCIpJiZjKHUpfHwoaS5hcHBlbmRDaGlsZCh1KSx1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09biYmKGw9ZS5ncmVwKGUubWVyZ2UoW10sdS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpLGMpLGQuc3BsaWNlLmFwcGx5KGQsW3MrMSwwXS5jb25jYXQobCkpLHMrPWwubGVuZ3RoKSk7cmV0dXJuIGR9KTt2YXIgUT1lLmV2ZW50LmFkZCx4PWUuZXZlbnQucmVtb3ZlLGs9ZS5ldmVudC50cmlnZ2VyLE49ZS5mbi50b2dnbGUsVD1lLmZuLmxpdmUsTT1lLmZuLmRpZSxTPSJhamF4U3RhcnR8YWpheFN0b3B8YWpheFNlbmR8YWpheENvbXBsZXRlfGFqYXhFcnJvcnxhamF4U3VjY2VzcyIsQz1SZWdFeHAoIlxcYig/OiIrUysiKVxcYiIpLEg9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxBPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8ZS5ldmVudC5zcGVjaWFsLmhvdmVyP3Q6KEgudGVzdCh0KSYmcigiJ2hvdmVyJyBwc2V1ZG8tZXZlbnQgaXMgZGVwcmVjYXRlZCwgdXNlICdtb3VzZWVudGVyIG1vdXNlbGVhdmUnIiksdCYmdC5yZXBsYWNlKEgsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKSl9O2UuZXZlbnQucHJvcHMmJiJhdHRyQ2hhbmdlIiE9PWUuZXZlbnQucHJvcHNbMF0mJmUuZXZlbnQucHJvcHMudW5zaGlmdCgiYXR0ckNoYW5nZSIsImF0dHJOYW1lIiwicmVsYXRlZE5vZGUiLCJzcmNFbGVtZW50IiksZS5ldmVudC5kaXNwYXRjaCYmYShlLmV2ZW50LCJoYW5kbGUiLGUuZXZlbnQuZGlzcGF0Y2gsImpRdWVyeS5ldmVudC5oYW5kbGUgaXMgdW5kb2N1bWVudGVkIGFuZCBkZXByZWNhdGVkIiksZS5ldmVudC5hZGQ9ZnVuY3Rpb24oZSx0LG4sYSxpKXtlIT09ZG9jdW1lbnQmJkMudGVzdCh0KSYmcigiQUpBWCBldmVudHMgc2hvdWxkIGJlIGF0dGFjaGVkIHRvIGRvY3VtZW50OiAiK3QpLFEuY2FsbCh0aGlzLGUsQSh0fHwiIiksbixhLGkpfSxlLmV2ZW50LnJlbW92ZT1mdW5jdGlvbihlLHQsbixyLGEpe3guY2FsbCh0aGlzLGUsQSh0KXx8IiIsbixyLGEpfSxlLmZuLmVycm9yPWZ1bmN0aW9uKCl7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiByKCJqUXVlcnkuZm4uZXJyb3IoKSBpcyBkZXByZWNhdGVkIiksZS5zcGxpY2UoMCwwLCJlcnJvciIpLGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5iaW5kLmFwcGx5KHRoaXMsZSk6KHRoaXMudHJpZ2dlckhhbmRsZXIuYXBwbHkodGhpcyxlKSx0aGlzKX0sZS5mbi50b2dnbGU9ZnVuY3Rpb24odCxuKXtpZighZS5pc0Z1bmN0aW9uKHQpfHwhZS5pc0Z1bmN0aW9uKG4pKXJldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyKCJqUXVlcnkuZm4udG9nZ2xlKGhhbmRsZXIsIGhhbmRsZXIuLi4pIGlzIGRlcHJlY2F0ZWQiKTt2YXIgYT1hcmd1bWVudHMsaT10Lmd1aWR8fGUuZ3VpZCsrLG89MCxzPWZ1bmN0aW9uKG4pe3ZhciByPShlLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK3QuZ3VpZCl8fDApJW87cmV0dXJuIGUuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrdC5ndWlkLHIrMSksbi5wcmV2ZW50RGVmYXVsdCgpLGFbcl0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07Zm9yKHMuZ3VpZD1pO2EubGVuZ3RoPm87KWFbbysrXS5ndWlkPWk7cmV0dXJuIHRoaXMuY2xpY2socyl9LGUuZm4ubGl2ZT1mdW5jdGlvbih0LG4sYSl7cmV0dXJuIHIoImpRdWVyeS5mbi5saXZlKCkgaXMgZGVwcmVjYXRlZCIpLFQ/VC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGUodGhpcy5jb250ZXh0KS5vbih0LHRoaXMuc2VsZWN0b3IsbixhKSx0aGlzKX0sZS5mbi5kaWU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcigialF1ZXJ5LmZuLmRpZSgpIGlzIGRlcHJlY2F0ZWQiKSxNP00uYXBwbHkodGhpcyxhcmd1bWVudHMpOihlKHRoaXMuY29udGV4dCkub2ZmKHQsdGhpcy5zZWxlY3Rvcnx8IioqIixuKSx0aGlzKX0sZS5ldmVudC50cmlnZ2VyPWZ1bmN0aW9uKGUsdCxuLGEpe3JldHVybiBufHxDLnRlc3QoZSl8fHIoIkdsb2JhbCBldmVudHMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgZGVwcmVjYXRlZCIpLGsuY2FsbCh0aGlzLGUsdCxufHxkb2N1bWVudCxhKX0sZS5lYWNoKFMuc3BsaXQoInwiKSxmdW5jdGlvbih0LG4pe2UuZXZlbnQuc3BlY2lhbFtuXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0IT09ZG9jdW1lbnQmJihlLmV2ZW50LmFkZChkb2N1bWVudCxuKyIuIitlLmd1aWQsZnVuY3Rpb24oKXtlLmV2ZW50LnRyaWdnZXIobixudWxsLHQsITApfSksZS5fZGF0YSh0aGlzLG4sZS5ndWlkKyspKSwhMX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PWRvY3VtZW50JiZlLmV2ZW50LnJlbW92ZShkb2N1bWVudCxuKyIuIitlLl9kYXRhKHRoaXMsbikpLCExfX19KX0oalF1ZXJ5LHdpbmRvdyk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovLyBqUXVlcnkgTWFzayBQbHVnaW4gdjEuMy4yCi8vIGdpdGh1Yi5jb20vaWdvcmVzY29iYXIvalF1ZXJ5LU1hc2stUGx1Z2luCihmdW5jdGlvbihjKXt2YXIgdz1mdW5jdGlvbihhLGQsZSl7dmFyIGY9dGhpczthPWMoYSk7dmFyIGw7ZD0iZnVuY3Rpb24iPT10eXBlb2YgZD9kKGEudmFsKCksdm9pZCAwLGEsZSk6ZDtmLmluaXQ9ZnVuY3Rpb24oKXtlPWV8fHt9O2YuYnlQYXNzS2V5cz1bOCw5LDE2LDM2LDM3LDM4LDM5LDQwLDQ2LDkxXTtmLnRyYW5zbGF0aW9uPXswOntwYXR0ZXJuOi9cZC99LDk6e3BhdHRlcm46L1xkLyxvcHRpb25hbDohMH0sIiMiOntwYXR0ZXJuOi9cZC8scmVjdXJzaXZlOiEwfSxBOntwYXR0ZXJuOi9bYS16QS1aMC05XS99LFM6e3BhdHRlcm46L1thLXpBLVpdL319O2YudHJhbnNsYXRpb249Yy5leHRlbmQoe30sZi50cmFuc2xhdGlvbixlLnRyYW5zbGF0aW9uKTtmPWMuZXh0ZW5kKCEwLHt9LGYsZSk7YS5lYWNoKGZ1bmN0aW9uKCl7ITEhPT1lLm1heGxlbmd0aCYmYS5hdHRyKCJtYXhsZW5ndGgiLGQubGVuZ3RoKTthLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpO2cuZGVzdHJveUV2ZW50cygpOwpnLmV2ZW50cygpO2cudmFsKGcuZ2V0TWFza2VkKCkpfSl9O3ZhciBnPXtldmVudHM6ZnVuY3Rpb24oKXthLm9uKCJrZXlkb3duLm1hc2siLGZ1bmN0aW9uKCl7bD1nLnZhbCgpfSk7YS5vbigia2V5dXAubWFzayIsZy5iZWhhdmlvdXIpO2Eub24oInBhc3RlLm1hc2siLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Eua2V5ZG93bigpLmtleXVwKCl9LDEwMCl9KX0sZGVzdHJveUV2ZW50czpmdW5jdGlvbigpe2Eub2ZmKCJrZXlkb3duLm1hc2siKS5vZmYoImtleXVwLm1hc2siKS5vZmYoInBhc3RlLm1hc2siKX0sdmFsOmZ1bmN0aW9uKHYpe3ZhciBkPSJpbnB1dCI9PT1hLmdldCgwKS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD9kP2EudmFsKHYpOmEudGV4dCh2KTpkP2EudmFsKCk6YS50ZXh0KCl9LGJlaGF2aW91cjpmdW5jdGlvbihhKXthPWF8fHdpbmRvdy5ldmVudDtpZigtMT09PWMuaW5BcnJheShhLmtleUNvZGV8fGEud2hpY2gsCmYuYnlQYXNzS2V5cykpcmV0dXJuIGcudmFsKGcuZ2V0TWFza2VkKCkpLGcuY2FsbGJhY2tzKGEpfSxnZXRNYXNrZWQ6ZnVuY3Rpb24oKXt2YXIgYT1bXSxjPWcudmFsKCksYj0wLHE9ZC5sZW5ndGgsaD0wLGw9Yy5sZW5ndGgsaz0xLHI9InB1c2giLG09LTEsbixzO2UucmV2ZXJzZT8ocj0idW5zaGlmdCIsaz0tMSxuPTAsYj1xLTEsaD1sLTEscz1mdW5jdGlvbigpe3JldHVybi0xPGImJi0xPGh9KToobj1xLTEscz1mdW5jdGlvbigpe3JldHVybiBiPHEmJmg8bH0pO2Zvcig7cygpOyl7dmFyIHQ9ZC5jaGFyQXQoYiksdT1jLmNoYXJBdChoKSxwPWYudHJhbnNsYXRpb25bdF07cD8odS5tYXRjaChwLnBhdHRlcm4pPyhhW3JdKHUpLHAucmVjdXJzaXZlJiYoLTE9PW0/bT1iOmI9PW4mJihiPW0tayksbj09bSYmKGItPWspKSxiKz1rKTpwLm9wdGlvbmFsJiYoYis9ayxoLT1rKSxoKz1rKTooYVtyXSh0KSx1PT10JiYoaCs9ayksYis9ayl9cmV0dXJuIGEuam9pbigiIil9LGNhbGxiYWNrczpmdW5jdGlvbihmKXt2YXIgYz0KZy52YWwoKSxiPWcudmFsKCkhPT1sO2lmKCEwPT09YiYmImZ1bmN0aW9uIj09dHlwZW9mIGUub25DaGFuZ2UpZS5vbkNoYW5nZShjLGYsYSxlKTtpZighMD09PWImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uS2V5UHJlc3MpZS5vbktleVByZXNzKGMsZixhLGUpO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS5vbkNvbXBsZXRlJiZjLmxlbmd0aD09PWQubGVuZ3RoKWUub25Db21wbGV0ZShjLGYsYSxlKX19O2YucmVtb3ZlPWZ1bmN0aW9uKCl7Zy5kZXN0cm95RXZlbnRzKCk7Zy52YWwoZi5nZXRDbGVhblZhbCgpKS5yZW1vdmVBdHRyKCJtYXhsZW5ndGgiKX07Zi5nZXRDbGVhblZhbD1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxjPWcudmFsKCksYj0wLGU9ZC5sZW5ndGg7YjxlO2IrKylmLnRyYW5zbGF0aW9uW2QuY2hhckF0KGIpXSYmYS5wdXNoKGMuY2hhckF0KGIpKTtyZXR1cm4gYS5qb2luKCIiKX07Zi5pbml0KCl9O2MuZm4ubWFzaz1mdW5jdGlvbihhLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjKHRoaXMpLmRhdGEoIm1hc2siLApuZXcgdyh0aGlzLGEsZCkpfSl9O2MuZm4udW5tYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXtjKHRoaXMpLmRhdGEoIm1hc2siKS5yZW1vdmUoKX1jYXRjaChhKXt9fSl9O2MoImlucHV0W2RhdGEtbWFza10iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9Yyh0aGlzKSxkPXt9OyJ0cnVlIj09PWEuYXR0cigiZGF0YS1tYXNrLXJldmVyc2UiKSYmKGQucmV2ZXJzZT0hMCk7ImZhbHNlIj09PWEuYXR0cigiZGF0YS1tYXNrLW1heGxlbmd0aCIpJiYoZC5tYXhsZW5ndGg9ITEpO2EubWFzayhhLmF0dHIoImRhdGEtbWFzayIpLGQpfSl9KSh3aW5kb3cualF1ZXJ5fHx3aW5kb3cuWmVwdG8pOwoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoJDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKiEgalF1ZXJ5IFVJIC0gdjEuMTAuNCAtIDIwMTQtMDEtMTcNCiogaHR0cDovL2pxdWVyeXVpLmNvbQ0KKiBJbmNsdWRlczoganF1ZXJ5LnVpLmNvcmUuanMsIGpxdWVyeS51aS53aWRnZXQuanMsIGpxdWVyeS51aS5tb3VzZS5qcywganF1ZXJ5LnVpLnBvc2l0aW9uLmpzLCBqcXVlcnkudWkuYWNjb3JkaW9uLmpzLCBqcXVlcnkudWkuYXV0b2NvbXBsZXRlLmpzLCBqcXVlcnkudWkuYnV0dG9uLmpzLCBqcXVlcnkudWkuZGF0ZXBpY2tlci5qcywganF1ZXJ5LnVpLmRpYWxvZy5qcywganF1ZXJ5LnVpLmRyYWdnYWJsZS5qcywganF1ZXJ5LnVpLmRyb3BwYWJsZS5qcywganF1ZXJ5LnVpLmVmZmVjdC5qcywganF1ZXJ5LnVpLmVmZmVjdC1ibGluZC5qcywganF1ZXJ5LnVpLmVmZmVjdC1ib3VuY2UuanMsIGpxdWVyeS51aS5lZmZlY3QtY2xpcC5qcywganF1ZXJ5LnVpLmVmZmVjdC1kcm9wLmpzLCBqcXVlcnkudWkuZWZmZWN0LWV4cGxvZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtZmFkZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mb2xkLmpzLCBqcXVlcnkudWkuZWZmZWN0LWhpZ2hsaWdodC5qcywganF1ZXJ5LnVpLmVmZmVjdC1wdWxzYXRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNjYWxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNoYWtlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNsaWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXRyYW5zZmVyLmpzLCBqcXVlcnkudWkubWVudS5qcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmpzLCBqcXVlcnkudWkucmVzaXphYmxlLmpzLCBqcXVlcnkudWkuc2VsZWN0YWJsZS5qcywganF1ZXJ5LnVpLnNsaWRlci5qcywganF1ZXJ5LnVpLnNvcnRhYmxlLmpzLCBqcXVlcnkudWkuc3Bpbm5lci5qcywganF1ZXJ5LnVpLnRhYnMuanMsIGpxdWVyeS51aS50b29sdGlwLmpzDQoqIENvcHlyaWdodCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLw0KDQooZnVuY3Rpb24gKGUsIHQpIHsgZnVuY3Rpb24gaSh0LCBpKSB7IHZhciBzLCBhLCBvLCByID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gImFyZWEiID09PSByID8gKHMgPSB0LnBhcmVudE5vZGUsIGEgPSBzLm5hbWUsIHQuaHJlZiAmJiBhICYmICJtYXAiID09PSBzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPyAobyA9IGUoImltZ1t1c2VtYXA9IyIgKyBhICsgIl0iKVswXSwgISFvICYmIG4obykpIDogITEpIDogKC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVzdChyKSA/ICF0LmRpc2FibGVkIDogImEiID09PSByID8gdC5ocmVmIHx8IGkgOiBpKSAmJiBuKHQpIH0gZnVuY3Rpb24gbih0KSB7IHJldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpICYmICFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICJoaWRkZW4iID09PSBlLmNzcyh0aGlzLCAidmlzaWJpbGl0eSIpIH0pLmxlbmd0aCB9IHZhciBzID0gMCwgYSA9IC9edWktaWQtXGQrJC87IGUudWkgPSBlLnVpIHx8IHt9LCBlLmV4dGVuZChlLnVpLCB7IHZlcnNpb246ICIxLjEwLjQiLCBrZXlDb2RlOiB7IEJBQ0tTUEFDRTogOCwgQ09NTUE6IDE4OCwgREVMRVRFOiA0NiwgRE9XTjogNDAsIEVORDogMzUsIEVOVEVSOiAxMywgRVNDQVBFOiAyNywgSE9NRTogMzYsIExFRlQ6IDM3LCBOVU1QQURfQUREOiAxMDcsIE5VTVBBRF9ERUNJTUFMOiAxMTAsIE5VTVBBRF9ESVZJREU6IDExMSwgTlVNUEFEX0VOVEVSOiAxMDgsIE5VTVBBRF9NVUxUSVBMWTogMTA2LCBOVU1QQURfU1VCVFJBQ1Q6IDEwOSwgUEFHRV9ET1dOOiAzNCwgUEFHRV9VUDogMzMsIFBFUklPRDogMTkwLCBSSUdIVDogMzksIFNQQUNFOiAzMiwgVEFCOiA5LCBVUDogMzggfSB9KSwgZS5mbi5leHRlbmQoeyBmb2N1czogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChpLCBuKSB7IHJldHVybiAibnVtYmVyIiA9PSB0eXBlb2YgaSA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpczsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGUodCkuZm9jdXMoKSwgbiAmJiBuLmNhbGwodCkgfSwgaSkgfSkgOiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSB9KGUuZm4uZm9jdXMpLCBzY3JvbGxQYXJlbnQ6IGZ1bmN0aW9uICgpIHsgdmFyIHQ7IHJldHVybiB0ID0gZS51aS5pZSAmJiAvKHN0YXRpY3xyZWxhdGl2ZSkvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpIHx8IC9hYnNvbHV0ZS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSkgPyB0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoZS5jc3ModGhpcywgInBvc2l0aW9uIikpICYmIC8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsICJvdmVyZmxvdyIpICsgZS5jc3ModGhpcywgIm92ZXJmbG93LXkiKSArIGUuY3NzKHRoaXMsICJvdmVyZmxvdy14IikpIH0pLmVxKDApIDogdGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsICJvdmVyZmxvdyIpICsgZS5jc3ModGhpcywgIm92ZXJmbG93LXkiKSArIGUuY3NzKHRoaXMsICJvdmVyZmxvdy14IikpIH0pLmVxKDApLCAvZml4ZWQvLnRlc3QodGhpcy5jc3MoInBvc2l0aW9uIikpIHx8ICF0Lmxlbmd0aCA/IGUoZG9jdW1lbnQpIDogdCB9LCB6SW5kZXg6IGZ1bmN0aW9uIChpKSB7IGlmIChpICE9PSB0KSByZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsIGkpOyBpZiAodGhpcy5sZW5ndGgpIGZvciAodmFyIG4sIHMsIGEgPSBlKHRoaXNbMF0pIDsgYS5sZW5ndGggJiYgYVswXSAhPT0gZG9jdW1lbnQ7KSB7IGlmIChuID0gYS5jc3MoInBvc2l0aW9uIiksICgiYWJzb2x1dGUiID09PSBuIHx8ICJyZWxhdGl2ZSIgPT09IG4gfHwgImZpeGVkIiA9PT0gbikgJiYgKHMgPSBwYXJzZUludChhLmNzcygiekluZGV4IiksIDEwKSwgIWlzTmFOKHMpICYmIDAgIT09IHMpKSByZXR1cm4gczsgYSA9IGEucGFyZW50KCkgfSByZXR1cm4gMCB9LCB1bmlxdWVJZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdGhpcy5pZCB8fCAodGhpcy5pZCA9ICJ1aS1pZC0iICsgKytzKSB9KSB9LCByZW1vdmVVbmlxdWVJZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgYS50ZXN0KHRoaXMuaWQpICYmIGUodGhpcykucmVtb3ZlQXR0cigiaWQiKSB9KSB9IH0pLCBlLmV4dGVuZChlLmV4cHJbIjoiXSwgeyBkYXRhOiBlLmV4cHIuY3JlYXRlUHNldWRvID8gZS5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGkpIHsgcmV0dXJuICEhZS5kYXRhKGksIHQpIH0gfSkgOiBmdW5jdGlvbiAodCwgaSwgbikgeyByZXR1cm4gISFlLmRhdGEodCwgblszXSkgfSwgZm9jdXNhYmxlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gaSh0LCAhaXNOYU4oZS5hdHRyKHQsICJ0YWJpbmRleCIpKSkgfSwgdGFiYmFibGU6IGZ1bmN0aW9uICh0KSB7IHZhciBuID0gZS5hdHRyKHQsICJ0YWJpbmRleCIpLCBzID0gaXNOYU4obik7IHJldHVybiAocyB8fCBuID49IDApICYmIGkodCwgIXMpIH0gfSksIGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5IHx8IGUuZWFjaChbIldpZHRoIiwgIkhlaWdodCJdLCBmdW5jdGlvbiAoaSwgbikgeyBmdW5jdGlvbiBzKHQsIGksIG4sIHMpIHsgcmV0dXJuIGUuZWFjaChhLCBmdW5jdGlvbiAoKSB7IGkgLT0gcGFyc2VGbG9hdChlLmNzcyh0LCAicGFkZGluZyIgKyB0aGlzKSkgfHwgMCwgbiAmJiAoaSAtPSBwYXJzZUZsb2F0KGUuY3NzKHQsICJib3JkZXIiICsgdGhpcyArICJXaWR0aCIpKSB8fCAwKSwgcyAmJiAoaSAtPSBwYXJzZUZsb2F0KGUuY3NzKHQsICJtYXJnaW4iICsgdGhpcykpIHx8IDApIH0pLCBpIH0gdmFyIGEgPSAiV2lkdGgiID09PSBuID8gWyJMZWZ0IiwgIlJpZ2h0Il0gOiBbIlRvcCIsICJCb3R0b20iXSwgbyA9IG4udG9Mb3dlckNhc2UoKSwgciA9IHsgaW5uZXJXaWR0aDogZS5mbi5pbm5lcldpZHRoLCBpbm5lckhlaWdodDogZS5mbi5pbm5lckhlaWdodCwgb3V0ZXJXaWR0aDogZS5mbi5vdXRlcldpZHRoLCBvdXRlckhlaWdodDogZS5mbi5vdXRlckhlaWdodCB9OyBlLmZuWyJpbm5lciIgKyBuXSA9IGZ1bmN0aW9uIChpKSB7IHJldHVybiBpID09PSB0ID8gclsiaW5uZXIiICsgbl0uY2FsbCh0aGlzKSA6IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IGUodGhpcykuY3NzKG8sIHModGhpcywgaSkgKyAicHgiKSB9KSB9LCBlLmZuWyJvdXRlciIgKyBuXSA9IGZ1bmN0aW9uICh0LCBpKSB7IHJldHVybiAibnVtYmVyIiAhPSB0eXBlb2YgdCA/IHJbIm91dGVyIiArIG5dLmNhbGwodGhpcywgdCkgOiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBlKHRoaXMpLmNzcyhvLCBzKHRoaXMsIHQsICEwLCBpKSArICJweCIpIH0pIH0gfSksIGUuZm4uYWRkQmFjayB8fCAoZS5mbi5hZGRCYWNrID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMuYWRkKG51bGwgPT0gZSA/IHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpIH0pLCBlKCI8YT4iKS5kYXRhKCJhLWIiLCAiYSIpLnJlbW92ZURhdGEoImEtYiIpLmRhdGEoImEtYiIpICYmIChlLmZuLnJlbW92ZURhdGEgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0LmNhbGwodGhpcywgZS5jYW1lbENhc2UoaSkpIDogdC5jYWxsKHRoaXMpIH0gfShlLmZuLnJlbW92ZURhdGEpKSwgZS51aS5pZSA9ICEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksIGUuc3VwcG9ydC5zZWxlY3RzdGFydCA9ICJvbnNlbGVjdHN0YXJ0IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZS5mbi5leHRlbmQoeyBkaXNhYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmJpbmQoKGUuc3VwcG9ydC5zZWxlY3RzdGFydCA/ICJzZWxlY3RzdGFydCIgOiAibW91c2Vkb3duIikgKyAiLnVpLWRpc2FibGVTZWxlY3Rpb24iLCBmdW5jdGlvbiAoZSkgeyBlLnByZXZlbnREZWZhdWx0KCkgfSkgfSwgZW5hYmxlU2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKSB9IH0pLCBlLmV4dGVuZChlLnVpLCB7IHBsdWdpbjogeyBhZGQ6IGZ1bmN0aW9uICh0LCBpLCBuKSB7IHZhciBzLCBhID0gZS51aVt0XS5wcm90b3R5cGU7IGZvciAocyBpbiBuKSBhLnBsdWdpbnNbc10gPSBhLnBsdWdpbnNbc10gfHwgW10sIGEucGx1Z2luc1tzXS5wdXNoKFtpLCBuW3NdXSkgfSwgY2FsbDogZnVuY3Rpb24gKGUsIHQsIGkpIHsgdmFyIG4sIHMgPSBlLnBsdWdpbnNbdF07IGlmIChzICYmIGUuZWxlbWVudFswXS5wYXJlbnROb2RlICYmIDExICE9PSBlLmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSkgZm9yIChuID0gMDsgcy5sZW5ndGggPiBuOyBuKyspIGUub3B0aW9uc1tzW25dWzBdXSAmJiBzW25dWzFdLmFwcGx5KGUuZWxlbWVudCwgaSkgfSB9LCBoYXNTY3JvbGw6IGZ1bmN0aW9uICh0LCBpKSB7IGlmICgiaGlkZGVuIiA9PT0gZSh0KS5jc3MoIm92ZXJmbG93IikpIHJldHVybiAhMTsgdmFyIG4gPSBpICYmICJsZWZ0IiA9PT0gaSA/ICJzY3JvbGxMZWZ0IiA6ICJzY3JvbGxUb3AiLCBzID0gITE7IHJldHVybiB0W25dID4gMCA/ICEwIDogKHRbbl0gPSAxLCBzID0gdFtuXSA+IDAsIHRbbl0gPSAwLCBzKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSA9IDAsIHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsIG4gPSB0LmNsZWFuRGF0YTsgdC5jbGVhbkRhdGEgPSBmdW5jdGlvbiAoZSkgeyBmb3IgKHZhciBpLCBzID0gMDsgbnVsbCAhPSAoaSA9IGVbc10pIDsgcysrKSB0cnkgeyB0KGkpLnRyaWdnZXJIYW5kbGVyKCJyZW1vdmUiKSB9IGNhdGNoIChvKSB7IH0gbihlKSB9LCB0LndpZGdldCA9IGZ1bmN0aW9uIChpLCBzLCBuKSB7IHZhciBvLCBhLCByLCBoLCBsID0ge30sIGMgPSBpLnNwbGl0KCIuIilbMF07IGkgPSBpLnNwbGl0KCIuIilbMV0sIG8gPSBjICsgIi0iICsgaSwgbiB8fCAobiA9IHMsIHMgPSB0LldpZGdldCksIHQuZXhwclsiOiJdW28udG9Mb3dlckNhc2UoKV0gPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gISF0LmRhdGEoZSwgbykgfSwgdFtjXSA9IHRbY10gfHwge30sIGEgPSB0W2NdW2ldLCByID0gdFtjXVtpXSA9IGZ1bmN0aW9uICh0LCBpKSB7IHJldHVybiB0aGlzLl9jcmVhdGVXaWRnZXQgPyAoYXJndW1lbnRzLmxlbmd0aCAmJiB0aGlzLl9jcmVhdGVXaWRnZXQodCwgaSksIGUpIDogbmV3IHIodCwgaSkgfSwgdC5leHRlbmQociwgYSwgeyB2ZXJzaW9uOiBuLnZlcnNpb24sIF9wcm90bzogdC5leHRlbmQoe30sIG4pLCBfY2hpbGRDb25zdHJ1Y3RvcnM6IFtdIH0pLCBoID0gbmV3IHMsIGgub3B0aW9ucyA9IHQud2lkZ2V0LmV4dGVuZCh7fSwgaC5vcHRpb25zKSwgdC5lYWNoKG4sIGZ1bmN0aW9uIChpLCBuKSB7IHJldHVybiB0LmlzRnVuY3Rpb24obikgPyAobFtpXSA9IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzLnByb3RvdHlwZVtpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0sIGUgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gcy5wcm90b3R5cGVbaV0uYXBwbHkodGhpcywgdCkgfTsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIGksIHMgPSB0aGlzLl9zdXBlciwgbyA9IHRoaXMuX3N1cGVyQXBwbHk7IHJldHVybiB0aGlzLl9zdXBlciA9IHQsIHRoaXMuX3N1cGVyQXBwbHkgPSBlLCBpID0gbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9zdXBlciA9IHMsIHRoaXMuX3N1cGVyQXBwbHkgPSBvLCBpIH0gfSgpLCBlKSA6IChsW2ldID0gbiwgZSkgfSksIHIucHJvdG90eXBlID0gdC53aWRnZXQuZXh0ZW5kKGgsIHsgd2lkZ2V0RXZlbnRQcmVmaXg6IGEgPyBoLndpZGdldEV2ZW50UHJlZml4IHx8IGkgOiBpIH0sIGwsIHsgY29uc3RydWN0b3I6IHIsIG5hbWVzcGFjZTogYywgd2lkZ2V0TmFtZTogaSwgd2lkZ2V0RnVsbE5hbWU6IG8gfSksIGEgPyAodC5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLCBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IGkucHJvdG90eXBlOyB0LndpZGdldChzLm5hbWVzcGFjZSArICIuIiArIHMud2lkZ2V0TmFtZSwgciwgaS5fcHJvdG8pIH0pLCBkZWxldGUgYS5fY2hpbGRDb25zdHJ1Y3RvcnMpIDogcy5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChyKSwgdC53aWRnZXQuYnJpZGdlKGksIHIpIH0sIHQud2lkZ2V0LmV4dGVuZCA9IGZ1bmN0aW9uIChpKSB7IGZvciAodmFyIG4sIG8sIGEgPSBzLmNhbGwoYXJndW1lbnRzLCAxKSwgciA9IDAsIGggPSBhLmxlbmd0aDsgaCA+IHI7IHIrKykgZm9yIChuIGluIGFbcl0pIG8gPSBhW3JdW25dLCBhW3JdLmhhc093blByb3BlcnR5KG4pICYmIG8gIT09IGUgJiYgKGlbbl0gPSB0LmlzUGxhaW5PYmplY3QobykgPyB0LmlzUGxhaW5PYmplY3QoaVtuXSkgPyB0LndpZGdldC5leHRlbmQoe30sIGlbbl0sIG8pIDogdC53aWRnZXQuZXh0ZW5kKHt9LCBvKSA6IG8pOyByZXR1cm4gaSB9LCB0LndpZGdldC5icmlkZ2UgPSBmdW5jdGlvbiAoaSwgbikgeyB2YXIgbyA9IG4ucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lIHx8IGk7IHQuZm5baV0gPSBmdW5jdGlvbiAoYSkgeyB2YXIgciA9ICJzdHJpbmciID09IHR5cGVvZiBhLCBoID0gcy5jYWxsKGFyZ3VtZW50cywgMSksIGwgPSB0aGlzOyByZXR1cm4gYSA9ICFyICYmIGgubGVuZ3RoID8gdC53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsIFthXS5jb25jYXQoaCkpIDogYSwgciA/IHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBzLCBuID0gdC5kYXRhKHRoaXMsIG8pOyByZXR1cm4gbiA/IHQuaXNGdW5jdGlvbihuW2FdKSAmJiAiXyIgIT09IGEuY2hhckF0KDApID8gKHMgPSBuW2FdLmFwcGx5KG4sIGgpLCBzICE9PSBuICYmIHMgIT09IGUgPyAobCA9IHMgJiYgcy5qcXVlcnkgPyBsLnB1c2hTdGFjayhzLmdldCgpKSA6IHMsICExKSA6IGUpIDogdC5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIgKyBhICsgIicgZm9yICIgKyBpICsgIiB3aWRnZXQgaW5zdGFuY2UiKSA6IHQuZXJyb3IoImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gIiArIGkgKyAiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiICsgImF0dGVtcHRlZCB0byBjYWxsIG1ldGhvZCAnIiArIGEgKyAiJyIpIH0pIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0LmRhdGEodGhpcywgbyk7IGUgPyBlLm9wdGlvbihhIHx8IHt9KS5faW5pdCgpIDogdC5kYXRhKHRoaXMsIG8sIG5ldyBuKGEsIHRoaXMpKSB9KSwgbCB9IH0sIHQuV2lkZ2V0ID0gZnVuY3Rpb24gKCkgeyB9LCB0LldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnMgPSBbXSwgdC5XaWRnZXQucHJvdG90eXBlID0geyB3aWRnZXROYW1lOiAid2lkZ2V0Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICIiLCBkZWZhdWx0RWxlbWVudDogIjxkaXY+Iiwgb3B0aW9uczogeyBkaXNhYmxlZDogITEsIGNyZWF0ZTogbnVsbCB9LCBfY3JlYXRlV2lkZ2V0OiBmdW5jdGlvbiAoZSwgcykgeyBzID0gdChzIHx8IHRoaXMuZGVmYXVsdEVsZW1lbnQgfHwgdGhpcylbMF0sIHRoaXMuZWxlbWVudCA9IHQocyksIHRoaXMudXVpZCA9IGkrKywgdGhpcy5ldmVudE5hbWVzcGFjZSA9ICIuIiArIHRoaXMud2lkZ2V0TmFtZSArIHRoaXMudXVpZCwgdGhpcy5vcHRpb25zID0gdC53aWRnZXQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSwgZSksIHRoaXMuYmluZGluZ3MgPSB0KCksIHRoaXMuaG92ZXJhYmxlID0gdCgpLCB0aGlzLmZvY3VzYWJsZSA9IHQoKSwgcyAhPT0gdGhpcyAmJiAodC5kYXRhKHMsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMpLCB0aGlzLl9vbighMCwgdGhpcy5lbGVtZW50LCB7IHJlbW92ZTogZnVuY3Rpb24gKHQpIHsgdC50YXJnZXQgPT09IHMgJiYgdGhpcy5kZXN0cm95KCkgfSB9KSwgdGhpcy5kb2N1bWVudCA9IHQocy5zdHlsZSA/IHMub3duZXJEb2N1bWVudCA6IHMuZG9jdW1lbnQgfHwgcyksIHRoaXMud2luZG93ID0gdCh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksIHRoaXMuX2NyZWF0ZSgpLCB0aGlzLl90cmlnZ2VyKCJjcmVhdGUiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksIHRoaXMuX2luaXQoKSB9LCBfZ2V0Q3JlYXRlT3B0aW9uczogdC5ub29wLCBfZ2V0Q3JlYXRlRXZlbnREYXRhOiB0Lm5vb3AsIF9jcmVhdGU6IHQubm9vcCwgX2luaXQ6IHQubm9vcCwgZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLl9kZXN0cm95KCksIHRoaXMuZWxlbWVudC51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSkucmVtb3ZlRGF0YSh0LmNhbWVsQ2FzZSh0aGlzLndpZGdldEZ1bGxOYW1lKSksIHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lICsgIi1kaXNhYmxlZCAiICsgInVpLXN0YXRlLWRpc2FibGVkIiksIHRoaXMuYmluZGluZ3MudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLCB0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSwgX2Rlc3Ryb3k6IHQubm9vcCwgd2lkZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVsZW1lbnQgfSwgb3B0aW9uOiBmdW5jdGlvbiAoaSwgcykgeyB2YXIgbiwgbywgYSwgciA9IGk7IGlmICgwID09PSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdC53aWRnZXQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMpOyBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGkpIGlmIChyID0ge30sIG4gPSBpLnNwbGl0KCIuIiksIGkgPSBuLnNoaWZ0KCksIG4ubGVuZ3RoKSB7IGZvciAobyA9IHJbaV0gPSB0LndpZGdldC5leHRlbmQoe30sIHRoaXMub3B0aW9uc1tpXSksIGEgPSAwOyBuLmxlbmd0aCAtIDEgPiBhOyBhKyspIG9bblthXV0gPSBvW25bYV1dIHx8IHt9LCBvID0gb1tuW2FdXTsgaWYgKGkgPSBuLnBvcCgpLCAxID09PSBhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb1tpXSA9PT0gZSA/IG51bGwgOiBvW2ldOyBvW2ldID0gcyB9IGVsc2UgeyBpZiAoMSA9PT0gYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRoaXMub3B0aW9uc1tpXSA9PT0gZSA/IG51bGwgOiB0aGlzLm9wdGlvbnNbaV07IHJbaV0gPSBzIH0gcmV0dXJuIHRoaXMuX3NldE9wdGlvbnMociksIHRoaXMgfSwgX3NldE9wdGlvbnM6IGZ1bmN0aW9uICh0KSB7IHZhciBlOyBmb3IgKGUgaW4gdCkgdGhpcy5fc2V0T3B0aW9uKGUsIHRbZV0pOyByZXR1cm4gdGhpcyB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyByZXR1cm4gdGhpcy5vcHRpb25zW3RdID0gZSwgImRpc2FibGVkIiA9PT0gdCAmJiAodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lICsgIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIsICEhZSkuYXR0cigiYXJpYS1kaXNhYmxlZCIsIGUpLCB0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpLCB0aGlzIH0sIGVuYWJsZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsICExKSB9LCBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwgITApIH0sIF9vbjogZnVuY3Rpb24gKGksIHMsIG4pIHsgdmFyIG8sIGEgPSB0aGlzOyAiYm9vbGVhbiIgIT0gdHlwZW9mIGkgJiYgKG4gPSBzLCBzID0gaSwgaSA9ICExKSwgbiA/IChzID0gbyA9IHQocyksIHRoaXMuYmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmFkZChzKSkgOiAobiA9IHMsIHMgPSB0aGlzLmVsZW1lbnQsIG8gPSB0aGlzLndpZGdldCgpKSwgdC5lYWNoKG4sIGZ1bmN0aW9uIChuLCByKSB7IGZ1bmN0aW9uIGgoKSB7IHJldHVybiBpIHx8IGEub3B0aW9ucy5kaXNhYmxlZCAhPT0gITAgJiYgIXQodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikgPyAoInN0cmluZyIgPT0gdHlwZW9mIHIgPyBhW3JdIDogcikuYXBwbHkoYSwgYXJndW1lbnRzKSA6IGUgfSAic3RyaW5nIiAhPSB0eXBlb2YgciAmJiAoaC5ndWlkID0gci5ndWlkID0gci5ndWlkIHx8IGguZ3VpZCB8fCB0Lmd1aWQrKyk7IHZhciBsID0gbi5tYXRjaCgvXihcdyspXHMqKC4qKSQvKSwgYyA9IGxbMV0gKyBhLmV2ZW50TmFtZXNwYWNlLCB1ID0gbFsyXTsgdSA/IG8uZGVsZWdhdGUodSwgYywgaCkgOiBzLmJpbmQoYywgaCkgfSkgfSwgX29mZjogZnVuY3Rpb24gKHQsIGUpIHsgZSA9IChlIHx8ICIiKS5zcGxpdCgiICIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZSArICIgIikgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCB0LnVuYmluZChlKS51bmRlbGVnYXRlKGUpIH0sIF9kZWxheTogZnVuY3Rpb24gKHQsIGUpIHsgZnVuY3Rpb24gaSgpIHsgcmV0dXJuICgic3RyaW5nIiA9PSB0eXBlb2YgdCA/IHNbdF0gOiB0KS5hcHBseShzLCBhcmd1bWVudHMpIH0gdmFyIHMgPSB0aGlzOyByZXR1cm4gc2V0VGltZW91dChpLCBlIHx8IDApIH0sIF9ob3ZlcmFibGU6IGZ1bmN0aW9uIChlKSB7IHRoaXMuaG92ZXJhYmxlID0gdGhpcy5ob3ZlcmFibGUuYWRkKGUpLCB0aGlzLl9vbihlLCB7IG1vdXNlZW50ZXI6IGZ1bmN0aW9uIChlKSB7IHQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSB9LCBtb3VzZWxlYXZlOiBmdW5jdGlvbiAoZSkgeyB0KGUuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIikgfSB9KSB9LCBfZm9jdXNhYmxlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLmZvY3VzYWJsZSA9IHRoaXMuZm9jdXNhYmxlLmFkZChlKSwgdGhpcy5fb24oZSwgeyBmb2N1c2luOiBmdW5jdGlvbiAoZSkgeyB0KGUuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSwgZm9jdXNvdXQ6IGZ1bmN0aW9uIChlKSB7IHQoZS5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSB9IH0pIH0sIF90cmlnZ2VyOiBmdW5jdGlvbiAoZSwgaSwgcykgeyB2YXIgbiwgbywgYSA9IHRoaXMub3B0aW9uc1tlXTsgaWYgKHMgPSBzIHx8IHt9LCBpID0gdC5FdmVudChpKSwgaS50eXBlID0gKGUgPT09IHRoaXMud2lkZ2V0RXZlbnRQcmVmaXggPyBlIDogdGhpcy53aWRnZXRFdmVudFByZWZpeCArIGUpLnRvTG93ZXJDYXNlKCksIGkudGFyZ2V0ID0gdGhpcy5lbGVtZW50WzBdLCBvID0gaS5vcmlnaW5hbEV2ZW50KSBmb3IgKG4gaW4gbykgbiBpbiBpIHx8IChpW25dID0gb1tuXSk7IHJldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLCBzKSwgISh0LmlzRnVuY3Rpb24oYSkgJiYgYS5hcHBseSh0aGlzLmVsZW1lbnRbMF0sIFtpXS5jb25jYXQocykpID09PSAhMSB8fCBpLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB9IH0sIHQuZWFjaCh7IHNob3c6ICJmYWRlSW4iLCBoaWRlOiAiZmFkZU91dCIgfSwgZnVuY3Rpb24gKGUsIGkpIHsgdC5XaWRnZXQucHJvdG90eXBlWyJfIiArIGVdID0gZnVuY3Rpb24gKHMsIG4sIG8pIHsgInN0cmluZyIgPT0gdHlwZW9mIG4gJiYgKG4gPSB7IGVmZmVjdDogbiB9KTsgdmFyIGEsIHIgPSBuID8gbiA9PT0gITAgfHwgIm51bWJlciIgPT0gdHlwZW9mIG4gPyBpIDogbi5lZmZlY3QgfHwgaSA6IGU7IG4gPSBuIHx8IHt9LCAibnVtYmVyIiA9PSB0eXBlb2YgbiAmJiAobiA9IHsgZHVyYXRpb246IG4gfSksIGEgPSAhdC5pc0VtcHR5T2JqZWN0KG4pLCBuLmNvbXBsZXRlID0gbywgbi5kZWxheSAmJiBzLmRlbGF5KG4uZGVsYXkpLCBhICYmIHQuZWZmZWN0cyAmJiB0LmVmZmVjdHMuZWZmZWN0W3JdID8gc1tlXShuKSA6IHIgIT09IGUgJiYgc1tyXSA/IHNbcl0obi5kdXJhdGlvbiwgbi5lYXNpbmcsIG8pIDogcy5xdWV1ZShmdW5jdGlvbiAoaSkgeyB0KHRoaXMpW2VdKCksIG8gJiYgby5jYWxsKHNbMF0pLCBpKCkgfSkgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSAhMTsgdChkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbiAoKSB7IGUgPSAhMSB9KSwgdC53aWRnZXQoInVpLm1vdXNlIiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBjYW5jZWw6ICJpbnB1dCx0ZXh0YXJlYSxidXR0b24sc2VsZWN0LG9wdGlvbiIsIGRpc3RhbmNlOiAxLCBkZWxheTogMCB9LCBfbW91c2VJbml0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgdGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iICsgdGhpcy53aWRnZXROYW1lLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gZS5fbW91c2VEb3duKHQpIH0pLmJpbmQoImNsaWNrLiIgKyB0aGlzLndpZGdldE5hbWUsIGZ1bmN0aW9uIChpKSB7IHJldHVybiAhMCA9PT0gdC5kYXRhKGkudGFyZ2V0LCBlLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IikgPyAodC5yZW1vdmVEYXRhKGkudGFyZ2V0LCBlLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiksIGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksICExKSA6IHVuZGVmaW5lZCB9KSwgdGhpcy5zdGFydGVkID0gITEgfSwgX21vdXNlRGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQudW5iaW5kKCIuIiArIHRoaXMud2lkZ2V0TmFtZSksIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlICYmIHQoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKSB9LCBfbW91c2VEb3duOiBmdW5jdGlvbiAoaSkgeyBpZiAoIWUpIHsgdGhpcy5fbW91c2VTdGFydGVkICYmIHRoaXMuX21vdXNlVXAoaSksIHRoaXMuX21vdXNlRG93bkV2ZW50ID0gaTsgdmFyIHMgPSB0aGlzLCBuID0gMSA9PT0gaS53aGljaCwgYSA9ICJzdHJpbmciID09IHR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsICYmIGkudGFyZ2V0Lm5vZGVOYW1lID8gdChpLnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGggOiAhMTsgcmV0dXJuIG4gJiYgIWEgJiYgdGhpcy5fbW91c2VDYXB0dXJlKGkpID8gKHRoaXMubW91c2VEZWxheU1ldCA9ICF0aGlzLm9wdGlvbnMuZGVsYXksIHRoaXMubW91c2VEZWxheU1ldCB8fCAodGhpcy5fbW91c2VEZWxheVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHMubW91c2VEZWxheU1ldCA9ICEwIH0sIHRoaXMub3B0aW9ucy5kZWxheSkpLCB0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGkpICYmIHRoaXMuX21vdXNlRGVsYXlNZXQoaSkgJiYgKHRoaXMuX21vdXNlU3RhcnRlZCA9IHRoaXMuX21vdXNlU3RhcnQoaSkgIT09ICExLCAhdGhpcy5fbW91c2VTdGFydGVkKSA/IChpLnByZXZlbnREZWZhdWx0KCksICEwKSA6ICghMCA9PT0gdC5kYXRhKGkudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IikgJiYgdC5yZW1vdmVEYXRhKGkudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiksIHRoaXMuX21vdXNlTW92ZURlbGVnYXRlID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHMuX21vdXNlTW92ZSh0KSB9LCB0aGlzLl9tb3VzZVVwRGVsZWdhdGUgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gcy5fbW91c2VVcCh0KSB9LCB0KGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIiArIHRoaXMud2lkZ2V0TmFtZSwgdGhpcy5fbW91c2VVcERlbGVnYXRlKSwgaS5wcmV2ZW50RGVmYXVsdCgpLCBlID0gITAsICEwKSkgOiAhMCB9IH0sIF9tb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0LnVpLmllICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDkgPiBkb2N1bWVudC5kb2N1bWVudE1vZGUpICYmICFlLmJ1dHRvbiA/IHRoaXMuX21vdXNlVXAoZSkgOiB0aGlzLl9tb3VzZVN0YXJ0ZWQgPyAodGhpcy5fbW91c2VEcmFnKGUpLCBlLnByZXZlbnREZWZhdWx0KCkpIDogKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkgJiYgdGhpcy5fbW91c2VEZWxheU1ldChlKSAmJiAodGhpcy5fbW91c2VTdGFydGVkID0gdGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCwgZSkgIT09ICExLCB0aGlzLl9tb3VzZVN0YXJ0ZWQgPyB0aGlzLl9tb3VzZURyYWcoZSkgOiB0aGlzLl9tb3VzZVVwKGUpKSwgIXRoaXMuX21vdXNlU3RhcnRlZCkgfSwgX21vdXNlVXA6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0KGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iICsgdGhpcy53aWRnZXROYW1lLCB0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIgKyB0aGlzLndpZGdldE5hbWUsIHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksIHRoaXMuX21vdXNlU3RhcnRlZCAmJiAodGhpcy5fbW91c2VTdGFydGVkID0gITEsIGUudGFyZ2V0ID09PSB0aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQgJiYgdC5kYXRhKGUudGFyZ2V0LCB0aGlzLndpZGdldE5hbWUgKyAiLnByZXZlbnRDbGlja0V2ZW50IiwgITApLCB0aGlzLl9tb3VzZVN0b3AoZSkpLCAhMSB9LCBfbW91c2VEaXN0YW5jZU1ldDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYIC0gdC5wYWdlWCksIE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZIC0gdC5wYWdlWSkpID49IHRoaXMub3B0aW9ucy5kaXN0YW5jZSB9LCBfbW91c2VEZWxheU1ldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0IH0sIF9tb3VzZVN0YXJ0OiBmdW5jdGlvbiAoKSB7IH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uICgpIHsgfSwgX21vdXNlU3RvcDogZnVuY3Rpb24gKCkgeyB9LCBfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiAoKSB7IHJldHVybiAhMCB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCwgZSkgeyBmdW5jdGlvbiBpKHQsIGUsIGkpIHsgcmV0dXJuIFtwYXJzZUZsb2F0KHRbMF0pICogKHAudGVzdCh0WzBdKSA/IGUgLyAxMDAgOiAxKSwgcGFyc2VGbG9hdCh0WzFdKSAqIChwLnRlc3QodFsxXSkgPyBpIC8gMTAwIDogMSldIH0gZnVuY3Rpb24gcyhlLCBpKSB7IHJldHVybiBwYXJzZUludCh0LmNzcyhlLCBpKSwgMTApIHx8IDAgfSBmdW5jdGlvbiBuKGUpIHsgdmFyIGkgPSBlWzBdOyByZXR1cm4gOSA9PT0gaS5ub2RlVHlwZSA/IHsgd2lkdGg6IGUud2lkdGgoKSwgaGVpZ2h0OiBlLmhlaWdodCgpLCBvZmZzZXQ6IHsgdG9wOiAwLCBsZWZ0OiAwIH0gfSA6IHQuaXNXaW5kb3coaSkgPyB7IHdpZHRoOiBlLndpZHRoKCksIGhlaWdodDogZS5oZWlnaHQoKSwgb2Zmc2V0OiB7IHRvcDogZS5zY3JvbGxUb3AoKSwgbGVmdDogZS5zY3JvbGxMZWZ0KCkgfSB9IDogaS5wcmV2ZW50RGVmYXVsdCA/IHsgd2lkdGg6IDAsIGhlaWdodDogMCwgb2Zmc2V0OiB7IHRvcDogaS5wYWdlWSwgbGVmdDogaS5wYWdlWCB9IH0gOiB7IHdpZHRoOiBlLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBlLm91dGVySGVpZ2h0KCksIG9mZnNldDogZS5vZmZzZXQoKSB9IH0gdC51aSA9IHQudWkgfHwge307IHZhciBhLCBvID0gTWF0aC5tYXgsIHIgPSBNYXRoLmFicywgbCA9IE1hdGgucm91bmQsIGggPSAvbGVmdHxjZW50ZXJ8cmlnaHQvLCBjID0gL3RvcHxjZW50ZXJ8Ym90dG9tLywgdSA9IC9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLCBkID0gL15cdysvLCBwID0gLyUkLywgZiA9IHQuZm4ucG9zaXRpb247IHQucG9zaXRpb24gPSB7IHNjcm9sbGJhcldpZHRoOiBmdW5jdGlvbiAoKSB7IGlmIChhICE9PSBlKSByZXR1cm4gYTsgdmFyIGksIHMsIG4gPSB0KCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSwgbyA9IG4uY2hpbGRyZW4oKVswXTsgcmV0dXJuIHQoImJvZHkiKS5hcHBlbmQobiksIGkgPSBvLm9mZnNldFdpZHRoLCBuLmNzcygib3ZlcmZsb3ciLCAic2Nyb2xsIiksIHMgPSBvLm9mZnNldFdpZHRoLCBpID09PSBzICYmIChzID0gblswXS5jbGllbnRXaWR0aCksIG4ucmVtb3ZlKCksIGEgPSBpIC0gcyB9LCBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IGUuaXNXaW5kb3cgfHwgZS5pc0RvY3VtZW50ID8gIiIgOiBlLmVsZW1lbnQuY3NzKCJvdmVyZmxvdy14IiksIHMgPSBlLmlzV2luZG93IHx8IGUuaXNEb2N1bWVudCA/ICIiIDogZS5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLCBuID0gInNjcm9sbCIgPT09IGkgfHwgImF1dG8iID09PSBpICYmIGUud2lkdGggPCBlLmVsZW1lbnRbMF0uc2Nyb2xsV2lkdGgsIGEgPSAic2Nyb2xsIiA9PT0gcyB8fCAiYXV0byIgPT09IHMgJiYgZS5oZWlnaHQgPCBlLmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0OyByZXR1cm4geyB3aWR0aDogYSA/IHQucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKSA6IDAsIGhlaWdodDogbiA/IHQucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKSA6IDAgfSB9LCBnZXRXaXRoaW5JbmZvOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHQoZSB8fCB3aW5kb3cpLCBzID0gdC5pc1dpbmRvdyhpWzBdKSwgbiA9ICEhaVswXSAmJiA5ID09PSBpWzBdLm5vZGVUeXBlOyByZXR1cm4geyBlbGVtZW50OiBpLCBpc1dpbmRvdzogcywgaXNEb2N1bWVudDogbiwgb2Zmc2V0OiBpLm9mZnNldCgpIHx8IHsgbGVmdDogMCwgdG9wOiAwIH0sIHNjcm9sbExlZnQ6IGkuc2Nyb2xsTGVmdCgpLCBzY3JvbGxUb3A6IGkuc2Nyb2xsVG9wKCksIHdpZHRoOiBzID8gaS53aWR0aCgpIDogaS5vdXRlcldpZHRoKCksIGhlaWdodDogcyA/IGkuaGVpZ2h0KCkgOiBpLm91dGVySGVpZ2h0KCkgfSB9IH0sIHQuZm4ucG9zaXRpb24gPSBmdW5jdGlvbiAoZSkgeyBpZiAoIWUgfHwgIWUub2YpIHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGUgPSB0LmV4dGVuZCh7fSwgZSk7IHZhciBhLCBwLCBnLCBtLCB2LCBfLCBiID0gdChlLm9mKSwgeSA9IHQucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhlLndpdGhpbiksIGsgPSB0LnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeSksIHcgPSAoZS5jb2xsaXNpb24gfHwgImZsaXAiKS5zcGxpdCgiICIpLCBEID0ge307IHJldHVybiBfID0gbihiKSwgYlswXS5wcmV2ZW50RGVmYXVsdCAmJiAoZS5hdCA9ICJsZWZ0IHRvcCIpLCBwID0gXy53aWR0aCwgZyA9IF8uaGVpZ2h0LCBtID0gXy5vZmZzZXQsIHYgPSB0LmV4dGVuZCh7fSwgbSksIHQuZWFjaChbIm15IiwgImF0Il0sIGZ1bmN0aW9uICgpIHsgdmFyIHQsIGksIHMgPSAoZVt0aGlzXSB8fCAiIikuc3BsaXQoIiAiKTsgMSA9PT0gcy5sZW5ndGggJiYgKHMgPSBoLnRlc3Qoc1swXSkgPyBzLmNvbmNhdChbImNlbnRlciJdKSA6IGMudGVzdChzWzBdKSA/IFsiY2VudGVyIl0uY29uY2F0KHMpIDogWyJjZW50ZXIiLCAiY2VudGVyIl0pLCBzWzBdID0gaC50ZXN0KHNbMF0pID8gc1swXSA6ICJjZW50ZXIiLCBzWzFdID0gYy50ZXN0KHNbMV0pID8gc1sxXSA6ICJjZW50ZXIiLCB0ID0gdS5leGVjKHNbMF0pLCBpID0gdS5leGVjKHNbMV0pLCBEW3RoaXNdID0gW3QgPyB0WzBdIDogMCwgaSA/IGlbMF0gOiAwXSwgZVt0aGlzXSA9IFtkLmV4ZWMoc1swXSlbMF0sIGQuZXhlYyhzWzFdKVswXV0gfSksIDEgPT09IHcubGVuZ3RoICYmICh3WzFdID0gd1swXSksICJyaWdodCIgPT09IGUuYXRbMF0gPyB2LmxlZnQgKz0gcCA6ICJjZW50ZXIiID09PSBlLmF0WzBdICYmICh2LmxlZnQgKz0gcCAvIDIpLCAiYm90dG9tIiA9PT0gZS5hdFsxXSA/IHYudG9wICs9IGcgOiAiY2VudGVyIiA9PT0gZS5hdFsxXSAmJiAodi50b3AgKz0gZyAvIDIpLCBhID0gaShELmF0LCBwLCBnKSwgdi5sZWZ0ICs9IGFbMF0sIHYudG9wICs9IGFbMV0sIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBuLCBoLCBjID0gdCh0aGlzKSwgdSA9IGMub3V0ZXJXaWR0aCgpLCBkID0gYy5vdXRlckhlaWdodCgpLCBmID0gcyh0aGlzLCAibWFyZ2luTGVmdCIpLCBfID0gcyh0aGlzLCAibWFyZ2luVG9wIiksIHggPSB1ICsgZiArIHModGhpcywgIm1hcmdpblJpZ2h0IikgKyBrLndpZHRoLCBDID0gZCArIF8gKyBzKHRoaXMsICJtYXJnaW5Cb3R0b20iKSArIGsuaGVpZ2h0LCBNID0gdC5leHRlbmQoe30sIHYpLCBUID0gaShELm15LCBjLm91dGVyV2lkdGgoKSwgYy5vdXRlckhlaWdodCgpKTsgInJpZ2h0IiA9PT0gZS5teVswXSA/IE0ubGVmdCAtPSB1IDogImNlbnRlciIgPT09IGUubXlbMF0gJiYgKE0ubGVmdCAtPSB1IC8gMiksICJib3R0b20iID09PSBlLm15WzFdID8gTS50b3AgLT0gZCA6ICJjZW50ZXIiID09PSBlLm15WzFdICYmIChNLnRvcCAtPSBkIC8gMiksIE0ubGVmdCArPSBUWzBdLCBNLnRvcCArPSBUWzFdLCB0LnN1cHBvcnQub2Zmc2V0RnJhY3Rpb25zIHx8IChNLmxlZnQgPSBsKE0ubGVmdCksIE0udG9wID0gbChNLnRvcCkpLCBuID0geyBtYXJnaW5MZWZ0OiBmLCBtYXJnaW5Ub3A6IF8gfSwgdC5lYWNoKFsibGVmdCIsICJ0b3AiXSwgZnVuY3Rpb24gKGksIHMpIHsgdC51aS5wb3NpdGlvblt3W2ldXSAmJiB0LnVpLnBvc2l0aW9uW3dbaV1dW3NdKE0sIHsgdGFyZ2V0V2lkdGg6IHAsIHRhcmdldEhlaWdodDogZywgZWxlbVdpZHRoOiB1LCBlbGVtSGVpZ2h0OiBkLCBjb2xsaXNpb25Qb3NpdGlvbjogbiwgY29sbGlzaW9uV2lkdGg6IHgsIGNvbGxpc2lvbkhlaWdodDogQywgb2Zmc2V0OiBbYVswXSArIFRbMF0sIGFbMV0gKyBUWzFdXSwgbXk6IGUubXksIGF0OiBlLmF0LCB3aXRoaW46IHksIGVsZW06IGMgfSkgfSksIGUudXNpbmcgJiYgKGggPSBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IG0ubGVmdCAtIE0ubGVmdCwgcyA9IGkgKyBwIC0gdSwgbiA9IG0udG9wIC0gTS50b3AsIGEgPSBuICsgZyAtIGQsIGwgPSB7IHRhcmdldDogeyBlbGVtZW50OiBiLCBsZWZ0OiBtLmxlZnQsIHRvcDogbS50b3AsIHdpZHRoOiBwLCBoZWlnaHQ6IGcgfSwgZWxlbWVudDogeyBlbGVtZW50OiBjLCBsZWZ0OiBNLmxlZnQsIHRvcDogTS50b3AsIHdpZHRoOiB1LCBoZWlnaHQ6IGQgfSwgaG9yaXpvbnRhbDogMCA+IHMgPyAibGVmdCIgOiBpID4gMCA/ICJyaWdodCIgOiAiY2VudGVyIiwgdmVydGljYWw6IDAgPiBhID8gInRvcCIgOiBuID4gMCA/ICJib3R0b20iIDogIm1pZGRsZSIgfTsgdSA+IHAgJiYgcCA+IHIoaSArIHMpICYmIChsLmhvcml6b250YWwgPSAiY2VudGVyIiksIGQgPiBnICYmIGcgPiByKG4gKyBhKSAmJiAobC52ZXJ0aWNhbCA9ICJtaWRkbGUiKSwgbC5pbXBvcnRhbnQgPSBvKHIoaSksIHIocykpID4gbyhyKG4pLCByKGEpKSA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCIsIGUudXNpbmcuY2FsbCh0aGlzLCB0LCBsKSB9KSwgYy5vZmZzZXQodC5leHRlbmQoTSwgeyB1c2luZzogaCB9KSkgfSkgfSwgdC51aS5wb3NpdGlvbiA9IHsgZml0OiB7IGxlZnQ6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpLCBzID0gZS53aXRoaW4sIG4gPSBzLmlzV2luZG93ID8gcy5zY3JvbGxMZWZ0IDogcy5vZmZzZXQubGVmdCwgYSA9IHMud2lkdGgsIHIgPSB0LmxlZnQgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsIGwgPSBuIC0gciwgaCA9IHIgKyBlLmNvbGxpc2lvbldpZHRoIC0gYSAtIG47IGUuY29sbGlzaW9uV2lkdGggPiBhID8gbCA+IDAgJiYgMCA+PSBoID8gKGkgPSB0LmxlZnQgKyBsICsgZS5jb2xsaXNpb25XaWR0aCAtIGEgLSBuLCB0LmxlZnQgKz0gbCAtIGkpIDogdC5sZWZ0ID0gaCA+IDAgJiYgMCA+PSBsID8gbiA6IGwgPiBoID8gbiArIGEgLSBlLmNvbGxpc2lvbldpZHRoIDogbiA6IGwgPiAwID8gdC5sZWZ0ICs9IGwgOiBoID4gMCA/IHQubGVmdCAtPSBoIDogdC5sZWZ0ID0gbyh0LmxlZnQgLSByLCB0LmxlZnQpIH0sIHRvcDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGksIHMgPSBlLndpdGhpbiwgbiA9IHMuaXNXaW5kb3cgPyBzLnNjcm9sbFRvcCA6IHMub2Zmc2V0LnRvcCwgYSA9IGUud2l0aGluLmhlaWdodCwgciA9IHQudG9wIC0gZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsIGwgPSBuIC0gciwgaCA9IHIgKyBlLmNvbGxpc2lvbkhlaWdodCAtIGEgLSBuOyBlLmNvbGxpc2lvbkhlaWdodCA+IGEgPyBsID4gMCAmJiAwID49IGggPyAoaSA9IHQudG9wICsgbCArIGUuY29sbGlzaW9uSGVpZ2h0IC0gYSAtIG4sIHQudG9wICs9IGwgLSBpKSA6IHQudG9wID0gaCA+IDAgJiYgMCA+PSBsID8gbiA6IGwgPiBoID8gbiArIGEgLSBlLmNvbGxpc2lvbkhlaWdodCA6IG4gOiBsID4gMCA/IHQudG9wICs9IGwgOiBoID4gMCA/IHQudG9wIC09IGggOiB0LnRvcCA9IG8odC50b3AgLSByLCB0LnRvcCkgfSB9LCBmbGlwOiB7IGxlZnQ6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpLCBzLCBuID0gZS53aXRoaW4sIGEgPSBuLm9mZnNldC5sZWZ0ICsgbi5zY3JvbGxMZWZ0LCBvID0gbi53aWR0aCwgbCA9IG4uaXNXaW5kb3cgPyBuLnNjcm9sbExlZnQgOiBuLm9mZnNldC5sZWZ0LCBoID0gdC5sZWZ0IC0gZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LCBjID0gaCAtIGwsIHUgPSBoICsgZS5jb2xsaXNpb25XaWR0aCAtIG8gLSBsLCBkID0gImxlZnQiID09PSBlLm15WzBdID8gLWUuZWxlbVdpZHRoIDogInJpZ2h0IiA9PT0gZS5teVswXSA/IGUuZWxlbVdpZHRoIDogMCwgcCA9ICJsZWZ0IiA9PT0gZS5hdFswXSA/IGUudGFyZ2V0V2lkdGggOiAicmlnaHQiID09PSBlLmF0WzBdID8gLWUudGFyZ2V0V2lkdGggOiAwLCBmID0gLTIgKiBlLm9mZnNldFswXTsgMCA+IGMgPyAoaSA9IHQubGVmdCArIGQgKyBwICsgZiArIGUuY29sbGlzaW9uV2lkdGggLSBvIC0gYSwgKDAgPiBpIHx8IHIoYykgPiBpKSAmJiAodC5sZWZ0ICs9IGQgKyBwICsgZikpIDogdSA+IDAgJiYgKHMgPSB0LmxlZnQgLSBlLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQgKyBkICsgcCArIGYgLSBsLCAocyA+IDAgfHwgdSA+IHIocykpICYmICh0LmxlZnQgKz0gZCArIHAgKyBmKSkgfSwgdG9wOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSwgcywgbiA9IGUud2l0aGluLCBhID0gbi5vZmZzZXQudG9wICsgbi5zY3JvbGxUb3AsIG8gPSBuLmhlaWdodCwgbCA9IG4uaXNXaW5kb3cgPyBuLnNjcm9sbFRvcCA6IG4ub2Zmc2V0LnRvcCwgaCA9IHQudG9wIC0gZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsIGMgPSBoIC0gbCwgdSA9IGggKyBlLmNvbGxpc2lvbkhlaWdodCAtIG8gLSBsLCBkID0gInRvcCIgPT09IGUubXlbMV0sIHAgPSBkID8gLWUuZWxlbUhlaWdodCA6ICJib3R0b20iID09PSBlLm15WzFdID8gZS5lbGVtSGVpZ2h0IDogMCwgZiA9ICJ0b3AiID09PSBlLmF0WzFdID8gZS50YXJnZXRIZWlnaHQgOiAiYm90dG9tIiA9PT0gZS5hdFsxXSA/IC1lLnRhcmdldEhlaWdodCA6IDAsIGcgPSAtMiAqIGUub2Zmc2V0WzFdOyAwID4gYyA/IChzID0gdC50b3AgKyBwICsgZiArIGcgKyBlLmNvbGxpc2lvbkhlaWdodCAtIG8gLSBhLCB0LnRvcCArIHAgKyBmICsgZyA+IGMgJiYgKDAgPiBzIHx8IHIoYykgPiBzKSAmJiAodC50b3AgKz0gcCArIGYgKyBnKSkgOiB1ID4gMCAmJiAoaSA9IHQudG9wIC0gZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AgKyBwICsgZiArIGcgLSBsLCB0LnRvcCArIHAgKyBmICsgZyA+IHUgJiYgKGkgPiAwIHx8IHUgPiByKGkpKSAmJiAodC50b3AgKz0gcCArIGYgKyBnKSkgfSB9LCBmbGlwZml0OiB7IGxlZnQ6IGZ1bmN0aW9uICgpIHsgdC51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdC51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0sIHRvcDogZnVuY3Rpb24gKCkgeyB0LnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHQudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0gfSB9LCBmdW5jdGlvbiAoKSB7IHZhciBlLCBpLCBzLCBuLCBhLCBvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSwgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOyBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvID8gImRpdiIgOiAiYm9keSIpLCBzID0geyB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgd2lkdGg6IDAsIGhlaWdodDogMCwgYm9yZGVyOiAwLCBtYXJnaW46IDAsIGJhY2tncm91bmQ6ICJub25lIiB9LCBvICYmIHQuZXh0ZW5kKHMsIHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIGxlZnQ6ICItMTAwMHB4IiwgdG9wOiAiLTEwMDBweCIgfSk7IGZvciAoYSBpbiBzKSBlLnN0eWxlW2FdID0gc1thXTsgZS5hcHBlbmRDaGlsZChyKSwgaSA9IG8gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBpLmluc2VydEJlZm9yZShlLCBpLmZpcnN0Q2hpbGQpLCByLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMC43NDMyMjIycHg7IiwgbiA9IHQocikub2Zmc2V0KCkubGVmdCwgdC5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucyA9IG4gPiAxMCAmJiAxMSA+IG4sIGUuaW5uZXJIVE1MID0gIiIsIGkucmVtb3ZlQ2hpbGQoZSkgfSgpIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IDAsIGkgPSB7fSwgYSA9IHt9OyBpLmhlaWdodCA9IGkucGFkZGluZ1RvcCA9IGkucGFkZGluZ0JvdHRvbSA9IGkuYm9yZGVyVG9wV2lkdGggPSBpLmJvcmRlckJvdHRvbVdpZHRoID0gImhpZGUiLCBhLmhlaWdodCA9IGEucGFkZGluZ1RvcCA9IGEucGFkZGluZ0JvdHRvbSA9IGEuYm9yZGVyVG9wV2lkdGggPSBhLmJvcmRlckJvdHRvbVdpZHRoID0gInNob3ciLCBlLndpZGdldCgidWkuYWNjb3JkaW9uIiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBhY3RpdmU6IDAsIGFuaW1hdGU6IHt9LCBjb2xsYXBzaWJsZTogITEsIGV2ZW50OiAiY2xpY2siLCBoZWFkZXI6ICI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsIGhlaWdodFN0eWxlOiAiYXV0byIsIGljb25zOiB7IGFjdGl2ZUhlYWRlcjogInVpLWljb24tdHJpYW5nbGUtMS1zIiwgaGVhZGVyOiAidWktaWNvbi10cmlhbmdsZS0xLWUiIH0sIGFjdGl2YXRlOiBudWxsLCBiZWZvcmVBY3RpdmF0ZTogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zOyB0aGlzLnByZXZTaG93ID0gdGhpcy5wcmV2SGlkZSA9IGUoKSwgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLmF0dHIoInJvbGUiLCAidGFibGlzdCIpLCB0LmNvbGxhcHNpYmxlIHx8IHQuYWN0aXZlICE9PSAhMSAmJiBudWxsICE9IHQuYWN0aXZlIHx8ICh0LmFjdGl2ZSA9IDApLCB0aGlzLl9wcm9jZXNzUGFuZWxzKCksIDAgPiB0LmFjdGl2ZSAmJiAodC5hY3RpdmUgKz0gdGhpcy5oZWFkZXJzLmxlbmd0aCksIHRoaXMuX3JlZnJlc2goKSB9LCBfZ2V0Q3JlYXRlRXZlbnREYXRhOiBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGhlYWRlcjogdGhpcy5hY3RpdmUsIHBhbmVsOiB0aGlzLmFjdGl2ZS5sZW5ndGggPyB0aGlzLmFjdGl2ZS5uZXh0KCkgOiBlKCksIGNvbnRlbnQ6IHRoaXMuYWN0aXZlLmxlbmd0aCA/IHRoaXMuYWN0aXZlLm5leHQoKSA6IGUoKSB9IH0sIF9jcmVhdGVJY29uczogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9ucy5pY29uczsgdCAmJiAoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIgKyB0LmhlYWRlcikucHJlcGVuZFRvKHRoaXMuaGVhZGVycyksIHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSwgdGhpcy5oZWFkZXJzLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSkgfSwgX2Rlc3Ryb3lJY29uczogZnVuY3Rpb24gKCkgeyB0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlKCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdmFyIGU7IHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXQiKS5yZW1vdmVBdHRyKCJyb2xlIiksIHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikuZWFjaChmdW5jdGlvbiAoKSB7IC9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpICYmIHRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpIH0pLCB0aGlzLl9kZXN0cm95SWNvbnMoKSwgZSA9IHRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKCJkaXNwbGF5IiwgIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS1hY2NvcmRpb24tY29udGVudCB1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsgL151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkgJiYgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImlkIikgfSksICJjb250ZW50IiAhPT0gdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlICYmIGUuY3NzKCJoZWlnaHQiLCAiIikgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuICJhY3RpdmUiID09PSBlID8gKHRoaXMuX2FjdGl2YXRlKHQpLCB1bmRlZmluZWQpIDogKCJldmVudCIgPT09IGUgJiYgKHRoaXMub3B0aW9ucy5ldmVudCAmJiB0aGlzLl9vZmYodGhpcy5oZWFkZXJzLCB0aGlzLm9wdGlvbnMuZXZlbnQpLCB0aGlzLl9zZXR1cEV2ZW50cyh0KSksIHRoaXMuX3N1cGVyKGUsIHQpLCAiY29sbGFwc2libGUiICE9PSBlIHx8IHQgfHwgdGhpcy5vcHRpb25zLmFjdGl2ZSAhPT0gITEgfHwgdGhpcy5fYWN0aXZhdGUoMCksICJpY29ucyIgPT09IGUgJiYgKHRoaXMuX2Rlc3Ryb3lJY29ucygpLCB0ICYmIHRoaXMuX2NyZWF0ZUljb25zKCkpLCAiZGlzYWJsZWQiID09PSBlICYmIHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwgISF0KSwgdW5kZWZpbmVkKSB9LCBfa2V5ZG93bjogZnVuY3Rpb24gKHQpIHsgaWYgKCF0LmFsdEtleSAmJiAhdC5jdHJsS2V5KSB7IHZhciBpID0gZS51aS5rZXlDb2RlLCBhID0gdGhpcy5oZWFkZXJzLmxlbmd0aCwgcyA9IHRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksIG4gPSAhMTsgc3dpdGNoICh0LmtleUNvZGUpIHsgY2FzZSBpLlJJR0hUOiBjYXNlIGkuRE9XTjogbiA9IHRoaXMuaGVhZGVyc1socyArIDEpICUgYV07IGJyZWFrOyBjYXNlIGkuTEVGVDogY2FzZSBpLlVQOiBuID0gdGhpcy5oZWFkZXJzWyhzIC0gMSArIGEpICUgYV07IGJyZWFrOyBjYXNlIGkuU1BBQ0U6IGNhc2UgaS5FTlRFUjogdGhpcy5fZXZlbnRIYW5kbGVyKHQpOyBicmVhazsgY2FzZSBpLkhPTUU6IG4gPSB0aGlzLmhlYWRlcnNbMF07IGJyZWFrOyBjYXNlIGkuRU5EOiBuID0gdGhpcy5oZWFkZXJzW2EgLSAxXSB9IG4gJiYgKGUodC50YXJnZXQpLmF0dHIoInRhYkluZGV4IiwgLTEpLCBlKG4pLmF0dHIoInRhYkluZGV4IiwgMCksIG4uZm9jdXMoKSwgdC5wcmV2ZW50RGVmYXVsdCgpKSB9IH0sIF9wYW5lbEtleURvd246IGZ1bmN0aW9uICh0KSB7IHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLlVQICYmIHQuY3RybEtleSAmJiBlKHQuY3VycmVudFRhcmdldCkucHJldigpLmZvY3VzKCkgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9uczsgdGhpcy5fcHJvY2Vzc1BhbmVscygpLCB0LmFjdGl2ZSA9PT0gITEgJiYgdC5jb2xsYXBzaWJsZSA9PT0gITAgfHwgIXRoaXMuaGVhZGVycy5sZW5ndGggPyAodC5hY3RpdmUgPSAhMSwgdGhpcy5hY3RpdmUgPSBlKCkpIDogdC5hY3RpdmUgPT09ICExID8gdGhpcy5fYWN0aXZhdGUoMCkgOiB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLCB0aGlzLmFjdGl2ZVswXSkgPyB0aGlzLmhlYWRlcnMubGVuZ3RoID09PSB0aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoID8gKHQuYWN0aXZlID0gITEsIHRoaXMuYWN0aXZlID0gZSgpKSA6IHRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsIHQuYWN0aXZlIC0gMSkpIDogdC5hY3RpdmUgPSB0aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmUpLCB0aGlzLl9kZXN0cm95SWNvbnMoKSwgdGhpcy5fcmVmcmVzaCgpIH0sIF9wcm9jZXNzUGFuZWxzOiBmdW5jdGlvbiAoKSB7IHRoaXMuaGVhZGVycyA9IHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oZWFkZXIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWhlbHBlci1yZXNldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSwgdGhpcy5oZWFkZXJzLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQgdWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5maWx0ZXIoIjpub3QoLnVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSkiKS5oaWRlKCkgfSwgX3JlZnJlc2g6IGZ1bmN0aW9uICgpIHsgdmFyIGksIGEgPSB0aGlzLm9wdGlvbnMsIHMgPSBhLmhlaWdodFN0eWxlLCBuID0gdGhpcy5lbGVtZW50LnBhcmVudCgpLCByID0gdGhpcy5hY2NvcmRpb25JZCA9ICJ1aS1hY2NvcmRpb24tIiArICh0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSB8fCArK3QpOyB0aGlzLmFjdGl2ZSA9IHRoaXMuX2ZpbmRBY3RpdmUoYS5hY3RpdmUpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksIHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLCB0aGlzLmhlYWRlcnMuYXR0cigicm9sZSIsICJ0YWIiKS5lYWNoKGZ1bmN0aW9uICh0KSB7IHZhciBpID0gZSh0aGlzKSwgYSA9IGkuYXR0cigiaWQiKSwgcyA9IGkubmV4dCgpLCBuID0gcy5hdHRyKCJpZCIpOyBhIHx8IChhID0gciArICItaGVhZGVyLSIgKyB0LCBpLmF0dHIoImlkIiwgYSkpLCBuIHx8IChuID0gciArICItcGFuZWwtIiArIHQsIHMuYXR0cigiaWQiLCBuKSksIGkuYXR0cigiYXJpYS1jb250cm9scyIsIG4pLCBzLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsIGEpIH0pLm5leHQoKS5hdHRyKCJyb2xlIiwgInRhYnBhbmVsIiksIHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyAiYXJpYS1zZWxlY3RlZCI6ICJmYWxzZSIsICJhcmlhLWV4cGFuZGVkIjogImZhbHNlIiwgdGFiSW5kZXg6IC0xIH0pLm5leHQoKS5hdHRyKHsgImFyaWEtaGlkZGVuIjogInRydWUiIH0pLmhpZGUoKSwgdGhpcy5hY3RpdmUubGVuZ3RoID8gdGhpcy5hY3RpdmUuYXR0cih7ICJhcmlhLXNlbGVjdGVkIjogInRydWUiLCAiYXJpYS1leHBhbmRlZCI6ICJ0cnVlIiwgdGFiSW5kZXg6IDAgfSkubmV4dCgpLmF0dHIoeyAiYXJpYS1oaWRkZW4iOiAiZmFsc2UiIH0pIDogdGhpcy5oZWFkZXJzLmVxKDApLmF0dHIoInRhYkluZGV4IiwgMCksIHRoaXMuX2NyZWF0ZUljb25zKCksIHRoaXMuX3NldHVwRXZlbnRzKGEuZXZlbnQpLCAiZmlsbCIgPT09IHMgPyAoaSA9IG4uaGVpZ2h0KCksIHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBlKHRoaXMpLCBhID0gdC5jc3MoInBvc2l0aW9uIik7ICJhYnNvbHV0ZSIgIT09IGEgJiYgImZpeGVkIiAhPT0gYSAmJiAoaSAtPSB0Lm91dGVySGVpZ2h0KCEwKSkgfSksIHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uICgpIHsgaSAtPSBlKHRoaXMpLm91dGVySGVpZ2h0KCEwKSB9KSwgdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uICgpIHsgZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCwgaSAtIGUodGhpcykuaW5uZXJIZWlnaHQoKSArIGUodGhpcykuaGVpZ2h0KCkpKSB9KS5jc3MoIm92ZXJmbG93IiwgImF1dG8iKSkgOiAiYXV0byIgPT09IHMgJiYgKGkgPSAwLCB0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24gKCkgeyBpID0gTWF0aC5tYXgoaSwgZSh0aGlzKS5jc3MoImhlaWdodCIsICIiKS5oZWlnaHQoKSkgfSkuaGVpZ2h0KGkpKSB9LCBfYWN0aXZhdGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gdGhpcy5fZmluZEFjdGl2ZSh0KVswXTsgaSAhPT0gdGhpcy5hY3RpdmVbMF0gJiYgKGkgPSBpIHx8IHRoaXMuYWN0aXZlWzBdLCB0aGlzLl9ldmVudEhhbmRsZXIoeyB0YXJnZXQ6IGksIGN1cnJlbnRUYXJnZXQ6IGksIHByZXZlbnREZWZhdWx0OiBlLm5vb3AgfSkpIH0sIF9maW5kQWN0aXZlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gIm51bWJlciIgPT0gdHlwZW9mIHQgPyB0aGlzLmhlYWRlcnMuZXEodCkgOiBlKCkgfSwgX3NldHVwRXZlbnRzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHsga2V5ZG93bjogIl9rZXlkb3duIiB9OyB0ICYmIGUuZWFjaCh0LnNwbGl0KCIgIiksIGZ1bmN0aW9uIChlLCB0KSB7IGlbdF0gPSAiX2V2ZW50SGFuZGxlciIgfSksIHRoaXMuX29mZih0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpKSwgdGhpcy5fb24odGhpcy5oZWFkZXJzLCBpKSwgdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSwgeyBrZXlkb3duOiAiX3BhbmVsS2V5RG93biIgfSksIHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhlYWRlcnMpLCB0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKSB9LCBfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgYSA9IHRoaXMuYWN0aXZlLCBzID0gZSh0LmN1cnJlbnRUYXJnZXQpLCBuID0gc1swXSA9PT0gYVswXSwgciA9IG4gJiYgaS5jb2xsYXBzaWJsZSwgbyA9IHIgPyBlKCkgOiBzLm5leHQoKSwgaCA9IGEubmV4dCgpLCBkID0geyBvbGRIZWFkZXI6IGEsIG9sZFBhbmVsOiBoLCBuZXdIZWFkZXI6IHIgPyBlKCkgOiBzLCBuZXdQYW5lbDogbyB9OyB0LnByZXZlbnREZWZhdWx0KCksIG4gJiYgIWkuY29sbGFwc2libGUgfHwgdGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLCB0LCBkKSA9PT0gITEgfHwgKGkuYWN0aXZlID0gciA/ICExIDogdGhpcy5oZWFkZXJzLmluZGV4KHMpLCB0aGlzLmFjdGl2ZSA9IG4gPyBlKCkgOiBzLCB0aGlzLl90b2dnbGUoZCksIGEucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLCBpLmljb25zICYmIGEuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5oZWFkZXIpLCBuIHx8IChzLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIiksIGkuaWNvbnMgJiYgcy5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuaGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlciksIHMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSkpIH0sIF90b2dnbGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gdC5uZXdQYW5lbCwgYSA9IHRoaXMucHJldlNob3cubGVuZ3RoID8gdGhpcy5wcmV2U2hvdyA6IHQub2xkUGFuZWw7IHRoaXMucHJldlNob3cuYWRkKHRoaXMucHJldkhpZGUpLnN0b3AoITAsICEwKSwgdGhpcy5wcmV2U2hvdyA9IGksIHRoaXMucHJldkhpZGUgPSBhLCB0aGlzLm9wdGlvbnMuYW5pbWF0ZSA/IHRoaXMuX2FuaW1hdGUoaSwgYSwgdCkgOiAoYS5oaWRlKCksIGkuc2hvdygpLCB0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSksIGEuYXR0cih7ICJhcmlhLWhpZGRlbiI6ICJ0cnVlIiB9KSwgYS5wcmV2KCkuYXR0cigiYXJpYS1zZWxlY3RlZCIsICJmYWxzZSIpLCBpLmxlbmd0aCAmJiBhLmxlbmd0aCA/IGEucHJldigpLmF0dHIoeyB0YWJJbmRleDogLTEsICJhcmlhLWV4cGFuZGVkIjogImZhbHNlIiB9KSA6IGkubGVuZ3RoICYmIHRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gMCA9PT0gZSh0aGlzKS5hdHRyKCJ0YWJJbmRleCIpIH0pLmF0dHIoInRhYkluZGV4IiwgLTEpLCBpLmF0dHIoImFyaWEtaGlkZGVuIiwgImZhbHNlIikucHJldigpLmF0dHIoeyAiYXJpYS1zZWxlY3RlZCI6ICJ0cnVlIiwgdGFiSW5kZXg6IDAsICJhcmlhLWV4cGFuZGVkIjogInRydWUiIH0pIH0sIF9hbmltYXRlOiBmdW5jdGlvbiAoZSwgdCwgcykgeyB2YXIgbiwgciwgbywgaCA9IHRoaXMsIGQgPSAwLCBjID0gZS5sZW5ndGggJiYgKCF0Lmxlbmd0aCB8fCBlLmluZGV4KCkgPCB0LmluZGV4KCkpLCBsID0gdGhpcy5vcHRpb25zLmFuaW1hdGUgfHwge30sIHUgPSBjICYmIGwuZG93biB8fCBsLCB2ID0gZnVuY3Rpb24gKCkgeyBoLl90b2dnbGVDb21wbGV0ZShzKSB9OyByZXR1cm4gIm51bWJlciIgPT0gdHlwZW9mIHUgJiYgKG8gPSB1KSwgInN0cmluZyIgPT0gdHlwZW9mIHUgJiYgKHIgPSB1KSwgciA9IHIgfHwgdS5lYXNpbmcgfHwgbC5lYXNpbmcsIG8gPSBvIHx8IHUuZHVyYXRpb24gfHwgbC5kdXJhdGlvbiwgdC5sZW5ndGggPyBlLmxlbmd0aCA/IChuID0gZS5zaG93KCkub3V0ZXJIZWlnaHQoKSwgdC5hbmltYXRlKGksIHsgZHVyYXRpb246IG8sIGVhc2luZzogciwgc3RlcDogZnVuY3Rpb24gKGUsIHQpIHsgdC5ub3cgPSBNYXRoLnJvdW5kKGUpIH0gfSksIGUuaGlkZSgpLmFuaW1hdGUoYSwgeyBkdXJhdGlvbjogbywgZWFzaW5nOiByLCBjb21wbGV0ZTogdiwgc3RlcDogZnVuY3Rpb24gKGUsIGkpIHsgaS5ub3cgPSBNYXRoLnJvdW5kKGUpLCAiaGVpZ2h0IiAhPT0gaS5wcm9wID8gZCArPSBpLm5vdyA6ICJjb250ZW50IiAhPT0gaC5vcHRpb25zLmhlaWdodFN0eWxlICYmIChpLm5vdyA9IE1hdGgucm91bmQobiAtIHQub3V0ZXJIZWlnaHQoKSAtIGQpLCBkID0gMCkgfSB9KSwgdW5kZWZpbmVkKSA6IHQuYW5pbWF0ZShpLCBvLCByLCB2KSA6IGUuYW5pbWF0ZShhLCBvLCByLCB2KSB9LCBfdG9nZ2xlQ29tcGxldGU6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5vbGRQYW5lbDsgdC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikucHJldigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItdG9wIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKSwgdC5sZW5ndGggJiYgKHQucGFyZW50KClbMF0uY2xhc3NOYW1lID0gdC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLCB0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsIG51bGwsIGUpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlKSB7IGUud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWZhdWx0RWxlbWVudDogIjxpbnB1dD4iLCBvcHRpb25zOiB7IGFwcGVuZFRvOiBudWxsLCBhdXRvRm9jdXM6ICExLCBkZWxheTogMzAwLCBtaW5MZW5ndGg6IDEsIHBvc2l0aW9uOiB7IG15OiAibGVmdCB0b3AiLCBhdDogImxlZnQgYm90dG9tIiwgY29sbGlzaW9uOiAibm9uZSIgfSwgc291cmNlOiBudWxsLCBjaGFuZ2U6IG51bGwsIGNsb3NlOiBudWxsLCBmb2N1czogbnVsbCwgb3BlbjogbnVsbCwgcmVzcG9uc2U6IG51bGwsIHNlYXJjaDogbnVsbCwgc2VsZWN0OiBudWxsIH0sIHJlcXVlc3RJbmRleDogMCwgcGVuZGluZzogMCwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB2YXIgdCwgaSwgcywgbiA9IHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBhID0gInRleHRhcmVhIiA9PT0gbiwgbyA9ICJpbnB1dCIgPT09IG47IHRoaXMuaXNNdWx0aUxpbmUgPSBhID8gITAgOiBvID8gITEgOiB0aGlzLmVsZW1lbnQucHJvcCgiaXNDb250ZW50RWRpdGFibGUiKSwgdGhpcy52YWx1ZU1ldGhvZCA9IHRoaXMuZWxlbWVudFthIHx8IG8gPyAidmFsIiA6ICJ0ZXh0Il0sIHRoaXMuaXNOZXdNZW51ID0gITAsIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwgIm9mZiIpLCB0aGlzLl9vbih0aGlzLmVsZW1lbnQsIHsga2V5ZG93bjogZnVuY3Rpb24gKG4pIHsgaWYgKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKSByZXR1cm4gdCA9ICEwLCBzID0gITAsIGkgPSAhMCwgdW5kZWZpbmVkOyB0ID0gITEsIHMgPSAhMSwgaSA9ICExOyB2YXIgYSA9IGUudWkua2V5Q29kZTsgc3dpdGNoIChuLmtleUNvZGUpIHsgY2FzZSBhLlBBR0VfVVA6IHQgPSAhMCwgdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIiwgbik7IGJyZWFrOyBjYXNlIGEuUEFHRV9ET1dOOiB0ID0gITAsIHRoaXMuX21vdmUoIm5leHRQYWdlIiwgbik7IGJyZWFrOyBjYXNlIGEuVVA6IHQgPSAhMCwgdGhpcy5fa2V5RXZlbnQoInByZXZpb3VzIiwgbik7IGJyZWFrOyBjYXNlIGEuRE9XTjogdCA9ICEwLCB0aGlzLl9rZXlFdmVudCgibmV4dCIsIG4pOyBicmVhazsgY2FzZSBhLkVOVEVSOiBjYXNlIGEuTlVNUEFEX0VOVEVSOiB0aGlzLm1lbnUuYWN0aXZlICYmICh0ID0gITAsIG4ucHJldmVudERlZmF1bHQoKSwgdGhpcy5tZW51LnNlbGVjdChuKSk7IGJyZWFrOyBjYXNlIGEuVEFCOiB0aGlzLm1lbnUuYWN0aXZlICYmIHRoaXMubWVudS5zZWxlY3Qobik7IGJyZWFrOyBjYXNlIGEuRVNDQVBFOiB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSAmJiAodGhpcy5fdmFsdWUodGhpcy50ZXJtKSwgdGhpcy5jbG9zZShuKSwgbi5wcmV2ZW50RGVmYXVsdCgpKTsgYnJlYWs7IGRlZmF1bHQ6IGkgPSAhMCwgdGhpcy5fc2VhcmNoVGltZW91dChuKSB9IH0sIGtleXByZXNzOiBmdW5jdGlvbiAocykgeyBpZiAodCkgcmV0dXJuIHQgPSAhMSwgKCF0aGlzLmlzTXVsdGlMaW5lIHx8IHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSAmJiBzLnByZXZlbnREZWZhdWx0KCksIHVuZGVmaW5lZDsgaWYgKCFpKSB7IHZhciBuID0gZS51aS5rZXlDb2RlOyBzd2l0Y2ggKHMua2V5Q29kZSkgeyBjYXNlIG4uUEFHRV9VUDogdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIiwgcyk7IGJyZWFrOyBjYXNlIG4uUEFHRV9ET1dOOiB0aGlzLl9tb3ZlKCJuZXh0UGFnZSIsIHMpOyBicmVhazsgY2FzZSBuLlVQOiB0aGlzLl9rZXlFdmVudCgicHJldmlvdXMiLCBzKTsgYnJlYWs7IGNhc2Ugbi5ET1dOOiB0aGlzLl9rZXlFdmVudCgibmV4dCIsIHMpIH0gfSB9LCBpbnB1dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHMgPyAocyA9ICExLCBlLnByZXZlbnREZWZhdWx0KCksIHVuZGVmaW5lZCkgOiAodGhpcy5fc2VhcmNoVGltZW91dChlKSwgdW5kZWZpbmVkKSB9LCBmb2N1czogZnVuY3Rpb24gKCkgeyB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGwsIHRoaXMucHJldmlvdXMgPSB0aGlzLl92YWx1ZSgpIH0sIGJsdXI6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLmNhbmNlbEJsdXIgPyAoZGVsZXRlIHRoaXMuY2FuY2VsQmx1ciwgdW5kZWZpbmVkKSA6IChjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLCB0aGlzLmNsb3NlKGUpLCB0aGlzLl9jaGFuZ2UoZSksIHVuZGVmaW5lZCkgfSB9KSwgdGhpcy5faW5pdFNvdXJjZSgpLCB0aGlzLm1lbnUgPSBlKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoeyByb2xlOiBudWxsIH0pLmhpZGUoKS5kYXRhKCJ1aS1tZW51IiksIHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LCB7IG1vdXNlZG93bjogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmNhbmNlbEJsdXIgPSAhMCwgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyBkZWxldGUgdGhpcy5jYW5jZWxCbHVyIH0pOyB2YXIgaSA9IHRoaXMubWVudS5lbGVtZW50WzBdOyBlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RoIHx8IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzOyB0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vkb3duIiwgZnVuY3Rpb24gKHMpIHsgcy50YXJnZXQgPT09IHQuZWxlbWVudFswXSB8fCBzLnRhcmdldCA9PT0gaSB8fCBlLmNvbnRhaW5zKGksIHMudGFyZ2V0KSB8fCB0LmNsb3NlKCkgfSkgfSkgfSwgbWVudWZvY3VzOiBmdW5jdGlvbiAodCwgaSkgeyBpZiAodGhpcy5pc05ld01lbnUgJiYgKHRoaXMuaXNOZXdNZW51ID0gITEsIHQub3JpZ2luYWxFdmVudCAmJiAvXm1vdXNlLy50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKSkpIHJldHVybiB0aGlzLm1lbnUuYmx1cigpLCB0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIiwgZnVuY3Rpb24gKCkgeyBlKHQudGFyZ2V0KS50cmlnZ2VyKHQub3JpZ2luYWxFdmVudCkgfSksIHVuZGVmaW5lZDsgdmFyIHMgPSBpLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKTsgITEgIT09IHRoaXMuX3RyaWdnZXIoImZvY3VzIiwgdCwgeyBpdGVtOiBzIH0pID8gdC5vcmlnaW5hbEV2ZW50ICYmIC9ea2V5Ly50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKSAmJiB0aGlzLl92YWx1ZShzLnZhbHVlKSA6IHRoaXMubGl2ZVJlZ2lvbi50ZXh0KHMudmFsdWUpIH0sIG1lbnVzZWxlY3Q6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpID0gdC5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiksIHMgPSB0aGlzLnByZXZpb3VzOyB0aGlzLmVsZW1lbnRbMF0gIT09IHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCAmJiAodGhpcy5lbGVtZW50LmZvY3VzKCksIHRoaXMucHJldmlvdXMgPSBzLCB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMucHJldmlvdXMgPSBzLCB0aGlzLnNlbGVjdGVkSXRlbSA9IGkgfSkpLCAhMSAhPT0gdGhpcy5fdHJpZ2dlcigic2VsZWN0IiwgZSwgeyBpdGVtOiBpIH0pICYmIHRoaXMuX3ZhbHVlKGkudmFsdWUpLCB0aGlzLnRlcm0gPSB0aGlzLl92YWx1ZSgpLCB0aGlzLmNsb3NlKGUpLCB0aGlzLnNlbGVjdGVkSXRlbSA9IGkgfSB9KSwgdGhpcy5saXZlUmVnaW9uID0gZSgiPHNwYW4+IiwgeyByb2xlOiAic3RhdHVzIiwgImFyaWEtbGl2ZSI6ICJwb2xpdGUiIH0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50KSwgdGhpcy5fb24odGhpcy53aW5kb3csIHsgYmVmb3JldW5sb2FkOiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSB9IH0pIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIiksIHRoaXMubWVudS5lbGVtZW50LnJlbW92ZSgpLCB0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCkgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIHQpIHsgdGhpcy5fc3VwZXIoZSwgdCksICJzb3VyY2UiID09PSBlICYmIHRoaXMuX2luaXRTb3VyY2UoKSwgImFwcGVuZFRvIiA9PT0gZSAmJiB0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwgImRpc2FibGVkIiA9PT0gZSAmJiB0ICYmIHRoaXMueGhyICYmIHRoaXMueGhyLmFib3J0KCkgfSwgX2FwcGVuZFRvOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zLmFwcGVuZFRvOyByZXR1cm4gdCAmJiAodCA9IHQuanF1ZXJ5IHx8IHQubm9kZVR5cGUgPyBlKHQpIDogdGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSwgdCB8fCAodCA9IHRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksIHQubGVuZ3RoIHx8ICh0ID0gdGhpcy5kb2N1bWVudFswXS5ib2R5KSwgdCB9LCBfaW5pdFNvdXJjZTogZnVuY3Rpb24gKCkgeyB2YXIgdCwgaSwgcyA9IHRoaXM7IGUuaXNBcnJheSh0aGlzLm9wdGlvbnMuc291cmNlKSA/ICh0ID0gdGhpcy5vcHRpb25zLnNvdXJjZSwgdGhpcy5zb3VyY2UgPSBmdW5jdGlvbiAoaSwgcykgeyBzKGUudWkuYXV0b2NvbXBsZXRlLmZpbHRlcih0LCBpLnRlcm0pKSB9KSA6ICJzdHJpbmciID09IHR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlID8gKGkgPSB0aGlzLm9wdGlvbnMuc291cmNlLCB0aGlzLnNvdXJjZSA9IGZ1bmN0aW9uICh0LCBuKSB7IHMueGhyICYmIHMueGhyLmFib3J0KCksIHMueGhyID0gZS5hamF4KHsgdXJsOiBpLCBkYXRhOiB0LCBkYXRhVHlwZTogImpzb24iLCBzdWNjZXNzOiBmdW5jdGlvbiAoZSkgeyBuKGUpIH0sIGVycm9yOiBmdW5jdGlvbiAoKSB7IG4oW10pIH0gfSkgfSkgOiB0aGlzLnNvdXJjZSA9IHRoaXMub3B0aW9ucy5zb3VyY2UgfSwgX3NlYXJjaFRpbWVvdXQ6IGZ1bmN0aW9uIChlKSB7IGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksIHRoaXMuc2VhcmNoaW5nID0gdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLnRlcm0gIT09IHRoaXMuX3ZhbHVlKCkgJiYgKHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbCwgdGhpcy5zZWFyY2gobnVsbCwgZSkpIH0sIHRoaXMub3B0aW9ucy5kZWxheSkgfSwgc2VhcmNoOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gZSA9IG51bGwgIT0gZSA/IGUgOiB0aGlzLl92YWx1ZSgpLCB0aGlzLnRlcm0gPSB0aGlzLl92YWx1ZSgpLCBlLmxlbmd0aCA8IHRoaXMub3B0aW9ucy5taW5MZW5ndGggPyB0aGlzLmNsb3NlKHQpIDogdGhpcy5fdHJpZ2dlcigic2VhcmNoIiwgdCkgIT09ICExID8gdGhpcy5fc2VhcmNoKGUpIDogdW5kZWZpbmVkIH0sIF9zZWFyY2g6IGZ1bmN0aW9uIChlKSB7IHRoaXMucGVuZGluZysrLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksIHRoaXMuY2FuY2VsU2VhcmNoID0gITEsIHRoaXMuc291cmNlKHsgdGVybTogZSB9LCB0aGlzLl9yZXNwb25zZSgpKSB9LCBfcmVzcG9uc2U6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSArK3RoaXMucmVxdWVzdEluZGV4OyByZXR1cm4gZS5wcm94eShmdW5jdGlvbiAoZSkgeyB0ID09PSB0aGlzLnJlcXVlc3RJbmRleCAmJiB0aGlzLl9fcmVzcG9uc2UoZSksIHRoaXMucGVuZGluZy0tLCB0aGlzLnBlbmRpbmcgfHwgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpIH0sIHRoaXMpIH0sIF9fcmVzcG9uc2U6IGZ1bmN0aW9uIChlKSB7IGUgJiYgKGUgPSB0aGlzLl9ub3JtYWxpemUoZSkpLCB0aGlzLl90cmlnZ2VyKCJyZXNwb25zZSIsIG51bGwsIHsgY29udGVudDogZSB9KSwgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiBlICYmIGUubGVuZ3RoICYmICF0aGlzLmNhbmNlbFNlYXJjaCA/ICh0aGlzLl9zdWdnZXN0KGUpLCB0aGlzLl90cmlnZ2VyKCJvcGVuIikpIDogdGhpcy5fY2xvc2UoKSB9LCBjbG9zZTogZnVuY3Rpb24gKGUpIHsgdGhpcy5jYW5jZWxTZWFyY2ggPSAhMCwgdGhpcy5fY2xvc2UoZSkgfSwgX2Nsb3NlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSAmJiAodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLCB0aGlzLm1lbnUuYmx1cigpLCB0aGlzLmlzTmV3TWVudSA9ICEwLCB0aGlzLl90cmlnZ2VyKCJjbG9zZSIsIGUpKSB9LCBfY2hhbmdlOiBmdW5jdGlvbiAoZSkgeyB0aGlzLnByZXZpb3VzICE9PSB0aGlzLl92YWx1ZSgpICYmIHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsIGUsIHsgaXRlbTogdGhpcy5zZWxlY3RlZEl0ZW0gfSkgfSwgX25vcm1hbGl6ZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQubGVuZ3RoICYmIHRbMF0ubGFiZWwgJiYgdFswXS52YWx1ZSA/IHQgOiBlLm1hcCh0LCBmdW5jdGlvbiAodCkgeyByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIHQgPyB7IGxhYmVsOiB0LCB2YWx1ZTogdCB9IDogZS5leHRlbmQoeyBsYWJlbDogdC5sYWJlbCB8fCB0LnZhbHVlLCB2YWx1ZTogdC52YWx1ZSB8fCB0LmxhYmVsIH0sIHQpIH0pIH0sIF9zdWdnZXN0OiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHRoaXMubWVudS5lbGVtZW50LmVtcHR5KCk7IHRoaXMuX3JlbmRlck1lbnUoaSwgdCksIHRoaXMuaXNOZXdNZW51ID0gITAsIHRoaXMubWVudS5yZWZyZXNoKCksIGkuc2hvdygpLCB0aGlzLl9yZXNpemVNZW51KCksIGkucG9zaXRpb24oZS5leHRlbmQoeyBvZjogdGhpcy5lbGVtZW50IH0sIHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLCB0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzICYmIHRoaXMubWVudS5uZXh0KCkgfSwgX3Jlc2l6ZU1lbnU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm1lbnUuZWxlbWVudDsgZS5vdXRlcldpZHRoKE1hdGgubWF4KGUud2lkdGgoIiIpLm91dGVyV2lkdGgoKSArIDEsIHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKSB9LCBfcmVuZGVyTWVudTogZnVuY3Rpb24gKHQsIGkpIHsgdmFyIHMgPSB0aGlzOyBlLmVhY2goaSwgZnVuY3Rpb24gKGUsIGkpIHsgcy5fcmVuZGVySXRlbURhdGEodCwgaSkgfSkgfSwgX3JlbmRlckl0ZW1EYXRhOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLCB0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsIHQpIH0sIF9yZW5kZXJJdGVtOiBmdW5jdGlvbiAodCwgaSkgeyByZXR1cm4gZSgiPGxpPiIpLmFwcGVuZChlKCI8YT4iKS50ZXh0KGkubGFiZWwpKS5hcHBlbmRUbyh0KSB9LCBfbW92ZTogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpID8gdGhpcy5tZW51LmlzRmlyc3RJdGVtKCkgJiYgL15wcmV2aW91cy8udGVzdChlKSB8fCB0aGlzLm1lbnUuaXNMYXN0SXRlbSgpICYmIC9ebmV4dC8udGVzdChlKSA/ICh0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLCB0aGlzLm1lbnUuYmx1cigpLCB1bmRlZmluZWQpIDogKHRoaXMubWVudVtlXSh0KSwgdW5kZWZpbmVkKSA6ICh0aGlzLnNlYXJjaChudWxsLCB0KSwgdW5kZWZpbmVkKSB9LCB3aWRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubWVudS5lbGVtZW50IH0sIF92YWx1ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsIGFyZ3VtZW50cykgfSwgX2tleUV2ZW50OiBmdW5jdGlvbiAoZSwgdCkgeyAoIXRoaXMuaXNNdWx0aUxpbmUgfHwgdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpICYmICh0aGlzLl9tb3ZlKGUsIHQpLCB0LnByZXZlbnREZWZhdWx0KCkpIH0gfSksIGUuZXh0ZW5kKGUudWkuYXV0b2NvbXBsZXRlLCB7IGVzY2FwZVJlZ2V4OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAiXFwkJiIpIH0sIGZpbHRlcjogZnVuY3Rpb24gKHQsIGkpIHsgdmFyIHMgPSBSZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksICJpIik7IHJldHVybiBlLmdyZXAodCwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHMudGVzdChlLmxhYmVsIHx8IGUudmFsdWUgfHwgZSkgfSkgfSB9KSwgZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIsIGUudWkuYXV0b2NvbXBsZXRlLCB7IG9wdGlvbnM6IHsgbWVzc2FnZXM6IHsgbm9SZXN1bHRzOiAiTm8gc2VhcmNoIHJlc3VsdHMuIiwgcmVzdWx0czogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgKyAoZSA+IDEgPyAiIHJlc3VsdHMgYXJlIiA6ICIgcmVzdWx0IGlzIikgKyAiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIiB9IH0gfSwgX19yZXNwb25zZTogZnVuY3Rpb24gKGUpIHsgdmFyIHQ7IHRoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSwgdGhpcy5vcHRpb25zLmRpc2FibGVkIHx8IHRoaXMuY2FuY2VsU2VhcmNoIHx8ICh0ID0gZSAmJiBlLmxlbmd0aCA/IHRoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKSA6IHRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsIHRoaXMubGl2ZVJlZ2lvbi50ZXh0KHQpKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAoZSkgeyB2YXIgdCwgaSA9ICJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIsIG4gPSAidWktYnV0dG9uLWljb25zLW9ubHkgdWktYnV0dG9uLWljb24tb25seSB1aS1idXR0b24tdGV4dC1pY29ucyB1aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgdWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgdWktYnV0dG9uLXRleHQtb25seSIsIHMgPSBmdW5jdGlvbiAoKSB7IHZhciB0ID0gZSh0aGlzKTsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHQuZmluZCgiOnVpLWJ1dHRvbiIpLmJ1dHRvbigicmVmcmVzaCIpIH0sIDEpIH0sIGEgPSBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHQubmFtZSwgbiA9IHQuZm9ybSwgcyA9IGUoW10pOyByZXR1cm4gaSAmJiAoaSA9IGkucmVwbGFjZSgvJy9nLCAiXFwnIiksIHMgPSBuID8gZShuKS5maW5kKCJbbmFtZT0nIiArIGkgKyAiJ10iKSA6IGUoIltuYW1lPSciICsgaSArICInXSIsIHQub3duZXJEb2N1bWVudCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICF0aGlzLmZvcm0gfSkpLCBzIH07IGUud2lkZ2V0KCJ1aS5idXR0b24iLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWZhdWx0RWxlbWVudDogIjxidXR0b24+Iiwgb3B0aW9uczogeyBkaXNhYmxlZDogbnVsbCwgdGV4dDogITAsIGxhYmVsOiBudWxsLCBpY29uczogeyBwcmltYXJ5OiBudWxsLCBzZWNvbmRhcnk6IG51bGwgfSB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlKS5iaW5kKCJyZXNldCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBzKSwgImJvb2xlYW4iICE9IHR5cGVvZiB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPyB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSAhIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpIDogdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwgdGhpcy5vcHRpb25zLmRpc2FibGVkKSwgdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLCB0aGlzLmhhc1RpdGxlID0gISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTsgdmFyIG4gPSB0aGlzLCBvID0gdGhpcy5vcHRpb25zLCByID0gImNoZWNrYm94IiA9PT0gdGhpcy50eXBlIHx8ICJyYWRpbyIgPT09IHRoaXMudHlwZSwgaCA9IHIgPyAiIiA6ICJ1aS1zdGF0ZS1hY3RpdmUiOyBudWxsID09PSBvLmxhYmVsICYmIChvLmxhYmVsID0gImlucHV0IiA9PT0gdGhpcy50eXBlID8gdGhpcy5idXR0b25FbGVtZW50LnZhbCgpIDogdGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksIHRoaXMuX2hvdmVyYWJsZSh0aGlzLmJ1dHRvbkVsZW1lbnQpLCB0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoaSkuYXR0cigicm9sZSIsICJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgby5kaXNhYmxlZCB8fCB0aGlzID09PSB0ICYmIGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpIH0pLmJpbmQoIm1vdXNlbGVhdmUiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyBvLmRpc2FibGVkIHx8IGUodGhpcykucmVtb3ZlQ2xhc3MoaCkgfSkuYmluZCgiY2xpY2siICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKGUpIHsgby5kaXNhYmxlZCAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpLCBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKSB9KSwgdGhpcy5fb24oeyBmb2N1czogZnVuY3Rpb24gKCkgeyB0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSwgYmx1cjogZnVuY3Rpb24gKCkgeyB0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikgfSB9KSwgciAmJiB0aGlzLmVsZW1lbnQuYmluZCgiY2hhbmdlIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgbi5yZWZyZXNoKCkgfSksICJjaGVja2JveCIgPT09IHRoaXMudHlwZSA/IHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBvLmRpc2FibGVkID8gITEgOiB1bmRlZmluZWQgfSkgOiAicmFkaW8iID09PSB0aGlzLnR5cGUgPyB0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgeyBpZiAoby5kaXNhYmxlZCkgcmV0dXJuICExOyBlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgbi5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsICJ0cnVlIik7IHZhciB0ID0gbi5lbGVtZW50WzBdOyBhKHQpLm5vdCh0KS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdIH0pLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCAiZmFsc2UiKSB9KSA6ICh0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG8uZGlzYWJsZWQgPyAhMSA6IChlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdCA9IHRoaXMsIG4uZG9jdW1lbnQub25lKCJtb3VzZXVwIiwgZnVuY3Rpb24gKCkgeyB0ID0gbnVsbCB9KSwgdW5kZWZpbmVkKSB9KS5iaW5kKCJtb3VzZXVwIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG8uZGlzYWJsZWQgPyAhMSA6IChlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdW5kZWZpbmVkKSB9KS5iaW5kKCJrZXlkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICh0KSB7IHJldHVybiBvLmRpc2FibGVkID8gITEgOiAoKHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLlNQQUNFIHx8IHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLkVOVEVSKSAmJiBlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdW5kZWZpbmVkKSB9KS5iaW5kKCJrZXl1cCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlICsgIiBibHVyIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikgfSksIHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpICYmIHRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbiAodCkgeyB0LmtleUNvZGUgPT09IGUudWkua2V5Q29kZS5TUEFDRSAmJiBlKHRoaXMpLmNsaWNrKCkgfSkpLCB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwgby5kaXNhYmxlZCksIHRoaXMuX3Jlc2V0QnV0dG9uKCkgfSwgX2RldGVybWluZUJ1dHRvblR5cGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIHQsIGk7IHRoaXMudHlwZSA9IHRoaXMuZWxlbWVudC5pcygiW3R5cGU9Y2hlY2tib3hdIikgPyAiY2hlY2tib3giIDogdGhpcy5lbGVtZW50LmlzKCJbdHlwZT1yYWRpb10iKSA/ICJyYWRpbyIgOiB0aGlzLmVsZW1lbnQuaXMoImlucHV0IikgPyAiaW5wdXQiIDogImJ1dHRvbiIsICJjaGVja2JveCIgPT09IHRoaXMudHlwZSB8fCAicmFkaW8iID09PSB0aGlzLnR5cGUgPyAoZSA9IHRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLCB0ID0gImxhYmVsW2Zvcj0nIiArIHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpICsgIiddIiwgdGhpcy5idXR0b25FbGVtZW50ID0gZS5maW5kKHQpLCB0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RoIHx8IChlID0gZS5sZW5ndGggPyBlLnNpYmxpbmdzKCkgOiB0aGlzLmVsZW1lbnQuc2libGluZ3MoKSwgdGhpcy5idXR0b25FbGVtZW50ID0gZS5maWx0ZXIodCksIHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGggfHwgKHRoaXMuYnV0dG9uRWxlbWVudCA9IGUuZmluZCh0KSkpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLCBpID0gdGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLCBpICYmIHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksIHRoaXMuYnV0dG9uRWxlbWVudC5wcm9wKCJhcmlhLXByZXNzZWQiLCBpKSkgOiB0aGlzLmJ1dHRvbkVsZW1lbnQgPSB0aGlzLmVsZW1lbnQgfSwgd2lkZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnQgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSwgdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGkgKyAiIHVpLXN0YXRlLWFjdGl2ZSAiICsgbikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksIHRoaXMuaGFzVGl0bGUgfHwgdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIikgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIHRoaXMuX3N1cGVyKGUsIHQpLCAiZGlzYWJsZWQiID09PSBlID8gKHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsICEhdCksIHQgJiYgdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLCB1bmRlZmluZWQpIDogKHRoaXMuX3Jlc2V0QnV0dG9uKCksIHVuZGVmaW5lZCkgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMuZWxlbWVudC5pcygiaW5wdXQsIGJ1dHRvbiIpID8gdGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKSA6IHRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7IHQgIT09IHRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwgdCksICJyYWRpbyIgPT09IHRoaXMudHlwZSA/IGEodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uICgpIHsgZSh0aGlzKS5pcygiOmNoZWNrZWQiKSA/IGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwgInRydWUiKSA6IGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwgImZhbHNlIikgfSkgOiAiY2hlY2tib3giID09PSB0aGlzLnR5cGUgJiYgKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKSA/IHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwgInRydWUiKSA6IHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwgImZhbHNlIikpIH0sIF9yZXNldEJ1dHRvbjogZnVuY3Rpb24gKCkgeyBpZiAoImlucHV0IiA9PT0gdGhpcy50eXBlKSByZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsICYmIHRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKSwgdW5kZWZpbmVkOyB2YXIgdCA9IHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhuKSwgaSA9IGUoIjxzcGFuPjwvc3Bhbj4iLCB0aGlzLmRvY3VtZW50WzBdKS5hZGRDbGFzcygidWktYnV0dG9uLXRleHQiKS5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkuYXBwZW5kVG8odC5lbXB0eSgpKS50ZXh0KCksIHMgPSB0aGlzLm9wdGlvbnMuaWNvbnMsIGEgPSBzLnByaW1hcnkgJiYgcy5zZWNvbmRhcnksIG8gPSBbXTsgcy5wcmltYXJ5IHx8IHMuc2Vjb25kYXJ5ID8gKHRoaXMub3B0aW9ucy50ZXh0ICYmIG8ucHVzaCgidWktYnV0dG9uLXRleHQtaWNvbiIgKyAoYSA/ICJzIiA6IHMucHJpbWFyeSA/ICItcHJpbWFyeSIgOiAiLXNlY29uZGFyeSIpKSwgcy5wcmltYXJ5ICYmIHQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiICsgcy5wcmltYXJ5ICsgIic+PC9zcGFuPiIpLCBzLnNlY29uZGFyeSAmJiB0LmFwcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIgKyBzLnNlY29uZGFyeSArICInPjwvc3Bhbj4iKSwgdGhpcy5vcHRpb25zLnRleHQgfHwgKG8ucHVzaChhID8gInVpLWJ1dHRvbi1pY29ucy1vbmx5IiA6ICJ1aS1idXR0b24taWNvbi1vbmx5IiksIHRoaXMuaGFzVGl0bGUgfHwgdC5hdHRyKCJ0aXRsZSIsIGUudHJpbShpKSkpKSA6IG8ucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLCB0LmFkZENsYXNzKG8uam9pbigiICIpKSB9IH0pLCBlLndpZGdldCgidWkuYnV0dG9uc2V0IiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBpdGVtczogImJ1dHRvbiwgaW5wdXRbdHlwZT1idXR0b25dLCBpbnB1dFt0eXBlPXN1Ym1pdF0sIGlucHV0W3R5cGU9cmVzZXRdLCBpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlwZT1yYWRpb10sIGEsIDpkYXRhKHVpLWJ1dHRvbikiIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1idXR0b25zZXQiKSB9LCBfaW5pdDogZnVuY3Rpb24gKCkgeyB0aGlzLnJlZnJlc2goKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoZSwgdCkgeyAiZGlzYWJsZWQiID09PSBlICYmIHRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsIGUsIHQpLCB0aGlzLl9zdXBlcihlLCB0KSB9LCByZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gInJ0bCIgPT09IHRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpOyB0aGlzLmJ1dHRvbnMgPSB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpbHRlcigiOnVpLWJ1dHRvbiIpLmJ1dHRvbigicmVmcmVzaCIpLmVuZCgpLm5vdCgiOnVpLWJ1dHRvbiIpLmJ1dHRvbigpLmVuZCgpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF0gfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyh0ID8gInVpLWNvcm5lci1yaWdodCIgOiAidWktY29ybmVyLWxlZnQiKS5lbmQoKS5maWx0ZXIoIjpsYXN0IikuYWRkQ2xhc3ModCA/ICJ1aS1jb3JuZXItbGVmdCIgOiAidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSwgdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF0gfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmJ1dHRvbigiZGVzdHJveSIpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlLCB0KSB7DQogICAgZnVuY3Rpb24gaSgpIHsgdGhpcy5fY3VySW5zdCA9IG51bGwsIHRoaXMuX2tleUV2ZW50ID0gITEsIHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gW10sIHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gITEsIHRoaXMuX2luRGlhbG9nID0gITEsIHRoaXMuX21haW5EaXZJZCA9ICJ1aS1kYXRlcGlja2VyLWRpdiIsIHRoaXMuX2lubGluZUNsYXNzID0gInVpLWRhdGVwaWNrZXItaW5saW5lIiwgdGhpcy5fYXBwZW5kQ2xhc3MgPSAidWktZGF0ZXBpY2tlci1hcHBlbmQiLCB0aGlzLl90cmlnZ2VyQ2xhc3MgPSAidWktZGF0ZXBpY2tlci10cmlnZ2VyIiwgdGhpcy5fZGlhbG9nQ2xhc3MgPSAidWktZGF0ZXBpY2tlci1kaWFsb2ciLCB0aGlzLl9kaXNhYmxlQ2xhc3MgPSAidWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsIHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzID0gInVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIiwgdGhpcy5fY3VycmVudENsYXNzID0gInVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLCB0aGlzLl9kYXlPdmVyQ2xhc3MgPSAidWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsIHRoaXMucmVnaW9uYWwgPSBbXSwgdGhpcy5yZWdpb25hbFsiIl0gPSB7IGNsb3NlVGV4dDogIkRvbmUiLCBwcmV2VGV4dDogIlByZXYiLCBuZXh0VGV4dDogIk5leHQiLCBjdXJyZW50VGV4dDogIlRvZGF5IiwgbW9udGhOYW1lczogWyJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIl0sIG1vbnRoTmFtZXNTaG9ydDogWyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdLCBkYXlOYW1lczogWyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJdLCBkYXlOYW1lc1Nob3J0OiBbIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdLCBkYXlOYW1lc01pbjogWyJTdSIsICJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSJdLCB3ZWVrSGVhZGVyOiAiV2siLCBkYXRlRm9ybWF0OiAibW0vZGQveXkiLCBmaXJzdERheTogMCwgaXNSVEw6ICExLCBzaG93TW9udGhBZnRlclllYXI6ICExLCB5ZWFyU3VmZml4OiAiIiB9LCB0aGlzLl9kZWZhdWx0cyA9IHsgc2hvd09uOiAiZm9jdXMiLCBzaG93QW5pbTogImZhZGVJbiIsIHNob3dPcHRpb25zOiB7fSwgZGVmYXVsdERhdGU6IG51bGwsIGFwcGVuZFRleHQ6ICIiLCBidXR0b25UZXh0OiAiLi4uIiwgYnV0dG9uSW1hZ2U6ICIiLCBidXR0b25JbWFnZU9ubHk6ICExLCBoaWRlSWZOb1ByZXZOZXh0OiAhMSwgbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDogITEsIGdvdG9DdXJyZW50OiAhMSwgY2hhbmdlTW9udGg6ICExLCBjaGFuZ2VZZWFyOiAhMSwgeWVhclJhbmdlOiAiYy0xMDpjKzEwIiwgc2hvd090aGVyTW9udGhzOiAhMSwgc2VsZWN0T3RoZXJNb250aHM6ICExLCBzaG93V2VlazogITEsIGNhbGN1bGF0ZVdlZWs6IHRoaXMuaXNvODYwMVdlZWssIHNob3J0WWVhckN1dG9mZjogIisxMCIsIG1pbkRhdGU6IG51bGwsIG1heERhdGU6IG51bGwsIGR1cmF0aW9uOiAiZmFzdCIsIGJlZm9yZVNob3dEYXk6IG51bGwsIGJlZm9yZVNob3c6IG51bGwsIG9uU2VsZWN0OiBudWxsLCBvbkNoYW5nZU1vbnRoWWVhcjogbnVsbCwgb25DbG9zZTogbnVsbCwgbnVtYmVyT2ZNb250aHM6IDEsIHNob3dDdXJyZW50QXRQb3M6IDAsIHN0ZXBNb250aHM6IDEsIHN0ZXBCaWdNb250aHM6IDEyLCBhbHRGaWVsZDogIiIsIGFsdEZvcm1hdDogIiIsIGNvbnN0cmFpbklucHV0OiAhMCwgc2hvd0J1dHRvblBhbmVsOiAhMSwgYXV0b1NpemU6ICExLCBkaXNhYmxlZDogITEgfSwgZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsIHRoaXMucmVnaW9uYWxbIiJdKSwgdGhpcy5kcERpdiA9IGEoZSgiPGRpdiBpZD0nIiArIHRoaXMuX21haW5EaXZJZCArICInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpIH0gZnVuY3Rpb24gYSh0KSB7IHZhciBpID0gImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7IHJldHVybiB0LmRlbGVnYXRlKGksICJtb3VzZW91dCIsIGZ1bmN0aW9uICgpIHsgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgLTEgIT09IHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpICYmIGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLCAtMSAhPT0gdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikgJiYgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikgfSkuZGVsZWdhdGUoaSwgIm1vdXNlb3ZlciIsIGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihuLmlubGluZSA/IHQucGFyZW50KClbMF0gOiBuLmlucHV0WzBdKSB8fCAoZSh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwgLTEgIT09IHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpICYmIGUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLCAtMSAhPT0gdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikgJiYgZSh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikpIH0pIH0gZnVuY3Rpb24gcyh0LCBpKSB7IGUuZXh0ZW5kKHQsIGkpOyBmb3IgKHZhciBhIGluIGkpIG51bGwgPT0gaVthXSAmJiAodFthXSA9IGlbYV0pOyByZXR1cm4gdCB9IGUuZXh0ZW5kKGUudWksIHsgZGF0ZXBpY2tlcjogeyB2ZXJzaW9uOiAiMS4xMC40IiB9IH0pOyB2YXIgbiwgciA9ICJkYXRlcGlja2VyIjsgZS5leHRlbmQoaS5wcm90b3R5cGUsIHsNCiAgICAgICAgbWFya2VyQ2xhc3NOYW1lOiAiaGFzRGF0ZXBpY2tlciIsIG1heFJvd3M6IDQsIF93aWRnZXREYXRlcGlja2VyOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRwRGl2IH0sIHNldERlZmF1bHRzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gcyh0aGlzLl9kZWZhdWx0cywgZSB8fCB7fSksIHRoaXMgfSwgX2F0dGFjaERhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhLCBzLCBuOyBhID0gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBzID0gImRpdiIgPT09IGEgfHwgInNwYW4iID09PSBhLCB0LmlkIHx8ICh0aGlzLnV1aWQgKz0gMSwgdC5pZCA9ICJkcCIgKyB0aGlzLnV1aWQpLCBuID0gdGhpcy5fbmV3SW5zdChlKHQpLCBzKSwgbi5zZXR0aW5ncyA9IGUuZXh0ZW5kKHt9LCBpIHx8IHt9KSwgImlucHV0IiA9PT0gYSA/IHRoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHQsIG4pIDogcyAmJiB0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHQsIG4pIH0sIF9uZXdJbnN0OiBmdW5jdGlvbiAodCwgaSkgeyB2YXIgcyA9IHRbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1wtXSkvZywgIlxcXFwkMSIpOyByZXR1cm4geyBpZDogcywgaW5wdXQ6IHQsIHNlbGVjdGVkRGF5OiAwLCBzZWxlY3RlZE1vbnRoOiAwLCBzZWxlY3RlZFllYXI6IDAsIGRyYXdNb250aDogMCwgZHJhd1llYXI6IDAsIGlubGluZTogaSwgZHBEaXY6IGkgPyBhKGUoIjxkaXYgY2xhc3M9JyIgKyB0aGlzLl9pbmxpbmVDbGFzcyArICIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKSA6IHRoaXMuZHBEaXYgfSB9LCBfY29ubmVjdERhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhID0gZSh0KTsgaS5hcHBlbmQgPSBlKFtdKSwgaS50cmlnZ2VyID0gZShbXSksIGEuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpIHx8ICh0aGlzLl9hdHRhY2htZW50cyhhLCBpKSwgYS5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLCB0aGlzLl9hdXRvU2l6ZShpKSwgZS5kYXRhKHQsIHIsIGkpLCBpLnNldHRpbmdzLmRpc2FibGVkICYmIHRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpKSB9LCBfYXR0YWNobWVudHM6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhLCBzLCBuLCByID0gdGhpcy5fZ2V0KGksICJhcHBlbmRUZXh0IiksIG8gPSB0aGlzLl9nZXQoaSwgImlzUlRMIik7IGkuYXBwZW5kICYmIGkuYXBwZW5kLnJlbW92ZSgpLCByICYmIChpLmFwcGVuZCA9IGUoIjxzcGFuIGNsYXNzPSciICsgdGhpcy5fYXBwZW5kQ2xhc3MgKyAiJz4iICsgciArICI8L3NwYW4+IiksIHRbbyA/ICJiZWZvcmUiIDogImFmdGVyIl0oaS5hcHBlbmQpKSwgdC51bmJpbmQoImZvY3VzIiwgdGhpcy5fc2hvd0RhdGVwaWNrZXIpLCBpLnRyaWdnZXIgJiYgaS50cmlnZ2VyLnJlbW92ZSgpLCBhID0gdGhpcy5fZ2V0KGksICJzaG93T24iKSwgKCJmb2N1cyIgPT09IGEgfHwgImJvdGgiID09PSBhKSAmJiB0LmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKSwgKCJidXR0b24iID09PSBhIHx8ICJib3RoIiA9PT0gYSkgJiYgKHMgPSB0aGlzLl9nZXQoaSwgImJ1dHRvblRleHQiKSwgbiA9IHRoaXMuX2dldChpLCAiYnV0dG9uSW1hZ2UiKSwgaS50cmlnZ2VyID0gZSh0aGlzLl9nZXQoaSwgImJ1dHRvbkltYWdlT25seSIpID8gZSgiPGltZy8+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHsgc3JjOiBuLCBhbHQ6IHMsIHRpdGxlOiBzIH0pIDogZSgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChuID8gZSgiPGltZy8+IikuYXR0cih7IHNyYzogbiwgYWx0OiBzLCB0aXRsZTogcyB9KSA6IHMpKSwgdFtvID8gImJlZm9yZSIgOiAiYWZ0ZXIiXShpLnRyaWdnZXIpLCBpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiBlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCA9PT0gdFswXSA/IGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSA6IGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQgIT09IHRbMF0gPyAoZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCBlLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRbMF0pKSA6IGUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodFswXSksICExIH0pKSB9LCBfYXV0b1NpemU6IGZ1bmN0aW9uIChlKSB7IGlmICh0aGlzLl9nZXQoZSwgImF1dG9TaXplIikgJiYgIWUuaW5saW5lKSB7IHZhciB0LCBpLCBhLCBzLCBuID0gbmV3IERhdGUoMjAwOSwgMTEsIDIwKSwgciA9IHRoaXMuX2dldChlLCAiZGF0ZUZvcm1hdCIpOyByLm1hdGNoKC9bRE1dLykgJiYgKHQgPSBmdW5jdGlvbiAoZSkgeyBmb3IgKGkgPSAwLCBhID0gMCwgcyA9IDA7IGUubGVuZ3RoID4gczsgcysrKSBlW3NdLmxlbmd0aCA+IGkgJiYgKGkgPSBlW3NdLmxlbmd0aCwgYSA9IHMpOyByZXR1cm4gYSB9LCBuLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsIHIubWF0Y2goL01NLykgPyAibW9udGhOYW1lcyIgOiAibW9udGhOYW1lc1Nob3J0IikpKSwgbi5zZXREYXRlKHQodGhpcy5fZ2V0KGUsIHIubWF0Y2goL0RELykgPyAiZGF5TmFtZXMiIDogImRheU5hbWVzU2hvcnQiKSkgKyAyMCAtIG4uZ2V0RGF5KCkpKSwgZS5pbnB1dC5hdHRyKCJzaXplIiwgdGhpcy5fZm9ybWF0RGF0ZShlLCBuKS5sZW5ndGgpIH0gfSwgX2lubGluZURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhID0gZSh0KTsgYS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkgfHwgKGEuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSwgZS5kYXRhKHQsIHIsIGkpLCB0aGlzLl9zZXREYXRlKGksIHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCAhMCksIHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksIHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSwgaS5zZXR0aW5ncy5kaXNhYmxlZCAmJiB0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSwgaS5kcERpdi5jc3MoImRpc3BsYXkiLCAiYmxvY2siKSkgfSwgX2RpYWxvZ0RhdGVwaWNrZXI6IGZ1bmN0aW9uICh0LCBpLCBhLCBuLCBvKSB7IHZhciB1LCBjLCBoLCBsLCBkLCBwID0gdGhpcy5fZGlhbG9nSW5zdDsgcmV0dXJuIHAgfHwgKHRoaXMudXVpZCArPSAxLCB1ID0gImRwIiArIHRoaXMudXVpZCwgdGhpcy5fZGlhbG9nSW5wdXQgPSBlKCI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9JyIgKyB1ICsgIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksIHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSwgZSgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksIHAgPSB0aGlzLl9kaWFsb2dJbnN0ID0gdGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwgITEpLCBwLnNldHRpbmdzID0ge30sIGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwgciwgcCkpLCBzKHAuc2V0dGluZ3MsIG4gfHwge30pLCBpID0gaSAmJiBpLmNvbnN0cnVjdG9yID09PSBEYXRlID8gdGhpcy5fZm9ybWF0RGF0ZShwLCBpKSA6IGksIHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSwgdGhpcy5fcG9zID0gbyA/IG8ubGVuZ3RoID8gbyA6IFtvLnBhZ2VYLCBvLnBhZ2VZXSA6IG51bGwsIHRoaXMuX3BvcyB8fCAoYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgaCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIGwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsIGQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLCB0aGlzLl9wb3MgPSBbYyAvIDIgLSAxMDAgKyBsLCBoIC8gMiAtIDE1MCArIGRdKSwgdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0IiwgdGhpcy5fcG9zWzBdICsgMjAgKyAicHgiKS5jc3MoInRvcCIsIHRoaXMuX3Bvc1sxXSArICJweCIpLCBwLnNldHRpbmdzLm9uU2VsZWN0ID0gYSwgdGhpcy5faW5EaWFsb2cgPSAhMCwgdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksIHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSwgZS5ibG9ja1VJICYmIGUuYmxvY2tVSSh0aGlzLmRwRGl2KSwgZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCByLCBwKSwgdGhpcyB9LCBfZGVzdHJveURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0KSB7IHZhciBpLCBhID0gZSh0KSwgcyA9IGUuZGF0YSh0LCByKTsgYS5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkgJiYgKGkgPSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIGUucmVtb3ZlRGF0YSh0LCByKSwgImlucHV0IiA9PT0gaSA/IChzLmFwcGVuZC5yZW1vdmUoKSwgcy50cmlnZ2VyLnJlbW92ZSgpLCBhLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIiwgdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsIHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsIHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLCB0aGlzLl9kb0tleVVwKSkgOiAoImRpdiIgPT09IGkgfHwgInNwYW4iID09PSBpKSAmJiBhLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpKSB9LCBfZW5hYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMgPSBlKHQpLCBuID0gZS5kYXRhKHQsIHIpOyBzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSAmJiAoaSA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgImlucHV0IiA9PT0gaSA/ICh0LmRpc2FibGVkID0gITEsIG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzLmRpc2FibGVkID0gITEgfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3MoeyBvcGFjaXR5OiAiMS4wIiwgY3Vyc29yOiAiIiB9KSkgOiAoImRpdiIgPT09IGkgfHwgInNwYW4iID09PSBpKSAmJiAoYSA9IHMuY2hpbGRyZW4oIi4iICsgdGhpcy5faW5saW5lQ2xhc3MpLCBhLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksIGEuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsICExKSksIHRoaXMuX2Rpc2FibGVkSW5wdXRzID0gZS5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSB0ID8gbnVsbCA6IGUgfSkpIH0sIF9kaXNhYmxlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMgPSBlKHQpLCBuID0gZS5kYXRhKHQsIHIpOyBzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSAmJiAoaSA9IHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgImlucHV0IiA9PT0gaSA/ICh0LmRpc2FibGVkID0gITAsIG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzLmRpc2FibGVkID0gITAgfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3MoeyBvcGFjaXR5OiAiMC41IiwgY3Vyc29yOiAiZGVmYXVsdCIgfSkpIDogKCJkaXYiID09PSBpIHx8ICJzcGFuIiA9PT0gaSkgJiYgKGEgPSBzLmNoaWxkcmVuKCIuIiArIHRoaXMuX2lubGluZUNsYXNzKSwgYS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLCBhLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCAhMCkpLCB0aGlzLl9kaXNhYmxlZElucHV0cyA9IGUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA9PT0gdCA/IG51bGwgOiBlIH0pLCB0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdID0gdCkgfSwgX2lzRGlzYWJsZWREYXRlcGlja2VyOiBmdW5jdGlvbiAoZSkgeyBpZiAoIWUpIHJldHVybiAhMTsgZm9yICh2YXIgdCA9IDA7IHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aCA+IHQ7IHQrKykgaWYgKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdID09PSBlKSByZXR1cm4gITA7IHJldHVybiAhMSB9LCBfZ2V0SW5zdDogZnVuY3Rpb24gKHQpIHsgdHJ5IHsgcmV0dXJuIGUuZGF0YSh0LCByKSB9IGNhdGNoIChpKSB7IHRocm93ICJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlciIgfSB9LCBfb3B0aW9uRGF0ZXBpY2tlcjogZnVuY3Rpb24gKGksIGEsIG4pIHsgdmFyIHIsIG8sIHUsIGMsIGggPSB0aGlzLl9nZXRJbnN0KGkpOyByZXR1cm4gMiA9PT0gYXJndW1lbnRzLmxlbmd0aCAmJiAic3RyaW5nIiA9PSB0eXBlb2YgYSA/ICJkZWZhdWx0cyIgPT09IGEgPyBlLmV4dGVuZCh7fSwgZS5kYXRlcGlja2VyLl9kZWZhdWx0cykgOiBoID8gImFsbCIgPT09IGEgPyBlLmV4dGVuZCh7fSwgaC5zZXR0aW5ncykgOiB0aGlzLl9nZXQoaCwgYSkgOiBudWxsIDogKHIgPSBhIHx8IHt9LCAic3RyaW5nIiA9PSB0eXBlb2YgYSAmJiAociA9IHt9LCByW2FdID0gbiksIGggJiYgKHRoaXMuX2N1ckluc3QgPT09IGggJiYgdGhpcy5faGlkZURhdGVwaWNrZXIoKSwgbyA9IHRoaXMuX2dldERhdGVEYXRlcGlja2VyKGksICEwKSwgdSA9IHRoaXMuX2dldE1pbk1heERhdGUoaCwgIm1pbiIpLCBjID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShoLCAibWF4IiksIHMoaC5zZXR0aW5ncywgciksIG51bGwgIT09IHUgJiYgci5kYXRlRm9ybWF0ICE9PSB0ICYmIHIubWluRGF0ZSA9PT0gdCAmJiAoaC5zZXR0aW5ncy5taW5EYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShoLCB1KSksIG51bGwgIT09IGMgJiYgci5kYXRlRm9ybWF0ICE9PSB0ICYmIHIubWF4RGF0ZSA9PT0gdCAmJiAoaC5zZXR0aW5ncy5tYXhEYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShoLCBjKSksICJkaXNhYmxlZCIgaW4gciAmJiAoci5kaXNhYmxlZCA/IHRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGkpIDogdGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihpKSksIHRoaXMuX2F0dGFjaG1lbnRzKGUoaSksIGgpLCB0aGlzLl9hdXRvU2l6ZShoKSwgdGhpcy5fc2V0RGF0ZShoLCBvKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGgpLCB0aGlzLl91cGRhdGVEYXRlcGlja2VyKGgpKSwgdCkgfSwgX2NoYW5nZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHRoaXMuX29wdGlvbkRhdGVwaWNrZXIoZSwgdCwgaSkgfSwgX3JlZnJlc2hEYXRlcGlja2VyOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMuX2dldEluc3QoZSk7IHQgJiYgdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KSB9LCBfc2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpID0gdGhpcy5fZ2V0SW5zdChlKTsgaSAmJiAodGhpcy5fc2V0RGF0ZShpLCB0KSwgdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKSB9LCBfZ2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpID0gdGhpcy5fZ2V0SW5zdChlKTsgcmV0dXJuIGkgJiYgIWkuaW5saW5lICYmIHRoaXMuX3NldERhdGVGcm9tRmllbGQoaSwgdCksIGkgPyB0aGlzLl9nZXREYXRlKGkpIDogbnVsbCB9LCBfZG9LZXlEb3duOiBmdW5jdGlvbiAodCkgeyB2YXIgaSwgYSwgcywgbiA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCksIHIgPSAhMCwgbyA9IG4uZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpOyBpZiAobi5fa2V5RXZlbnQgPSAhMCwgZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZykgc3dpdGNoICh0LmtleUNvZGUpIHsgY2FzZSA5OiBlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksIHIgPSAhMTsgYnJlYWs7IGNhc2UgMTM6IHJldHVybiBzID0gZSgidGQuIiArIGUuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzICsgIjpub3QoLiIgKyBlLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcyArICIpIiwgbi5kcERpdiksIHNbMF0gJiYgZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQsIG4uc2VsZWN0ZWRNb250aCwgbi5zZWxlY3RlZFllYXIsIHNbMF0pLCBpID0gZS5kYXRlcGlja2VyLl9nZXQobiwgIm9uU2VsZWN0IiksIGkgPyAoYSA9IGUuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShuKSwgaS5hcHBseShuLmlucHV0ID8gbi5pbnB1dFswXSA6IG51bGwsIFthLCBuXSkpIDogZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCAhMTsgY2FzZSAyNzogZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOyBicmVhazsgY2FzZSAzMzogZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LCB0LmN0cmxLZXkgPyAtZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBCaWdNb250aHMiKSA6IC1lLmRhdGVwaWNrZXIuX2dldChuLCAic3RlcE1vbnRocyIpLCAiTSIpOyBicmVhazsgY2FzZSAzNDogZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LCB0LmN0cmxLZXkgPyArZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBCaWdNb250aHMiKSA6ICtlLmRhdGVwaWNrZXIuX2dldChuLCAic3RlcE1vbnRocyIpLCAiTSIpOyBicmVhazsgY2FzZSAzNTogKHQuY3RybEtleSB8fCB0Lm1ldGFLZXkpICYmIGUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSwgciA9IHQuY3RybEtleSB8fCB0Lm1ldGFLZXk7IGJyZWFrOyBjYXNlIDM2OiAodC5jdHJsS2V5IHx8IHQubWV0YUtleSkgJiYgZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLCByID0gdC5jdHJsS2V5IHx8IHQubWV0YUtleTsgYnJlYWs7IGNhc2UgMzc6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIG8gPyAxIDogLTEsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5LCB0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5ICYmIGUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwgdC5jdHJsS2V5ID8gLWUuZGF0ZXBpY2tlci5fZ2V0KG4sICJzdGVwQmlnTW9udGhzIikgOiAtZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBNb250aHMiKSwgIk0iKTsgYnJlYWs7IGNhc2UgMzg6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIC03LCAiRCIpLCByID0gdC5jdHJsS2V5IHx8IHQubWV0YUtleTsgYnJlYWs7IGNhc2UgMzk6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIG8gPyAtMSA6IDEsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5LCB0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5ICYmIGUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwgdC5jdHJsS2V5ID8gK2UuZGF0ZXBpY2tlci5fZ2V0KG4sICJzdGVwQmlnTW9udGhzIikgOiArZS5kYXRlcGlja2VyLl9nZXQobiwgInN0ZXBNb250aHMiKSwgIk0iKTsgYnJlYWs7IGNhc2UgNDA6ICh0LmN0cmxLZXkgfHwgdC5tZXRhS2V5KSAmJiBlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsIDcsICJEIiksIHIgPSB0LmN0cmxLZXkgfHwgdC5tZXRhS2V5OyBicmVhazsgZGVmYXVsdDogciA9ICExIH0gZWxzZSAzNiA9PT0gdC5rZXlDb2RlICYmIHQuY3RybEtleSA/IGUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcykgOiByID0gITE7IHIgJiYgKHQucHJldmVudERlZmF1bHQoKSwgdC5zdG9wUHJvcGFnYXRpb24oKSkgfSwgX2RvS2V5UHJlc3M6IGZ1bmN0aW9uIChpKSB7IHZhciBhLCBzLCBuID0gZS5kYXRlcGlja2VyLl9nZXRJbnN0KGkudGFyZ2V0KTsgcmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KG4sICJjb25zdHJhaW5JbnB1dCIpID8gKGEgPSBlLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoZS5kYXRlcGlja2VyLl9nZXQobiwgImRhdGVGb3JtYXQiKSksIHMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG51bGwgPT0gaS5jaGFyQ29kZSA/IGkua2V5Q29kZSA6IGkuY2hhckNvZGUpLCBpLmN0cmxLZXkgfHwgaS5tZXRhS2V5IHx8ICIgIiA+IHMgfHwgIWEgfHwgYS5pbmRleE9mKHMpID4gLTEpIDogdCB9LCBfZG9LZXlVcDogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEgPSBlLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpOyBpZiAoYS5pbnB1dC52YWwoKSAhPT0gYS5sYXN0VmFsKSB0cnkgeyBpID0gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldChhLCAiZGF0ZUZvcm1hdCIpLCBhLmlucHV0ID8gYS5pbnB1dC52YWwoKSA6IG51bGwsIGUuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGEpKSwgaSAmJiAoZS5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGEpLCBlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShhKSwgZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGEpKSB9IGNhdGNoIChzKSB7IH0gcmV0dXJuICEwIH0sIF9zaG93RGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgaWYgKHQgPSB0LnRhcmdldCB8fCB0LCAiaW5wdXQiICE9PSB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgJiYgKHQgPSBlKCJpbnB1dCIsIHQucGFyZW50Tm9kZSlbMF0pLCAhZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0KSAmJiBlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCAhPT0gdCkgeyB2YXIgaSwgYSwgbiwgciwgbywgdSwgYzsgaSA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0KSwgZS5kYXRlcGlja2VyLl9jdXJJbnN0ICYmIGUuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gaSAmJiAoZS5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AoITAsICEwKSwgaSAmJiBlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmIGUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoZS5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdKSksIGEgPSBlLmRhdGVwaWNrZXIuX2dldChpLCAiYmVmb3JlU2hvdyIpLCBuID0gYSA/IGEuYXBwbHkodCwgW3QsIGldKSA6IHt9LCBuICE9PSAhMSAmJiAocyhpLnNldHRpbmdzLCBuKSwgaS5sYXN0VmFsID0gbnVsbCwgZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPSB0LCBlLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoaSksIGUuZGF0ZXBpY2tlci5faW5EaWFsb2cgJiYgKHQudmFsdWUgPSAiIiksIGUuZGF0ZXBpY2tlci5fcG9zIHx8IChlLmRhdGVwaWNrZXIuX3BvcyA9IGUuZGF0ZXBpY2tlci5fZmluZFBvcyh0KSwgZS5kYXRlcGlja2VyLl9wb3NbMV0gKz0gdC5vZmZzZXRIZWlnaHQpLCByID0gITEsIGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gciB8PSAiZml4ZWQiID09PSBlKHRoaXMpLmNzcygicG9zaXRpb24iKSwgIXIgfSksIG8gPSB7IGxlZnQ6IGUuZGF0ZXBpY2tlci5fcG9zWzBdLCB0b3A6IGUuZGF0ZXBpY2tlci5fcG9zWzFdIH0sIGUuZGF0ZXBpY2tlci5fcG9zID0gbnVsbCwgaS5kcERpdi5lbXB0eSgpLCBpLmRwRGl2LmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBkaXNwbGF5OiAiYmxvY2siLCB0b3A6ICItMTAwMHB4IiB9KSwgZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLCBvID0gZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLCBvLCByKSwgaS5kcERpdi5jc3MoeyBwb3NpdGlvbjogZS5kYXRlcGlja2VyLl9pbkRpYWxvZyAmJiBlLmJsb2NrVUkgPyAic3RhdGljIiA6IHIgPyAiZml4ZWQiIDogImFic29sdXRlIiwgZGlzcGxheTogIm5vbmUiLCBsZWZ0OiBvLmxlZnQgKyAicHgiLCB0b3A6IG8udG9wICsgInB4IiB9KSwgaS5pbmxpbmUgfHwgKHUgPSBlLmRhdGVwaWNrZXIuX2dldChpLCAic2hvd0FuaW0iKSwgYyA9IGUuZGF0ZXBpY2tlci5fZ2V0KGksICJkdXJhdGlvbiIpLCBpLmRwRGl2LnpJbmRleChlKHQpLnpJbmRleCgpICsgMSksIGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgPSAhMCwgZS5lZmZlY3RzICYmIGUuZWZmZWN0cy5lZmZlY3RbdV0gPyBpLmRwRGl2LnNob3codSwgZS5kYXRlcGlja2VyLl9nZXQoaSwgInNob3dPcHRpb25zIiksIGMpIDogaS5kcERpdlt1IHx8ICJzaG93Il0odSA/IGMgOiBudWxsKSwgZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpICYmIGkuaW5wdXQuZm9jdXMoKSwgZS5kYXRlcGlja2VyLl9jdXJJbnN0ID0gaSkpIH0gfSwgX3VwZGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uICh0KSB7IHRoaXMubWF4Um93cyA9IDQsIG4gPSB0LCB0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTCh0KSksIHRoaXMuX2F0dGFjaEhhbmRsZXJzKHQpLCB0LmRwRGl2LmZpbmQoIi4iICsgdGhpcy5fZGF5T3ZlckNsYXNzICsgIiBhIikubW91c2VvdmVyKCk7IHZhciBpLCBhID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksIHMgPSBhWzFdLCByID0gMTc7IHQuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLCBzID4gMSAmJiB0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIgKyBzKS5jc3MoIndpZHRoIiwgciAqIHMgKyAiZW0iKSwgdC5kcERpdlsoMSAhPT0gYVswXSB8fCAxICE9PSBhWzFdID8gImFkZCIgOiAicmVtb3ZlIikgKyAiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1tdWx0aSIpLCB0LmRwRGl2Wyh0aGlzLl9nZXQodCwgImlzUlRMIikgPyAiYWRkIiA6ICJyZW1vdmUiKSArICJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLCB0ID09PSBlLmRhdGVwaWNrZXIuX2N1ckluc3QgJiYgZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiBlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQodCkgJiYgdC5pbnB1dC5mb2N1cygpLCB0LnllYXJzaHRtbCAmJiAoaSA9IHQueWVhcnNodG1sLCBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgaSA9PT0gdC55ZWFyc2h0bWwgJiYgdC55ZWFyc2h0bWwgJiYgdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgodC55ZWFyc2h0bWwpLCBpID0gdC55ZWFyc2h0bWwgPSBudWxsIH0sIDApKSB9LCBfc2hvdWxkRm9jdXNJbnB1dDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaW5wdXQgJiYgZS5pbnB1dC5pcygiOnZpc2libGUiKSAmJiAhZS5pbnB1dC5pcygiOmRpc2FibGVkIikgJiYgIWUuaW5wdXQuaXMoIjpmb2N1cyIpIH0sIF9jaGVja09mZnNldDogZnVuY3Rpb24gKHQsIGksIGEpIHsgdmFyIHMgPSB0LmRwRGl2Lm91dGVyV2lkdGgoKSwgbiA9IHQuZHBEaXYub3V0ZXJIZWlnaHQoKSwgciA9IHQuaW5wdXQgPyB0LmlucHV0Lm91dGVyV2lkdGgoKSA6IDAsIG8gPSB0LmlucHV0ID8gdC5pbnB1dC5vdXRlckhlaWdodCgpIDogMCwgdSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCArIChhID8gMCA6IGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksIGMgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgKGEgPyAwIDogZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpOyByZXR1cm4gaS5sZWZ0IC09IHRoaXMuX2dldCh0LCAiaXNSVEwiKSA/IHMgLSByIDogMCwgaS5sZWZ0IC09IGEgJiYgaS5sZWZ0ID09PSB0LmlucHV0Lm9mZnNldCgpLmxlZnQgPyBlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgOiAwLCBpLnRvcCAtPSBhICYmIGkudG9wID09PSB0LmlucHV0Lm9mZnNldCgpLnRvcCArIG8gPyBlKGRvY3VtZW50KS5zY3JvbGxUb3AoKSA6IDAsIGkubGVmdCAtPSBNYXRoLm1pbihpLmxlZnQsIGkubGVmdCArIHMgPiB1ICYmIHUgPiBzID8gTWF0aC5hYnMoaS5sZWZ0ICsgcyAtIHUpIDogMCksIGkudG9wIC09IE1hdGgubWluKGkudG9wLCBpLnRvcCArIG4gPiBjICYmIGMgPiBuID8gTWF0aC5hYnMobiArIG8pIDogMCksIGkgfSwgX2ZpbmRQb3M6IGZ1bmN0aW9uICh0KSB7IGZvciAodmFyIGksIGEgPSB0aGlzLl9nZXRJbnN0KHQpLCBzID0gdGhpcy5fZ2V0KGEsICJpc1JUTCIpIDsgdCAmJiAoImhpZGRlbiIgPT09IHQudHlwZSB8fCAxICE9PSB0Lm5vZGVUeXBlIHx8IGUuZXhwci5maWx0ZXJzLmhpZGRlbih0KSkgOykgdCA9IHRbcyA/ICJwcmV2aW91c1NpYmxpbmciIDogIm5leHRTaWJsaW5nIl07IHJldHVybiBpID0gZSh0KS5vZmZzZXQoKSwgW2kubGVmdCwgaS50b3BdIH0sIF9oaWRlRGF0ZXBpY2tlcjogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEsIHMsIG4sIG8gPSB0aGlzLl9jdXJJbnN0OyAhbyB8fCB0ICYmIG8gIT09IGUuZGF0YSh0LCByKSB8fCB0aGlzLl9kYXRlcGlja2VyU2hvd2luZyAmJiAoaSA9IHRoaXMuX2dldChvLCAic2hvd0FuaW0iKSwgYSA9IHRoaXMuX2dldChvLCAiZHVyYXRpb24iKSwgcyA9IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl90aWR5RGlhbG9nKG8pIH0sIGUuZWZmZWN0cyAmJiAoZS5lZmZlY3RzLmVmZmVjdFtpXSB8fCBlLmVmZmVjdHNbaV0pID8gby5kcERpdi5oaWRlKGksIGUuZGF0ZXBpY2tlci5fZ2V0KG8sICJzaG93T3B0aW9ucyIpLCBhLCBzKSA6IG8uZHBEaXZbInNsaWRlRG93biIgPT09IGkgPyAic2xpZGVVcCIgOiAiZmFkZUluIiA9PT0gaSA/ICJmYWRlT3V0IiA6ICJoaWRlIl0oaSA/IGEgOiBudWxsLCBzKSwgaSB8fCBzKCksIHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gITEsIG4gPSB0aGlzLl9nZXQobywgIm9uQ2xvc2UiKSwgbiAmJiBuLmFwcGx5KG8uaW5wdXQgPyBvLmlucHV0WzBdIDogbnVsbCwgW28uaW5wdXQgPyBvLmlucHV0LnZhbCgpIDogIiIsIG9dKSwgdGhpcy5fbGFzdElucHV0ID0gbnVsbCwgdGhpcy5faW5EaWFsb2cgJiYgKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBsZWZ0OiAiMCIsIHRvcDogIi0xMDBweCIgfSksIGUuYmxvY2tVSSAmJiAoZS51bmJsb2NrVUkoKSwgZSgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLCB0aGlzLl9pbkRpYWxvZyA9ICExKSB9LCBfdGlkeURpYWxvZzogZnVuY3Rpb24gKGUpIHsgZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpIH0sIF9jaGVja0V4dGVybmFsQ2xpY2s6IGZ1bmN0aW9uICh0KSB7IGlmIChlLmRhdGVwaWNrZXIuX2N1ckluc3QpIHsgdmFyIGkgPSBlKHQudGFyZ2V0KSwgYSA9IGUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsgKGlbMF0uaWQgIT09IGUuZGF0ZXBpY2tlci5fbWFpbkRpdklkICYmIDAgPT09IGkucGFyZW50cygiIyIgKyBlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoICYmICFpLmhhc0NsYXNzKGUuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpICYmICFpLmNsb3Nlc3QoIi4iICsgZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCAmJiBlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICghZS5kYXRlcGlja2VyLl9pbkRpYWxvZyB8fCAhZS5ibG9ja1VJKSB8fCBpLmhhc0NsYXNzKGUuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpICYmIGUuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gYSkgJiYgZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpIH0gfSwgX2FkanVzdERhdGU6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKHNbMF0pIHx8ICh0aGlzLl9hZGp1c3RJbnN0RGF0ZShuLCBpICsgKCJNIiA9PT0gYSA/IHRoaXMuX2dldChuLCAic2hvd0N1cnJlbnRBdFBvcyIpIDogMCksIGEpLCB0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pKSB9LCBfZ290b1RvZGF5OiBmdW5jdGlvbiAodCkgeyB2YXIgaSwgYSA9IGUodCksIHMgPSB0aGlzLl9nZXRJbnN0KGFbMF0pOyB0aGlzLl9nZXQocywgImdvdG9DdXJyZW50IikgJiYgcy5jdXJyZW50RGF5ID8gKHMuc2VsZWN0ZWREYXkgPSBzLmN1cnJlbnREYXksIHMuZHJhd01vbnRoID0gcy5zZWxlY3RlZE1vbnRoID0gcy5jdXJyZW50TW9udGgsIHMuZHJhd1llYXIgPSBzLnNlbGVjdGVkWWVhciA9IHMuY3VycmVudFllYXIpIDogKGkgPSBuZXcgRGF0ZSwgcy5zZWxlY3RlZERheSA9IGkuZ2V0RGF0ZSgpLCBzLmRyYXdNb250aCA9IHMuc2VsZWN0ZWRNb250aCA9IGkuZ2V0TW9udGgoKSwgcy5kcmF3WWVhciA9IHMuc2VsZWN0ZWRZZWFyID0gaS5nZXRGdWxsWWVhcigpKSwgdGhpcy5fbm90aWZ5Q2hhbmdlKHMpLCB0aGlzLl9hZGp1c3REYXRlKGEpIH0sIF9zZWxlY3RNb250aFllYXI6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IG5bInNlbGVjdGVkIiArICgiTSIgPT09IGEgPyAiTW9udGgiIDogIlllYXIiKV0gPSBuWyJkcmF3IiArICgiTSIgPT09IGEgPyAiTW9udGgiIDogIlllYXIiKV0gPSBwYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwgMTApLCB0aGlzLl9ub3RpZnlDaGFuZ2UobiksIHRoaXMuX2FkanVzdERhdGUocykgfSwgX3NlbGVjdERheTogZnVuY3Rpb24gKHQsIGksIGEsIHMpIHsgdmFyIG4sIHIgPSBlKHQpOyBlKHMpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKSB8fCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKSB8fCAobiA9IHRoaXMuX2dldEluc3QoclswXSksIG4uc2VsZWN0ZWREYXkgPSBuLmN1cnJlbnREYXkgPSBlKCJhIiwgcykuaHRtbCgpLCBuLnNlbGVjdGVkTW9udGggPSBuLmN1cnJlbnRNb250aCA9IGksIG4uc2VsZWN0ZWRZZWFyID0gbi5jdXJyZW50WWVhciA9IGEsIHRoaXMuX3NlbGVjdERhdGUodCwgdGhpcy5fZm9ybWF0RGF0ZShuLCBuLmN1cnJlbnREYXksIG4uY3VycmVudE1vbnRoLCBuLmN1cnJlbnRZZWFyKSkpIH0sIF9jbGVhckRhdGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gZSh0KTsgdGhpcy5fc2VsZWN0RGF0ZShpLCAiIikgfSwgX3NlbGVjdERhdGU6IGZ1bmN0aW9uICh0LCBpKSB7IHZhciBhLCBzID0gZSh0KSwgbiA9IHRoaXMuX2dldEluc3Qoc1swXSk7IGkgPSBudWxsICE9IGkgPyBpIDogdGhpcy5fZm9ybWF0RGF0ZShuKSwgbi5pbnB1dCAmJiBuLmlucHV0LnZhbChpKSwgdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG4pLCBhID0gdGhpcy5fZ2V0KG4sICJvblNlbGVjdCIpLCBhID8gYS5hcHBseShuLmlucHV0ID8gbi5pbnB1dFswXSA6IG51bGwsIFtpLCBuXSkgOiBuLmlucHV0ICYmIG4uaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksIG4uaW5saW5lID8gdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKSA6ICh0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLCB0aGlzLl9sYXN0SW5wdXQgPSBuLmlucHV0WzBdLCAib2JqZWN0IiAhPSB0eXBlb2Ygbi5pbnB1dFswXSAmJiBuLmlucHV0LmZvY3VzKCksIHRoaXMuX2xhc3RJbnB1dCA9IG51bGwpIH0sIF91cGRhdGVBbHRlcm5hdGU6IGZ1bmN0aW9uICh0KSB7IHZhciBpLCBhLCBzLCBuID0gdGhpcy5fZ2V0KHQsICJhbHRGaWVsZCIpOyBuICYmIChpID0gdGhpcy5fZ2V0KHQsICJhbHRGb3JtYXQiKSB8fCB0aGlzLl9nZXQodCwgImRhdGVGb3JtYXQiKSwgYSA9IHRoaXMuX2dldERhdGUodCksIHMgPSB0aGlzLmZvcm1hdERhdGUoaSwgYSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSwgZShuKS5lYWNoKGZ1bmN0aW9uICgpIHsgZSh0aGlzKS52YWwocykgfSkpIH0sIG5vV2Vla2VuZHM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gZS5nZXREYXkoKTsgcmV0dXJuIFt0ID4gMCAmJiA2ID4gdCwgIiJdIH0sIGlzbzg2MDFXZWVrOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgaSA9IG5ldyBEYXRlKGUuZ2V0VGltZSgpKTsgcmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSArIDQgLSAoaS5nZXREYXkoKSB8fCA3KSksIHQgPSBpLmdldFRpbWUoKSwgaS5zZXRNb250aCgwKSwgaS5zZXREYXRlKDEpLCBNYXRoLmZsb29yKE1hdGgucm91bmQoKHQgLSBpKSAvIDg2NGU1KSAvIDcpICsgMSB9LCBwYXJzZURhdGU6IGZ1bmN0aW9uIChpLCBhLCBzKSB7IGlmIChudWxsID09IGkgfHwgbnVsbCA9PSBhKSB0aHJvdyAiSW52YWxpZCBhcmd1bWVudHMiOyBpZiAoYSA9ICJvYmplY3QiID09IHR5cGVvZiBhID8gIiIgKyBhIDogYSArICIiLCAiIiA9PT0gYSkgcmV0dXJuIG51bGw7IHZhciBuLCByLCBvLCB1LCBjID0gMCwgaCA9IChzID8gcy5zaG9ydFllYXJDdXRvZmYgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsIGwgPSAic3RyaW5nIiAhPSB0eXBlb2YgaCA/IGggOiAobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKyBwYXJzZUludChoLCAxMCksIGQgPSAocyA/IHMuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsIHAgPSAocyA/IHMuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcywgZyA9IChzID8gcy5tb250aE5hbWVzU2hvcnQgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsIG0gPSAocyA/IHMubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsIGYgPSAtMSwgXyA9IC0xLCB2ID0gLTEsIGsgPSAtMSwgeSA9ICExLCBiID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBpLmxlbmd0aCA+IG4gKyAxICYmIGkuY2hhckF0KG4gKyAxKSA9PT0gZTsgcmV0dXJuIHQgJiYgbisrLCB0IH0sIEQgPSBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IGIoZSksIGkgPSAiQCIgPT09IGUgPyAxNCA6ICIhIiA9PT0gZSA/IDIwIDogInkiID09PSBlICYmIHQgPyA0IDogIm8iID09PSBlID8gMyA6IDIsIHMgPSBSZWdFeHAoIl5cXGR7MSwiICsgaSArICJ9IiksIG4gPSBhLnN1YnN0cmluZyhjKS5tYXRjaChzKTsgaWYgKCFuKSB0aHJvdyAiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIiArIGM7IHJldHVybiBjICs9IG5bMF0ubGVuZ3RoLCBwYXJzZUludChuWzBdLCAxMCkgfSwgdyA9IGZ1bmN0aW9uIChpLCBzLCBuKSB7IHZhciByID0gLTEsIG8gPSBlLm1hcChiKGkpID8gbiA6IHMsIGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiBbW3QsIGVdXSB9KS5zb3J0KGZ1bmN0aW9uIChlLCB0KSB7IHJldHVybiAtKGVbMV0ubGVuZ3RoIC0gdFsxXS5sZW5ndGgpIH0pOyBpZiAoZS5lYWNoKG8sIGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gaVsxXTsgcmV0dXJuIGEuc3Vic3RyKGMsIHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBzLnRvTG93ZXJDYXNlKCkgPyAociA9IGlbMF0sIGMgKz0gcy5sZW5ndGgsICExKSA6IHQgfSksIC0xICE9PSByKSByZXR1cm4gciArIDE7IHRocm93ICJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gIiArIGMgfSwgTSA9IGZ1bmN0aW9uICgpIHsgaWYgKGEuY2hhckF0KGMpICE9PSBpLmNoYXJBdChuKSkgdGhyb3cgIlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiICsgYzsgYysrIH07IGZvciAobiA9IDA7IGkubGVuZ3RoID4gbjsgbisrKSBpZiAoeSkgIiciICE9PSBpLmNoYXJBdChuKSB8fCBiKCInIikgPyBNKCkgOiB5ID0gITE7IGVsc2Ugc3dpdGNoIChpLmNoYXJBdChuKSkgeyBjYXNlICJkIjogdiA9IEQoImQiKTsgYnJlYWs7IGNhc2UgIkQiOiB3KCJEIiwgZCwgcCk7IGJyZWFrOyBjYXNlICJvIjogayA9IEQoIm8iKTsgYnJlYWs7IGNhc2UgIm0iOiBfID0gRCgibSIpOyBicmVhazsgY2FzZSAiTSI6IF8gPSB3KCJNIiwgZywgbSk7IGJyZWFrOyBjYXNlICJ5IjogZiA9IEQoInkiKTsgYnJlYWs7IGNhc2UgIkAiOiB1ID0gbmV3IERhdGUoRCgiQCIpKSwgZiA9IHUuZ2V0RnVsbFllYXIoKSwgXyA9IHUuZ2V0TW9udGgoKSArIDEsIHYgPSB1LmdldERhdGUoKTsgYnJlYWs7IGNhc2UgIiEiOiB1ID0gbmV3IERhdGUoKEQoIiEiKSAtIHRoaXMuX3RpY2tzVG8xOTcwKSAvIDFlNCksIGYgPSB1LmdldEZ1bGxZZWFyKCksIF8gPSB1LmdldE1vbnRoKCkgKyAxLCB2ID0gdS5nZXREYXRlKCk7IGJyZWFrOyBjYXNlICInIjogYigiJyIpID8gTSgpIDogeSA9ICEwOyBicmVhazsgZGVmYXVsdDogTSgpIH0gaWYgKGEubGVuZ3RoID4gYyAmJiAobyA9IGEuc3Vic3RyKGMpLCAhL15ccysvLnRlc3QobykpKSB0aHJvdyAiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiICsgbzsgaWYgKC0xID09PSBmID8gZiA9IChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSA6IDEwMCA+IGYgJiYgKGYgKz0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpIC0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpICUgMTAwICsgKGwgPj0gZiA/IDAgOiAtMTAwKSksIGsgPiAtMSkgZm9yIChfID0gMSwgdiA9IGs7IDspIHsgaWYgKHIgPSB0aGlzLl9nZXREYXlzSW5Nb250aChmLCBfIC0gMSksIHIgPj0gdikgYnJlYWs7IF8rKywgdiAtPSByIH0gaWYgKHUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShmLCBfIC0gMSwgdikpLCB1LmdldEZ1bGxZZWFyKCkgIT09IGYgfHwgdS5nZXRNb250aCgpICsgMSAhPT0gXyB8fCB1LmdldERhdGUoKSAhPT0gdikgdGhyb3cgIkludmFsaWQgZGF0ZSI7IHJldHVybiB1IH0sIEFUT006ICJ5eS1tbS1kZCIsIENPT0tJRTogIkQsIGRkIE0geXkiLCBJU09fODYwMTogInl5LW1tLWRkIiwgUkZDXzgyMjogIkQsIGQgTSB5IiwgUkZDXzg1MDogIkRELCBkZC1NLXkiLCBSRkNfMTAzNjogIkQsIGQgTSB5IiwgUkZDXzExMjM6ICJELCBkIE0geXkiLCBSRkNfMjgyMjogIkQsIGQgTSB5eSIsIFJTUzogIkQsIGQgTSB5IiwgVElDS1M6ICIhIiwgVElNRVNUQU1QOiAiQCIsIFczQzogInl5LW1tLWRkIiwgX3RpY2tzVG8xOTcwOiAxZTcgKiA2MCAqIDYwICogMjQgKiAoNzE4Njg1ICsgTWF0aC5mbG9vcig0OTIuNSkgLSBNYXRoLmZsb29yKDE5LjcpICsgTWF0aC5mbG9vcig0LjkyNSkpLCBmb3JtYXREYXRlOiBmdW5jdGlvbiAoZSwgdCwgaSkgeyBpZiAoIXQpIHJldHVybiAiIjsgdmFyIGEsIHMgPSAoaSA/IGkuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsIG4gPSAoaSA/IGkuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcywgciA9IChpID8gaS5tb250aE5hbWVzU2hvcnQgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsIG8gPSAoaSA/IGkubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsIHUgPSBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGUubGVuZ3RoID4gYSArIDEgJiYgZS5jaGFyQXQoYSArIDEpID09PSB0OyByZXR1cm4gaSAmJiBhKyssIGkgfSwgYyA9IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHZhciBhID0gIiIgKyB0OyBpZiAodShlKSkgZm9yICg7IGkgPiBhLmxlbmd0aDspIGEgPSAiMCIgKyBhOyByZXR1cm4gYSB9LCBoID0gZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgcmV0dXJuIHUoZSkgPyBhW3RdIDogaVt0XSB9LCBsID0gIiIsIGQgPSAhMTsgaWYgKHQpIGZvciAoYSA9IDA7IGUubGVuZ3RoID4gYTsgYSsrKSBpZiAoZCkgIiciICE9PSBlLmNoYXJBdChhKSB8fCB1KCInIikgPyBsICs9IGUuY2hhckF0KGEpIDogZCA9ICExOyBlbHNlIHN3aXRjaCAoZS5jaGFyQXQoYSkpIHsgY2FzZSAiZCI6IGwgKz0gYygiZCIsIHQuZ2V0RGF0ZSgpLCAyKTsgYnJlYWs7IGNhc2UgIkQiOiBsICs9IGgoIkQiLCB0LmdldERheSgpLCBzLCBuKTsgYnJlYWs7IGNhc2UgIm8iOiBsICs9IGMoIm8iLCBNYXRoLnJvdW5kKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksIHQuZ2V0TW9udGgoKSwgdC5nZXREYXRlKCkpLmdldFRpbWUoKSAtIG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSwgMCwgMCkuZ2V0VGltZSgpKSAvIDg2NGU1KSwgMyk7IGJyZWFrOyBjYXNlICJtIjogbCArPSBjKCJtIiwgdC5nZXRNb250aCgpICsgMSwgMik7IGJyZWFrOyBjYXNlICJNIjogbCArPSBoKCJNIiwgdC5nZXRNb250aCgpLCByLCBvKTsgYnJlYWs7IGNhc2UgInkiOiBsICs9IHUoInkiKSA/IHQuZ2V0RnVsbFllYXIoKSA6ICgxMCA+IHQuZ2V0WWVhcigpICUgMTAwID8gIjAiIDogIiIpICsgdC5nZXRZZWFyKCkgJSAxMDA7IGJyZWFrOyBjYXNlICJAIjogbCArPSB0LmdldFRpbWUoKTsgYnJlYWs7IGNhc2UgIiEiOiBsICs9IDFlNCAqIHQuZ2V0VGltZSgpICsgdGhpcy5fdGlja3NUbzE5NzA7IGJyZWFrOyBjYXNlICInIjogdSgiJyIpID8gbCArPSAiJyIgOiBkID0gITA7IGJyZWFrOyBkZWZhdWx0OiBsICs9IGUuY2hhckF0KGEpIH0gcmV0dXJuIGwgfSwgX3Bvc3NpYmxlQ2hhcnM6IGZ1bmN0aW9uIChlKSB7IHZhciB0LCBpID0gIiIsIGEgPSAhMSwgcyA9IGZ1bmN0aW9uIChpKSB7IHZhciBhID0gZS5sZW5ndGggPiB0ICsgMSAmJiBlLmNoYXJBdCh0ICsgMSkgPT09IGk7IHJldHVybiBhICYmIHQrKywgYSB9OyBmb3IgKHQgPSAwOyBlLmxlbmd0aCA+IHQ7IHQrKykgaWYgKGEpICInIiAhPT0gZS5jaGFyQXQodCkgfHwgcygiJyIpID8gaSArPSBlLmNoYXJBdCh0KSA6IGEgPSAhMTsgZWxzZSBzd2l0Y2ggKGUuY2hhckF0KHQpKSB7IGNhc2UgImQiOiBjYXNlICJtIjogY2FzZSAieSI6IGNhc2UgIkAiOiBpICs9ICIwMTIzNDU2Nzg5IjsgYnJlYWs7IGNhc2UgIkQiOiBjYXNlICJNIjogcmV0dXJuIG51bGw7IGNhc2UgIiciOiBzKCInIikgPyBpICs9ICInIiA6IGEgPSAhMDsgYnJlYWs7IGRlZmF1bHQ6IGkgKz0gZS5jaGFyQXQodCkgfSByZXR1cm4gaSB9LCBfZ2V0OiBmdW5jdGlvbiAoZSwgaSkgeyByZXR1cm4gZS5zZXR0aW5nc1tpXSAhPT0gdCA/IGUuc2V0dGluZ3NbaV0gOiB0aGlzLl9kZWZhdWx0c1tpXSB9LCBfc2V0RGF0ZUZyb21GaWVsZDogZnVuY3Rpb24gKGUsIHQpIHsgaWYgKGUuaW5wdXQudmFsKCkgIT09IGUubGFzdFZhbCkgeyB2YXIgaSA9IHRoaXMuX2dldChlLCAiZGF0ZUZvcm1hdCIpLCBhID0gZS5sYXN0VmFsID0gZS5pbnB1dCA/IGUuaW5wdXQudmFsKCkgOiBudWxsLCBzID0gdGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksIG4gPSBzLCByID0gdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpOyB0cnkgeyBuID0gdGhpcy5wYXJzZURhdGUoaSwgYSwgcikgfHwgcyB9IGNhdGNoIChvKSB7IGEgPSB0ID8gIiIgOiBhIH0gZS5zZWxlY3RlZERheSA9IG4uZ2V0RGF0ZSgpLCBlLmRyYXdNb250aCA9IGUuc2VsZWN0ZWRNb250aCA9IG4uZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gbi5nZXRGdWxsWWVhcigpLCBlLmN1cnJlbnREYXkgPSBhID8gbi5nZXREYXRlKCkgOiAwLCBlLmN1cnJlbnRNb250aCA9IGEgPyBuLmdldE1vbnRoKCkgOiAwLCBlLmN1cnJlbnRZZWFyID0gYSA/IG4uZ2V0RnVsbFllYXIoKSA6IDAsIHRoaXMuX2FkanVzdEluc3REYXRlKGUpIH0gfSwgX2dldERlZmF1bHREYXRlOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSwgdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLCB0aGlzLl9nZXQoZSwgImRlZmF1bHREYXRlIiksIG5ldyBEYXRlKSkgfSwgX2RldGVybWluZURhdGU6IGZ1bmN0aW9uICh0LCBpLCBhKSB7IHZhciBzID0gZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSBuZXcgRGF0ZTsgcmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKSArIGUpLCB0IH0sIG4gPSBmdW5jdGlvbiAoaSkgeyB0cnkgeyByZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCAiZGF0ZUZvcm1hdCIpLCBpLCBlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSkgfSBjYXRjaCAoYSkgeyB9IGZvciAodmFyIHMgPSAoaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pID8gZS5kYXRlcGlja2VyLl9nZXREYXRlKHQpIDogbnVsbCkgfHwgbmV3IERhdGUsIG4gPSBzLmdldEZ1bGxZZWFyKCksIHIgPSBzLmdldE1vbnRoKCksIG8gPSBzLmdldERhdGUoKSwgdSA9IC8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLCBjID0gdS5leGVjKGkpIDsgYzspIHsgc3dpdGNoIChjWzJdIHx8ICJkIikgeyBjYXNlICJkIjogY2FzZSAiRCI6IG8gKz0gcGFyc2VJbnQoY1sxXSwgMTApOyBicmVhazsgY2FzZSAidyI6IGNhc2UgIlciOiBvICs9IDcgKiBwYXJzZUludChjWzFdLCAxMCk7IGJyZWFrOyBjYXNlICJtIjogY2FzZSAiTSI6IHIgKz0gcGFyc2VJbnQoY1sxXSwgMTApLCBvID0gTWF0aC5taW4obywgZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLCByKSk7IGJyZWFrOyBjYXNlICJ5IjogY2FzZSAiWSI6IG4gKz0gcGFyc2VJbnQoY1sxXSwgMTApLCBvID0gTWF0aC5taW4obywgZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLCByKSkgfSBjID0gdS5leGVjKGkpIH0gcmV0dXJuIG5ldyBEYXRlKG4sIHIsIG8pIH0sIHIgPSBudWxsID09IGkgfHwgIiIgPT09IGkgPyBhIDogInN0cmluZyIgPT0gdHlwZW9mIGkgPyBuKGkpIDogIm51bWJlciIgPT0gdHlwZW9mIGkgPyBpc05hTihpKSA/IGEgOiBzKGkpIDogbmV3IERhdGUoaS5nZXRUaW1lKCkpOyByZXR1cm4gciA9IHIgJiYgIkludmFsaWQgRGF0ZSIgPT0gIiIgKyByID8gYSA6IHIsIHIgJiYgKHIuc2V0SG91cnMoMCksIHIuc2V0TWludXRlcygwKSwgci5zZXRTZWNvbmRzKDApLCByLnNldE1pbGxpc2Vjb25kcygwKSksIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHIpIH0sIF9kYXlsaWdodFNhdmluZ0FkanVzdDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyAoZS5zZXRIb3VycyhlLmdldEhvdXJzKCkgPiAxMiA/IGUuZ2V0SG91cnMoKSArIDIgOiAwKSwgZSkgOiBudWxsIH0sIF9zZXREYXRlOiBmdW5jdGlvbiAoZSwgdCwgaSkgeyB2YXIgYSA9ICF0LCBzID0gZS5zZWxlY3RlZE1vbnRoLCBuID0gZS5zZWxlY3RlZFllYXIsIHIgPSB0aGlzLl9yZXN0cmljdE1pbk1heChlLCB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsIHQsIG5ldyBEYXRlKSk7IGUuc2VsZWN0ZWREYXkgPSBlLmN1cnJlbnREYXkgPSByLmdldERhdGUoKSwgZS5kcmF3TW9udGggPSBlLnNlbGVjdGVkTW9udGggPSBlLmN1cnJlbnRNb250aCA9IHIuZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gZS5jdXJyZW50WWVhciA9IHIuZ2V0RnVsbFllYXIoKSwgcyA9PT0gZS5zZWxlY3RlZE1vbnRoICYmIG4gPT09IGUuc2VsZWN0ZWRZZWFyIHx8IGkgfHwgdGhpcy5fbm90aWZ5Q2hhbmdlKGUpLCB0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKSwgZS5pbnB1dCAmJiBlLmlucHV0LnZhbChhID8gIiIgOiB0aGlzLl9mb3JtYXREYXRlKGUpKSB9LCBfZ2V0RGF0ZTogZnVuY3Rpb24gKGUpIHsgdmFyIHQgPSAhZS5jdXJyZW50WWVhciB8fCBlLmlucHV0ICYmICIiID09PSBlLmlucHV0LnZhbCgpID8gbnVsbCA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpKTsgcmV0dXJuIHQgfSwgX2F0dGFjaEhhbmRsZXJzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IHRoaXMuX2dldCh0LCAic3RlcE1vbnRocyIpLCBhID0gIiMiICsgdC5pZC5yZXBsYWNlKC9cXFxcL2csICJcXCIpOyB0LmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB7IHByZXY6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEsIC1pLCAiTSIpIH0sIG5leHQ6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGEsICtpLCAiTSIpIH0sIGhpZGU6IGZ1bmN0aW9uICgpIHsgZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpIH0sIHRvZGF5OiBmdW5jdGlvbiAoKSB7IGUuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGEpIH0sIHNlbGVjdERheTogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkoYSwgK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksICt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS15ZWFyIiksIHRoaXMpLCAhMSB9LCBzZWxlY3RNb250aDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYSwgdGhpcywgIk0iKSwgITEgfSwgc2VsZWN0WWVhcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoYSwgdGhpcywgIlkiKSwgITEgfSB9OyBlKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSwgdFt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1oYW5kbGVyIildKSB9KSB9LCBfZ2VuZXJhdGVIVE1MOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCwgaSwgYSwgcywgbiwgciwgbywgdSwgYywgaCwgbCwgZCwgcCwgZywgbSwgZiwgXywgdiwgaywgeSwgYiwgRCwgdywgTSwgQywgeCwgSSwgTiwgVCwgQSwgRSwgUywgWSwgRiwgUCwgTywgaiwgSywgUiwgSCA9IG5ldyBEYXRlLCBXID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSC5nZXRGdWxsWWVhcigpLCBILmdldE1vbnRoKCksIEguZ2V0RGF0ZSgpKSksIEwgPSB0aGlzLl9nZXQoZSwgImlzUlRMIiksIFUgPSB0aGlzLl9nZXQoZSwgInNob3dCdXR0b25QYW5lbCIpLCBCID0gdGhpcy5fZ2V0KGUsICJoaWRlSWZOb1ByZXZOZXh0IiksIHogPSB0aGlzLl9nZXQoZSwgIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSwgcSA9IHRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLCBHID0gdGhpcy5fZ2V0KGUsICJzaG93Q3VycmVudEF0UG9zIiksIEogPSB0aGlzLl9nZXQoZSwgInN0ZXBNb250aHMiKSwgUSA9IDEgIT09IHFbMF0gfHwgMSAhPT0gcVsxXSwgViA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUuY3VycmVudERheSA/IG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpIDogbmV3IERhdGUoOTk5OSwgOSwgOSkpLCAkID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShlLCAibWluIiksIFggPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtYXgiKSwgWiA9IGUuZHJhd01vbnRoIC0gRywgZXQgPSBlLmRyYXdZZWFyOyBpZiAoMCA+IFogJiYgKFogKz0gMTIsIGV0LS0pLCBYKSBmb3IgKHQgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShYLmdldEZ1bGxZZWFyKCksIFguZ2V0TW9udGgoKSAtIHFbMF0gKiBxWzFdICsgMSwgWC5nZXREYXRlKCkpKSwgdCA9ICQgJiYgJCA+IHQgPyAkIDogdDsgdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsIFosIDEpKSA+IHQ7KSBaLS0sIDAgPiBaICYmIChaID0gMTEsIGV0LS0pOyBmb3IgKGUuZHJhd01vbnRoID0gWiwgZS5kcmF3WWVhciA9IGV0LCBpID0gdGhpcy5fZ2V0KGUsICJwcmV2VGV4dCIpLCBpID0geiA/IHRoaXMuZm9ybWF0RGF0ZShpLCB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCwgWiAtIEosIDEpKSwgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSA6IGksIGEgPSB0aGlzLl9jYW5BZGp1c3RNb250aChlLCAtMSwgZXQsIFopID8gIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdwcmV2JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIgKyBpICsgIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIiArIChMID8gImUiIDogInciKSArICInPiIgKyBpICsgIjwvc3Bhbj48L2E+IiA6IEIgPyAiIiA6ICI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciICsgaSArICInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIgKyAoTCA/ICJlIiA6ICJ3IikgKyAiJz4iICsgaSArICI8L3NwYW4+PC9hPiIsIHMgPSB0aGlzLl9nZXQoZSwgIm5leHRUZXh0IiksIHMgPSB6ID8gdGhpcy5mb3JtYXREYXRlKHMsIHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LCBaICsgSiwgMSkpLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpIDogcywgbiA9IHRoaXMuX2NhbkFkanVzdE1vbnRoKGUsIDEsIGV0LCBaKSA/ICI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0nbmV4dCcgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSciICsgcyArICInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIgKyAoTCA/ICJ3IiA6ICJlIikgKyAiJz4iICsgcyArICI8L3NwYW4+PC9hPiIgOiBCID8gIiIgOiAiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIiArIHMgKyAiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iICsgKEwgPyAidyIgOiAiZSIpICsgIic+IiArIHMgKyAiPC9zcGFuPjwvYT4iLCByID0gdGhpcy5fZ2V0KGUsICJjdXJyZW50VGV4dCIpLCBvID0gdGhpcy5fZ2V0KGUsICJnb3RvQ3VycmVudCIpICYmIGUuY3VycmVudERheSA/IFYgOiBXLCByID0geiA/IHRoaXMuZm9ybWF0RGF0ZShyLCBvLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpIDogciwgdSA9IGUuaW5saW5lID8gIiIgOiAiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iICsgdGhpcy5fZ2V0KGUsICJjbG9zZVRleHQiKSArICI8L2J1dHRvbj4iLCBjID0gVSA/ICI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPiIgKyAoTCA/IHUgOiAiIikgKyAodGhpcy5faXNJblJhbmdlKGUsIG8pID8gIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iICsgciArICI8L2J1dHRvbj4iIDogIiIpICsgKEwgPyAiIiA6IHUpICsgIjwvZGl2PiIgOiAiIiwgaCA9IHBhcnNlSW50KHRoaXMuX2dldChlLCAiZmlyc3REYXkiKSwgMTApLCBoID0gaXNOYU4oaCkgPyAwIDogaCwgbCA9IHRoaXMuX2dldChlLCAic2hvd1dlZWsiKSwgZCA9IHRoaXMuX2dldChlLCAiZGF5TmFtZXMiKSwgcCA9IHRoaXMuX2dldChlLCAiZGF5TmFtZXNNaW4iKSwgZyA9IHRoaXMuX2dldChlLCAibW9udGhOYW1lcyIpLCBtID0gdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzU2hvcnQiKSwgZiA9IHRoaXMuX2dldChlLCAiYmVmb3JlU2hvd0RheSIpLCBfID0gdGhpcy5fZ2V0KGUsICJzaG93T3RoZXJNb250aHMiKSwgdiA9IHRoaXMuX2dldChlLCAic2VsZWN0T3RoZXJNb250aHMiKSwgayA9IHRoaXMuX2dldERlZmF1bHREYXRlKGUpLCB5ID0gIiIsIEQgPSAwOyBxWzBdID4gRDsgRCsrKSB7IGZvciAodyA9ICIiLCB0aGlzLm1heFJvd3MgPSA0LCBNID0gMDsgcVsxXSA+IE07IE0rKykgeyBpZiAoQyA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LCBaLCBlLnNlbGVjdGVkRGF5KSksIHggPSAiIHVpLWNvcm5lci1hbGwiLCBJID0gIiIsIFEpIHsgaWYgKEkgKz0gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiLCBxWzFdID4gMSkgc3dpdGNoIChNKSB7IGNhc2UgMDogSSArPSAiIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLCB4ID0gIiB1aS1jb3JuZXItIiArIChMID8gInJpZ2h0IiA6ICJsZWZ0Iik7IGJyZWFrOyBjYXNlIHFbMV0gLSAxOiBJICs9ICIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IiwgeCA9ICIgdWktY29ybmVyLSIgKyAoTCA/ICJsZWZ0IiA6ICJyaWdodCIpOyBicmVhazsgZGVmYXVsdDogSSArPSAiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIiwgeCA9ICIiIH0gSSArPSAiJz4iIH0gZm9yIChJICs9ICI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCIgKyB4ICsgIic+IiArICgvYWxsfGxlZnQvLnRlc3QoeCkgJiYgMCA9PT0gRCA/IEwgPyBuIDogYSA6ICIiKSArICgvYWxsfHJpZ2h0Ly50ZXN0KHgpICYmIDAgPT09IEQgPyBMID8gYSA6IG4gOiAiIikgKyB0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLCBaLCBldCwgJCwgWCwgRCA+IDAgfHwgTSA+IDAsIGcsIG0pICsgIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPiIgKyAiPHRyPiIsIE4gPSBsID8gIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+IiArIHRoaXMuX2dldChlLCAid2Vla0hlYWRlciIpICsgIjwvdGg+IiA6ICIiLCBiID0gMDsgNyA+IGI7IGIrKykgVCA9IChiICsgaCkgJSA3LCBOICs9ICI8dGgiICsgKChiICsgaCArIDYpICUgNyA+PSA1ID8gIiBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWVuZCciIDogIiIpICsgIj4iICsgIjxzcGFuIHRpdGxlPSciICsgZFtUXSArICInPiIgKyBwW1RdICsgIjwvc3Bhbj48L3RoPiI7IGZvciAoSSArPSBOICsgIjwvdHI+PC90aGVhZD48dGJvZHk+IiwgQSA9IHRoaXMuX2dldERheXNJbk1vbnRoKGV0LCBaKSwgZXQgPT09IGUuc2VsZWN0ZWRZZWFyICYmIFogPT09IGUuc2VsZWN0ZWRNb250aCAmJiAoZS5zZWxlY3RlZERheSA9IE1hdGgubWluKGUuc2VsZWN0ZWREYXksIEEpKSwgRSA9ICh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoZXQsIFopIC0gaCArIDcpICUgNywgUyA9IE1hdGguY2VpbCgoRSArIEEpIC8gNyksIFkgPSBRID8gdGhpcy5tYXhSb3dzID4gUyA/IHRoaXMubWF4Um93cyA6IFMgOiBTLCB0aGlzLm1heFJvd3MgPSBZLCBGID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsIFosIDEgLSBFKSksIFAgPSAwOyBZID4gUDsgUCsrKSB7IGZvciAoSSArPSAiPHRyPiIsIE8gPSBsID8gIjx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+IiArIHRoaXMuX2dldChlLCAiY2FsY3VsYXRlV2VlayIpKEYpICsgIjwvdGQ+IiA6ICIiLCBiID0gMDsgNyA+IGI7IGIrKykgaiA9IGYgPyBmLmFwcGx5KGUuaW5wdXQgPyBlLmlucHV0WzBdIDogbnVsbCwgW0ZdKSA6IFshMCwgIiJdLCBLID0gRi5nZXRNb250aCgpICE9PSBaLCBSID0gSyAmJiAhdiB8fCAhalswXSB8fCAkICYmICQgPiBGIHx8IFggJiYgRiA+IFgsIE8gKz0gIjx0ZCBjbGFzcz0nIiArICgoYiArIGggKyA2KSAlIDcgPj0gNSA/ICIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZCIgOiAiIikgKyAoSyA/ICIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCIgOiAiIikgKyAoRi5nZXRUaW1lKCkgPT09IEMuZ2V0VGltZSgpICYmIFogPT09IGUuc2VsZWN0ZWRNb250aCAmJiBlLl9rZXlFdmVudCB8fCBrLmdldFRpbWUoKSA9PT0gRi5nZXRUaW1lKCkgJiYgay5nZXRUaW1lKCkgPT09IEMuZ2V0VGltZSgpID8gIiAiICsgdGhpcy5fZGF5T3ZlckNsYXNzIDogIiIpICsgKFIgPyAiICIgKyB0aGlzLl91bnNlbGVjdGFibGVDbGFzcyArICIgdWktc3RhdGUtZGlzYWJsZWQiIDogIiIpICsgKEsgJiYgIV8gPyAiIiA6ICIgIiArIGpbMV0gKyAoRi5nZXRUaW1lKCkgPT09IFYuZ2V0VGltZSgpID8gIiAiICsgdGhpcy5fY3VycmVudENsYXNzIDogIiIpICsgKEYuZ2V0VGltZSgpID09PSBXLmdldFRpbWUoKSA/ICIgdWktZGF0ZXBpY2tlci10b2RheSIgOiAiIikpICsgIiciICsgKEsgJiYgIV8gfHwgIWpbMl0gPyAiIiA6ICIgdGl0bGU9JyIgKyBqWzJdLnJlcGxhY2UoLycvZywgIiYjMzk7IikgKyAiJyIpICsgKFIgPyAiIiA6ICIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSciICsgRi5nZXRNb250aCgpICsgIicgZGF0YS15ZWFyPSciICsgRi5nZXRGdWxsWWVhcigpICsgIiciKSArICI+IiArIChLICYmICFfID8gIiYjeGEwOyIgOiBSID8gIjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iICsgRi5nZXREYXRlKCkgKyAiPC9zcGFuPiIgOiAiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQiICsgKEYuZ2V0VGltZSgpID09PSBXLmdldFRpbWUoKSA/ICIgdWktc3RhdGUtaGlnaGxpZ2h0IiA6ICIiKSArIChGLmdldFRpbWUoKSA9PT0gVi5nZXRUaW1lKCkgPyAiIHVpLXN0YXRlLWFjdGl2ZSIgOiAiIikgKyAoSyA/ICIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IiA6ICIiKSArICInIGhyZWY9JyMnPiIgKyBGLmdldERhdGUoKSArICI8L2E+IikgKyAiPC90ZD4iLCBGLnNldERhdGUoRi5nZXREYXRlKCkgKyAxKSwgRiA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEYpOyBJICs9IE8gKyAiPC90cj4iIH0gWisrLCBaID4gMTEgJiYgKFogPSAwLCBldCsrKSwgSSArPSAiPC90Ym9keT48L3RhYmxlPiIgKyAoUSA/ICI8L2Rpdj4iICsgKHFbMF0gPiAwICYmIE0gPT09IHFbMV0gLSAxID8gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj4iIDogIiIpIDogIiIpLCB3ICs9IEkgfSB5ICs9IHcgfSByZXR1cm4geSArPSBjLCBlLl9rZXlFdmVudCA9ICExLCB5IH0sIF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjogZnVuY3Rpb24gKGUsIHQsIGksIGEsIHMsIG4sIHIsIG8pIHsNCiAgICAgICAgICAgIHZhciB1LCBjLCBoLCBsLCBkLCBwLCBnLCBtLCBmID0gdGhpcy5fZ2V0KGUsICJjaGFuZ2VNb250aCIpLCBfID0gdGhpcy5fZ2V0KGUsICJjaGFuZ2VZZWFyIiksIHYgPSB0aGlzLl9nZXQoZSwgInNob3dNb250aEFmdGVyWWVhciIpLCBrID0gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPiIsIHkgPSAiIjsgaWYgKG4gfHwgIWYpIHkgKz0gIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz4iICsgclt0XSArICI8L3NwYW4+IjsgZWxzZSB7IGZvciAodSA9IGEgJiYgYS5nZXRGdWxsWWVhcigpID09PSBpLCBjID0gcyAmJiBzLmdldEZ1bGxZZWFyKCkgPT09IGksIHkgKz0gIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IiwgaCA9IDA7IDEyID4gaDsgaCsrKSAoIXUgfHwgaCA+PSBhLmdldE1vbnRoKCkpICYmICghYyB8fCBzLmdldE1vbnRoKCkgPj0gaCkgJiYgKHkgKz0gIjxvcHRpb24gdmFsdWU9JyIgKyBoICsgIiciICsgKGggPT09IHQgPyAiIHNlbGVjdGVkPSdzZWxlY3RlZCciIDogIiIpICsgIj4iICsgb1toXSArICI8L29wdGlvbj4iKTsgeSArPSAiPC9zZWxlY3Q+IiB9IGlmICh2IHx8IChrICs9IHkgKyAoIW4gJiYgZiAmJiBfID8gIiIgOiAiJiN4YTA7IikpLCAhZS55ZWFyc2h0bWwpIGlmIChlLnllYXJzaHRtbCA9ICIiLCBuIHx8ICFfKSBrICs9ICI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz4iICsgaSArICI8L3NwYW4+IjsgZWxzZSB7DQogICAgICAgICAgICAgICAgZm9yIChsID0gdGhpcy5fZ2V0KGUsICJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLCBkID0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLCBwID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgdCA9IGUubWF0Y2goL2NbK1wtXS4qLykgPyBpICsgcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksIDEwKSA6IGUubWF0Y2goL1srXC1dLiovKSA/IGQgKyBwYXJzZUludChlLCAxMCkgOiBwYXJzZUludChlLCAxMCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHQpID8gZCA6IHQNCiAgICAgICAgICAgICAgICB9LCBnID0gcChsWzBdKSwgbSA9IE1hdGgubWF4KGcsIHAobFsxXSB8fCAiIikpLCBnID0gYSA/IE1hdGgubWF4KGcsIGEuZ2V0RnVsbFllYXIoKSkgOiBnLCBtID0gcyA/IE1hdGgubWluKG0sIHMuZ2V0RnVsbFllYXIoKSkgOiBtLCBlLnllYXJzaHRtbCArPSAiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjsgbSA+PSBnOyBnKyspIGUueWVhcnNodG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgZyArICInIiArIChnID09PSBpID8gIiBzZWxlY3RlZD0nc2VsZWN0ZWQnIiA6ICIiKSArICI+IiArIGcgKyAiPC9vcHRpb24+IjsgZS55ZWFyc2h0bWwgKz0gIjwvc2VsZWN0PiIsIGsgKz0gZS55ZWFyc2h0bWwsIGUueWVhcnNodG1sID0gbnVsbA0KICAgICAgICAgICAgfSByZXR1cm4gayArPSB0aGlzLl9nZXQoZSwgInllYXJTdWZmaXgiKSwgdiAmJiAoayArPSAoIW4gJiYgZiAmJiBfID8gIiIgOiAiJiN4YTA7IikgKyB5KSwgayArPSAiPC9kaXY+Ig0KICAgICAgICB9LCBfYWRqdXN0SW5zdERhdGU6IGZ1bmN0aW9uIChlLCB0LCBpKSB7IHZhciBhID0gZS5kcmF3WWVhciArICgiWSIgPT09IGkgPyB0IDogMCksIHMgPSBlLmRyYXdNb250aCArICgiTSIgPT09IGkgPyB0IDogMCksIG4gPSBNYXRoLm1pbihlLnNlbGVjdGVkRGF5LCB0aGlzLl9nZXREYXlzSW5Nb250aChhLCBzKSkgKyAoIkQiID09PSBpID8gdCA6IDApLCByID0gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSwgdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYSwgcywgbikpKTsgZS5zZWxlY3RlZERheSA9IHIuZ2V0RGF0ZSgpLCBlLmRyYXdNb250aCA9IGUuc2VsZWN0ZWRNb250aCA9IHIuZ2V0TW9udGgoKSwgZS5kcmF3WWVhciA9IGUuc2VsZWN0ZWRZZWFyID0gci5nZXRGdWxsWWVhcigpLCAoIk0iID09PSBpIHx8ICJZIiA9PT0gaSkgJiYgdGhpcy5fbm90aWZ5Q2hhbmdlKGUpIH0sIF9yZXN0cmljdE1pbk1heDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGkgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtaW4iKSwgYSA9IHRoaXMuX2dldE1pbk1heERhdGUoZSwgIm1heCIpLCBzID0gaSAmJiBpID4gdCA/IGkgOiB0OyByZXR1cm4gYSAmJiBzID4gYSA/IGEgOiBzIH0sIF9ub3RpZnlDaGFuZ2U6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdGhpcy5fZ2V0KGUsICJvbkNoYW5nZU1vbnRoWWVhciIpOyB0ICYmIHQuYXBwbHkoZS5pbnB1dCA/IGUuaW5wdXRbMF0gOiBudWxsLCBbZS5zZWxlY3RlZFllYXIsIGUuc2VsZWN0ZWRNb250aCArIDEsIGVdKSB9LCBfZ2V0TnVtYmVyT2ZNb250aHM6IGZ1bmN0aW9uIChlKSB7IHZhciB0ID0gdGhpcy5fZ2V0KGUsICJudW1iZXJPZk1vbnRocyIpOyByZXR1cm4gbnVsbCA9PSB0ID8gWzEsIDFdIDogIm51bWJlciIgPT0gdHlwZW9mIHQgPyBbMSwgdF0gOiB0IH0sIF9nZXRNaW5NYXhEYXRlOiBmdW5jdGlvbiAoZSwgdCkgeyByZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLCB0aGlzLl9nZXQoZSwgdCArICJEYXRlIiksIG51bGwpIH0sIF9nZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIDMyIC0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSwgdCwgMzIpKS5nZXREYXRlKCkgfSwgX2dldEZpcnN0RGF5T2ZNb250aDogZnVuY3Rpb24gKGUsIHQpIHsgcmV0dXJuIG5ldyBEYXRlKGUsIHQsIDEpLmdldERheSgpIH0sIF9jYW5BZGp1c3RNb250aDogZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgdmFyIHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSwgbiA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGksIGEgKyAoMCA+IHQgPyB0IDogc1swXSAqIHNbMV0pLCAxKSk7IHJldHVybiAwID4gdCAmJiBuLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLCBuLmdldE1vbnRoKCkpKSwgdGhpcy5faXNJblJhbmdlKGUsIG4pIH0sIF9pc0luUmFuZ2U6IGZ1bmN0aW9uIChlLCB0KSB7IHZhciBpLCBhLCBzID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShlLCAibWluIiksIG4gPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGUsICJtYXgiKSwgciA9IG51bGwsIG8gPSBudWxsLCB1ID0gdGhpcy5fZ2V0KGUsICJ5ZWFyUmFuZ2UiKTsgcmV0dXJuIHUgJiYgKGkgPSB1LnNwbGl0KCI6IiksIGEgPSAobmV3IERhdGUpLmdldEZ1bGxZZWFyKCksIHIgPSBwYXJzZUludChpWzBdLCAxMCksIG8gPSBwYXJzZUludChpWzFdLCAxMCksIGlbMF0ubWF0Y2goL1srXC1dLiovKSAmJiAociArPSBhKSwgaVsxXS5tYXRjaCgvWytcLV0uKi8pICYmIChvICs9IGEpKSwgKCFzIHx8IHQuZ2V0VGltZSgpID49IHMuZ2V0VGltZSgpKSAmJiAoIW4gfHwgdC5nZXRUaW1lKCkgPD0gbi5nZXRUaW1lKCkpICYmICghciB8fCB0LmdldEZ1bGxZZWFyKCkgPj0gcikgJiYgKCFvIHx8IG8gPj0gdC5nZXRGdWxsWWVhcigpKSB9LCBfZ2V0Rm9ybWF0Q29uZmlnOiBmdW5jdGlvbiAoZSkgeyB2YXIgdCA9IHRoaXMuX2dldChlLCAic2hvcnRZZWFyQ3V0b2ZmIik7IHJldHVybiB0ID0gInN0cmluZyIgIT0gdHlwZW9mIHQgPyB0IDogKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpICUgMTAwICsgcGFyc2VJbnQodCwgMTApLCB7IHNob3J0WWVhckN1dG9mZjogdCwgZGF5TmFtZXNTaG9ydDogdGhpcy5fZ2V0KGUsICJkYXlOYW1lc1Nob3J0IiksIGRheU5hbWVzOiB0aGlzLl9nZXQoZSwgImRheU5hbWVzIiksIG1vbnRoTmFtZXNTaG9ydDogdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzU2hvcnQiKSwgbW9udGhOYW1lczogdGhpcy5fZ2V0KGUsICJtb250aE5hbWVzIikgfSB9LCBfZm9ybWF0RGF0ZTogZnVuY3Rpb24gKGUsIHQsIGksIGEpIHsgdCB8fCAoZS5jdXJyZW50RGF5ID0gZS5zZWxlY3RlZERheSwgZS5jdXJyZW50TW9udGggPSBlLnNlbGVjdGVkTW9udGgsIGUuY3VycmVudFllYXIgPSBlLnNlbGVjdGVkWWVhcik7IHZhciBzID0gdCA/ICJvYmplY3QiID09IHR5cGVvZiB0ID8gdCA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGEsIGksIHQpKSA6IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsIGUuY3VycmVudE1vbnRoLCBlLmN1cnJlbnREYXkpKTsgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwgImRhdGVGb3JtYXQiKSwgcywgdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSB9DQogICAgfSksIGUuZm4uZGF0ZXBpY2tlciA9IGZ1bmN0aW9uICh0KSB7IGlmICghdGhpcy5sZW5ndGgpIHJldHVybiB0aGlzOyBlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgfHwgKGUoZG9jdW1lbnQpLm1vdXNlZG93bihlLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksIGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZCA9ICEwKSwgMCA9PT0gZSgiIyIgKyBlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoICYmIGUoImJvZHkiKS5hcHBlbmQoZS5kYXRlcGlja2VyLmRwRGl2KTsgdmFyIGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyByZXR1cm4gInN0cmluZyIgIT0gdHlwZW9mIHQgfHwgImlzRGlzYWJsZWQiICE9PSB0ICYmICJnZXREYXRlIiAhPT0gdCAmJiAid2lkZ2V0IiAhPT0gdCA/ICJvcHRpb24iID09PSB0ICYmIDIgPT09IGFyZ3VtZW50cy5sZW5ndGggJiYgInN0cmluZyIgPT0gdHlwZW9mIGFyZ3VtZW50c1sxXSA/IGUuZGF0ZXBpY2tlclsiXyIgKyB0ICsgIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQoaSkpIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgInN0cmluZyIgPT0gdHlwZW9mIHQgPyBlLmRhdGVwaWNrZXJbIl8iICsgdCArICJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLCBbdGhpc10uY29uY2F0KGkpKSA6IGUuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLCB0KSB9KSA6IGUuZGF0ZXBpY2tlclsiXyIgKyB0ICsgIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQoaSkpIH0sIGUuZGF0ZXBpY2tlciA9IG5ldyBpLCBlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQgPSAhMSwgZS5kYXRlcGlja2VyLnV1aWQgPSAobmV3IERhdGUpLmdldFRpbWUoKSwgZS5kYXRlcGlja2VyLnZlcnNpb24gPSAiMS4xMC40Ig0KfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uIChlKSB7IHZhciB0ID0geyBidXR0b25zOiAhMCwgaGVpZ2h0OiAhMCwgbWF4SGVpZ2h0OiAhMCwgbWF4V2lkdGg6ICEwLCBtaW5IZWlnaHQ6ICEwLCBtaW5XaWR0aDogITAsIHdpZHRoOiAhMCB9LCBpID0geyBtYXhIZWlnaHQ6ICEwLCBtYXhXaWR0aDogITAsIG1pbkhlaWdodDogITAsIG1pbldpZHRoOiAhMCB9OyBlLndpZGdldCgidWkuZGlhbG9nIiwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgb3B0aW9uczogeyBhcHBlbmRUbzogImJvZHkiLCBhdXRvT3BlbjogITAsIGJ1dHRvbnM6IFtdLCBjbG9zZU9uRXNjYXBlOiAhMCwgY2xvc2VUZXh0OiAiY2xvc2UiLCBkaWFsb2dDbGFzczogIiIsIGRyYWdnYWJsZTogITAsIGhpZGU6IG51bGwsIGhlaWdodDogImF1dG8iLCBtYXhIZWlnaHQ6IG51bGwsIG1heFdpZHRoOiBudWxsLCBtaW5IZWlnaHQ6IDE1MCwgbWluV2lkdGg6IDE1MCwgbW9kYWw6ICExLCBwb3NpdGlvbjogeyBteTogImNlbnRlciIsIGF0OiAiY2VudGVyIiwgb2Y6IHdpbmRvdywgY29sbGlzaW9uOiAiZml0IiwgdXNpbmc6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gZSh0aGlzKS5jc3ModCkub2Zmc2V0KCkudG9wOyAwID4gaSAmJiBlKHRoaXMpLmNzcygidG9wIiwgdC50b3AgLSBpKSB9IH0sIHJlc2l6YWJsZTogITAsIHNob3c6IG51bGwsIHRpdGxlOiBudWxsLCB3aWR0aDogMzAwLCBiZWZvcmVDbG9zZTogbnVsbCwgY2xvc2U6IG51bGwsIGRyYWc6IG51bGwsIGRyYWdTdGFydDogbnVsbCwgZHJhZ1N0b3A6IG51bGwsIGZvY3VzOiBudWxsLCBvcGVuOiBudWxsLCByZXNpemU6IG51bGwsIHJlc2l6ZVN0YXJ0OiBudWxsLCByZXNpemVTdG9wOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5vcmlnaW5hbENzcyA9IHsgZGlzcGxheTogdGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksIHdpZHRoOiB0aGlzLmVsZW1lbnRbMF0uc3R5bGUud2lkdGgsIG1pbkhlaWdodDogdGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCwgbWF4SGVpZ2h0OiB0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LCBoZWlnaHQ6IHRoaXMuZWxlbWVudFswXS5zdHlsZS5oZWlnaHQgfSwgdGhpcy5vcmlnaW5hbFBvc2l0aW9uID0geyBwYXJlbnQ6IHRoaXMuZWxlbWVudC5wYXJlbnQoKSwgaW5kZXg6IHRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCkgfSwgdGhpcy5vcmlnaW5hbFRpdGxlID0gdGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIiksIHRoaXMub3B0aW9ucy50aXRsZSA9IHRoaXMub3B0aW9ucy50aXRsZSB8fCB0aGlzLm9yaWdpbmFsVGl0bGUsIHRoaXMuX2NyZWF0ZVdyYXBwZXIoKSwgdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLCB0aGlzLl9jcmVhdGVUaXRsZWJhcigpLCB0aGlzLl9jcmVhdGVCdXR0b25QYW5lKCksIHRoaXMub3B0aW9ucy5kcmFnZ2FibGUgJiYgZS5mbi5kcmFnZ2FibGUgJiYgdGhpcy5fbWFrZURyYWdnYWJsZSgpLCB0aGlzLm9wdGlvbnMucmVzaXphYmxlICYmIGUuZm4ucmVzaXphYmxlICYmIHRoaXMuX21ha2VSZXNpemFibGUoKSwgdGhpcy5faXNPcGVuID0gITEgfSwgX2luaXQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5vcHRpb25zLmF1dG9PcGVuICYmIHRoaXMub3BlbigpIH0sIF9hcHBlbmRUbzogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9ucy5hcHBlbmRUbzsgcmV0dXJuIHQgJiYgKHQuanF1ZXJ5IHx8IHQubm9kZVR5cGUpID8gZSh0KSA6IHRoaXMuZG9jdW1lbnQuZmluZCh0IHx8ICJib2R5IikuZXEoMCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIHQgPSB0aGlzLm9yaWdpbmFsUG9zaXRpb247IHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksIHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSwgdGhpcy51aURpYWxvZy5zdG9wKCEwLCAhMCkucmVtb3ZlKCksIHRoaXMub3JpZ2luYWxUaXRsZSAmJiB0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLCB0aGlzLm9yaWdpbmFsVGl0bGUpLCBlID0gdC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSwgZS5sZW5ndGggJiYgZVswXSAhPT0gdGhpcy5lbGVtZW50WzBdID8gZS5iZWZvcmUodGhpcy5lbGVtZW50KSA6IHQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpIH0sIHdpZGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51aURpYWxvZyB9LCBkaXNhYmxlOiBlLm5vb3AsIGVuYWJsZTogZS5ub29wLCBjbG9zZTogZnVuY3Rpb24gKHQpIHsgdmFyIGksIGEgPSB0aGlzOyBpZiAodGhpcy5faXNPcGVuICYmIHRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIiwgdCkgIT09ICExKSB7IGlmICh0aGlzLl9pc09wZW4gPSAhMSwgdGhpcy5fZGVzdHJveU92ZXJsYXkoKSwgIXRoaXMub3BlbmVyLmZpbHRlcigiOmZvY3VzYWJsZSIpLmZvY3VzKCkubGVuZ3RoKSB0cnkgeyBpID0gdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LCBpICYmICJib2R5IiAhPT0gaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICYmIGUoaSkuYmx1cigpIH0gY2F0Y2ggKHMpIHsgfSB0aGlzLl9oaWRlKHRoaXMudWlEaWFsb2csIHRoaXMub3B0aW9ucy5oaWRlLCBmdW5jdGlvbiAoKSB7IGEuX3RyaWdnZXIoImNsb3NlIiwgdCkgfSkgfSB9LCBpc09wZW46IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2lzT3BlbiB9LCBtb3ZlVG9Ub3A6IGZ1bmN0aW9uICgpIHsgdGhpcy5fbW92ZVRvVG9wKCkgfSwgX21vdmVUb1RvcDogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGkgPSAhIXRoaXMudWlEaWFsb2cubmV4dEFsbCgiOnZpc2libGUiKS5pbnNlcnRCZWZvcmUodGhpcy51aURpYWxvZykubGVuZ3RoOyByZXR1cm4gaSAmJiAhdCAmJiB0aGlzLl90cmlnZ2VyKCJmb2N1cyIsIGUpLCBpIH0sIG9wZW46IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzOyByZXR1cm4gdGhpcy5faXNPcGVuID8gKHRoaXMuX21vdmVUb1RvcCgpICYmIHRoaXMuX2ZvY3VzVGFiYmFibGUoKSwgdW5kZWZpbmVkKSA6ICh0aGlzLl9pc09wZW4gPSAhMCwgdGhpcy5vcGVuZXIgPSBlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksIHRoaXMuX3NpemUoKSwgdGhpcy5fcG9zaXRpb24oKSwgdGhpcy5fY3JlYXRlT3ZlcmxheSgpLCB0aGlzLl9tb3ZlVG9Ub3AobnVsbCwgITApLCB0aGlzLl9zaG93KHRoaXMudWlEaWFsb2csIHRoaXMub3B0aW9ucy5zaG93LCBmdW5jdGlvbiAoKSB7IHQuX2ZvY3VzVGFiYmFibGUoKSwgdC5fdHJpZ2dlcigiZm9jdXMiKSB9KSwgdGhpcy5fdHJpZ2dlcigib3BlbiIpLCB1bmRlZmluZWQpIH0sIF9mb2N1c1RhYmJhYmxlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5lbGVtZW50LmZpbmQoIlthdXRvZm9jdXNdIik7IGUubGVuZ3RoIHx8IChlID0gdGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpKSwgZS5sZW5ndGggfHwgKGUgPSB0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKCI6dGFiYmFibGUiKSksIGUubGVuZ3RoIHx8IChlID0gdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKCI6dGFiYmFibGUiKSksIGUubGVuZ3RoIHx8IChlID0gdGhpcy51aURpYWxvZyksIGUuZXEoMCkuZm9jdXMoKSB9LCBfa2VlcEZvY3VzOiBmdW5jdGlvbiAodCkgeyBmdW5jdGlvbiBpKCkgeyB2YXIgdCA9IHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCwgaSA9IHRoaXMudWlEaWFsb2dbMF0gPT09IHQgfHwgZS5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLCB0KTsgaSB8fCB0aGlzLl9mb2N1c1RhYmJhYmxlKCkgfSB0LnByZXZlbnREZWZhdWx0KCksIGkuY2FsbCh0aGlzKSwgdGhpcy5fZGVsYXkoaSkgfSwgX2NyZWF0ZVdyYXBwZXI6IGZ1bmN0aW9uICgpIHsgdGhpcy51aURpYWxvZyA9IGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1mcm9udCAiICsgdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7IHRhYkluZGV4OiAtMSwgcm9sZTogImRpYWxvZyIgfSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksIHRoaXMuX29uKHRoaXMudWlEaWFsb2csIHsga2V5ZG93bjogZnVuY3Rpb24gKHQpIHsgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlICYmICF0LmlzRGVmYXVsdFByZXZlbnRlZCgpICYmIHQua2V5Q29kZSAmJiB0LmtleUNvZGUgPT09IGUudWkua2V5Q29kZS5FU0NBUEUpIHJldHVybiB0LnByZXZlbnREZWZhdWx0KCksIHRoaXMuY2xvc2UodCksIHVuZGVmaW5lZDsgaWYgKHQua2V5Q29kZSA9PT0gZS51aS5rZXlDb2RlLlRBQikgeyB2YXIgaSA9IHRoaXMudWlEaWFsb2cuZmluZCgiOnRhYmJhYmxlIiksIGEgPSBpLmZpbHRlcigiOmZpcnN0IiksIHMgPSBpLmZpbHRlcigiOmxhc3QiKTsgdC50YXJnZXQgIT09IHNbMF0gJiYgdC50YXJnZXQgIT09IHRoaXMudWlEaWFsb2dbMF0gfHwgdC5zaGlmdEtleSA/IHQudGFyZ2V0ICE9PSBhWzBdICYmIHQudGFyZ2V0ICE9PSB0aGlzLnVpRGlhbG9nWzBdIHx8ICF0LnNoaWZ0S2V5IHx8IChzLmZvY3VzKDEpLCB0LnByZXZlbnREZWZhdWx0KCkpIDogKGEuZm9jdXMoMSksIHQucHJldmVudERlZmF1bHQoKSkgfSB9LCBtb3VzZWRvd246IGZ1bmN0aW9uIChlKSB7IHRoaXMuX21vdmVUb1RvcChlKSAmJiB0aGlzLl9mb2N1c1RhYmJhYmxlKCkgfSB9KSwgdGhpcy5lbGVtZW50LmZpbmQoIlthcmlhLWRlc2NyaWJlZGJ5XSIpLmxlbmd0aCB8fCB0aGlzLnVpRGlhbG9nLmF0dHIoeyAiYXJpYS1kZXNjcmliZWRieSI6IHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoImlkIikgfSkgfSwgX2NyZWF0ZVRpdGxlYmFyOiBmdW5jdGlvbiAoKSB7IHZhciB0OyB0aGlzLnVpRGlhbG9nVGl0bGViYXIgPSBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSwgdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLCB7IG1vdXNlZG93bjogZnVuY3Rpb24gKHQpIHsgZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpIHx8IHRoaXMudWlEaWFsb2cuZm9jdXMoKSB9IH0pLCB0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSA9IGUoIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj4iKS5idXR0b24oeyBsYWJlbDogdGhpcy5vcHRpb25zLmNsb3NlVGV4dCwgaWNvbnM6IHsgcHJpbWFyeTogInVpLWljb24tY2xvc2V0aGljayIgfSwgdGV4dDogITEgfSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksIHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLCB7IGNsaWNrOiBmdW5jdGlvbiAoZSkgeyBlLnByZXZlbnREZWZhdWx0KCksIHRoaXMuY2xvc2UoZSkgfSB9KSwgdCA9IGUoIjxzcGFuPiIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLCB0aGlzLl90aXRsZSh0KSwgdGhpcy51aURpYWxvZy5hdHRyKHsgImFyaWEtbGFiZWxsZWRieSI6IHQuYXR0cigiaWQiKSB9KSB9LCBfdGl0bGU6IGZ1bmN0aW9uIChlKSB7IHRoaXMub3B0aW9ucy50aXRsZSB8fCBlLmh0bWwoIiYjMTYwOyIpLCBlLnRleHQodGhpcy5vcHRpb25zLnRpdGxlKSB9LCBfY3JlYXRlQnV0dG9uUGFuZTogZnVuY3Rpb24gKCkgeyB0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSA9IGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCIpLCB0aGlzLnVpQnV0dG9uU2V0ID0gZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnNldCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lKSwgdGhpcy5fY3JlYXRlQnV0dG9ucygpIH0sIF9jcmVhdGVCdXR0b25zOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcywgaSA9IHRoaXMub3B0aW9ucy5idXR0b25zOyByZXR1cm4gdGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksIHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSwgZS5pc0VtcHR5T2JqZWN0KGkpIHx8IGUuaXNBcnJheShpKSAmJiAhaS5sZW5ndGggPyAodGhpcy51aURpYWxvZy5yZW1vdmVDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKSwgdW5kZWZpbmVkKSA6IChlLmVhY2goaSwgZnVuY3Rpb24gKGksIGEpIHsgdmFyIHMsIG47IGEgPSBlLmlzRnVuY3Rpb24oYSkgPyB7IGNsaWNrOiBhLCB0ZXh0OiBpIH0gOiBhLCBhID0gZS5leHRlbmQoeyB0eXBlOiAiYnV0dG9uIiB9LCBhKSwgcyA9IGEuY2xpY2ssIGEuY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHMuYXBwbHkodC5lbGVtZW50WzBdLCBhcmd1bWVudHMpIH0sIG4gPSB7IGljb25zOiBhLmljb25zLCB0ZXh0OiBhLnNob3dUZXh0IH0sIGRlbGV0ZSBhLmljb25zLCBkZWxldGUgYS5zaG93VGV4dCwgZSgiPGJ1dHRvbj48L2J1dHRvbj4iLCBhKS5idXR0b24obikuYXBwZW5kVG8odC51aUJ1dHRvblNldCkgfSksIHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLCB1bmRlZmluZWQpIH0sIF9tYWtlRHJhZ2dhYmxlOiBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHQoZSkgeyByZXR1cm4geyBwb3NpdGlvbjogZS5wb3NpdGlvbiwgb2Zmc2V0OiBlLm9mZnNldCB9IH0gdmFyIGkgPSB0aGlzLCBhID0gdGhpcy5vcHRpb25zOyB0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7IGNhbmNlbDogIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIsIGhhbmRsZTogIi51aS1kaWFsb2ctdGl0bGViYXIiLCBjb250YWlubWVudDogImRvY3VtZW50Iiwgc3RhcnQ6IGZ1bmN0aW9uIChhLCBzKSB7IGUodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLCBpLl9ibG9ja0ZyYW1lcygpLCBpLl90cmlnZ2VyKCJkcmFnU3RhcnQiLCBhLCB0KHMpKSB9LCBkcmFnOiBmdW5jdGlvbiAoZSwgYSkgeyBpLl90cmlnZ2VyKCJkcmFnIiwgZSwgdChhKSkgfSwgc3RvcDogZnVuY3Rpb24gKHMsIG4pIHsgYS5wb3NpdGlvbiA9IFtuLnBvc2l0aW9uLmxlZnQgLSBpLmRvY3VtZW50LnNjcm9sbExlZnQoKSwgbi5wb3NpdGlvbi50b3AgLSBpLmRvY3VtZW50LnNjcm9sbFRvcCgpXSwgZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksIGkuX3VuYmxvY2tGcmFtZXMoKSwgaS5fdHJpZ2dlcigiZHJhZ1N0b3AiLCBzLCB0KG4pKSB9IH0pIH0sIF9tYWtlUmVzaXphYmxlOiBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHQoZSkgeyByZXR1cm4geyBvcmlnaW5hbFBvc2l0aW9uOiBlLm9yaWdpbmFsUG9zaXRpb24sIG9yaWdpbmFsU2l6ZTogZS5vcmlnaW5hbFNpemUsIHBvc2l0aW9uOiBlLnBvc2l0aW9uLCBzaXplOiBlLnNpemUgfSB9IHZhciBpID0gdGhpcywgYSA9IHRoaXMub3B0aW9ucywgcyA9IGEucmVzaXphYmxlLCBuID0gdGhpcy51aURpYWxvZy5jc3MoInBvc2l0aW9uIiksIHIgPSAic3RyaW5nIiA9PSB0eXBlb2YgcyA/IHMgOiAibixlLHMsdyxzZSxzdyxuZSxudyI7IHRoaXMudWlEaWFsb2cucmVzaXphYmxlKHsgY2FuY2VsOiAiLnVpLWRpYWxvZy1jb250ZW50IiwgY29udGFpbm1lbnQ6ICJkb2N1bWVudCIsIGFsc29SZXNpemU6IHRoaXMuZWxlbWVudCwgbWF4V2lkdGg6IGEubWF4V2lkdGgsIG1heEhlaWdodDogYS5tYXhIZWlnaHQsIG1pbldpZHRoOiBhLm1pbldpZHRoLCBtaW5IZWlnaHQ6IHRoaXMuX21pbkhlaWdodCgpLCBoYW5kbGVzOiByLCBzdGFydDogZnVuY3Rpb24gKGEsIHMpIHsgZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksIGkuX2Jsb2NrRnJhbWVzKCksIGkuX3RyaWdnZXIoInJlc2l6ZVN0YXJ0IiwgYSwgdChzKSkgfSwgcmVzaXplOiBmdW5jdGlvbiAoZSwgYSkgeyBpLl90cmlnZ2VyKCJyZXNpemUiLCBlLCB0KGEpKSB9LCBzdG9wOiBmdW5jdGlvbiAocywgbikgeyBhLmhlaWdodCA9IGUodGhpcykuaGVpZ2h0KCksIGEud2lkdGggPSBlKHRoaXMpLndpZHRoKCksIGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLCBpLl91bmJsb2NrRnJhbWVzKCksIGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLCBzLCB0KG4pKSB9IH0pLmNzcygicG9zaXRpb24iLCBuKSB9LCBfbWluSGVpZ2h0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcHRpb25zOyByZXR1cm4gImF1dG8iID09PSBlLmhlaWdodCA/IGUubWluSGVpZ2h0IDogTWF0aC5taW4oZS5taW5IZWlnaHQsIGUuaGVpZ2h0KSB9LCBfcG9zaXRpb246IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpOyBlIHx8IHRoaXMudWlEaWFsb2cuc2hvdygpLCB0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksIGUgfHwgdGhpcy51aURpYWxvZy5oaWRlKCkgfSwgX3NldE9wdGlvbnM6IGZ1bmN0aW9uIChhKSB7IHZhciBzID0gdGhpcywgbiA9ICExLCByID0ge307IGUuZWFjaChhLCBmdW5jdGlvbiAoZSwgYSkgeyBzLl9zZXRPcHRpb24oZSwgYSksIGUgaW4gdCAmJiAobiA9ICEwKSwgZSBpbiBpICYmIChyW2VdID0gYSkgfSksIG4gJiYgKHRoaXMuX3NpemUoKSwgdGhpcy5fcG9zaXRpb24oKSksIHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSAmJiB0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwgcikgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIHQpIHsgdmFyIGksIGEsIHMgPSB0aGlzLnVpRGlhbG9nOyAiZGlhbG9nQ2xhc3MiID09PSBlICYmIHMucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyh0KSwgImRpc2FibGVkIiAhPT0gZSAmJiAodGhpcy5fc3VwZXIoZSwgdCksICJhcHBlbmRUbyIgPT09IGUgJiYgdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwgImJ1dHRvbnMiID09PSBlICYmIHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKSwgImNsb3NlVGV4dCIgPT09IGUgJiYgdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuYnV0dG9uKHsgbGFiZWw6ICIiICsgdCB9KSwgImRyYWdnYWJsZSIgPT09IGUgJiYgKGkgPSBzLmlzKCI6ZGF0YSh1aS1kcmFnZ2FibGUpIiksIGkgJiYgIXQgJiYgcy5kcmFnZ2FibGUoImRlc3Ryb3kiKSwgIWkgJiYgdCAmJiB0aGlzLl9tYWtlRHJhZ2dhYmxlKCkpLCAicG9zaXRpb24iID09PSBlICYmIHRoaXMuX3Bvc2l0aW9uKCksICJyZXNpemFibGUiID09PSBlICYmIChhID0gcy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpLCBhICYmICF0ICYmIHMucmVzaXphYmxlKCJkZXN0cm95IiksIGEgJiYgInN0cmluZyIgPT0gdHlwZW9mIHQgJiYgcy5yZXNpemFibGUoIm9wdGlvbiIsICJoYW5kbGVzIiwgdCksIGEgfHwgdCA9PT0gITEgfHwgdGhpcy5fbWFrZVJlc2l6YWJsZSgpKSwgInRpdGxlIiA9PT0gZSAmJiB0aGlzLl90aXRsZSh0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZCgiLnVpLWRpYWxvZy10aXRsZSIpKSkgfSwgX3NpemU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIHQsIGksIGEgPSB0aGlzLm9wdGlvbnM7IHRoaXMuZWxlbWVudC5zaG93KCkuY3NzKHsgd2lkdGg6ICJhdXRvIiwgbWluSGVpZ2h0OiAwLCBtYXhIZWlnaHQ6ICJub25lIiwgaGVpZ2h0OiAwIH0pLCBhLm1pbldpZHRoID4gYS53aWR0aCAmJiAoYS53aWR0aCA9IGEubWluV2lkdGgpLCBlID0gdGhpcy51aURpYWxvZy5jc3MoeyBoZWlnaHQ6ICJhdXRvIiwgd2lkdGg6IGEud2lkdGggfSkub3V0ZXJIZWlnaHQoKSwgdCA9IE1hdGgubWF4KDAsIGEubWluSGVpZ2h0IC0gZSksIGkgPSAibnVtYmVyIiA9PSB0eXBlb2YgYS5tYXhIZWlnaHQgPyBNYXRoLm1heCgwLCBhLm1heEhlaWdodCAtIGUpIDogIm5vbmUiLCAiYXV0byIgPT09IGEuaGVpZ2h0ID8gdGhpcy5lbGVtZW50LmNzcyh7IG1pbkhlaWdodDogdCwgbWF4SGVpZ2h0OiBpLCBoZWlnaHQ6ICJhdXRvIiB9KSA6IHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCwgYS5oZWlnaHQgLSBlKSksIHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSAmJiB0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwgIm1pbkhlaWdodCIsIHRoaXMuX21pbkhlaWdodCgpKSB9LCBfYmxvY2tGcmFtZXM6IGZ1bmN0aW9uICgpIHsgdGhpcy5pZnJhbWVCbG9ja3MgPSB0aGlzLmRvY3VtZW50LmZpbmQoImlmcmFtZSIpLm1hcChmdW5jdGlvbiAoKSB7IHZhciB0ID0gZSh0aGlzKTsgcmV0dXJuIGUoIjxkaXY+IikuY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHdpZHRoOiB0Lm91dGVyV2lkdGgoKSwgaGVpZ2h0OiB0Lm91dGVySGVpZ2h0KCkgfSkuYXBwZW5kVG8odC5wYXJlbnQoKSkub2Zmc2V0KHQub2Zmc2V0KCkpWzBdIH0pIH0sIF91bmJsb2NrRnJhbWVzOiBmdW5jdGlvbiAoKSB7IHRoaXMuaWZyYW1lQmxvY2tzICYmICh0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKSwgZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKSB9LCBfYWxsb3dJbnRlcmFjdGlvbjogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGggPyAhMCA6ICEhZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRhdGVwaWNrZXIiKS5sZW5ndGggfSwgX2NyZWF0ZU92ZXJsYXk6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMub3B0aW9ucy5tb2RhbCkgeyB2YXIgdCA9IHRoaXMsIGkgPSB0aGlzLndpZGdldEZ1bGxOYW1lOyBlLnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzIHx8IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcyAmJiB0aGlzLmRvY3VtZW50LmJpbmQoImZvY3VzaW4uZGlhbG9nIiwgZnVuY3Rpb24gKGEpIHsgdC5fYWxsb3dJbnRlcmFjdGlvbihhKSB8fCAoYS5wcmV2ZW50RGVmYXVsdCgpLCBlKCIudWktZGlhbG9nOnZpc2libGU6bGFzdCAudWktZGlhbG9nLWNvbnRlbnQiKS5kYXRhKGkpLl9mb2N1c1RhYmJhYmxlKCkpIH0pIH0pLCB0aGlzLm92ZXJsYXkgPSBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLCB0aGlzLl9vbih0aGlzLm92ZXJsYXksIHsgbW91c2Vkb3duOiAiX2tlZXBGb2N1cyIgfSksIGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMrKyB9IH0sIF9kZXN0cm95T3ZlcmxheTogZnVuY3Rpb24gKCkgeyB0aGlzLm9wdGlvbnMubW9kYWwgJiYgdGhpcy5vdmVybGF5ICYmIChlLnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzLS0sIGUudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMgfHwgdGhpcy5kb2N1bWVudC51bmJpbmQoImZvY3VzaW4uZGlhbG9nIiksIHRoaXMub3ZlcmxheS5yZW1vdmUoKSwgdGhpcy5vdmVybGF5ID0gbnVsbCkgfSB9KSwgZS51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcyA9IDAsIGUudWlCYWNrQ29tcGF0ICE9PSAhMSAmJiBlLndpZGdldCgidWkuZGlhbG9nIiwgZS51aS5kaWFsb2csIHsgX3Bvc2l0aW9uOiBmdW5jdGlvbiAoKSB7IHZhciB0LCBpID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uLCBhID0gW10sIHMgPSBbMCwgMF07IGkgPyAoKCJzdHJpbmciID09IHR5cGVvZiBpIHx8ICJvYmplY3QiID09IHR5cGVvZiBpICYmICIwIiBpbiBpKSAmJiAoYSA9IGkuc3BsaXQgPyBpLnNwbGl0KCIgIikgOiBbaVswXSwgaVsxXV0sIDEgPT09IGEubGVuZ3RoICYmIChhWzFdID0gYVswXSksIGUuZWFjaChbImxlZnQiLCAidG9wIl0sIGZ1bmN0aW9uIChlLCB0KSB7ICthW2VdID09PSBhW2VdICYmIChzW2VdID0gYVtlXSwgYVtlXSA9IHQpIH0pLCBpID0geyBteTogYVswXSArICgwID4gc1swXSA/IHNbMF0gOiAiKyIgKyBzWzBdKSArICIgIiArIGFbMV0gKyAoMCA+IHNbMV0gPyBzWzFdIDogIisiICsgc1sxXSksIGF0OiBhLmpvaW4oIiAiKSB9KSwgaSA9IGUuZXh0ZW5kKHt9LCBlLnVpLmRpYWxvZy5wcm90b3R5cGUub3B0aW9ucy5wb3NpdGlvbiwgaSkpIDogaSA9IGUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLCB0ID0gdGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKSwgdCB8fCB0aGlzLnVpRGlhbG9nLnNob3coKSwgdGhpcy51aURpYWxvZy5wb3NpdGlvbihpKSwgdCB8fCB0aGlzLnVpRGlhbG9nLmhpZGUoKSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LndpZGdldCgidWkuZHJhZ2dhYmxlIiwgdC51aS5tb3VzZSwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICJkcmFnIiwgb3B0aW9uczogeyBhZGRDbGFzc2VzOiAhMCwgYXBwZW5kVG86ICJwYXJlbnQiLCBheGlzOiAhMSwgY29ubmVjdFRvU29ydGFibGU6ICExLCBjb250YWlubWVudDogITEsIGN1cnNvcjogImF1dG8iLCBjdXJzb3JBdDogITEsIGdyaWQ6ICExLCBoYW5kbGU6ICExLCBoZWxwZXI6ICJvcmlnaW5hbCIsIGlmcmFtZUZpeDogITEsIG9wYWNpdHk6ICExLCByZWZyZXNoUG9zaXRpb25zOiAhMSwgcmV2ZXJ0OiAhMSwgcmV2ZXJ0RHVyYXRpb246IDUwMCwgc2NvcGU6ICJkZWZhdWx0Iiwgc2Nyb2xsOiAhMCwgc2Nyb2xsU2Vuc2l0aXZpdHk6IDIwLCBzY3JvbGxTcGVlZDogMjAsIHNuYXA6ICExLCBzbmFwTW9kZTogImJvdGgiLCBzbmFwVG9sZXJhbmNlOiAyMCwgc3RhY2s6ICExLCB6SW5kZXg6ICExLCBkcmFnOiBudWxsLCBzdGFydDogbnVsbCwgc3RvcDogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7ICJvcmlnaW5hbCIgIT09IHRoaXMub3B0aW9ucy5oZWxwZXIgfHwgL14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSkgfHwgKHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSIpLCB0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyAmJiB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZSIpLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSwgdGhpcy5fbW91c2VJbml0KCkgfSwgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLCB0aGlzLl9tb3VzZURlc3Ryb3koKSB9LCBfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9uczsgcmV0dXJuIHRoaXMuaGVscGVyIHx8IGkuZGlzYWJsZWQgfHwgdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5sZW5ndGggPiAwID8gITEgOiAodGhpcy5oYW5kbGUgPSB0aGlzLl9nZXRIYW5kbGUoZSksIHRoaXMuaGFuZGxlID8gKHQoaS5pZnJhbWVGaXggPT09ICEwID8gImlmcmFtZSIgOiBpLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbiAoKSB7IHQoIjxkaXYgY2xhc3M9J3VpLWRyYWdnYWJsZS1pZnJhbWVGaXgnIHN0eWxlPSdiYWNrZ3JvdW5kOiAjZmZmOyc+PC9kaXY+IikuY3NzKHsgd2lkdGg6IHRoaXMub2Zmc2V0V2lkdGggKyAicHgiLCBoZWlnaHQ6IHRoaXMub2Zmc2V0SGVpZ2h0ICsgInB4IiwgcG9zaXRpb246ICJhYnNvbHV0ZSIsIG9wYWNpdHk6ICIwLjAwMSIsIHpJbmRleDogMWUzIH0pLmNzcyh0KHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpIH0pLCAhMCkgOiAhMSkgfSwgX21vdXNlU3RhcnQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zOyByZXR1cm4gdGhpcy5oZWxwZXIgPSB0aGlzLl9jcmVhdGVIZWxwZXIoZSksIHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSwgdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCB0LnVpLmRkbWFuYWdlciAmJiAodC51aS5kZG1hbmFnZXIuY3VycmVudCA9IHRoaXMpLCB0aGlzLl9jYWNoZU1hcmdpbnMoKSwgdGhpcy5jc3NQb3NpdGlvbiA9IHRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSwgdGhpcy5zY3JvbGxQYXJlbnQgPSB0aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSwgdGhpcy5vZmZzZXRQYXJlbnQgPSB0aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKSwgdGhpcy5vZmZzZXRQYXJlbnRDc3NQb3NpdGlvbiA9IHRoaXMub2Zmc2V0UGFyZW50LmNzcygicG9zaXRpb24iKSwgdGhpcy5vZmZzZXQgPSB0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLCB0aGlzLm9mZnNldCA9IHsgdG9wOiB0aGlzLm9mZnNldC50b3AgLSB0aGlzLm1hcmdpbnMudG9wLCBsZWZ0OiB0aGlzLm9mZnNldC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgfSwgdGhpcy5vZmZzZXQuc2Nyb2xsID0gITEsIHQuZXh0ZW5kKHRoaXMub2Zmc2V0LCB7IGNsaWNrOiB7IGxlZnQ6IGUucGFnZVggLSB0aGlzLm9mZnNldC5sZWZ0LCB0b3A6IGUucGFnZVkgLSB0aGlzLm9mZnNldC50b3AgfSwgcGFyZW50OiB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSwgcmVsYXRpdmU6IHRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkgfSksIHRoaXMub3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLCB0aGlzLm9yaWdpbmFsUGFnZVggPSBlLnBhZ2VYLCB0aGlzLm9yaWdpbmFsUGFnZVkgPSBlLnBhZ2VZLCBpLmN1cnNvckF0ICYmIHRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoaS5jdXJzb3JBdCksIHRoaXMuX3NldENvbnRhaW5tZW50KCksIHRoaXMuX3RyaWdnZXIoInN0YXJ0IiwgZSkgPT09ICExID8gKHRoaXMuX2NsZWFyKCksICExKSA6ICh0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIHQudWkuZGRtYW5hZ2VyICYmICFpLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcywgZSksIHRoaXMuX21vdXNlRHJhZyhlLCAhMCksIHQudWkuZGRtYW5hZ2VyICYmIHQudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLCBlKSwgITApIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uIChlLCBpKSB7IGlmICgiZml4ZWQiID09PSB0aGlzLm9mZnNldFBhcmVudENzc1Bvc2l0aW9uICYmICh0aGlzLm9mZnNldC5wYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSksIHRoaXMucG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLCB0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksICFpKSB7IHZhciBzID0gdGhpcy5fdWlIYXNoKCk7IGlmICh0aGlzLl90cmlnZ2VyKCJkcmFnIiwgZSwgcykgPT09ICExKSByZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksICExOyB0aGlzLnBvc2l0aW9uID0gcy5wb3NpdGlvbiB9IHJldHVybiB0aGlzLm9wdGlvbnMuYXhpcyAmJiAieSIgPT09IHRoaXMub3B0aW9ucy5heGlzIHx8ICh0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0ID0gdGhpcy5wb3NpdGlvbi5sZWZ0ICsgInB4IiksIHRoaXMub3B0aW9ucy5heGlzICYmICJ4IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgKHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcCA9IHRoaXMucG9zaXRpb24udG9wICsgInB4IiksIHQudWkuZGRtYW5hZ2VyICYmIHQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcywgZSksICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcywgcyA9ICExOyByZXR1cm4gdC51aS5kZG1hbmFnZXIgJiYgIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyICYmIChzID0gdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLCBlKSksIHRoaXMuZHJvcHBlZCAmJiAocyA9IHRoaXMuZHJvcHBlZCwgdGhpcy5kcm9wcGVkID0gITEpLCAib3JpZ2luYWwiICE9PSB0aGlzLm9wdGlvbnMuaGVscGVyIHx8IHQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLm93bmVyRG9jdW1lbnQsIHRoaXMuZWxlbWVudFswXSkgPyAoImludmFsaWQiID09PSB0aGlzLm9wdGlvbnMucmV2ZXJ0ICYmICFzIHx8ICJ2YWxpZCIgPT09IHRoaXMub3B0aW9ucy5yZXZlcnQgJiYgcyB8fCB0aGlzLm9wdGlvbnMucmV2ZXJ0ID09PSAhMCB8fCB0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnJldmVydCkgJiYgdGhpcy5vcHRpb25zLnJldmVydC5jYWxsKHRoaXMuZWxlbWVudCwgcykgPyB0KHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbiwgcGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydER1cmF0aW9uLCAxMCksIGZ1bmN0aW9uICgpIHsgaS5fdHJpZ2dlcigic3RvcCIsIGUpICE9PSAhMSAmJiBpLl9jbGVhcigpIH0pIDogdGhpcy5fdHJpZ2dlcigic3RvcCIsIGUpICE9PSAhMSAmJiB0aGlzLl9jbGVhcigpLCAhMSkgOiAhMSB9LCBfbW91c2VVcDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHQoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbiAoKSB7IHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKSB9KSwgdC51aS5kZG1hbmFnZXIgJiYgdC51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcywgZSksIHQudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcywgZSkgfSwgY2FuY2VsOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpID8gdGhpcy5fbW91c2VVcCh7fSkgOiB0aGlzLl9jbGVhcigpLCB0aGlzIH0sIF9nZXRIYW5kbGU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aGlzLm9wdGlvbnMuaGFuZGxlID8gISF0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpKS5sZW5ndGggOiAhMCB9LCBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgcyA9IHQuaXNGdW5jdGlvbihpLmhlbHBlcikgPyB0KGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSwgW2VdKSkgOiAiY2xvbmUiID09PSBpLmhlbHBlciA/IHRoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikgOiB0aGlzLmVsZW1lbnQ7IHJldHVybiBzLnBhcmVudHMoImJvZHkiKS5sZW5ndGggfHwgcy5hcHBlbmRUbygicGFyZW50IiA9PT0gaS5hcHBlbmRUbyA/IHRoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlIDogaS5hcHBlbmRUbyksIHNbMF0gPT09IHRoaXMuZWxlbWVudFswXSB8fCAvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcygicG9zaXRpb24iKSkgfHwgcy5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIiksIHMgfSwgX2FkanVzdE9mZnNldEZyb21IZWxwZXI6IGZ1bmN0aW9uIChlKSB7ICJzdHJpbmciID09IHR5cGVvZiBlICYmIChlID0gZS5zcGxpdCgiICIpKSwgdC5pc0FycmF5KGUpICYmIChlID0geyBsZWZ0OiArZVswXSwgdG9wOiArZVsxXSB8fCAwIH0pLCAibGVmdCIgaW4gZSAmJiAodGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IGUubGVmdCArIHRoaXMubWFyZ2lucy5sZWZ0KSwgInJpZ2h0IiBpbiBlICYmICh0aGlzLm9mZnNldC5jbGljay5sZWZ0ID0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIGUucmlnaHQgKyB0aGlzLm1hcmdpbnMubGVmdCksICJ0b3AiIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IGUudG9wICsgdGhpcy5tYXJnaW5zLnRvcCksICJib3R0b20iIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gZS5ib3R0b20gKyB0aGlzLm1hcmdpbnMudG9wKSB9LCBfZ2V0UGFyZW50T2Zmc2V0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7IHJldHVybiAiYWJzb2x1dGUiID09PSB0aGlzLmNzc1Bvc2l0aW9uICYmIHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiB0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkgJiYgKGUubGVmdCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksIGUudG9wICs9IHRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwgKHRoaXMub2Zmc2V0UGFyZW50WzBdID09PSBkb2N1bWVudC5ib2R5IHx8IHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUgJiYgImh0bWwiID09PSB0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgdC51aS5pZSkgJiYgKGUgPSB7IHRvcDogMCwgbGVmdDogMCB9KSwgeyB0b3A6IGUudG9wICsgKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApLCBsZWZ0OiBlLmxlZnQgKyAocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwgMTApIHx8IDApIH0gfSwgX2dldFJlbGF0aXZlT2Zmc2V0OiBmdW5jdGlvbiAoKSB7IGlmICgicmVsYXRpdmUiID09PSB0aGlzLmNzc1Bvc2l0aW9uKSB7IHZhciB0ID0gdGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7IHJldHVybiB7IHRvcDogdC50b3AgLSAocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksIGxlZnQ6IHQubGVmdCAtIChwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwgMTApIHx8IDApICsgdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIH0gfSByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfSB9LCBfY2FjaGVNYXJnaW5zOiBmdW5jdGlvbiAoKSB7IHRoaXMubWFyZ2lucyA9IHsgbGVmdDogcGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLCAxMCkgfHwgMCwgdG9wOiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwgMTApIHx8IDAsIHJpZ2h0OiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLCAxMCkgfHwgMCwgYm90dG9tOiBwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwgMTApIHx8IDAgfSB9LCBfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczogZnVuY3Rpb24gKCkgeyB0aGlzLmhlbHBlclByb3BvcnRpb25zID0geyB3aWR0aDogdGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLCBoZWlnaHQ6IHRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCkgfSB9LCBfc2V0Q29udGFpbm1lbnQ6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGksIHMsIG4gPSB0aGlzLm9wdGlvbnM7IHJldHVybiBuLmNvbnRhaW5tZW50ID8gIndpbmRvdyIgPT09IG4uY29udGFpbm1lbnQgPyAodGhpcy5jb250YWlubWVudCA9IFt0KHdpbmRvdykuc2Nyb2xsTGVmdCgpIC0gdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LCB0KHdpbmRvdykuc2Nyb2xsVG9wKCkgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wLCB0KHdpbmRvdykuc2Nyb2xsTGVmdCgpICsgdCh3aW5kb3cpLndpZHRoKCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsIHQod2luZG93KS5zY3JvbGxUb3AoKSArICh0KHdpbmRvdykuaGVpZ2h0KCkgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIHRoaXMubWFyZ2lucy50b3BdLCB1bmRlZmluZWQpIDogImRvY3VtZW50IiA9PT0gbi5jb250YWlubWVudCA/ICh0aGlzLmNvbnRhaW5tZW50ID0gWzAsIDAsIHQoZG9jdW1lbnQpLndpZHRoKCkgLSB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoIC0gdGhpcy5tYXJnaW5zLmxlZnQsICh0KGRvY3VtZW50KS5oZWlnaHQoKSB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcF0sIHVuZGVmaW5lZCkgOiBuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yID09PSBBcnJheSA/ICh0aGlzLmNvbnRhaW5tZW50ID0gbi5jb250YWlubWVudCwgdW5kZWZpbmVkKSA6ICgicGFyZW50IiA9PT0gbi5jb250YWlubWVudCAmJiAobi5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLCBpID0gdChuLmNvbnRhaW5tZW50KSwgcyA9IGlbMF0sIHMgJiYgKGUgPSAiaGlkZGVuIiAhPT0gaS5jc3MoIm92ZXJmbG93IiksIHRoaXMuY29udGFpbm1lbnQgPSBbKHBhcnNlSW50KGkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwgMTApIHx8IDApICsgKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nTGVmdCIpLCAxMCkgfHwgMCksIChwYXJzZUludChpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApICsgKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nVG9wIiksIDEwKSB8fCAwKSwgKGUgPyBNYXRoLm1heChzLnNjcm9sbFdpZHRoLCBzLm9mZnNldFdpZHRoKSA6IHMub2Zmc2V0V2lkdGgpIC0gKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksIDEwKSB8fCAwKSAtIChwYXJzZUludChpLmNzcygicGFkZGluZ1JpZ2h0IiksIDEwKSB8fCAwKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSB0aGlzLm1hcmdpbnMubGVmdCAtIHRoaXMubWFyZ2lucy5yaWdodCwgKGUgPyBNYXRoLm1heChzLnNjcm9sbEhlaWdodCwgcy5vZmZzZXRIZWlnaHQpIDogcy5vZmZzZXRIZWlnaHQpIC0gKHBhcnNlSW50KGkuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLCAxMCkgfHwgMCkgLSAocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwgMTApIHx8IDApIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wIC0gdGhpcy5tYXJnaW5zLmJvdHRvbV0sIHRoaXMucmVsYXRpdmVfY29udGFpbmVyID0gaSksIHVuZGVmaW5lZCkgOiAodGhpcy5jb250YWlubWVudCA9IG51bGwsIHVuZGVmaW5lZCkgfSwgX2NvbnZlcnRQb3NpdGlvblRvOiBmdW5jdGlvbiAoZSwgaSkgeyBpIHx8IChpID0gdGhpcy5wb3NpdGlvbik7IHZhciBzID0gImFic29sdXRlIiA9PT0gZSA/IDEgOiAtMSwgbiA9ICJhYnNvbHV0ZSIgIT09IHRoaXMuY3NzUG9zaXRpb24gfHwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSA/IHRoaXMuc2Nyb2xsUGFyZW50IDogdGhpcy5vZmZzZXRQYXJlbnQ7IHJldHVybiB0aGlzLm9mZnNldC5zY3JvbGwgfHwgKHRoaXMub2Zmc2V0LnNjcm9sbCA9IHsgdG9wOiBuLnNjcm9sbFRvcCgpLCBsZWZ0OiBuLnNjcm9sbExlZnQoKSB9KSwgeyB0b3A6IGkudG9wICsgdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wICogcyArIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOiB0aGlzLm9mZnNldC5zY3JvbGwudG9wKSAqIHMsIGxlZnQ6IGkubGVmdCArIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgKiBzICsgdGhpcy5vZmZzZXQucGFyZW50LmxlZnQgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpIDogdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpICogcyB9IH0sIF9nZW5lcmF0ZVBvc2l0aW9uOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcywgbiwgYSwgbyA9IHRoaXMub3B0aW9ucywgciA9ICJhYnNvbHV0ZSIgIT09IHRoaXMuY3NzUG9zaXRpb24gfHwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSA/IHRoaXMuc2Nyb2xsUGFyZW50IDogdGhpcy5vZmZzZXRQYXJlbnQsIGwgPSBlLnBhZ2VYLCBoID0gZS5wYWdlWTsgcmV0dXJuIHRoaXMub2Zmc2V0LnNjcm9sbCB8fCAodGhpcy5vZmZzZXQuc2Nyb2xsID0geyB0b3A6IHIuc2Nyb2xsVG9wKCksIGxlZnQ6IHIuc2Nyb2xsTGVmdCgpIH0pLCB0aGlzLm9yaWdpbmFsUG9zaXRpb24gJiYgKHRoaXMuY29udGFpbm1lbnQgJiYgKHRoaXMucmVsYXRpdmVfY29udGFpbmVyID8gKHMgPSB0aGlzLnJlbGF0aXZlX2NvbnRhaW5lci5vZmZzZXQoKSwgaSA9IFt0aGlzLmNvbnRhaW5tZW50WzBdICsgcy5sZWZ0LCB0aGlzLmNvbnRhaW5tZW50WzFdICsgcy50b3AsIHRoaXMuY29udGFpbm1lbnRbMl0gKyBzLmxlZnQsIHRoaXMuY29udGFpbm1lbnRbM10gKyBzLnRvcF0pIDogaSA9IHRoaXMuY29udGFpbm1lbnQsIGUucGFnZVggLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0IDwgaVswXSAmJiAobCA9IGlbMF0gKyB0aGlzLm9mZnNldC5jbGljay5sZWZ0KSwgZS5wYWdlWSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA8IGlbMV0gJiYgKGggPSBpWzFdICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wKSwgZS5wYWdlWCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPiBpWzJdICYmIChsID0gaVsyXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLCBlLnBhZ2VZIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gaVszXSAmJiAoaCA9IGlbM10gKyB0aGlzLm9mZnNldC5jbGljay50b3ApKSwgby5ncmlkICYmIChuID0gby5ncmlkWzFdID8gdGhpcy5vcmlnaW5hbFBhZ2VZICsgTWF0aC5yb3VuZCgoaCAtIHRoaXMub3JpZ2luYWxQYWdlWSkgLyBvLmdyaWRbMV0pICogby5ncmlkWzFdIDogdGhpcy5vcmlnaW5hbFBhZ2VZLCBoID0gaSA/IG4gLSB0aGlzLm9mZnNldC5jbGljay50b3AgPj0gaVsxXSB8fCBuIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID4gaVszXSA/IG4gOiBuIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID49IGlbMV0gPyBuIC0gby5ncmlkWzFdIDogbiArIG8uZ3JpZFsxXSA6IG4sIGEgPSBvLmdyaWRbMF0gPyB0aGlzLm9yaWdpbmFsUGFnZVggKyBNYXRoLnJvdW5kKChsIC0gdGhpcy5vcmlnaW5hbFBhZ2VYKSAvIG8uZ3JpZFswXSkgKiBvLmdyaWRbMF0gOiB0aGlzLm9yaWdpbmFsUGFnZVgsIGwgPSBpID8gYSAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gaVswXSB8fCBhIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IGlbMl0gPyBhIDogYSAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gaVswXSA/IGEgLSBvLmdyaWRbMF0gOiBhICsgby5ncmlkWzBdIDogYSkpLCB7IHRvcDogaCAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKyAoImZpeGVkIiA9PT0gdGhpcy5jc3NQb3NpdGlvbiA/IC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSA6IHRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLCBsZWZ0OiBsIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgLSB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArICgiZml4ZWQiID09PSB0aGlzLmNzc1Bvc2l0aW9uID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IHRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSB9IH0sIF9jbGVhcjogZnVuY3Rpb24gKCkgeyB0aGlzLmhlbHBlci5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksIHRoaXMuaGVscGVyWzBdID09PSB0aGlzLmVsZW1lbnRbMF0gfHwgdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsIHx8IHRoaXMuaGVscGVyLnJlbW92ZSgpLCB0aGlzLmhlbHBlciA9IG51bGwsIHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbCA9ICExIH0sIF90cmlnZ2VyOiBmdW5jdGlvbiAoZSwgaSwgcykgeyByZXR1cm4gcyA9IHMgfHwgdGhpcy5fdWlIYXNoKCksIHQudWkucGx1Z2luLmNhbGwodGhpcywgZSwgW2ksIHNdKSwgImRyYWciID09PSBlICYmICh0aGlzLnBvc2l0aW9uQWJzID0gdGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIikpLCB0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLCBlLCBpLCBzKSB9LCBwbHVnaW5zOiB7fSwgX3VpSGFzaDogZnVuY3Rpb24gKCkgeyByZXR1cm4geyBoZWxwZXI6IHRoaXMuaGVscGVyLCBwb3NpdGlvbjogdGhpcy5wb3NpdGlvbiwgb3JpZ2luYWxQb3NpdGlvbjogdGhpcy5vcmlnaW5hbFBvc2l0aW9uLCBvZmZzZXQ6IHRoaXMucG9zaXRpb25BYnMgfSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsICJjb25uZWN0VG9Tb3J0YWJsZSIsIHsgc3RhcnQ6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSwgbiA9IHMub3B0aW9ucywgYSA9IHQuZXh0ZW5kKHt9LCBpLCB7IGl0ZW06IHMuZWxlbWVudCB9KTsgcy5zb3J0YWJsZXMgPSBbXSwgdChuLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0LmRhdGEodGhpcywgInVpLXNvcnRhYmxlIik7IGkgJiYgIWkub3B0aW9ucy5kaXNhYmxlZCAmJiAocy5zb3J0YWJsZXMucHVzaCh7IGluc3RhbmNlOiBpLCBzaG91bGRSZXZlcnQ6IGkub3B0aW9ucy5yZXZlcnQgfSksIGkucmVmcmVzaFBvc2l0aW9ucygpLCBpLl90cmlnZ2VyKCJhY3RpdmF0ZSIsIGUsIGEpKSB9KSB9LCBzdG9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIG4gPSB0LmV4dGVuZCh7fSwgaSwgeyBpdGVtOiBzLmVsZW1lbnQgfSk7IHQuZWFjaChzLnNvcnRhYmxlcywgZnVuY3Rpb24gKCkgeyB0aGlzLmluc3RhbmNlLmlzT3ZlciA/ICh0aGlzLmluc3RhbmNlLmlzT3ZlciA9IDAsIHMuY2FuY2VsSGVscGVyUmVtb3ZhbCA9ICEwLCB0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWwgPSAhMSwgdGhpcy5zaG91bGRSZXZlcnQgJiYgKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQgPSB0aGlzLnNob3VsZFJldmVydCksIHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChlKSwgdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLCAib3JpZ2luYWwiID09PSBzLm9wdGlvbnMuaGVscGVyICYmIHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHsgdG9wOiAiYXV0byIsIGxlZnQ6ICJhdXRvIiB9KSkgOiAodGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gITEsIHRoaXMuaW5zdGFuY2UuX3RyaWdnZXIoImRlYWN0aXZhdGUiLCBlLCBuKSkgfSkgfSwgZHJhZzogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLCBuID0gdGhpczsgdC5lYWNoKHMuc29ydGFibGVzLCBmdW5jdGlvbiAoKSB7IHZhciBhID0gITEsIG8gPSB0aGlzOyB0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzID0gcy5wb3NpdGlvbkFicywgdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucyA9IHMuaGVscGVyUHJvcG9ydGlvbnMsIHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrID0gcy5vZmZzZXQuY2xpY2ssIHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpICYmIChhID0gITAsIHQuZWFjaChzLnNvcnRhYmxlcywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pbnN0YW5jZS5wb3NpdGlvbkFicyA9IHMucG9zaXRpb25BYnMsIHRoaXMuaW5zdGFuY2UuaGVscGVyUHJvcG9ydGlvbnMgPSBzLmhlbHBlclByb3BvcnRpb25zLCB0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljayA9IHMub2Zmc2V0LmNsaWNrLCB0aGlzICE9PSBvICYmIHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpICYmIHQuY29udGFpbnMoby5pbnN0YW5jZS5lbGVtZW50WzBdLCB0aGlzLmluc3RhbmNlLmVsZW1lbnRbMF0pICYmIChhID0gITEpLCBhIH0pKSwgYSA/ICh0aGlzLmluc3RhbmNlLmlzT3ZlciB8fCAodGhpcy5pbnN0YW5jZS5pc092ZXIgPSAxLCB0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtID0gdChuKS5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIikuYXBwZW5kVG8odGhpcy5pbnN0YW5jZS5lbGVtZW50KS5kYXRhKCJ1aS1zb3J0YWJsZS1pdGVtIiwgITApLCB0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIsIHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpLmhlbHBlclswXSB9LCBlLnRhcmdldCA9IHRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sIHRoaXMuaW5zdGFuY2UuX21vdXNlQ2FwdHVyZShlLCAhMCksIHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQoZSwgITAsICEwKSwgdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wID0gcy5vZmZzZXQuY2xpY2sudG9wLCB0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0ID0gcy5vZmZzZXQuY2xpY2subGVmdCwgdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQgLT0gcy5vZmZzZXQucGFyZW50LmxlZnQgLSB0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdCwgdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCAtPSBzLm9mZnNldC5wYXJlbnQudG9wIC0gdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCwgcy5fdHJpZ2dlcigidG9Tb3J0YWJsZSIsIGUpLCBzLmRyb3BwZWQgPSB0aGlzLmluc3RhbmNlLmVsZW1lbnQsIHMuY3VycmVudEl0ZW0gPSBzLmVsZW1lbnQsIHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGUgPSBzKSwgdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSAmJiB0aGlzLmluc3RhbmNlLl9tb3VzZURyYWcoZSkpIDogdGhpcy5pbnN0YW5jZS5pc092ZXIgJiYgKHRoaXMuaW5zdGFuY2UuaXNPdmVyID0gMCwgdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsID0gITAsIHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQgPSAhMSwgdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0IiwgZSwgdGhpcy5pbnN0YW5jZS5fdWlIYXNoKHRoaXMuaW5zdGFuY2UpKSwgdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKGUsICEwKSwgdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlciA9IHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLCB0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLnJlbW92ZSgpLCB0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyICYmIHRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXIucmVtb3ZlKCksIHMuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsIGUpLCBzLmRyb3BwZWQgPSAhMSkgfSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiY3Vyc29yIiwgeyBzdGFydDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQoImJvZHkiKSwgaSA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgZS5jc3MoImN1cnNvciIpICYmIChpLl9jdXJzb3IgPSBlLmNzcygiY3Vyc29yIikpLCBlLmNzcygiY3Vyc29yIiwgaS5jdXJzb3IpIH0sIHN0b3A6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7IGUuX2N1cnNvciAmJiB0KCJib2R5IikuY3NzKCJjdXJzb3IiLCBlLl9jdXJzb3IpIH0gfSksIHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwgIm9wYWNpdHkiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQoaS5oZWxwZXIpLCBuID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zOyBzLmNzcygib3BhY2l0eSIpICYmIChuLl9vcGFjaXR5ID0gcy5jc3MoIm9wYWNpdHkiKSksIHMuY3NzKCJvcGFjaXR5Iiwgbi5vcGFjaXR5KSB9LCBzdG9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgcy5fb3BhY2l0eSAmJiB0KGkuaGVscGVyKS5jc3MoIm9wYWNpdHkiLCBzLl9vcGFjaXR5KSB9IH0pLCB0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsICJzY3JvbGwiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKTsgZS5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gZS5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSAmJiAoZS5vdmVyZmxvd09mZnNldCA9IGUuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSB9LCBkcmFnOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIHMgPSBpLm9wdGlvbnMsIG4gPSAhMTsgaS5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gaS5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSA/IChzLmF4aXMgJiYgIngiID09PSBzLmF4aXMgfHwgKGkub3ZlcmZsb3dPZmZzZXQudG9wICsgaS5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0IC0gZS5wYWdlWSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgPyBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgPSBuID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wICsgcy5zY3JvbGxTcGVlZCA6IGUucGFnZVkgLSBpLm92ZXJmbG93T2Zmc2V0LnRvcCA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKGkuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCA9IG4gPSBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgLSBzLnNjcm9sbFNwZWVkKSksIHMuYXhpcyAmJiAieSIgPT09IHMuYXhpcyB8fCAoaS5vdmVyZmxvd09mZnNldC5sZWZ0ICsgaS5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGggLSBlLnBhZ2VYIDwgcy5zY3JvbGxTZW5zaXRpdml0eSA/IGkuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQgPSBuID0gaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCArIHMuc2Nyb2xsU3BlZWQgOiBlLnBhZ2VYIC0gaS5vdmVyZmxvd09mZnNldC5sZWZ0IDwgcy5zY3JvbGxTZW5zaXRpdml0eSAmJiAoaS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCA9IG4gPSBpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0IC0gcy5zY3JvbGxTcGVlZCkpKSA6IChzLmF4aXMgJiYgIngiID09PSBzLmF4aXMgfHwgKGUucGFnZVkgLSB0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgPyBuID0gdChkb2N1bWVudCkuc2Nyb2xsVG9wKHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpIC0gcy5zY3JvbGxTcGVlZCkgOiB0KHdpbmRvdykuaGVpZ2h0KCkgLSAoZS5wYWdlWSAtIHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKG4gPSB0KGRvY3VtZW50KS5zY3JvbGxUb3AodChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgKyBzLnNjcm9sbFNwZWVkKSkpLCBzLmF4aXMgJiYgInkiID09PSBzLmF4aXMgfHwgKGUucGFnZVggLSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgPCBzLnNjcm9sbFNlbnNpdGl2aXR5ID8gbiA9IHQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIC0gcy5zY3JvbGxTcGVlZCkgOiB0KHdpbmRvdykud2lkdGgoKSAtIChlLnBhZ2VYIC0gdChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSA8IHMuc2Nyb2xsU2Vuc2l0aXZpdHkgJiYgKG4gPSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KHQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSArIHMuc2Nyb2xsU3BlZWQpKSkpLCBuICE9PSAhMSAmJiB0LnVpLmRkbWFuYWdlciAmJiAhcy5kcm9wQmVoYXZpb3VyICYmIHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGksIGUpIH0gfSksIHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwgInNuYXAiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSwgaSA9IGUub3B0aW9uczsgZS5zbmFwRWxlbWVudHMgPSBbXSwgdChpLnNuYXAuY29uc3RydWN0b3IgIT09IFN0cmluZyA/IGkuc25hcC5pdGVtcyB8fCAiOmRhdGEodWktZHJhZ2dhYmxlKSIgOiBpLnNuYXApLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgaSA9IHQodGhpcyksIHMgPSBpLm9mZnNldCgpOyB0aGlzICE9PSBlLmVsZW1lbnRbMF0gJiYgZS5zbmFwRWxlbWVudHMucHVzaCh7IGl0ZW06IHRoaXMsIHdpZHRoOiBpLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBpLm91dGVySGVpZ2h0KCksIHRvcDogcy50b3AsIGxlZnQ6IHMubGVmdCB9KSB9KSB9LCBkcmFnOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiwgYSwgbywgciwgbCwgaCwgYywgdSwgZCwgcCA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksIGcgPSBwLm9wdGlvbnMsIGYgPSBnLnNuYXBUb2xlcmFuY2UsIG0gPSBpLm9mZnNldC5sZWZ0LCBfID0gbSArIHAuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsIHYgPSBpLm9mZnNldC50b3AsIGIgPSB2ICsgcC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7IGZvciAodSA9IHAuc25hcEVsZW1lbnRzLmxlbmd0aCAtIDE7IHUgPj0gMDsgdS0tKSByID0gcC5zbmFwRWxlbWVudHNbdV0ubGVmdCwgbCA9IHIgKyBwLnNuYXBFbGVtZW50c1t1XS53aWR0aCwgaCA9IHAuc25hcEVsZW1lbnRzW3VdLnRvcCwgYyA9IGggKyBwLnNuYXBFbGVtZW50c1t1XS5oZWlnaHQsIHIgLSBmID4gXyB8fCBtID4gbCArIGYgfHwgaCAtIGYgPiBiIHx8IHYgPiBjICsgZiB8fCAhdC5jb250YWlucyhwLnNuYXBFbGVtZW50c1t1XS5pdGVtLm93bmVyRG9jdW1lbnQsIHAuc25hcEVsZW1lbnRzW3VdLml0ZW0pID8gKHAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nICYmIHAub3B0aW9ucy5zbmFwLnJlbGVhc2UgJiYgcC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHAuZWxlbWVudCwgZSwgdC5leHRlbmQocC5fdWlIYXNoKCksIHsgc25hcEl0ZW06IHAuc25hcEVsZW1lbnRzW3VdLml0ZW0gfSkpLCBwLnNuYXBFbGVtZW50c1t1XS5zbmFwcGluZyA9ICExKSA6ICgiaW5uZXIiICE9PSBnLnNuYXBNb2RlICYmIChzID0gZiA+PSBNYXRoLmFicyhoIC0gYiksIG4gPSBmID49IE1hdGguYWJzKGMgLSB2KSwgYSA9IGYgPj0gTWF0aC5hYnMociAtIF8pLCBvID0gZiA+PSBNYXRoLmFicyhsIC0gbSksIHMgJiYgKGkucG9zaXRpb24udG9wID0gcC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIiwgeyB0b3A6IGggLSBwLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCwgbGVmdDogMCB9KS50b3AgLSBwLm1hcmdpbnMudG9wKSwgbiAmJiAoaS5wb3NpdGlvbi50b3AgPSBwLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLCB7IHRvcDogYywgbGVmdDogMCB9KS50b3AgLSBwLm1hcmdpbnMudG9wKSwgYSAmJiAoaS5wb3NpdGlvbi5sZWZ0ID0gcC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIiwgeyB0b3A6IDAsIGxlZnQ6IHIgLSBwLmhlbHBlclByb3BvcnRpb25zLndpZHRoIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCksIG8gJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiBsIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCkpLCBkID0gcyB8fCBuIHx8IGEgfHwgbywgIm91dGVyIiAhPT0gZy5zbmFwTW9kZSAmJiAocyA9IGYgPj0gTWF0aC5hYnMoaCAtIHYpLCBuID0gZiA+PSBNYXRoLmFicyhjIC0gYiksIGEgPSBmID49IE1hdGguYWJzKHIgLSBtKSwgbyA9IGYgPj0gTWF0aC5hYnMobCAtIF8pLCBzICYmIChpLnBvc2l0aW9uLnRvcCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiBoLCBsZWZ0OiAwIH0pLnRvcCAtIHAubWFyZ2lucy50b3ApLCBuICYmIChpLnBvc2l0aW9uLnRvcCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiBjIC0gcC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsIGxlZnQ6IDAgfSkudG9wIC0gcC5tYXJnaW5zLnRvcCksIGEgJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiByIH0pLmxlZnQgLSBwLm1hcmdpbnMubGVmdCksIG8gJiYgKGkucG9zaXRpb24ubGVmdCA9IHAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIsIHsgdG9wOiAwLCBsZWZ0OiBsIC0gcC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCB9KS5sZWZ0IC0gcC5tYXJnaW5zLmxlZnQpKSwgIXAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nICYmIChzIHx8IG4gfHwgYSB8fCBvIHx8IGQpICYmIHAub3B0aW9ucy5zbmFwLnNuYXAgJiYgcC5vcHRpb25zLnNuYXAuc25hcC5jYWxsKHAuZWxlbWVudCwgZSwgdC5leHRlbmQocC5fdWlIYXNoKCksIHsgc25hcEl0ZW06IHAuc25hcEVsZW1lbnRzW3VdLml0ZW0gfSkpLCBwLnNuYXBFbGVtZW50c1t1XS5zbmFwcGluZyA9IHMgfHwgbiB8fCBhIHx8IG8gfHwgZCkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAic3RhY2siLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpID0gdGhpcy5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zLCBzID0gdC5tYWtlQXJyYXkodChpLnN0YWNrKSkuc29ydChmdW5jdGlvbiAoZSwgaSkgeyByZXR1cm4gKHBhcnNlSW50KHQoZSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDApIC0gKHBhcnNlSW50KHQoaSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDApIH0pOyBzLmxlbmd0aCAmJiAoZSA9IHBhcnNlSW50KHQoc1swXSkuY3NzKCJ6SW5kZXgiKSwgMTApIHx8IDAsIHQocykuZWFjaChmdW5jdGlvbiAoaSkgeyB0KHRoaXMpLmNzcygiekluZGV4IiwgZSArIGkpIH0pLCB0aGlzLmNzcygiekluZGV4IiwgZSArIHMubGVuZ3RoKSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCAiekluZGV4IiwgeyBzdGFydDogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KGkuaGVscGVyKSwgbiA9IHQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIikub3B0aW9uczsgcy5jc3MoInpJbmRleCIpICYmIChuLl96SW5kZXggPSBzLmNzcygiekluZGV4IikpLCBzLmNzcygiekluZGV4Iiwgbi56SW5kZXgpIH0sIHN0b3A6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zOyBzLl96SW5kZXggJiYgdChpLmhlbHBlcikuY3NzKCJ6SW5kZXgiLCBzLl96SW5kZXgpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUodCwgZSwgaSkgeyByZXR1cm4gdCA+IGUgJiYgZSArIGkgPiB0IH0gdC53aWRnZXQoInVpLmRyb3BwYWJsZSIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIHdpZGdldEV2ZW50UHJlZml4OiAiZHJvcCIsIG9wdGlvbnM6IHsgYWNjZXB0OiAiKiIsIGFjdGl2ZUNsYXNzOiAhMSwgYWRkQ2xhc3NlczogITAsIGdyZWVkeTogITEsIGhvdmVyQ2xhc3M6ICExLCBzY29wZTogImRlZmF1bHQiLCB0b2xlcmFuY2U6ICJpbnRlcnNlY3QiLCBhY3RpdmF0ZTogbnVsbCwgZGVhY3RpdmF0ZTogbnVsbCwgZHJvcDogbnVsbCwgb3V0OiBudWxsLCBvdmVyOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUsIGkgPSB0aGlzLm9wdGlvbnMsIHMgPSBpLmFjY2VwdDsgdGhpcy5pc292ZXIgPSAhMSwgdGhpcy5pc291dCA9ICEwLCB0aGlzLmFjY2VwdCA9IHQuaXNGdW5jdGlvbihzKSA/IHMgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5pcyhzKSB9LCB0aGlzLnByb3BvcnRpb25zID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlID0gYXJndW1lbnRzWzBdLCB1bmRlZmluZWQpIDogZSA/IGUgOiBlID0geyB3aWR0aDogdGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLCBoZWlnaHQ6IHRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHQgfSB9LCB0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2kuc2NvcGVdID0gdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tpLnNjb3BlXSB8fCBbXSwgdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tpLnNjb3BlXS5wdXNoKHRoaXMpLCBpLmFkZENsYXNzZXMgJiYgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcm9wcGFibGUiKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyBmb3IgKHZhciBlID0gMCwgaSA9IHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTsgaS5sZW5ndGggPiBlOyBlKyspIGlbZV0gPT09IHRoaXMgJiYgaS5zcGxpY2UoZSwgMSk7IHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJvcHBhYmxlIHVpLWRyb3BwYWJsZS1kaXNhYmxlZCIpIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uIChlLCBpKSB7ICJhY2NlcHQiID09PSBlICYmICh0aGlzLmFjY2VwdCA9IHQuaXNGdW5jdGlvbihpKSA/IGkgOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdC5pcyhpKSB9KSwgdC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKSB9LCBfYWN0aXZhdGU6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCBpICYmIHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIiwgZSwgdGhpcy51aShpKSkgfSwgX2RlYWN0aXZhdGU6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCBpICYmIHRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLCBlLCB0aGlzLnVpKGkpKSB9LCBfb3ZlcjogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0LnVpLmRkbWFuYWdlci5jdXJyZW50OyBpICYmIChpLmN1cnJlbnRJdGVtIHx8IGkuZWxlbWVudClbMF0gIT09IHRoaXMuZWxlbWVudFswXSAmJiB0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSwgaS5jdXJyZW50SXRlbSB8fCBpLmVsZW1lbnQpICYmICh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLCB0aGlzLl90cmlnZ2VyKCJvdmVyIiwgZSwgdGhpcy51aShpKSkpIH0sIF9vdXQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC51aS5kZG1hbmFnZXIuY3VycmVudDsgaSAmJiAoaS5jdXJyZW50SXRlbSB8fCBpLmVsZW1lbnQpWzBdICE9PSB0aGlzLmVsZW1lbnRbMF0gJiYgdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGkuY3VycmVudEl0ZW0gfHwgaS5lbGVtZW50KSAmJiAodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSwgdGhpcy5fdHJpZ2dlcigib3V0IiwgZSwgdGhpcy51aShpKSkpIH0sIF9kcm9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IGkgfHwgdC51aS5kZG1hbmFnZXIuY3VycmVudCwgbiA9ICExOyByZXR1cm4gcyAmJiAocy5jdXJyZW50SXRlbSB8fCBzLmVsZW1lbnQpWzBdICE9PSB0aGlzLmVsZW1lbnRbMF0gPyAodGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0LmRhdGEodGhpcywgInVpLWRyb3BwYWJsZSIpOyByZXR1cm4gZS5vcHRpb25zLmdyZWVkeSAmJiAhZS5vcHRpb25zLmRpc2FibGVkICYmIGUub3B0aW9ucy5zY29wZSA9PT0gcy5vcHRpb25zLnNjb3BlICYmIGUuYWNjZXB0LmNhbGwoZS5lbGVtZW50WzBdLCBzLmN1cnJlbnRJdGVtIHx8IHMuZWxlbWVudCkgJiYgdC51aS5pbnRlcnNlY3QocywgdC5leHRlbmQoZSwgeyBvZmZzZXQ6IGUuZWxlbWVudC5vZmZzZXQoKSB9KSwgZS5vcHRpb25zLnRvbGVyYW5jZSkgPyAobiA9ICEwLCAhMSkgOiB1bmRlZmluZWQgfSksIG4gPyAhMSA6IHRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLCBzLmN1cnJlbnRJdGVtIHx8IHMuZWxlbWVudCkgPyAodGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzICYmIHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLCB0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLCB0aGlzLl90cmlnZ2VyKCJkcm9wIiwgZSwgdGhpcy51aShzKSksIHRoaXMuZWxlbWVudCkgOiAhMSkgOiAhMSB9LCB1aTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHsgZHJhZ2dhYmxlOiB0LmN1cnJlbnRJdGVtIHx8IHQuZWxlbWVudCwgaGVscGVyOiB0LmhlbHBlciwgcG9zaXRpb246IHQucG9zaXRpb24sIG9mZnNldDogdC5wb3NpdGlvbkFicyB9IH0gfSksIHQudWkuaW50ZXJzZWN0ID0gZnVuY3Rpb24gKHQsIGksIHMpIHsgaWYgKCFpLm9mZnNldCkgcmV0dXJuICExOyB2YXIgbiwgYSwgbyA9ICh0LnBvc2l0aW9uQWJzIHx8IHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQsIHIgPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS50b3AsIGwgPSBvICsgdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCwgaCA9IHIgKyB0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCwgYyA9IGkub2Zmc2V0LmxlZnQsIHUgPSBpLm9mZnNldC50b3AsIGQgPSBjICsgaS5wcm9wb3J0aW9ucygpLndpZHRoLCBwID0gdSArIGkucHJvcG9ydGlvbnMoKS5oZWlnaHQ7IHN3aXRjaCAocykgeyBjYXNlICJmaXQiOiByZXR1cm4gbyA+PSBjICYmIGQgPj0gbCAmJiByID49IHUgJiYgcCA+PSBoOyBjYXNlICJpbnRlcnNlY3QiOiByZXR1cm4gbyArIHQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyID4gYyAmJiBkID4gbCAtIHQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyICYmIHIgKyB0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgPiB1ICYmIHAgPiBoIC0gdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyOyBjYXNlICJwb2ludGVyIjogcmV0dXJuIG4gPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0ICsgKHQuY2xpY2tPZmZzZXQgfHwgdC5vZmZzZXQuY2xpY2spLmxlZnQsIGEgPSAodC5wb3NpdGlvbkFicyB8fCB0LnBvc2l0aW9uLmFic29sdXRlKS50b3AgKyAodC5jbGlja09mZnNldCB8fCB0Lm9mZnNldC5jbGljaykudG9wLCBlKGEsIHUsIGkucHJvcG9ydGlvbnMoKS5oZWlnaHQpICYmIGUobiwgYywgaS5wcm9wb3J0aW9ucygpLndpZHRoKTsgY2FzZSAidG91Y2giOiByZXR1cm4gKHIgPj0gdSAmJiBwID49IHIgfHwgaCA+PSB1ICYmIHAgPj0gaCB8fCB1ID4gciAmJiBoID4gcCkgJiYgKG8gPj0gYyAmJiBkID49IG8gfHwgbCA+PSBjICYmIGQgPj0gbCB8fCBjID4gbyAmJiBsID4gZCk7IGRlZmF1bHQ6IHJldHVybiAhMSB9IH0sIHQudWkuZGRtYW5hZ2VyID0geyBjdXJyZW50OiBudWxsLCBkcm9wcGFibGVzOiB7ICJkZWZhdWx0IjogW10gfSwgcHJlcGFyZU9mZnNldHM6IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuLCBhID0gdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdIHx8IFtdLCBvID0gaSA/IGkudHlwZSA6IG51bGwsIHIgPSAoZS5jdXJyZW50SXRlbSB8fCBlLmVsZW1lbnQpLmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5hZGRCYWNrKCk7IHQ6IGZvciAocyA9IDA7IGEubGVuZ3RoID4gczsgcysrKSBpZiAoIShhW3NdLm9wdGlvbnMuZGlzYWJsZWQgfHwgZSAmJiAhYVtzXS5hY2NlcHQuY2FsbChhW3NdLmVsZW1lbnRbMF0sIGUuY3VycmVudEl0ZW0gfHwgZS5lbGVtZW50KSkpIHsgZm9yIChuID0gMDsgci5sZW5ndGggPiBuOyBuKyspIGlmIChyW25dID09PSBhW3NdLmVsZW1lbnRbMF0pIHsgYVtzXS5wcm9wb3J0aW9ucygpLmhlaWdodCA9IDA7IGNvbnRpbnVlIHQgfSBhW3NdLnZpc2libGUgPSAibm9uZSIgIT09IGFbc10uZWxlbWVudC5jc3MoImRpc3BsYXkiKSwgYVtzXS52aXNpYmxlICYmICgibW91c2Vkb3duIiA9PT0gbyAmJiBhW3NdLl9hY3RpdmF0ZS5jYWxsKGFbc10sIGkpLCBhW3NdLm9mZnNldCA9IGFbc10uZWxlbWVudC5vZmZzZXQoKSwgYVtzXS5wcm9wb3J0aW9ucyh7IHdpZHRoOiBhW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsIGhlaWdodDogYVtzXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodCB9KSkgfSB9LCBkcm9wOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9ICExOyByZXR1cm4gdC5lYWNoKCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV0gfHwgW10pLnNsaWNlKCksIGZ1bmN0aW9uICgpIHsgdGhpcy5vcHRpb25zICYmICghdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMudmlzaWJsZSAmJiB0LnVpLmludGVyc2VjdChlLCB0aGlzLCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSAmJiAocyA9IHRoaXMuX2Ryb3AuY2FsbCh0aGlzLCBpKSB8fCBzKSwgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLnZpc2libGUgJiYgdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGUuY3VycmVudEl0ZW0gfHwgZS5lbGVtZW50KSAmJiAodGhpcy5pc291dCA9ICEwLCB0aGlzLmlzb3ZlciA9ICExLCB0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcywgaSkpKSB9KSwgcyB9LCBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChlLCBpKSB7IGUuZWxlbWVudC5wYXJlbnRzVW50aWwoImJvZHkiKS5iaW5kKCJzY3JvbGwuZHJvcHBhYmxlIiwgZnVuY3Rpb24gKCkgeyBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyB8fCB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSB9KSB9LCBkcmFnOiBmdW5jdGlvbiAoZSwgaSkgeyBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyAmJiB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSwgdC5lYWNoKHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXSB8fCBbXSwgZnVuY3Rpb24gKCkgeyBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiAhdGhpcy5ncmVlZHlDaGlsZCAmJiB0aGlzLnZpc2libGUpIHsgdmFyIHMsIG4sIGEsIG8gPSB0LnVpLmludGVyc2VjdChlLCB0aGlzLCB0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSwgciA9ICFvICYmIHRoaXMuaXNvdmVyID8gImlzb3V0IiA6IG8gJiYgIXRoaXMuaXNvdmVyID8gImlzb3ZlciIgOiBudWxsOyByICYmICh0aGlzLm9wdGlvbnMuZ3JlZWR5ICYmIChuID0gdGhpcy5vcHRpb25zLnNjb3BlLCBhID0gdGhpcy5lbGVtZW50LnBhcmVudHMoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gdC5kYXRhKHRoaXMsICJ1aS1kcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlID09PSBuIH0pLCBhLmxlbmd0aCAmJiAocyA9IHQuZGF0YShhWzBdLCAidWktZHJvcHBhYmxlIiksIHMuZ3JlZWR5Q2hpbGQgPSAiaXNvdmVyIiA9PT0gcikpLCBzICYmICJpc292ZXIiID09PSByICYmIChzLmlzb3ZlciA9ICExLCBzLmlzb3V0ID0gITAsIHMuX291dC5jYWxsKHMsIGkpKSwgdGhpc1tyXSA9ICEwLCB0aGlzWyJpc291dCIgPT09IHIgPyAiaXNvdmVyIiA6ICJpc291dCJdID0gITEsIHRoaXNbImlzb3ZlciIgPT09IHIgPyAiX292ZXIiIDogIl9vdXQiXS5jYWxsKHRoaXMsIGkpLCBzICYmICJpc291dCIgPT09IHIgJiYgKHMuaXNvdXQgPSAhMSwgcy5pc292ZXIgPSAhMCwgcy5fb3Zlci5jYWxsKHMsIGkpKSkgfSB9KSB9LCBkcmFnU3RvcDogZnVuY3Rpb24gKGUsIGkpIHsgZS5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLCBlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyB8fCB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLCBpKSB9IH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0gInVpLWVmZmVjdHMtIjsgdC5lZmZlY3RzID0geyBlZmZlY3Q6IHt9IH0sIGZ1bmN0aW9uICh0LCBlKSB7IGZ1bmN0aW9uIGkodCwgZSwgaSkgeyB2YXIgcyA9IHVbZS50eXBlXSB8fCB7fTsgcmV0dXJuIG51bGwgPT0gdCA/IGkgfHwgIWUuZGVmID8gbnVsbCA6IGUuZGVmIDogKHQgPSBzLmZsb29yID8gfn50IDogcGFyc2VGbG9hdCh0KSwgaXNOYU4odCkgPyBlLmRlZiA6IHMubW9kID8gKHQgKyBzLm1vZCkgJSBzLm1vZCA6IDAgPiB0ID8gMCA6IHQgPiBzLm1heCA/IHMubWF4IDogdCkgfSBmdW5jdGlvbiBzKGkpIHsgdmFyIHMgPSBoKCksIG4gPSBzLl9yZ2JhID0gW107IHJldHVybiBpID0gaS50b0xvd2VyQ2FzZSgpLCBmKGwsIGZ1bmN0aW9uICh0LCBhKSB7IHZhciBvLCByID0gYS5yZS5leGVjKGkpLCBsID0gciAmJiBhLnBhcnNlKHIpLCBoID0gYS5zcGFjZSB8fCAicmdiYSI7IHJldHVybiBsID8gKG8gPSBzW2hdKGwpLCBzW2NbaF0uY2FjaGVdID0gb1tjW2hdLmNhY2hlXSwgbiA9IHMuX3JnYmEgPSBvLl9yZ2JhLCAhMSkgOiBlIH0pLCBuLmxlbmd0aCA/ICgiMCwwLDAsMCIgPT09IG4uam9pbigpICYmIHQuZXh0ZW5kKG4sIGEudHJhbnNwYXJlbnQpLCBzKSA6IGFbaV0gfSBmdW5jdGlvbiBuKHQsIGUsIGkpIHsgcmV0dXJuIGkgPSAoaSArIDEpICUgMSwgMSA+IDYgKiBpID8gdCArIDYgKiAoZSAtIHQpICogaSA6IDEgPiAyICogaSA/IGUgOiAyID4gMyAqIGkgPyB0ICsgNiAqIChlIC0gdCkgKiAoMiAvIDMgLSBpKSA6IHQgfSB2YXIgYSwgbyA9ICJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyTGVmdENvbG9yIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyVG9wQ29sb3IgY29sb3IgY29sdW1uUnVsZUNvbG9yIG91dGxpbmVDb2xvciB0ZXh0RGVjb3JhdGlvbkNvbG9yIHRleHRFbXBoYXNpc0NvbG9yIiwgciA9IC9eKFtcLStdKT1ccyooXGQrXC4/XGQqKS8sIGwgPSBbeyByZTogL3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLywgcGFyc2U6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBbdFsxXSwgdFsyXSwgdFszXSwgdFs0XV0gfSB9LCB7IHJlOiAvcmdiYT9cKFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZD8oPzpcLlxkKyk/KVxzKik/XCkvLCBwYXJzZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIFsyLjU1ICogdFsxXSwgMi41NSAqIHRbMl0sIDIuNTUgKiB0WzNdLCB0WzRdXSB9IH0sIHsgcmU6IC8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLywgcGFyc2U6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBbcGFyc2VJbnQodFsxXSwgMTYpLCBwYXJzZUludCh0WzJdLCAxNiksIHBhcnNlSW50KHRbM10sIDE2KV0gfSB9LCB7IHJlOiAvIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8sIHBhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gW3BhcnNlSW50KHRbMV0gKyB0WzFdLCAxNiksIHBhcnNlSW50KHRbMl0gKyB0WzJdLCAxNiksIHBhcnNlSW50KHRbM10gKyB0WzNdLCAxNildIH0gfSwgeyByZTogL2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sIHNwYWNlOiAiaHNsYSIsIHBhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gW3RbMV0sIHRbMl0gLyAxMDAsIHRbM10gLyAxMDAsIHRbNF1dIH0gfV0sIGggPSB0LkNvbG9yID0gZnVuY3Rpb24gKGUsIGksIHMsIG4pIHsgcmV0dXJuIG5ldyB0LkNvbG9yLmZuLnBhcnNlKGUsIGksIHMsIG4pIH0sIGMgPSB7IHJnYmE6IHsgcHJvcHM6IHsgcmVkOiB7IGlkeDogMCwgdHlwZTogImJ5dGUiIH0sIGdyZWVuOiB7IGlkeDogMSwgdHlwZTogImJ5dGUiIH0sIGJsdWU6IHsgaWR4OiAyLCB0eXBlOiAiYnl0ZSIgfSB9IH0sIGhzbGE6IHsgcHJvcHM6IHsgaHVlOiB7IGlkeDogMCwgdHlwZTogImRlZ3JlZXMiIH0sIHNhdHVyYXRpb246IHsgaWR4OiAxLCB0eXBlOiAicGVyY2VudCIgfSwgbGlnaHRuZXNzOiB7IGlkeDogMiwgdHlwZTogInBlcmNlbnQiIH0gfSB9IH0sIHUgPSB7ICJieXRlIjogeyBmbG9vcjogITAsIG1heDogMjU1IH0sIHBlcmNlbnQ6IHsgbWF4OiAxIH0sIGRlZ3JlZXM6IHsgbW9kOiAzNjAsIGZsb29yOiAhMCB9IH0sIGQgPSBoLnN1cHBvcnQgPSB7fSwgcCA9IHQoIjxwPiIpWzBdLCBmID0gdC5lYWNoOyBwLnN0eWxlLmNzc1RleHQgPSAiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEsMSwxLC41KSIsIGQucmdiYSA9IHAuc3R5bGUuYmFja2dyb3VuZENvbG9yLmluZGV4T2YoInJnYmEiKSA+IC0xLCBmKGMsIGZ1bmN0aW9uICh0LCBlKSB7IGUuY2FjaGUgPSAiXyIgKyB0LCBlLnByb3BzLmFscGhhID0geyBpZHg6IDMsIHR5cGU6ICJwZXJjZW50IiwgZGVmOiAxIH0gfSksIGguZm4gPSB0LmV4dGVuZChoLnByb3RvdHlwZSwgeyBwYXJzZTogZnVuY3Rpb24gKG4sIG8sIHIsIGwpIHsgaWYgKG4gPT09IGUpIHJldHVybiB0aGlzLl9yZ2JhID0gW251bGwsIG51bGwsIG51bGwsIG51bGxdLCB0aGlzOyAobi5qcXVlcnkgfHwgbi5ub2RlVHlwZSkgJiYgKG4gPSB0KG4pLmNzcyhvKSwgbyA9IGUpOyB2YXIgdSA9IHRoaXMsIGQgPSB0LnR5cGUobiksIHAgPSB0aGlzLl9yZ2JhID0gW107IHJldHVybiBvICE9PSBlICYmIChuID0gW24sIG8sIHIsIGxdLCBkID0gImFycmF5IiksICJzdHJpbmciID09PSBkID8gdGhpcy5wYXJzZShzKG4pIHx8IGEuX2RlZmF1bHQpIDogImFycmF5IiA9PT0gZCA/IChmKGMucmdiYS5wcm9wcywgZnVuY3Rpb24gKHQsIGUpIHsgcFtlLmlkeF0gPSBpKG5bZS5pZHhdLCBlKSB9KSwgdGhpcykgOiAib2JqZWN0IiA9PT0gZCA/IChuIGluc3RhbmNlb2YgaCA/IGYoYywgZnVuY3Rpb24gKHQsIGUpIHsgbltlLmNhY2hlXSAmJiAodVtlLmNhY2hlXSA9IG5bZS5jYWNoZV0uc2xpY2UoKSkgfSkgOiBmKGMsIGZ1bmN0aW9uIChlLCBzKSB7IHZhciBhID0gcy5jYWNoZTsgZihzLnByb3BzLCBmdW5jdGlvbiAodCwgZSkgeyBpZiAoIXVbYV0gJiYgcy50bykgeyBpZiAoImFscGhhIiA9PT0gdCB8fCBudWxsID09IG5bdF0pIHJldHVybjsgdVthXSA9IHMudG8odS5fcmdiYSkgfSB1W2FdW2UuaWR4XSA9IGkoblt0XSwgZSwgITApIH0pLCB1W2FdICYmIDAgPiB0LmluQXJyYXkobnVsbCwgdVthXS5zbGljZSgwLCAzKSkgJiYgKHVbYV1bM10gPSAxLCBzLmZyb20gJiYgKHUuX3JnYmEgPSBzLmZyb20odVthXSkpKSB9KSwgdGhpcykgOiBlIH0sIGlzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGgodCksIHMgPSAhMCwgbiA9IHRoaXM7IHJldHVybiBmKGMsIGZ1bmN0aW9uICh0LCBhKSB7IHZhciBvLCByID0gaVthLmNhY2hlXTsgcmV0dXJuIHIgJiYgKG8gPSBuW2EuY2FjaGVdIHx8IGEudG8gJiYgYS50byhuLl9yZ2JhKSB8fCBbXSwgZihhLnByb3BzLCBmdW5jdGlvbiAodCwgaSkgeyByZXR1cm4gbnVsbCAhPSByW2kuaWR4XSA/IHMgPSByW2kuaWR4XSA9PT0gb1tpLmlkeF0gOiBlIH0pKSwgcyB9KSwgcyB9LCBfc3BhY2U6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBbXSwgZSA9IHRoaXM7IHJldHVybiBmKGMsIGZ1bmN0aW9uIChpLCBzKSB7IGVbcy5jYWNoZV0gJiYgdC5wdXNoKGkpIH0pLCB0LnBvcCgpIH0sIHRyYW5zaXRpb246IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBzID0gaCh0KSwgbiA9IHMuX3NwYWNlKCksIGEgPSBjW25dLCBvID0gMCA9PT0gdGhpcy5hbHBoYSgpID8gaCgidHJhbnNwYXJlbnQiKSA6IHRoaXMsIHIgPSBvW2EuY2FjaGVdIHx8IGEudG8oby5fcmdiYSksIGwgPSByLnNsaWNlKCk7IHJldHVybiBzID0gc1thLmNhY2hlXSwgZihhLnByb3BzLCBmdW5jdGlvbiAodCwgbikgeyB2YXIgYSA9IG4uaWR4LCBvID0gclthXSwgaCA9IHNbYV0sIGMgPSB1W24udHlwZV0gfHwge307IG51bGwgIT09IGggJiYgKG51bGwgPT09IG8gPyBsW2FdID0gaCA6IChjLm1vZCAmJiAoaCAtIG8gPiBjLm1vZCAvIDIgPyBvICs9IGMubW9kIDogbyAtIGggPiBjLm1vZCAvIDIgJiYgKG8gLT0gYy5tb2QpKSwgbFthXSA9IGkoKGggLSBvKSAqIGUgKyBvLCBuKSkpIH0pLCB0aGlzW25dKGwpIH0sIGJsZW5kOiBmdW5jdGlvbiAoZSkgeyBpZiAoMSA9PT0gdGhpcy5fcmdiYVszXSkgcmV0dXJuIHRoaXM7IHZhciBpID0gdGhpcy5fcmdiYS5zbGljZSgpLCBzID0gaS5wb3AoKSwgbiA9IGgoZSkuX3JnYmE7IHJldHVybiBoKHQubWFwKGksIGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiAoMSAtIHMpICogbltlXSArIHMgKiB0IH0pKSB9LCB0b1JnYmFTdHJpbmc6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSAicmdiYSgiLCBpID0gdC5tYXAodGhpcy5fcmdiYSwgZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIG51bGwgPT0gdCA/IGUgPiAyID8gMSA6IDAgOiB0IH0pOyByZXR1cm4gMSA9PT0gaVszXSAmJiAoaS5wb3AoKSwgZSA9ICJyZ2IoIiksIGUgKyBpLmpvaW4oKSArICIpIiB9LCB0b0hzbGFTdHJpbmc6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSAiaHNsYSgiLCBpID0gdC5tYXAodGhpcy5oc2xhKCksIGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiBudWxsID09IHQgJiYgKHQgPSBlID4gMiA/IDEgOiAwKSwgZSAmJiAzID4gZSAmJiAodCA9IE1hdGgucm91bmQoMTAwICogdCkgKyAiJSIpLCB0IH0pOyByZXR1cm4gMSA9PT0gaVszXSAmJiAoaS5wb3AoKSwgZSA9ICJoc2woIiksIGUgKyBpLmpvaW4oKSArICIpIiB9LCB0b0hleFN0cmluZzogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLl9yZ2JhLnNsaWNlKCksIHMgPSBpLnBvcCgpOyByZXR1cm4gZSAmJiBpLnB1c2gofn4oMjU1ICogcykpLCAiIyIgKyB0Lm1hcChpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9ICh0IHx8IDApLnRvU3RyaW5nKDE2KSwgMSA9PT0gdC5sZW5ndGggPyAiMCIgKyB0IDogdCB9KS5qb2luKCIiKSB9LCB0b1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMCA9PT0gdGhpcy5fcmdiYVszXSA/ICJ0cmFuc3BhcmVudCIgOiB0aGlzLnRvUmdiYVN0cmluZygpIH0gfSksIGguZm4ucGFyc2UucHJvdG90eXBlID0gaC5mbiwgYy5oc2xhLnRvID0gZnVuY3Rpb24gKHQpIHsgaWYgKG51bGwgPT0gdFswXSB8fCBudWxsID09IHRbMV0gfHwgbnVsbCA9PSB0WzJdKSByZXR1cm4gW251bGwsIG51bGwsIG51bGwsIHRbM11dOyB2YXIgZSwgaSwgcyA9IHRbMF0gLyAyNTUsIG4gPSB0WzFdIC8gMjU1LCBhID0gdFsyXSAvIDI1NSwgbyA9IHRbM10sIHIgPSBNYXRoLm1heChzLCBuLCBhKSwgbCA9IE1hdGgubWluKHMsIG4sIGEpLCBoID0gciAtIGwsIGMgPSByICsgbCwgdSA9IC41ICogYzsgcmV0dXJuIGUgPSBsID09PSByID8gMCA6IHMgPT09IHIgPyA2MCAqIChuIC0gYSkgLyBoICsgMzYwIDogbiA9PT0gciA/IDYwICogKGEgLSBzKSAvIGggKyAxMjAgOiA2MCAqIChzIC0gbikgLyBoICsgMjQwLCBpID0gMCA9PT0gaCA/IDAgOiAuNSA+PSB1ID8gaCAvIGMgOiBoIC8gKDIgLSBjKSwgW01hdGgucm91bmQoZSkgJSAzNjAsIGksIHUsIG51bGwgPT0gbyA/IDEgOiBvXSB9LCBjLmhzbGEuZnJvbSA9IGZ1bmN0aW9uICh0KSB7IGlmIChudWxsID09IHRbMF0gfHwgbnVsbCA9PSB0WzFdIHx8IG51bGwgPT0gdFsyXSkgcmV0dXJuIFtudWxsLCBudWxsLCBudWxsLCB0WzNdXTsgdmFyIGUgPSB0WzBdIC8gMzYwLCBpID0gdFsxXSwgcyA9IHRbMl0sIGEgPSB0WzNdLCBvID0gLjUgPj0gcyA/IHMgKiAoMSArIGkpIDogcyArIGkgLSBzICogaSwgciA9IDIgKiBzIC0gbzsgcmV0dXJuIFtNYXRoLnJvdW5kKDI1NSAqIG4ociwgbywgZSArIDEgLyAzKSksIE1hdGgucm91bmQoMjU1ICogbihyLCBvLCBlKSksIE1hdGgucm91bmQoMjU1ICogbihyLCBvLCBlIC0gMSAvIDMpKSwgYV0gfSwgZihjLCBmdW5jdGlvbiAocywgbikgeyB2YXIgYSA9IG4ucHJvcHMsIG8gPSBuLmNhY2hlLCBsID0gbi50bywgYyA9IG4uZnJvbTsgaC5mbltzXSA9IGZ1bmN0aW9uIChzKSB7IGlmIChsICYmICF0aGlzW29dICYmICh0aGlzW29dID0gbCh0aGlzLl9yZ2JhKSksIHMgPT09IGUpIHJldHVybiB0aGlzW29dLnNsaWNlKCk7IHZhciBuLCByID0gdC50eXBlKHMpLCB1ID0gImFycmF5IiA9PT0gciB8fCAib2JqZWN0IiA9PT0gciA/IHMgOiBhcmd1bWVudHMsIGQgPSB0aGlzW29dLnNsaWNlKCk7IHJldHVybiBmKGEsIGZ1bmN0aW9uICh0LCBlKSB7IHZhciBzID0gdVsib2JqZWN0IiA9PT0gciA/IHQgOiBlLmlkeF07IG51bGwgPT0gcyAmJiAocyA9IGRbZS5pZHhdKSwgZFtlLmlkeF0gPSBpKHMsIGUpIH0pLCBjID8gKG4gPSBoKGMoZCkpLCBuW29dID0gZCwgbikgOiBoKGQpIH0sIGYoYSwgZnVuY3Rpb24gKGUsIGkpIHsgaC5mbltlXSB8fCAoaC5mbltlXSA9IGZ1bmN0aW9uIChuKSB7IHZhciBhLCBvID0gdC50eXBlKG4pLCBsID0gImFscGhhIiA9PT0gZSA/IHRoaXMuX2hzbGEgPyAiaHNsYSIgOiAicmdiYSIgOiBzLCBoID0gdGhpc1tsXSgpLCBjID0gaFtpLmlkeF07IHJldHVybiAidW5kZWZpbmVkIiA9PT0gbyA/IGMgOiAoImZ1bmN0aW9uIiA9PT0gbyAmJiAobiA9IG4uY2FsbCh0aGlzLCBjKSwgbyA9IHQudHlwZShuKSksIG51bGwgPT0gbiAmJiBpLmVtcHR5ID8gdGhpcyA6ICgic3RyaW5nIiA9PT0gbyAmJiAoYSA9IHIuZXhlYyhuKSwgYSAmJiAobiA9IGMgKyBwYXJzZUZsb2F0KGFbMl0pICogKCIrIiA9PT0gYVsxXSA/IDEgOiAtMSkpKSwgaFtpLmlkeF0gPSBuLCB0aGlzW2xdKGgpKSkgfSkgfSkgfSksIGguaG9vayA9IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZS5zcGxpdCgiICIpOyBmKGksIGZ1bmN0aW9uIChlLCBpKSB7IHQuY3NzSG9va3NbaV0gPSB7IHNldDogZnVuY3Rpb24gKGUsIG4pIHsgdmFyIGEsIG8sIHIgPSAiIjsgaWYgKCJ0cmFuc3BhcmVudCIgIT09IG4gJiYgKCJzdHJpbmciICE9PSB0LnR5cGUobikgfHwgKGEgPSBzKG4pKSkpIHsgaWYgKG4gPSBoKGEgfHwgbiksICFkLnJnYmEgJiYgMSAhPT0gbi5fcmdiYVszXSkgeyBmb3IgKG8gPSAiYmFja2dyb3VuZENvbG9yIiA9PT0gaSA/IGUucGFyZW50Tm9kZSA6IGU7ICgiIiA9PT0gciB8fCAidHJhbnNwYXJlbnQiID09PSByKSAmJiBvICYmIG8uc3R5bGU7KSB0cnkgeyByID0gdC5jc3MobywgImJhY2tncm91bmRDb2xvciIpLCBvID0gby5wYXJlbnROb2RlIH0gY2F0Y2ggKGwpIHsgfSBuID0gbi5ibGVuZChyICYmICJ0cmFuc3BhcmVudCIgIT09IHIgPyByIDogIl9kZWZhdWx0IikgfSBuID0gbi50b1JnYmFTdHJpbmcoKSB9IHRyeSB7IGUuc3R5bGVbaV0gPSBuIH0gY2F0Y2ggKGwpIHsgfSB9IH0sIHQuZnguc3RlcFtpXSA9IGZ1bmN0aW9uIChlKSB7IGUuY29sb3JJbml0IHx8IChlLnN0YXJ0ID0gaChlLmVsZW0sIGkpLCBlLmVuZCA9IGgoZS5lbmQpLCBlLmNvbG9ySW5pdCA9ICEwKSwgdC5jc3NIb29rc1tpXS5zZXQoZS5lbGVtLCBlLnN0YXJ0LnRyYW5zaXRpb24oZS5lbmQsIGUucG9zKSkgfSB9KSB9LCBoLmhvb2sobyksIHQuY3NzSG9va3MuYm9yZGVyQ29sb3IgPSB7IGV4cGFuZDogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB7fTsgcmV0dXJuIGYoWyJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiXSwgZnVuY3Rpb24gKGksIHMpIHsgZVsiYm9yZGVyIiArIHMgKyAiQ29sb3IiXSA9IHQgfSksIGUgfSB9LCBhID0gdC5Db2xvci5uYW1lcyA9IHsgYXF1YTogIiMwMGZmZmYiLCBibGFjazogIiMwMDAwMDAiLCBibHVlOiAiIzAwMDBmZiIsIGZ1Y2hzaWE6ICIjZmYwMGZmIiwgZ3JheTogIiM4MDgwODAiLCBncmVlbjogIiMwMDgwMDAiLCBsaW1lOiAiIzAwZmYwMCIsIG1hcm9vbjogIiM4MDAwMDAiLCBuYXZ5OiAiIzAwMDA4MCIsIG9saXZlOiAiIzgwODAwMCIsIHB1cnBsZTogIiM4MDAwODAiLCByZWQ6ICIjZmYwMDAwIiwgc2lsdmVyOiAiI2MwYzBjMCIsIHRlYWw6ICIjMDA4MDgwIiwgd2hpdGU6ICIjZmZmZmZmIiwgeWVsbG93OiAiI2ZmZmYwMCIsIHRyYW5zcGFyZW50OiBbbnVsbCwgbnVsbCwgbnVsbCwgMF0sIF9kZWZhdWx0OiAiI2ZmZmZmZiIgfSB9KGpRdWVyeSksIGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gaShlKSB7IHZhciBpLCBzLCBuID0gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ID8gZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSwgbnVsbCkgOiBlLmN1cnJlbnRTdHlsZSwgYSA9IHt9OyBpZiAobiAmJiBuLmxlbmd0aCAmJiBuWzBdICYmIG5bblswXV0pIGZvciAocyA9IG4ubGVuZ3RoOyBzLS07KSBpID0gbltzXSwgInN0cmluZyIgPT0gdHlwZW9mIG5baV0gJiYgKGFbdC5jYW1lbENhc2UoaSldID0gbltpXSk7IGVsc2UgZm9yIChpIGluIG4pICJzdHJpbmciID09IHR5cGVvZiBuW2ldICYmIChhW2ldID0gbltpXSk7IHJldHVybiBhIH0gZnVuY3Rpb24gcyhlLCBpKSB7IHZhciBzLCBuLCBvID0ge307IGZvciAocyBpbiBpKSBuID0gaVtzXSwgZVtzXSAhPT0gbiAmJiAoYVtzXSB8fCAodC5meC5zdGVwW3NdIHx8ICFpc05hTihwYXJzZUZsb2F0KG4pKSkgJiYgKG9bc10gPSBuKSk7IHJldHVybiBvIH0gdmFyIG4gPSBbImFkZCIsICJyZW1vdmUiLCAidG9nZ2xlIl0sIGEgPSB7IGJvcmRlcjogMSwgYm9yZGVyQm90dG9tOiAxLCBib3JkZXJDb2xvcjogMSwgYm9yZGVyTGVmdDogMSwgYm9yZGVyUmlnaHQ6IDEsIGJvcmRlclRvcDogMSwgYm9yZGVyV2lkdGg6IDEsIG1hcmdpbjogMSwgcGFkZGluZzogMSB9OyB0LmVhY2goWyJib3JkZXJMZWZ0U3R5bGUiLCAiYm9yZGVyUmlnaHRTdHlsZSIsICJib3JkZXJCb3R0b21TdHlsZSIsICJib3JkZXJUb3BTdHlsZSJdLCBmdW5jdGlvbiAoZSwgaSkgeyB0LmZ4LnN0ZXBbaV0gPSBmdW5jdGlvbiAodCkgeyAoIm5vbmUiICE9PSB0LmVuZCAmJiAhdC5zZXRBdHRyIHx8IDEgPT09IHQucG9zICYmICF0LnNldEF0dHIpICYmIChqUXVlcnkuc3R5bGUodC5lbGVtLCBpLCB0LmVuZCksIHQuc2V0QXR0ciA9ICEwKSB9IH0pLCB0LmZuLmFkZEJhY2sgfHwgKHQuZm4uYWRkQmFjayA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLmFkZChudWxsID09IHQgPyB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKSB9KSwgdC5lZmZlY3RzLmFuaW1hdGVDbGFzcyA9IGZ1bmN0aW9uIChlLCBhLCBvLCByKSB7IHZhciBsID0gdC5zcGVlZChhLCBvLCByKTsgcmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24gKCkgeyB2YXIgYSwgbyA9IHQodGhpcyksIHIgPSBvLmF0dHIoImNsYXNzIikgfHwgIiIsIGggPSBsLmNoaWxkcmVuID8gby5maW5kKCIqIikuYWRkQmFjaygpIDogbzsgaCA9IGgubWFwKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpOyByZXR1cm4geyBlbDogZSwgc3RhcnQ6IGkodGhpcykgfSB9KSwgYSA9IGZ1bmN0aW9uICgpIHsgdC5lYWNoKG4sIGZ1bmN0aW9uICh0LCBpKSB7IGVbaV0gJiYgb1tpICsgIkNsYXNzIl0oZVtpXSkgfSkgfSwgYSgpLCBoID0gaC5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbmQgPSBpKHRoaXMuZWxbMF0pLCB0aGlzLmRpZmYgPSBzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKSwgdGhpcyB9KSwgby5hdHRyKCJjbGFzcyIsIHIpLCBoID0gaC5tYXAoZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMsIGkgPSB0LkRlZmVycmVkKCksIHMgPSB0LmV4dGVuZCh7fSwgbCwgeyBxdWV1ZTogITEsIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IGkucmVzb2x2ZShlKSB9IH0pOyByZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZiwgcyksIGkucHJvbWlzZSgpIH0pLCB0LndoZW4uYXBwbHkodCwgaC5nZXQoKSkuZG9uZShmdW5jdGlvbiAoKSB7IGEoKSwgdC5lYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMuZWw7IHQuZWFjaCh0aGlzLmRpZmYsIGZ1bmN0aW9uICh0KSB7IGUuY3NzKHQsICIiKSB9KSB9KSwgbC5jb21wbGV0ZS5jYWxsKG9bMF0pIH0pIH0pIH0sIHQuZm4uZXh0ZW5kKHsgYWRkQ2xhc3M6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBmdW5jdGlvbiAoaSwgcywgbiwgYSkgeyByZXR1cm4gcyA/IHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLCB7IGFkZDogaSB9LCBzLCBuLCBhKSA6IGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9IH0odC5mbi5hZGRDbGFzcyksIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZnVuY3Rpb24gKGksIHMsIG4sIGEpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gdC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMsIHsgcmVtb3ZlOiBpIH0sIHMsIG4sIGEpIDogZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0gfSh0LmZuLnJlbW92ZUNsYXNzKSwgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIChpKSB7IHJldHVybiBmdW5jdGlvbiAocywgbiwgYSwgbywgcikgeyByZXR1cm4gImJvb2xlYW4iID09IHR5cGVvZiBuIHx8IG4gPT09IGUgPyBhID8gdC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMsIG4gPyB7IGFkZDogcyB9IDogeyByZW1vdmU6IHMgfSwgYSwgbywgcikgOiBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcywgeyB0b2dnbGU6IHMgfSwgbiwgYSwgbykgfSB9KHQuZm4udG9nZ2xlQ2xhc3MpLCBzd2l0Y2hDbGFzczogZnVuY3Rpb24gKGUsIGksIHMsIG4sIGEpIHsgcmV0dXJuIHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLCB7IGFkZDogaSwgcmVtb3ZlOiBlIH0sIHMsIG4sIGEpIH0gfSkgfSgpLCBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHMoZSwgaSwgcywgbikgeyByZXR1cm4gdC5pc1BsYWluT2JqZWN0KGUpICYmIChpID0gZSwgZSA9IGUuZWZmZWN0KSwgZSA9IHsgZWZmZWN0OiBlIH0sIG51bGwgPT0gaSAmJiAoaSA9IHt9KSwgdC5pc0Z1bmN0aW9uKGkpICYmIChuID0gaSwgcyA9IG51bGwsIGkgPSB7fSksICgibnVtYmVyIiA9PSB0eXBlb2YgaSB8fCB0LmZ4LnNwZWVkc1tpXSkgJiYgKG4gPSBzLCBzID0gaSwgaSA9IHt9KSwgdC5pc0Z1bmN0aW9uKHMpICYmIChuID0gcywgcyA9IG51bGwpLCBpICYmIHQuZXh0ZW5kKGUsIGkpLCBzID0gcyB8fCBpLmR1cmF0aW9uLCBlLmR1cmF0aW9uID0gdC5meC5vZmYgPyAwIDogIm51bWJlciIgPT0gdHlwZW9mIHMgPyBzIDogcyBpbiB0LmZ4LnNwZWVkcyA/IHQuZnguc3BlZWRzW3NdIDogdC5meC5zcGVlZHMuX2RlZmF1bHQsIGUuY29tcGxldGUgPSBuIHx8IGkuY29tcGxldGUsIGUgfSBmdW5jdGlvbiBuKGUpIHsgcmV0dXJuICFlIHx8ICJudW1iZXIiID09IHR5cGVvZiBlIHx8IHQuZnguc3BlZWRzW2VdID8gITAgOiAic3RyaW5nIiAhPSB0eXBlb2YgZSB8fCB0LmVmZmVjdHMuZWZmZWN0W2VdID8gdC5pc0Z1bmN0aW9uKGUpID8gITAgOiAib2JqZWN0IiAhPSB0eXBlb2YgZSB8fCBlLmVmZmVjdCA/ICExIDogITAgOiAhMCB9IHQuZXh0ZW5kKHQuZWZmZWN0cywgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgc2F2ZTogZnVuY3Rpb24gKHQsIGUpIHsgZm9yICh2YXIgcyA9IDA7IGUubGVuZ3RoID4gczsgcysrKSBudWxsICE9PSBlW3NdICYmIHQuZGF0YShpICsgZVtzXSwgdFswXS5zdHlsZVtlW3NdXSkgfSwgcmVzdG9yZTogZnVuY3Rpb24gKHQsIHMpIHsgdmFyIG4sIGE7IGZvciAoYSA9IDA7IHMubGVuZ3RoID4gYTsgYSsrKSBudWxsICE9PSBzW2FdICYmIChuID0gdC5kYXRhKGkgKyBzW2FdKSwgbiA9PT0gZSAmJiAobiA9ICIiKSwgdC5jc3Moc1thXSwgbikpIH0sIHNldE1vZGU6IGZ1bmN0aW9uICh0LCBlKSB7IHJldHVybiAidG9nZ2xlIiA9PT0gZSAmJiAoZSA9IHQuaXMoIjpoaWRkZW4iKSA/ICJzaG93IiA6ICJoaWRlIiksIGUgfSwgZ2V0QmFzZWxpbmU6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpLCBzOyBzd2l0Y2ggKHRbMF0pIHsgY2FzZSAidG9wIjogaSA9IDA7IGJyZWFrOyBjYXNlICJtaWRkbGUiOiBpID0gLjU7IGJyZWFrOyBjYXNlICJib3R0b20iOiBpID0gMTsgYnJlYWs7IGRlZmF1bHQ6IGkgPSB0WzBdIC8gZS5oZWlnaHQgfSBzd2l0Y2ggKHRbMV0pIHsgY2FzZSAibGVmdCI6IHMgPSAwOyBicmVhazsgY2FzZSAiY2VudGVyIjogcyA9IC41OyBicmVhazsgY2FzZSAicmlnaHQiOiBzID0gMTsgYnJlYWs7IGRlZmF1bHQ6IHMgPSB0WzFdIC8gZS53aWR0aCB9IHJldHVybiB7IHg6IHMsIHk6IGkgfSB9LCBjcmVhdGVXcmFwcGVyOiBmdW5jdGlvbiAoZSkgeyBpZiAoZS5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKSByZXR1cm4gZS5wYXJlbnQoKTsgdmFyIGkgPSB7IHdpZHRoOiBlLm91dGVyV2lkdGgoITApLCBoZWlnaHQ6IGUub3V0ZXJIZWlnaHQoITApLCAiZmxvYXQiOiBlLmNzcygiZmxvYXQiKSB9LCBzID0gdCgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHsgZm9udFNpemU6ICIxMDAlIiwgYmFja2dyb3VuZDogInRyYW5zcGFyZW50IiwgYm9yZGVyOiAibm9uZSIsIG1hcmdpbjogMCwgcGFkZGluZzogMCB9KSwgbiA9IHsgd2lkdGg6IGUud2lkdGgoKSwgaGVpZ2h0OiBlLmhlaWdodCgpIH0sIGEgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OyB0cnkgeyBhLmlkIH0gY2F0Y2ggKG8pIHsgYSA9IGRvY3VtZW50LmJvZHkgfSByZXR1cm4gZS53cmFwKHMpLCAoZVswXSA9PT0gYSB8fCB0LmNvbnRhaW5zKGVbMF0sIGEpKSAmJiB0KGEpLmZvY3VzKCksIHMgPSBlLnBhcmVudCgpLCAic3RhdGljIiA9PT0gZS5jc3MoInBvc2l0aW9uIikgPyAocy5jc3MoeyBwb3NpdGlvbjogInJlbGF0aXZlIiB9KSwgZS5jc3MoeyBwb3NpdGlvbjogInJlbGF0aXZlIiB9KSkgOiAodC5leHRlbmQoaSwgeyBwb3NpdGlvbjogZS5jc3MoInBvc2l0aW9uIiksIHpJbmRleDogZS5jc3MoInotaW5kZXgiKSB9KSwgdC5lYWNoKFsidG9wIiwgImxlZnQiLCAiYm90dG9tIiwgInJpZ2h0Il0sIGZ1bmN0aW9uICh0LCBzKSB7IGlbc10gPSBlLmNzcyhzKSwgaXNOYU4ocGFyc2VJbnQoaVtzXSwgMTApKSAmJiAoaVtzXSA9ICJhdXRvIikgfSksIGUuY3NzKHsgcG9zaXRpb246ICJyZWxhdGl2ZSIsIHRvcDogMCwgbGVmdDogMCwgcmlnaHQ6ICJhdXRvIiwgYm90dG9tOiAiYXV0byIgfSkpLCBlLmNzcyhuKSwgcy5jc3MoaSkuc2hvdygpIH0sIHJlbW92ZVdyYXBwZXI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsgcmV0dXJuIGUucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSAmJiAoZS5wYXJlbnQoKS5yZXBsYWNlV2l0aChlKSwgKGVbMF0gPT09IGkgfHwgdC5jb250YWlucyhlWzBdLCBpKSkgJiYgdChpKS5mb2N1cygpKSwgZSB9LCBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbiAoZSwgaSwgcywgbikgeyByZXR1cm4gbiA9IG4gfHwge30sIHQuZWFjaChpLCBmdW5jdGlvbiAodCwgaSkgeyB2YXIgYSA9IGUuY3NzVW5pdChpKTsgYVswXSA+IDAgJiYgKG5baV0gPSBhWzBdICogcyArIGFbMV0pIH0pLCBuIH0gfSksIHQuZm4uZXh0ZW5kKHsgZWZmZWN0OiBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGUoZSkgeyBmdW5jdGlvbiBzKCkgeyB0LmlzRnVuY3Rpb24oYSkgJiYgYS5jYWxsKG5bMF0pLCB0LmlzRnVuY3Rpb24oZSkgJiYgZSgpIH0gdmFyIG4gPSB0KHRoaXMpLCBhID0gaS5jb21wbGV0ZSwgciA9IGkubW9kZTsgKG4uaXMoIjpoaWRkZW4iKSA/ICJoaWRlIiA9PT0gciA6ICJzaG93IiA9PT0gcikgPyAobltyXSgpLCBzKCkpIDogby5jYWxsKG5bMF0sIGksIHMpIH0gdmFyIGkgPSBzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIG4gPSBpLm1vZGUsIGEgPSBpLnF1ZXVlLCBvID0gdC5lZmZlY3RzLmVmZmVjdFtpLmVmZmVjdF07IHJldHVybiB0LmZ4Lm9mZiB8fCAhbyA/IG4gPyB0aGlzW25dKGkuZHVyYXRpb24sIGkuY29tcGxldGUpIDogdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsgaS5jb21wbGV0ZSAmJiBpLmNvbXBsZXRlLmNhbGwodGhpcykgfSkgOiBhID09PSAhMSA/IHRoaXMuZWFjaChlKSA6IHRoaXMucXVldWUoYSB8fCAiZngiLCBlKSB9LCBzaG93OiBmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgaWYgKG4oZSkpIHJldHVybiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IHZhciBpID0gcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyByZXR1cm4gaS5tb2RlID0gInNob3ciLCB0aGlzLmVmZmVjdC5jYWxsKHRoaXMsIGkpIH0gfSh0LmZuLnNob3cpLCBoaWRlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gZnVuY3Rpb24gKGUpIHsgaWYgKG4oZSkpIHJldHVybiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IHZhciBpID0gcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyByZXR1cm4gaS5tb2RlID0gImhpZGUiLCB0aGlzLmVmZmVjdC5jYWxsKHRoaXMsIGkpIH0gfSh0LmZuLmhpZGUpLCB0b2dnbGU6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBmdW5jdGlvbiAoZSkgeyBpZiAobihlKSB8fCAiYm9vbGVhbiIgPT0gdHlwZW9mIGUpIHJldHVybiB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IHZhciBpID0gcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyByZXR1cm4gaS5tb2RlID0gInRvZ2dsZSIsIHRoaXMuZWZmZWN0LmNhbGwodGhpcywgaSkgfSB9KHQuZm4udG9nZ2xlKSwgY3NzVW5pdDogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLmNzcyhlKSwgcyA9IFtdOyByZXR1cm4gdC5lYWNoKFsiZW0iLCAicHgiLCAiJSIsICJwdCJdLCBmdW5jdGlvbiAodCwgZSkgeyBpLmluZGV4T2YoZSkgPiAwICYmIChzID0gW3BhcnNlRmxvYXQoaSksIGVdKSB9KSwgcyB9IH0pIH0oKSwgZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHt9OyB0LmVhY2goWyJRdWFkIiwgIkN1YmljIiwgIlF1YXJ0IiwgIlF1aW50IiwgIkV4cG8iXSwgZnVuY3Rpb24gKHQsIGkpIHsgZVtpXSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBNYXRoLnBvdyhlLCB0ICsgMikgfSB9KSwgdC5leHRlbmQoZSwgeyBTaW5lOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gMSAtIE1hdGguY29zKHQgKiBNYXRoLlBJIC8gMikgfSwgQ2lyYzogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIHQgKiB0KSB9LCBFbGFzdGljOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gMCA9PT0gdCB8fCAxID09PSB0ID8gdCA6IC1NYXRoLnBvdygyLCA4ICogKHQgLSAxKSkgKiBNYXRoLnNpbigoODAgKiAodCAtIDEpIC0gNy41KSAqIE1hdGguUEkgLyAxNSkgfSwgQmFjazogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgKiB0ICogKDMgKiB0IC0gMikgfSwgQm91bmNlOiBmdW5jdGlvbiAodCkgeyBmb3IgKHZhciBlLCBpID0gNDsgKChlID0gTWF0aC5wb3coMiwgLS1pKSkgLSAxKSAvIDExID4gdDspOyByZXR1cm4gMSAvIE1hdGgucG93KDQsIDMgLSBpKSAtIDcuNTYyNSAqIE1hdGgucG93KCgzICogZSAtIDIpIC8gMjIgLSB0LCAyKSB9IH0pLCB0LmVhY2goZSwgZnVuY3Rpb24gKGUsIGkpIHsgdC5lYXNpbmdbImVhc2VJbiIgKyBlXSA9IGksIHQuZWFzaW5nWyJlYXNlT3V0IiArIGVdID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDEgLSBpKDEgLSB0KSB9LCB0LmVhc2luZ1siZWFzZUluT3V0IiArIGVdID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIC41ID4gdCA/IGkoMiAqIHQpIC8gMiA6IDEgLSBpKC0yICogdCArIDIpIC8gMiB9IH0pIH0oKSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSAvdXB8ZG93bnx2ZXJ0aWNhbC8sIGkgPSAvdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLzsgdC5lZmZlY3RzLmVmZmVjdC5ibGluZCA9IGZ1bmN0aW9uIChzLCBuKSB7IHZhciBhLCBvLCByLCBsID0gdCh0aGlzKSwgaCA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCJdLCBjID0gdC5lZmZlY3RzLnNldE1vZGUobCwgcy5tb2RlIHx8ICJoaWRlIiksIHUgPSBzLmRpcmVjdGlvbiB8fCAidXAiLCBkID0gZS50ZXN0KHUpLCBwID0gZCA/ICJoZWlnaHQiIDogIndpZHRoIiwgZiA9IGQgPyAidG9wIiA6ICJsZWZ0IiwgZyA9IGkudGVzdCh1KSwgbSA9IHt9LCB2ID0gInNob3ciID09PSBjOyBsLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikgPyB0LmVmZmVjdHMuc2F2ZShsLnBhcmVudCgpLCBoKSA6IHQuZWZmZWN0cy5zYXZlKGwsIGgpLCBsLnNob3coKSwgYSA9IHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGwpLmNzcyh7IG92ZXJmbG93OiAiaGlkZGVuIiB9KSwgbyA9IGFbcF0oKSwgciA9IHBhcnNlRmxvYXQoYS5jc3MoZikpIHx8IDAsIG1bcF0gPSB2ID8gbyA6IDAsIGcgfHwgKGwuY3NzKGQgPyAiYm90dG9tIiA6ICJyaWdodCIsIDApLmNzcyhkID8gInRvcCIgOiAibGVmdCIsICJhdXRvIikuY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIgfSksIG1bZl0gPSB2ID8gciA6IG8gKyByKSwgdiAmJiAoYS5jc3MocCwgMCksIGcgfHwgYS5jc3MoZiwgciArIG8pKSwgYS5hbmltYXRlKG0sIHsgZHVyYXRpb246IHMuZHVyYXRpb24sIGVhc2luZzogcy5lYXNpbmcsIHF1ZXVlOiAhMSwgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgImhpZGUiID09PSBjICYmIGwuaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShsLCBoKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobCksIG4oKSB9IH0pIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3QuYm91bmNlID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4sIGEsIG8gPSB0KHRoaXMpLCByID0gWyJwb3NpdGlvbiIsICJ0b3AiLCAiYm90dG9tIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgIndpZHRoIl0sIGwgPSB0LmVmZmVjdHMuc2V0TW9kZShvLCBlLm1vZGUgfHwgImVmZmVjdCIpLCBoID0gImhpZGUiID09PSBsLCBjID0gInNob3ciID09PSBsLCB1ID0gZS5kaXJlY3Rpb24gfHwgInVwIiwgZCA9IGUuZGlzdGFuY2UsIHAgPSBlLnRpbWVzIHx8IDUsIGYgPSAyICogcCArIChjIHx8IGggPyAxIDogMCksIGcgPSBlLmR1cmF0aW9uIC8gZiwgbSA9IGUuZWFzaW5nLCB2ID0gInVwIiA9PT0gdSB8fCAiZG93biIgPT09IHUgPyAidG9wIiA6ICJsZWZ0IiwgXyA9ICJ1cCIgPT09IHUgfHwgImxlZnQiID09PSB1LCBiID0gby5xdWV1ZSgpLCB5ID0gYi5sZW5ndGg7IGZvciAoKGMgfHwgaCkgJiYgci5wdXNoKCJvcGFjaXR5IiksIHQuZWZmZWN0cy5zYXZlKG8sIHIpLCBvLnNob3coKSwgdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobyksIGQgfHwgKGQgPSBvWyJ0b3AiID09PSB2ID8gIm91dGVySGVpZ2h0IiA6ICJvdXRlcldpZHRoIl0oKSAvIDMpLCBjICYmIChhID0geyBvcGFjaXR5OiAxIH0sIGFbdl0gPSAwLCBvLmNzcygib3BhY2l0eSIsIDApLmNzcyh2LCBfID8gMiAqIC1kIDogMiAqIGQpLmFuaW1hdGUoYSwgZywgbSkpLCBoICYmIChkIC89IE1hdGgucG93KDIsIHAgLSAxKSksIGEgPSB7fSwgYVt2XSA9IDAsIHMgPSAwOyBwID4gczsgcysrKSBuID0ge30sIG5bdl0gPSAoXyA/ICItPSIgOiAiKz0iKSArIGQsIG8uYW5pbWF0ZShuLCBnLCBtKS5hbmltYXRlKGEsIGcsIG0pLCBkID0gaCA/IDIgKiBkIDogZCAvIDI7IGggJiYgKG4gPSB7IG9wYWNpdHk6IDAgfSwgblt2XSA9IChfID8gIi09IiA6ICIrPSIpICsgZCwgby5hbmltYXRlKG4sIGcsIG0pKSwgby5xdWV1ZShmdW5jdGlvbiAoKSB7IGggJiYgby5oaWRlKCksIHQuZWZmZWN0cy5yZXN0b3JlKG8sIHIpLCB0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSwgaSgpIH0pLCB5ID4gMSAmJiBiLnNwbGljZS5hcHBseShiLCBbMSwgMF0uY29uY2F0KGIuc3BsaWNlKHksIGYgKyAxKSkpLCBvLmRlcXVldWUoKSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmNsaXAgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiwgYSwgbyA9IHQodGhpcyksIHIgPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAid2lkdGgiXSwgbCA9IHQuZWZmZWN0cy5zZXRNb2RlKG8sIGUubW9kZSB8fCAiaGlkZSIpLCBoID0gInNob3ciID09PSBsLCBjID0gZS5kaXJlY3Rpb24gfHwgInZlcnRpY2FsIiwgdSA9ICJ2ZXJ0aWNhbCIgPT09IGMsIGQgPSB1ID8gImhlaWdodCIgOiAid2lkdGgiLCBwID0gdSA/ICJ0b3AiIDogImxlZnQiLCBmID0ge307IHQuZWZmZWN0cy5zYXZlKG8sIHIpLCBvLnNob3coKSwgcyA9IHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLmNzcyh7IG92ZXJmbG93OiAiaGlkZGVuIiB9KSwgbiA9ICJJTUciID09PSBvWzBdLnRhZ05hbWUgPyBzIDogbywgYSA9IG5bZF0oKSwgaCAmJiAobi5jc3MoZCwgMCksIG4uY3NzKHAsIGEgLyAyKSksIGZbZF0gPSBoID8gYSA6IDAsIGZbcF0gPSBoID8gMCA6IGEgLyAyLCBuLmFuaW1hdGUoZiwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiBlLmR1cmF0aW9uLCBlYXNpbmc6IGUuZWFzaW5nLCBjb21wbGV0ZTogZnVuY3Rpb24gKCkgeyBoIHx8IG8uaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShvLCByKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksIGkoKSB9IH0pIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3QuZHJvcCA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuID0gdCh0aGlzKSwgYSA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgIm9wYWNpdHkiLCAiaGVpZ2h0IiwgIndpZHRoIl0sIG8gPSB0LmVmZmVjdHMuc2V0TW9kZShuLCBlLm1vZGUgfHwgImhpZGUiKSwgciA9ICJzaG93IiA9PT0gbywgbCA9IGUuZGlyZWN0aW9uIHx8ICJsZWZ0IiwgaCA9ICJ1cCIgPT09IGwgfHwgImRvd24iID09PSBsID8gInRvcCIgOiAibGVmdCIsIGMgPSAidXAiID09PSBsIHx8ICJsZWZ0IiA9PT0gbCA/ICJwb3MiIDogIm5lZyIsIHUgPSB7IG9wYWNpdHk6IHIgPyAxIDogMCB9OyB0LmVmZmVjdHMuc2F2ZShuLCBhKSwgbi5zaG93KCksIHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG4pLCBzID0gZS5kaXN0YW5jZSB8fCBuWyJ0b3AiID09PSBoID8gIm91dGVySGVpZ2h0IiA6ICJvdXRlcldpZHRoIl0oITApIC8gMiwgciAmJiBuLmNzcygib3BhY2l0eSIsIDApLmNzcyhoLCAicG9zIiA9PT0gYyA/IC1zIDogcyksIHVbaF0gPSAociA/ICJwb3MiID09PSBjID8gIis9IiA6ICItPSIgOiAicG9zIiA9PT0gYyA/ICItPSIgOiAiKz0iKSArIHMsIG4uYW5pbWF0ZSh1LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IGUuZHVyYXRpb24sIGVhc2luZzogZS5lYXNpbmcsIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7ICJoaWRlIiA9PT0gbyAmJiBuLmhpZGUoKSwgdC5lZmZlY3RzLnJlc3RvcmUobiwgYSksIHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG4pLCBpKCkgfSB9KSB9IH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyB0LmVmZmVjdHMuZWZmZWN0LmV4cGxvZGUgPSBmdW5jdGlvbiAoZSwgaSkgeyBmdW5jdGlvbiBzKCkgeyBiLnB1c2godGhpcyksIGIubGVuZ3RoID09PSB1ICogZCAmJiBuKCkgfSBmdW5jdGlvbiBuKCkgeyBwLmNzcyh7IHZpc2liaWxpdHk6ICJ2aXNpYmxlIiB9KSwgdChiKS5yZW1vdmUoKSwgZyB8fCBwLmhpZGUoKSwgaSgpIH0gdmFyIGEsIG8sIHIsIGwsIGgsIGMsIHUgPSBlLnBpZWNlcyA/IE1hdGgucm91bmQoTWF0aC5zcXJ0KGUucGllY2VzKSkgOiAzLCBkID0gdSwgcCA9IHQodGhpcyksIGYgPSB0LmVmZmVjdHMuc2V0TW9kZShwLCBlLm1vZGUgfHwgImhpZGUiKSwgZyA9ICJzaG93IiA9PT0gZiwgbSA9IHAuc2hvdygpLmNzcygidmlzaWJpbGl0eSIsICJoaWRkZW4iKS5vZmZzZXQoKSwgdiA9IE1hdGguY2VpbChwLm91dGVyV2lkdGgoKSAvIGQpLCBfID0gTWF0aC5jZWlsKHAub3V0ZXJIZWlnaHQoKSAvIHUpLCBiID0gW107IGZvciAoYSA9IDA7IHUgPiBhOyBhKyspIGZvciAobCA9IG0udG9wICsgYSAqIF8sIGMgPSBhIC0gKHUgLSAxKSAvIDIsIG8gPSAwOyBkID4gbzsgbysrKSByID0gbS5sZWZ0ICsgbyAqIHYsIGggPSBvIC0gKGQgLSAxKSAvIDIsIHAuY2xvbmUoKS5hcHBlbmRUbygiYm9keSIpLndyYXAoIjxkaXY+PC9kaXY+IikuY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJ2aXNpYmxlIiwgbGVmdDogLW8gKiB2LCB0b3A6IC1hICogXyB9KS5wYXJlbnQoKS5hZGRDbGFzcygidWktZWZmZWN0cy1leHBsb2RlIikuY3NzKHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIG92ZXJmbG93OiAiaGlkZGVuIiwgd2lkdGg6IHYsIGhlaWdodDogXywgbGVmdDogciArIChnID8gaCAqIHYgOiAwKSwgdG9wOiBsICsgKGcgPyBjICogXyA6IDApLCBvcGFjaXR5OiBnID8gMCA6IDEgfSkuYW5pbWF0ZSh7IGxlZnQ6IHIgKyAoZyA/IDAgOiBoICogdiksIHRvcDogbCArIChnID8gMCA6IGMgKiBfKSwgb3BhY2l0eTogZyA/IDEgOiAwIH0sIGUuZHVyYXRpb24gfHwgNTAwLCBlLmVhc2luZywgcykgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5mYWRlID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0KHRoaXMpLCBuID0gdC5lZmZlY3RzLnNldE1vZGUocywgZS5tb2RlIHx8ICJ0b2dnbGUiKTsgcy5hbmltYXRlKHsgb3BhY2l0eTogbiB9LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IGUuZHVyYXRpb24sIGVhc2luZzogZS5lYXNpbmcsIGNvbXBsZXRlOiBpIH0pIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3QuZm9sZCA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuLCBhID0gdCh0aGlzKSwgbyA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCJdLCByID0gdC5lZmZlY3RzLnNldE1vZGUoYSwgZS5tb2RlIHx8ICJoaWRlIiksIGwgPSAic2hvdyIgPT09IHIsIGggPSAiaGlkZSIgPT09IHIsIGMgPSBlLnNpemUgfHwgMTUsIHUgPSAvKFswLTldKyklLy5leGVjKGMpLCBkID0gISFlLmhvcml6Rmlyc3QsIHAgPSBsICE9PSBkLCBmID0gcCA/IFsid2lkdGgiLCAiaGVpZ2h0Il0gOiBbImhlaWdodCIsICJ3aWR0aCJdLCBnID0gZS5kdXJhdGlvbiAvIDIsIG0gPSB7fSwgdiA9IHt9OyB0LmVmZmVjdHMuc2F2ZShhLCBvKSwgYS5zaG93KCksIHMgPSB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihhKS5jc3MoeyBvdmVyZmxvdzogImhpZGRlbiIgfSksIG4gPSBwID8gW3Mud2lkdGgoKSwgcy5oZWlnaHQoKV0gOiBbcy5oZWlnaHQoKSwgcy53aWR0aCgpXSwgdSAmJiAoYyA9IHBhcnNlSW50KHVbMV0sIDEwKSAvIDEwMCAqIG5baCA/IDAgOiAxXSksIGwgJiYgcy5jc3MoZCA/IHsgaGVpZ2h0OiAwLCB3aWR0aDogYyB9IDogeyBoZWlnaHQ6IGMsIHdpZHRoOiAwIH0pLCBtW2ZbMF1dID0gbCA/IG5bMF0gOiBjLCB2W2ZbMV1dID0gbCA/IG5bMV0gOiAwLCBzLmFuaW1hdGUobSwgZywgZS5lYXNpbmcpLmFuaW1hdGUodiwgZywgZS5lYXNpbmcsIGZ1bmN0aW9uICgpIHsgaCAmJiBhLmhpZGUoKSwgdC5lZmZlY3RzLnJlc3RvcmUoYSwgbyksIHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLCBpKCkgfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcyksIG4gPSBbImJhY2tncm91bmRJbWFnZSIsICJiYWNrZ3JvdW5kQ29sb3IiLCAib3BhY2l0eSJdLCBhID0gdC5lZmZlY3RzLnNldE1vZGUocywgZS5tb2RlIHx8ICJzaG93IiksIG8gPSB7IGJhY2tncm91bmRDb2xvcjogcy5jc3MoImJhY2tncm91bmRDb2xvciIpIH07ICJoaWRlIiA9PT0gYSAmJiAoby5vcGFjaXR5ID0gMCksIHQuZWZmZWN0cy5zYXZlKHMsIG4pLCBzLnNob3coKS5jc3MoeyBiYWNrZ3JvdW5kSW1hZ2U6ICJub25lIiwgYmFja2dyb3VuZENvbG9yOiBlLmNvbG9yIHx8ICIjZmZmZjk5IiB9KS5hbmltYXRlKG8sIHsgcXVldWU6ICExLCBkdXJhdGlvbjogZS5kdXJhdGlvbiwgZWFzaW5nOiBlLmVhc2luZywgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgImhpZGUiID09PSBhICYmIHMuaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShzLCBuKSwgaSgpIH0gfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC5lZmZlY3RzLmVmZmVjdC5wdWxzYXRlID0gZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4gPSB0KHRoaXMpLCBhID0gdC5lZmZlY3RzLnNldE1vZGUobiwgZS5tb2RlIHx8ICJzaG93IiksIG8gPSAic2hvdyIgPT09IGEsIHIgPSAiaGlkZSIgPT09IGEsIGwgPSBvIHx8ICJoaWRlIiA9PT0gYSwgaCA9IDIgKiAoZS50aW1lcyB8fCA1KSArIChsID8gMSA6IDApLCBjID0gZS5kdXJhdGlvbiAvIGgsIHUgPSAwLCBkID0gbi5xdWV1ZSgpLCBwID0gZC5sZW5ndGg7IGZvciAoKG8gfHwgIW4uaXMoIjp2aXNpYmxlIikpICYmIChuLmNzcygib3BhY2l0eSIsIDApLnNob3coKSwgdSA9IDEpLCBzID0gMTsgaCA+IHM7IHMrKykgbi5hbmltYXRlKHsgb3BhY2l0eTogdSB9LCBjLCBlLmVhc2luZyksIHUgPSAxIC0gdTsgbi5hbmltYXRlKHsgb3BhY2l0eTogdSB9LCBjLCBlLmVhc2luZyksIG4ucXVldWUoZnVuY3Rpb24gKCkgeyByICYmIG4uaGlkZSgpLCBpKCkgfSksIHAgPiAxICYmIGQuc3BsaWNlLmFwcGx5KGQsIFsxLCAwXS5jb25jYXQoZC5zcGxpY2UocCwgaCArIDEpKSksIG4uZGVxdWV1ZSgpIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3QucHVmZiA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzID0gdCh0aGlzKSwgbiA9IHQuZWZmZWN0cy5zZXRNb2RlKHMsIGUubW9kZSB8fCAiaGlkZSIpLCBhID0gImhpZGUiID09PSBuLCBvID0gcGFyc2VJbnQoZS5wZXJjZW50LCAxMCkgfHwgMTUwLCByID0gbyAvIDEwMCwgbCA9IHsgaGVpZ2h0OiBzLmhlaWdodCgpLCB3aWR0aDogcy53aWR0aCgpLCBvdXRlckhlaWdodDogcy5vdXRlckhlaWdodCgpLCBvdXRlcldpZHRoOiBzLm91dGVyV2lkdGgoKSB9OyB0LmV4dGVuZChlLCB7IGVmZmVjdDogInNjYWxlIiwgcXVldWU6ICExLCBmYWRlOiAhMCwgbW9kZTogbiwgY29tcGxldGU6IGksIHBlcmNlbnQ6IGEgPyBvIDogMTAwLCBmcm9tOiBhID8gbCA6IHsgaGVpZ2h0OiBsLmhlaWdodCAqIHIsIHdpZHRoOiBsLndpZHRoICogciwgb3V0ZXJIZWlnaHQ6IGwub3V0ZXJIZWlnaHQgKiByLCBvdXRlcldpZHRoOiBsLm91dGVyV2lkdGggKiByIH0gfSksIHMuZWZmZWN0KGUpIH0sIHQuZWZmZWN0cy5lZmZlY3Quc2NhbGUgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcyksIG4gPSB0LmV4dGVuZCghMCwge30sIGUpLCBhID0gdC5lZmZlY3RzLnNldE1vZGUocywgZS5tb2RlIHx8ICJlZmZlY3QiKSwgbyA9IHBhcnNlSW50KGUucGVyY2VudCwgMTApIHx8ICgwID09PSBwYXJzZUludChlLnBlcmNlbnQsIDEwKSA/IDAgOiAiaGlkZSIgPT09IGEgPyAwIDogMTAwKSwgciA9IGUuZGlyZWN0aW9uIHx8ICJib3RoIiwgbCA9IGUub3JpZ2luLCBoID0geyBoZWlnaHQ6IHMuaGVpZ2h0KCksIHdpZHRoOiBzLndpZHRoKCksIG91dGVySGVpZ2h0OiBzLm91dGVySGVpZ2h0KCksIG91dGVyV2lkdGg6IHMub3V0ZXJXaWR0aCgpIH0sIGMgPSB7IHk6ICJob3Jpem9udGFsIiAhPT0gciA/IG8gLyAxMDAgOiAxLCB4OiAidmVydGljYWwiICE9PSByID8gbyAvIDEwMCA6IDEgfTsgbi5lZmZlY3QgPSAic2l6ZSIsIG4ucXVldWUgPSAhMSwgbi5jb21wbGV0ZSA9IGksICJlZmZlY3QiICE9PSBhICYmIChuLm9yaWdpbiA9IGwgfHwgWyJtaWRkbGUiLCAiY2VudGVyIl0sIG4ucmVzdG9yZSA9ICEwKSwgbi5mcm9tID0gZS5mcm9tIHx8ICgic2hvdyIgPT09IGEgPyB7IGhlaWdodDogMCwgd2lkdGg6IDAsIG91dGVySGVpZ2h0OiAwLCBvdXRlcldpZHRoOiAwIH0gOiBoKSwgbi50byA9IHsgaGVpZ2h0OiBoLmhlaWdodCAqIGMueSwgd2lkdGg6IGgud2lkdGggKiBjLngsIG91dGVySGVpZ2h0OiBoLm91dGVySGVpZ2h0ICogYy55LCBvdXRlcldpZHRoOiBoLm91dGVyV2lkdGggKiBjLnggfSwgbi5mYWRlICYmICgic2hvdyIgPT09IGEgJiYgKG4uZnJvbS5vcGFjaXR5ID0gMCwgbi50by5vcGFjaXR5ID0gMSksICJoaWRlIiA9PT0gYSAmJiAobi5mcm9tLm9wYWNpdHkgPSAxLCBuLnRvLm9wYWNpdHkgPSAwKSksIHMuZWZmZWN0KG4pIH0sIHQuZWZmZWN0cy5lZmZlY3Quc2l6ZSA9IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuLCBhLCBvID0gdCh0aGlzKSwgciA9IFsicG9zaXRpb24iLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJvcGFjaXR5Il0sIGwgPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJvdmVyZmxvdyIsICJvcGFjaXR5Il0sIGggPSBbIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyJdLCBjID0gWyJmb250U2l6ZSJdLCB1ID0gWyJib3JkZXJUb3BXaWR0aCIsICJib3JkZXJCb3R0b21XaWR0aCIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20iXSwgZCA9IFsiYm9yZGVyTGVmdFdpZHRoIiwgImJvcmRlclJpZ2h0V2lkdGgiLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0Il0sIHAgPSB0LmVmZmVjdHMuc2V0TW9kZShvLCBlLm1vZGUgfHwgImVmZmVjdCIpLCBmID0gZS5yZXN0b3JlIHx8ICJlZmZlY3QiICE9PSBwLCBnID0gZS5zY2FsZSB8fCAiYm90aCIsIG0gPSBlLm9yaWdpbiB8fCBbIm1pZGRsZSIsICJjZW50ZXIiXSwgdiA9IG8uY3NzKCJwb3NpdGlvbiIpLCBfID0gZiA/IHIgOiBsLCBiID0geyBoZWlnaHQ6IDAsIHdpZHRoOiAwLCBvdXRlckhlaWdodDogMCwgb3V0ZXJXaWR0aDogMCB9OyAic2hvdyIgPT09IHAgJiYgby5zaG93KCksIHMgPSB7IGhlaWdodDogby5oZWlnaHQoKSwgd2lkdGg6IG8ud2lkdGgoKSwgb3V0ZXJIZWlnaHQ6IG8ub3V0ZXJIZWlnaHQoKSwgb3V0ZXJXaWR0aDogby5vdXRlcldpZHRoKCkgfSwgInRvZ2dsZSIgPT09IGUubW9kZSAmJiAic2hvdyIgPT09IHAgPyAoby5mcm9tID0gZS50byB8fCBiLCBvLnRvID0gZS5mcm9tIHx8IHMpIDogKG8uZnJvbSA9IGUuZnJvbSB8fCAoInNob3ciID09PSBwID8gYiA6IHMpLCBvLnRvID0gZS50byB8fCAoImhpZGUiID09PSBwID8gYiA6IHMpKSwgYSA9IHsgZnJvbTogeyB5OiBvLmZyb20uaGVpZ2h0IC8gcy5oZWlnaHQsIHg6IG8uZnJvbS53aWR0aCAvIHMud2lkdGggfSwgdG86IHsgeTogby50by5oZWlnaHQgLyBzLmhlaWdodCwgeDogby50by53aWR0aCAvIHMud2lkdGggfSB9LCAoImJveCIgPT09IGcgfHwgImJvdGgiID09PSBnKSAmJiAoYS5mcm9tLnkgIT09IGEudG8ueSAmJiAoXyA9IF8uY29uY2F0KHUpLCBvLmZyb20gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLCB1LCBhLmZyb20ueSwgby5mcm9tKSwgby50byA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sIHUsIGEudG8ueSwgby50bykpLCBhLmZyb20ueCAhPT0gYS50by54ICYmIChfID0gXy5jb25jYXQoZCksIG8uZnJvbSA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sIGQsIGEuZnJvbS54LCBvLmZyb20pLCBvLnRvID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24obywgZCwgYS50by54LCBvLnRvKSkpLCAoImNvbnRlbnQiID09PSBnIHx8ICJib3RoIiA9PT0gZykgJiYgYS5mcm9tLnkgIT09IGEudG8ueSAmJiAoXyA9IF8uY29uY2F0KGMpLmNvbmNhdChoKSwgby5mcm9tID0gdC5lZmZlY3RzLnNldFRyYW5zaXRpb24obywgYywgYS5mcm9tLnksIG8uZnJvbSksIG8udG8gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLCBjLCBhLnRvLnksIG8udG8pKSwgdC5lZmZlY3RzLnNhdmUobywgXyksIG8uc2hvdygpLCB0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKSwgby5jc3MoIm92ZXJmbG93IiwgImhpZGRlbiIpLmNzcyhvLmZyb20pLCBtICYmIChuID0gdC5lZmZlY3RzLmdldEJhc2VsaW5lKG0sIHMpLCBvLmZyb20udG9wID0gKHMub3V0ZXJIZWlnaHQgLSBvLm91dGVySGVpZ2h0KCkpICogbi55LCBvLmZyb20ubGVmdCA9IChzLm91dGVyV2lkdGggLSBvLm91dGVyV2lkdGgoKSkgKiBuLngsIG8udG8udG9wID0gKHMub3V0ZXJIZWlnaHQgLSBvLnRvLm91dGVySGVpZ2h0KSAqIG4ueSwgby50by5sZWZ0ID0gKHMub3V0ZXJXaWR0aCAtIG8udG8ub3V0ZXJXaWR0aCkgKiBuLngpLCBvLmNzcyhvLmZyb20pLCAoImNvbnRlbnQiID09PSBnIHx8ICJib3RoIiA9PT0gZykgJiYgKHUgPSB1LmNvbmNhdChbIm1hcmdpblRvcCIsICJtYXJnaW5Cb3R0b20iXSkuY29uY2F0KGMpLCBkID0gZC5jb25jYXQoWyJtYXJnaW5MZWZ0IiwgIm1hcmdpblJpZ2h0Il0pLCBoID0gci5jb25jYXQodSkuY29uY2F0KGQpLCBvLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBpID0gdCh0aGlzKSwgcyA9IHsgaGVpZ2h0OiBpLmhlaWdodCgpLCB3aWR0aDogaS53aWR0aCgpLCBvdXRlckhlaWdodDogaS5vdXRlckhlaWdodCgpLCBvdXRlcldpZHRoOiBpLm91dGVyV2lkdGgoKSB9OyBmICYmIHQuZWZmZWN0cy5zYXZlKGksIGgpLCBpLmZyb20gPSB7IGhlaWdodDogcy5oZWlnaHQgKiBhLmZyb20ueSwgd2lkdGg6IHMud2lkdGggKiBhLmZyb20ueCwgb3V0ZXJIZWlnaHQ6IHMub3V0ZXJIZWlnaHQgKiBhLmZyb20ueSwgb3V0ZXJXaWR0aDogcy5vdXRlcldpZHRoICogYS5mcm9tLnggfSwgaS50byA9IHsgaGVpZ2h0OiBzLmhlaWdodCAqIGEudG8ueSwgd2lkdGg6IHMud2lkdGggKiBhLnRvLngsIG91dGVySGVpZ2h0OiBzLmhlaWdodCAqIGEudG8ueSwgb3V0ZXJXaWR0aDogcy53aWR0aCAqIGEudG8ueCB9LCBhLmZyb20ueSAhPT0gYS50by55ICYmIChpLmZyb20gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLCB1LCBhLmZyb20ueSwgaS5mcm9tKSwgaS50byA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksIHUsIGEudG8ueSwgaS50bykpLCBhLmZyb20ueCAhPT0gYS50by54ICYmIChpLmZyb20gPSB0LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLCBkLCBhLmZyb20ueCwgaS5mcm9tKSwgaS50byA9IHQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksIGQsIGEudG8ueCwgaS50bykpLCBpLmNzcyhpLmZyb20pLCBpLmFuaW1hdGUoaS50bywgZS5kdXJhdGlvbiwgZS5lYXNpbmcsIGZ1bmN0aW9uICgpIHsgZiAmJiB0LmVmZmVjdHMucmVzdG9yZShpLCBoKSB9KSB9KSksIG8uYW5pbWF0ZShvLnRvLCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IGUuZHVyYXRpb24sIGVhc2luZzogZS5lYXNpbmcsIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IDAgPT09IG8udG8ub3BhY2l0eSAmJiBvLmNzcygib3BhY2l0eSIsIG8uZnJvbS5vcGFjaXR5KSwgImhpZGUiID09PSBwICYmIG8uaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShvLCBfKSwgZiB8fCAoInN0YXRpYyIgPT09IHYgPyBvLmNzcyh7IHBvc2l0aW9uOiAicmVsYXRpdmUiLCB0b3A6IG8udG8udG9wLCBsZWZ0OiBvLnRvLmxlZnQgfSkgOiB0LmVhY2goWyJ0b3AiLCAibGVmdCJdLCBmdW5jdGlvbiAodCwgZSkgeyBvLmNzcyhlLCBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHBhcnNlSW50KGksIDEwKSwgbiA9IHQgPyBvLnRvLmxlZnQgOiBvLnRvLnRvcDsgcmV0dXJuICJhdXRvIiA9PT0gaSA/IG4gKyAicHgiIDogcyArIG4gKyAicHgiIH0pIH0pKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksIGkoKSB9IH0pIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3Quc2hha2UgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiA9IHQodGhpcyksIGEgPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAid2lkdGgiXSwgbyA9IHQuZWZmZWN0cy5zZXRNb2RlKG4sIGUubW9kZSB8fCAiZWZmZWN0IiksIHIgPSBlLmRpcmVjdGlvbiB8fCAibGVmdCIsIGwgPSBlLmRpc3RhbmNlIHx8IDIwLCBoID0gZS50aW1lcyB8fCAzLCBjID0gMiAqIGggKyAxLCB1ID0gTWF0aC5yb3VuZChlLmR1cmF0aW9uIC8gYyksIGQgPSAidXAiID09PSByIHx8ICJkb3duIiA9PT0gciA/ICJ0b3AiIDogImxlZnQiLCBwID0gInVwIiA9PT0gciB8fCAibGVmdCIgPT09IHIsIGYgPSB7fSwgZyA9IHt9LCBtID0ge30sIHYgPSBuLnF1ZXVlKCksIF8gPSB2Lmxlbmd0aDsgZm9yICh0LmVmZmVjdHMuc2F2ZShuLCBhKSwgbi5zaG93KCksIHQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG4pLCBmW2RdID0gKHAgPyAiLT0iIDogIis9IikgKyBsLCBnW2RdID0gKHAgPyAiKz0iIDogIi09IikgKyAyICogbCwgbVtkXSA9IChwID8gIi09IiA6ICIrPSIpICsgMiAqIGwsIG4uYW5pbWF0ZShmLCB1LCBlLmVhc2luZyksIHMgPSAxOyBoID4gczsgcysrKSBuLmFuaW1hdGUoZywgdSwgZS5lYXNpbmcpLmFuaW1hdGUobSwgdSwgZS5lYXNpbmcpOyBuLmFuaW1hdGUoZywgdSwgZS5lYXNpbmcpLmFuaW1hdGUoZiwgdSAvIDIsIGUuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbiAoKSB7ICJoaWRlIiA9PT0gbyAmJiBuLmhpZGUoKSwgdC5lZmZlY3RzLnJlc3RvcmUobiwgYSksIHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG4pLCBpKCkgfSksIF8gPiAxICYmIHYuc3BsaWNlLmFwcGx5KHYsIFsxLCAwXS5jb25jYXQodi5zcGxpY2UoXywgYyArIDEpKSksIG4uZGVxdWV1ZSgpIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3Quc2xpZGUgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcywgbiA9IHQodGhpcyksIGEgPSBbInBvc2l0aW9uIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJ3aWR0aCIsICJoZWlnaHQiXSwgbyA9IHQuZWZmZWN0cy5zZXRNb2RlKG4sIGUubW9kZSB8fCAic2hvdyIpLCByID0gInNob3ciID09PSBvLCBsID0gZS5kaXJlY3Rpb24gfHwgImxlZnQiLCBoID0gInVwIiA9PT0gbCB8fCAiZG93biIgPT09IGwgPyAidG9wIiA6ICJsZWZ0IiwgYyA9ICJ1cCIgPT09IGwgfHwgImxlZnQiID09PSBsLCB1ID0ge307IHQuZWZmZWN0cy5zYXZlKG4sIGEpLCBuLnNob3coKSwgcyA9IGUuZGlzdGFuY2UgfHwgblsidG9wIiA9PT0gaCA/ICJvdXRlckhlaWdodCIgOiAib3V0ZXJXaWR0aCJdKCEwKSwgdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobikuY3NzKHsgb3ZlcmZsb3c6ICJoaWRkZW4iIH0pLCByICYmIG4uY3NzKGgsIGMgPyBpc05hTihzKSA/ICItIiArIHMgOiAtcyA6IHMpLCB1W2hdID0gKHIgPyBjID8gIis9IiA6ICItPSIgOiBjID8gIi09IiA6ICIrPSIpICsgcywgbi5hbmltYXRlKHUsIHsgcXVldWU6ICExLCBkdXJhdGlvbjogZS5kdXJhdGlvbiwgZWFzaW5nOiBlLmVhc2luZywgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgImhpZGUiID09PSBvICYmIG4uaGlkZSgpLCB0LmVmZmVjdHMucmVzdG9yZShuLCBhKSwgdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksIGkoKSB9IH0pIH0gfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IHQuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXIgPSBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcyksIG4gPSB0KGUudG8pLCBhID0gImZpeGVkIiA9PT0gbi5jc3MoInBvc2l0aW9uIiksIG8gPSB0KCJib2R5IiksIHIgPSBhID8gby5zY3JvbGxUb3AoKSA6IDAsIGwgPSBhID8gby5zY3JvbGxMZWZ0KCkgOiAwLCBoID0gbi5vZmZzZXQoKSwgYyA9IHsgdG9wOiBoLnRvcCAtIHIsIGxlZnQ6IGgubGVmdCAtIGwsIGhlaWdodDogbi5pbm5lckhlaWdodCgpLCB3aWR0aDogbi5pbm5lcldpZHRoKCkgfSwgdSA9IHMub2Zmc2V0KCksIGQgPSB0KCI8ZGl2IGNsYXNzPSd1aS1lZmZlY3RzLXRyYW5zZmVyJz48L2Rpdj4iKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhlLmNsYXNzTmFtZSkuY3NzKHsgdG9wOiB1LnRvcCAtIHIsIGxlZnQ6IHUubGVmdCAtIGwsIGhlaWdodDogcy5pbm5lckhlaWdodCgpLCB3aWR0aDogcy5pbm5lcldpZHRoKCksIHBvc2l0aW9uOiBhID8gImZpeGVkIiA6ICJhYnNvbHV0ZSIgfSkuYW5pbWF0ZShjLCBlLmR1cmF0aW9uLCBlLmVhc2luZywgZnVuY3Rpb24gKCkgeyBkLnJlbW92ZSgpLCBpKCkgfSkgfSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC53aWRnZXQoInVpLm1lbnUiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWZhdWx0RWxlbWVudDogIjx1bD4iLCBkZWxheTogMzAwLCBvcHRpb25zOiB7IGljb25zOiB7IHN1Ym1lbnU6ICJ1aS1pY29uLWNhcmF0LTEtZSIgfSwgbWVudXM6ICJ1bCIsIHBvc2l0aW9uOiB7IG15OiAibGVmdCB0b3AiLCBhdDogInJpZ2h0IHRvcCIgfSwgcm9sZTogIm1lbnUiLCBibHVyOiBudWxsLCBmb2N1czogbnVsbCwgc2VsZWN0OiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5hY3RpdmVNZW51ID0gdGhpcy5lbGVtZW50LCB0aGlzLm1vdXNlSGFuZGxlZCA9ICExLCB0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwgISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLmF0dHIoeyByb2xlOiB0aGlzLm9wdGlvbnMucm9sZSwgdGFiSW5kZXg6IDAgfSkuYmluZCgiY2xpY2siICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgdC5wcm94eShmdW5jdGlvbiAodCkgeyB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdC5wcmV2ZW50RGVmYXVsdCgpIH0sIHRoaXMpKSwgdGhpcy5vcHRpb25zLmRpc2FibGVkICYmIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwgInRydWUiKSwgdGhpcy5fb24oeyAibW91c2Vkb3duIC51aS1tZW51LWl0ZW0gPiBhIjogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpIH0sICJjbGljayAudWktc3RhdGUtZGlzYWJsZWQgPiBhIjogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpIH0sICJjbGljayAudWktbWVudS1pdGVtOmhhcyhhKSI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpOyAhdGhpcy5tb3VzZUhhbmRsZWQgJiYgaS5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCAmJiAodGhpcy5zZWxlY3QoZSksIGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSB8fCAodGhpcy5tb3VzZUhhbmRsZWQgPSAhMCksIGkuaGFzKCIudWktbWVudSIpLmxlbmd0aCA/IHRoaXMuZXhwYW5kKGUpIDogIXRoaXMuZWxlbWVudC5pcygiOmZvY3VzIikgJiYgdCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RoICYmICh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLCBbITBdKSwgdGhpcy5hY3RpdmUgJiYgMSA9PT0gdGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGggJiYgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpKSkgfSwgIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSI6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdChlLmN1cnJlbnRUYXJnZXQpOyBpLnNpYmxpbmdzKCkuY2hpbGRyZW4oIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksIHRoaXMuZm9jdXMoZSwgaSkgfSwgbW91c2VsZWF2ZTogImNvbGxhcHNlQWxsIiwgIm1vdXNlbGVhdmUgLnVpLW1lbnUiOiAiY29sbGFwc2VBbGwiLCBmb2N1czogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGkgPSB0aGlzLmFjdGl2ZSB8fCB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5lcSgwKTsgZSB8fCB0aGlzLmZvY3VzKHQsIGkpIH0sIGJsdXI6IGZ1bmN0aW9uIChlKSB7IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sIHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkgfHwgdGhpcy5jb2xsYXBzZUFsbChlKSB9KSB9LCBrZXlkb3duOiAiX2tleWRvd24iIH0pLCB0aGlzLnJlZnJlc2goKSwgdGhpcy5fb24odGhpcy5kb2N1bWVudCwgeyBjbGljazogZnVuY3Rpb24gKGUpIHsgdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGggfHwgdGhpcy5jb2xsYXBzZUFsbChlKSwgdGhpcy5tb3VzZUhhbmRsZWQgPSAhMSB9IH0pIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiKS5maW5kKCIudWktbWVudSIpLmFkZEJhY2soKS5yZW1vdmVDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1tZW51LWljb25zIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLCB0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtaXRlbSIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWl0ZW0iKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLmNoaWxkcmVuKCJhIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IGUuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikgJiYgZS5yZW1vdmUoKSB9KSwgdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWRpdmlkZXIiKS5yZW1vdmVDbGFzcygidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50IikgfSwgX2tleWRvd246IGZ1bmN0aW9uIChlKSB7IGZ1bmN0aW9uIGkodCkgeyByZXR1cm4gdC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAiXFwkJiIpIH0gdmFyIHMsIG4sIGEsIG8sIHIsIGwgPSAhMDsgc3dpdGNoIChlLmtleUNvZGUpIHsgY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDogdGhpcy5wcmV2aW91c1BhZ2UoZSk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046IHRoaXMubmV4dFBhZ2UoZSk7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5IT01FOiB0aGlzLl9tb3ZlKCJmaXJzdCIsICJmaXJzdCIsIGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRU5EOiB0aGlzLl9tb3ZlKCJsYXN0IiwgImxhc3QiLCBlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlVQOiB0aGlzLnByZXZpb3VzKGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRE9XTjogdGhpcy5uZXh0KGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogdGhpcy5jb2xsYXBzZShlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpICYmIHRoaXMuZXhwYW5kKGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRU5URVI6IGNhc2UgdC51aS5rZXlDb2RlLlNQQUNFOiB0aGlzLl9hY3RpdmF0ZShlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLkVTQ0FQRTogdGhpcy5jb2xsYXBzZShlKTsgYnJlYWs7IGRlZmF1bHQ6IGwgPSAhMSwgbiA9IHRoaXMucHJldmlvdXNGaWx0ZXIgfHwgIiIsIGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksIG8gPSAhMSwgY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLCBhID09PSBuID8gbyA9ICEwIDogYSA9IG4gKyBhLCByID0gUmVnRXhwKCJeIiArIGkoYSksICJpIiksIHMgPSB0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gci50ZXN0KHQodGhpcykuY2hpbGRyZW4oImEiKS50ZXh0KCkpIH0pLCBzID0gbyAmJiAtMSAhPT0gcy5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpID8gdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpIDogcywgcy5sZW5ndGggfHwgKGEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksIHIgPSBSZWdFeHAoIl4iICsgaShhKSwgImkiKSwgcyA9IHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiByLnRlc3QodCh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSkgfSkpLCBzLmxlbmd0aCA/ICh0aGlzLmZvY3VzKGUsIHMpLCBzLmxlbmd0aCA+IDEgPyAodGhpcy5wcmV2aW91c0ZpbHRlciA9IGEsIHRoaXMuZmlsdGVyVGltZXIgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IGRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyIH0sIDFlMykpIDogZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXIpIDogZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXIgfSBsICYmIGUucHJldmVudERlZmF1bHQoKSB9LCBfYWN0aXZhdGU6IGZ1bmN0aW9uICh0KSB7IHRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSB8fCAodGhpcy5hY3RpdmUuY2hpbGRyZW4oImFbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddIikubGVuZ3RoID8gdGhpcy5leHBhbmQodCkgOiB0aGlzLnNlbGVjdCh0KSkgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSA9IHRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LCBzID0gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTsgdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwgISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLCBzLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmhpZGUoKS5hdHRyKHsgcm9sZTogdGhpcy5vcHRpb25zLnJvbGUsICJhcmlhLWhpZGRlbiI6ICJ0cnVlIiwgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiIH0pLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyksIHMgPSBlLnByZXYoImEiKSwgbiA9IHQoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiICsgaSkuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IiwgITApOyBzLmF0dHIoImFyaWEtaGFzcG9wdXAiLCAidHJ1ZSIpLnByZXBlbmQobiksIGUuYXR0cigiYXJpYS1sYWJlbGxlZGJ5Iiwgcy5hdHRyKCJpZCIpKSB9KSwgZSA9IHMuYWRkKHRoaXMuZWxlbWVudCksIGUuY2hpbGRyZW4oIjpub3QoLnVpLW1lbnUtaXRlbSk6aGFzKGEpIikuYWRkQ2xhc3MoInVpLW1lbnUtaXRlbSIpLmF0dHIoInJvbGUiLCAicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7IHRhYkluZGV4OiAtMSwgcm9sZTogdGhpcy5faXRlbVJvbGUoKSB9KSwgZS5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IC9bXlwtXHUyMDE0XHUyMDEzXHNdLy50ZXN0KGUudGV4dCgpKSB8fCBlLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCB1aS1tZW51LWRpdmlkZXIiKSB9KSwgZS5jaGlsZHJlbigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsICJ0cnVlIiksIHRoaXMuYWN0aXZlICYmICF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSwgdGhpcy5hY3RpdmVbMF0pICYmIHRoaXMuYmx1cigpIH0sIF9pdGVtUm9sZTogZnVuY3Rpb24gKCkgeyByZXR1cm4geyBtZW51OiAibWVudWl0ZW0iLCBsaXN0Ym94OiAib3B0aW9uIiB9W3RoaXMub3B0aW9ucy5yb2xlXSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyAiaWNvbnMiID09PSB0ICYmIHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKGUuc3VibWVudSksIHRoaXMuX3N1cGVyKHQsIGUpIH0sIGZvY3VzOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSwgczsgdGhpcy5ibHVyKHQsIHQgJiYgImZvY3VzIiA9PT0gdC50eXBlKSwgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksIHRoaXMuYWN0aXZlID0gZS5maXJzdCgpLCBzID0gdGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSwgdGhpcy5vcHRpb25zLnJvbGUgJiYgdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsIHMuYXR0cigiaWQiKSksIHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5jaGlsZHJlbigiYTpmaXJzdCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgdCAmJiAia2V5ZG93biIgPT09IHQudHlwZSA/IHRoaXMuX2Nsb3NlKCkgOiB0aGlzLnRpbWVyID0gdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLl9jbG9zZSgpIH0sIHRoaXMuZGVsYXkpLCBpID0gZS5jaGlsZHJlbigiLnVpLW1lbnUiKSwgaS5sZW5ndGggJiYgdCAmJiAvXm1vdXNlLy50ZXN0KHQudHlwZSkgJiYgdGhpcy5fc3RhcnRPcGVuaW5nKGkpLCB0aGlzLmFjdGl2ZU1lbnUgPSBlLnBhcmVudCgpLCB0aGlzLl90cmlnZ2VyKCJmb2N1cyIsIHQsIHsgaXRlbTogZSB9KSB9LCBfc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBhLCBvLCByOyB0aGlzLl9oYXNTY3JvbGwoKSAmJiAoaSA9IHBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSkgfHwgMCwgcyA9IHBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLCAicGFkZGluZ1RvcCIpKSB8fCAwLCBuID0gZS5vZmZzZXQoKS50b3AgLSB0aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wIC0gaSAtIHMsIGEgPSB0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCksIG8gPSB0aGlzLmFjdGl2ZU1lbnUuaGVpZ2h0KCksIHIgPSBlLmhlaWdodCgpLCAwID4gbiA/IHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoYSArIG4pIDogbiArIHIgPiBvICYmIHRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoYSArIG4gLSBvICsgcikpIH0sIGJsdXI6IGZ1bmN0aW9uICh0LCBlKSB7IGUgfHwgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCB0aGlzLmFjdGl2ZSAmJiAodGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSwgdGhpcy5hY3RpdmUgPSBudWxsLCB0aGlzLl90cmlnZ2VyKCJibHVyIiwgdCwgeyBpdGVtOiB0aGlzLmFjdGl2ZSB9KSkgfSwgX3N0YXJ0T3BlbmluZzogZnVuY3Rpb24gKHQpIHsgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCAidHJ1ZSIgPT09IHQuYXR0cigiYXJpYS1oaWRkZW4iKSAmJiAodGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5fY2xvc2UoKSwgdGhpcy5fb3Blbih0KSB9LCB0aGlzLmRlbGF5KSkgfSwgX29wZW46IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdC5leHRlbmQoeyBvZjogdGhpcy5hY3RpdmUgfSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uKTsgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLCB0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUiKS5ub3QoZS5wYXJlbnRzKCIudWktbWVudSIpKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpLCBlLnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCAidHJ1ZSIpLnBvc2l0aW9uKGkpIH0sIGNvbGxhcHNlQWxsOiBmdW5jdGlvbiAoZSwgaSkgeyBjbGVhclRpbWVvdXQodGhpcy50aW1lciksIHRoaXMudGltZXIgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHZhciBzID0gaSA/IHRoaXMuZWxlbWVudCA6IHQoZSAmJiBlLnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUiKSk7IHMubGVuZ3RoIHx8IChzID0gdGhpcy5lbGVtZW50KSwgdGhpcy5fY2xvc2UocyksIHRoaXMuYmx1cihlKSwgdGhpcy5hY3RpdmVNZW51ID0gcyB9LCB0aGlzLmRlbGF5KSB9LCBfY2xvc2U6IGZ1bmN0aW9uICh0KSB7IHQgfHwgKHQgPSB0aGlzLmFjdGl2ZSA/IHRoaXMuYWN0aXZlLnBhcmVudCgpIDogdGhpcy5lbGVtZW50KSwgdC5maW5kKCIudWktbWVudSIpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsICJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsICJmYWxzZSIpLmVuZCgpLmZpbmQoImEudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpIH0sIGNvbGxhcHNlOiBmdW5jdGlvbiAodCkgeyB2YXIgZSA9IHRoaXMuYWN0aXZlICYmIHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iLCB0aGlzLmVsZW1lbnQpOyBlICYmIGUubGVuZ3RoICYmICh0aGlzLl9jbG9zZSgpLCB0aGlzLmZvY3VzKHQsIGUpKSB9LCBleHBhbmQ6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gdGhpcy5hY3RpdmUgJiYgdGhpcy5hY3RpdmUuY2hpbGRyZW4oIi51aS1tZW51ICIpLmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlyc3QoKTsgZSAmJiBlLmxlbmd0aCAmJiAodGhpcy5fb3BlbihlLnBhcmVudCgpKSwgdGhpcy5fZGVsYXkoZnVuY3Rpb24gKCkgeyB0aGlzLmZvY3VzKHQsIGUpIH0pKSB9LCBuZXh0OiBmdW5jdGlvbiAodCkgeyB0aGlzLl9tb3ZlKCJuZXh0IiwgImZpcnN0IiwgdCkgfSwgcHJldmlvdXM6IGZ1bmN0aW9uICh0KSB7IHRoaXMuX21vdmUoInByZXYiLCAibGFzdCIsIHQpIH0sIGlzRmlyc3RJdGVtOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aCB9LCBpc0xhc3RJdGVtOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aCB9LCBfbW92ZTogZnVuY3Rpb24gKHQsIGUsIGkpIHsgdmFyIHM7IHRoaXMuYWN0aXZlICYmIChzID0gImZpcnN0IiA9PT0gdCB8fCAibGFzdCIgPT09IHQgPyB0aGlzLmFjdGl2ZVsiZmlyc3QiID09PSB0ID8gInByZXZBbGwiIDogIm5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKSA6IHRoaXMuYWN0aXZlW3QgKyAiQWxsIl0oIi51aS1tZW51LWl0ZW0iKS5lcSgwKSksIHMgJiYgcy5sZW5ndGggJiYgdGhpcy5hY3RpdmUgfHwgKHMgPSB0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKVtlXSgpKSwgdGhpcy5mb2N1cyhpLCBzKSB9LCBuZXh0UGFnZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG47IHJldHVybiB0aGlzLmFjdGl2ZSA/ICh0aGlzLmlzTGFzdEl0ZW0oKSB8fCAodGhpcy5faGFzU2Nyb2xsKCkgPyAocyA9IHRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCwgbiA9IHRoaXMuZWxlbWVudC5oZWlnaHQoKSwgdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24gKCkgeyByZXR1cm4gaSA9IHQodGhpcyksIDAgPiBpLm9mZnNldCgpLnRvcCAtIHMgLSBuIH0pLCB0aGlzLmZvY3VzKGUsIGkpKSA6IHRoaXMuZm9jdXMoZSwgdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIilbdGhpcy5hY3RpdmUgPyAibGFzdCIgOiAiZmlyc3QiXSgpKSksIHVuZGVmaW5lZCkgOiAodGhpcy5uZXh0KGUpLCB1bmRlZmluZWQpIH0sIHByZXZpb3VzUGFnZTogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG47IHJldHVybiB0aGlzLmFjdGl2ZSA/ICh0aGlzLmlzRmlyc3RJdGVtKCkgfHwgKHRoaXMuX2hhc1Njcm9sbCgpID8gKHMgPSB0aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsIG4gPSB0aGlzLmVsZW1lbnQuaGVpZ2h0KCksIHRoaXMuYWN0aXZlLnByZXZBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSB0KHRoaXMpLCBpLm9mZnNldCgpLnRvcCAtIHMgKyBuID4gMCB9KSwgdGhpcy5mb2N1cyhlLCBpKSkgOiB0aGlzLmZvY3VzKGUsIHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpcnN0KCkpKSwgdW5kZWZpbmVkKSA6ICh0aGlzLm5leHQoZSksIHVuZGVmaW5lZCkgfSwgX2hhc1Njcm9sbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgPCB0aGlzLmVsZW1lbnQucHJvcCgic2Nyb2xsSGVpZ2h0IikgfSwgc2VsZWN0OiBmdW5jdGlvbiAoZSkgeyB0aGlzLmFjdGl2ZSA9IHRoaXMuYWN0aXZlIHx8IHQoZS50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTsgdmFyIGkgPSB7IGl0ZW06IHRoaXMuYWN0aXZlIH07IHRoaXMuYWN0aXZlLmhhcygiLnVpLW1lbnUiKS5sZW5ndGggfHwgdGhpcy5jb2xsYXBzZUFsbChlLCAhMCksIHRoaXMuX3RyaWdnZXIoInNlbGVjdCIsIGUsIGkpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0LCBlKSB7IHQud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIG9wdGlvbnM6IHsgbWF4OiAxMDAsIHZhbHVlOiAwLCBjaGFuZ2U6IG51bGwsIGNvbXBsZXRlOiBudWxsIH0sIG1pbjogMCwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLm9sZFZhbHVlID0gdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7IHJvbGU6ICJwcm9ncmVzc2JhciIsICJhcmlhLXZhbHVlbWluIjogdGhpcy5taW4gfSksIHRoaXMudmFsdWVEaXYgPSB0KCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLCB0aGlzLnZhbHVlRGl2LnJlbW92ZSgpIH0sIHZhbHVlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA9PT0gZSA/IHRoaXMub3B0aW9ucy52YWx1ZSA6ICh0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSwgZSkgfSwgX2NvbnN0cmFpbmVkVmFsdWU6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0ID09PSBlICYmICh0ID0gdGhpcy5vcHRpb25zLnZhbHVlKSwgdGhpcy5pbmRldGVybWluYXRlID0gdCA9PT0gITEsICJudW1iZXIiICE9IHR5cGVvZiB0ICYmICh0ID0gMCksIHRoaXMuaW5kZXRlcm1pbmF0ZSA/ICExIDogTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIHQpKSB9LCBfc2V0T3B0aW9uczogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB0LnZhbHVlOyBkZWxldGUgdC52YWx1ZSwgdGhpcy5fc3VwZXIodCksIHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksIHRoaXMuX3JlZnJlc2hWYWx1ZSgpIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uICh0LCBlKSB7ICJtYXgiID09PSB0ICYmIChlID0gTWF0aC5tYXgodGhpcy5taW4sIGUpKSwgdGhpcy5fc3VwZXIodCwgZSkgfSwgX3BlcmNlbnRhZ2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZSA/IDEwMCA6IDEwMCAqICh0aGlzLm9wdGlvbnMudmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5vcHRpb25zLm1heCAtIHRoaXMubWluKSB9LCBfcmVmcmVzaFZhbHVlOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5vcHRpb25zLnZhbHVlLCBpID0gdGhpcy5fcGVyY2VudGFnZSgpOyB0aGlzLnZhbHVlRGl2LnRvZ2dsZSh0aGlzLmluZGV0ZXJtaW5hdGUgfHwgZSA+IHRoaXMubWluKS50b2dnbGVDbGFzcygidWktY29ybmVyLXJpZ2h0IiwgZSA9PT0gdGhpcy5vcHRpb25zLm1heCkud2lkdGgoaS50b0ZpeGVkKDApICsgIiUiKSwgdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIiwgdGhpcy5pbmRldGVybWluYXRlKSwgdGhpcy5pbmRldGVybWluYXRlID8gKHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksIHRoaXMub3ZlcmxheURpdiB8fCAodGhpcy5vdmVybGF5RGl2ID0gdCgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItb3ZlcmxheSc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy52YWx1ZURpdikpKSA6ICh0aGlzLmVsZW1lbnQuYXR0cih7ICJhcmlhLXZhbHVlbWF4IjogdGhpcy5vcHRpb25zLm1heCwgImFyaWEtdmFsdWVub3ciOiBlIH0pLCB0aGlzLm92ZXJsYXlEaXYgJiYgKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSwgdGhpcy5vdmVybGF5RGl2ID0gbnVsbCkpLCB0aGlzLm9sZFZhbHVlICE9PSBlICYmICh0aGlzLm9sZFZhbHVlID0gZSwgdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLCBlID09PSB0aGlzLm9wdGlvbnMubWF4ICYmIHRoaXMuX3RyaWdnZXIoImNvbXBsZXRlIikgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgZnVuY3Rpb24gZSh0KSB7IHJldHVybiBwYXJzZUludCh0LCAxMCkgfHwgMCB9IGZ1bmN0aW9uIGkodCkgeyByZXR1cm4gIWlzTmFOKHBhcnNlSW50KHQsIDEwKSkgfSB0LndpZGdldCgidWkucmVzaXphYmxlIiwgdC51aS5tb3VzZSwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICJyZXNpemUiLCBvcHRpb25zOiB7IGFsc29SZXNpemU6ICExLCBhbmltYXRlOiAhMSwgYW5pbWF0ZUR1cmF0aW9uOiAic2xvdyIsIGFuaW1hdGVFYXNpbmc6ICJzd2luZyIsIGFzcGVjdFJhdGlvOiAhMSwgYXV0b0hpZGU6ICExLCBjb250YWlubWVudDogITEsIGdob3N0OiAhMSwgZ3JpZDogITEsIGhhbmRsZXM6ICJlLHMsc2UiLCBoZWxwZXI6ICExLCBtYXhIZWlnaHQ6IG51bGwsIG1heFdpZHRoOiBudWxsLCBtaW5IZWlnaHQ6IDEwLCBtaW5XaWR0aDogMTAsIHpJbmRleDogOTAsIHJlc2l6ZTogbnVsbCwgc3RhcnQ6IG51bGwsIHN0b3A6IG51bGwgfSwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSwgcywgbiwgYSwgbyA9IHRoaXMsIHIgPSB0aGlzLm9wdGlvbnM7IGlmICh0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLCB0LmV4dGVuZCh0aGlzLCB7IF9hc3BlY3RSYXRpbzogISFyLmFzcGVjdFJhdGlvLCBhc3BlY3RSYXRpbzogci5hc3BlY3RSYXRpbywgb3JpZ2luYWxFbGVtZW50OiB0aGlzLmVsZW1lbnQsIF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOiBbXSwgX2hlbHBlcjogci5oZWxwZXIgfHwgci5naG9zdCB8fCByLmFuaW1hdGUgPyByLmhlbHBlciB8fCAidWktcmVzaXphYmxlLWhlbHBlciIgOiBudWxsIH0pLCB0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSAmJiAodGhpcy5lbGVtZW50LndyYXAodCgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3MoeyBwb3NpdGlvbjogdGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSwgd2lkdGg6IHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksIGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksIHRvcDogdGhpcy5lbGVtZW50LmNzcygidG9wIiksIGxlZnQ6IHRoaXMuZWxlbWVudC5jc3MoImxlZnQiKSB9KSksIHRoaXMuZWxlbWVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKCJ1aS1yZXNpemFibGUiLCB0aGlzLmVsZW1lbnQuZGF0YSgidWktcmVzaXphYmxlIikpLCB0aGlzLmVsZW1lbnRJc1dyYXBwZXIgPSAhMCwgdGhpcy5lbGVtZW50LmNzcyh7IG1hcmdpbkxlZnQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLCBtYXJnaW5Ub3A6IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luVG9wIiksIG1hcmdpblJpZ2h0OiB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksIG1hcmdpbkJvdHRvbTogdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSB9KSwgdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHsgbWFyZ2luTGVmdDogMCwgbWFyZ2luVG9wOiAwLCBtYXJnaW5SaWdodDogMCwgbWFyZ2luQm90dG9tOiAwIH0pLCB0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUgPSB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIpLCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsICJub25lIiksIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoeyBwb3NpdGlvbjogInN0YXRpYyIsIHpvb206IDEsIGRpc3BsYXk6ICJibG9jayIgfSkpLCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoeyBtYXJnaW46IHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIikgfSksIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLCB0aGlzLmhhbmRsZXMgPSByLmhhbmRsZXMgfHwgKHQoIi51aS1yZXNpemFibGUtaGFuZGxlIiwgdGhpcy5lbGVtZW50KS5sZW5ndGggPyB7IG46ICIudWktcmVzaXphYmxlLW4iLCBlOiAiLnVpLXJlc2l6YWJsZS1lIiwgczogIi51aS1yZXNpemFibGUtcyIsIHc6ICIudWktcmVzaXphYmxlLXciLCBzZTogIi51aS1yZXNpemFibGUtc2UiLCBzdzogIi51aS1yZXNpemFibGUtc3ciLCBuZTogIi51aS1yZXNpemFibGUtbmUiLCBudzogIi51aS1yZXNpemFibGUtbnciIH0gOiAiZSxzLHNlIiksIHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSBmb3IgKCJhbGwiID09PSB0aGlzLmhhbmRsZXMgJiYgKHRoaXMuaGFuZGxlcyA9ICJuLGUscyx3LHNlLHN3LG5lLG53IiksIGUgPSB0aGlzLmhhbmRsZXMuc3BsaXQoIiwiKSwgdGhpcy5oYW5kbGVzID0ge30sIGkgPSAwOyBlLmxlbmd0aCA+IGk7IGkrKykgcyA9IHQudHJpbShlW2ldKSwgYSA9ICJ1aS1yZXNpemFibGUtIiArIHMsIG4gPSB0KCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIgKyBhICsgIic+PC9kaXY+IiksIG4uY3NzKHsgekluZGV4OiByLnpJbmRleCB9KSwgInNlIiA9PT0gcyAmJiBuLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIiksIHRoaXMuaGFuZGxlc1tzXSA9ICIudWktcmVzaXphYmxlLSIgKyBzLCB0aGlzLmVsZW1lbnQuYXBwZW5kKG4pOyB0aGlzLl9yZW5kZXJBeGlzID0gZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG4sIGE7IGUgPSBlIHx8IHRoaXMuZWxlbWVudDsgZm9yIChpIGluIHRoaXMuaGFuZGxlcykgdGhpcy5oYW5kbGVzW2ldLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgJiYgKHRoaXMuaGFuZGxlc1tpXSA9IHQodGhpcy5oYW5kbGVzW2ldLCB0aGlzLmVsZW1lbnQpLnNob3coKSksIHRoaXMuZWxlbWVudElzV3JhcHBlciAmJiB0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSAmJiAocyA9IHQodGhpcy5oYW5kbGVzW2ldLCB0aGlzLmVsZW1lbnQpLCBhID0gL3N3fG5lfG53fHNlfG58cy8udGVzdChpKSA/IHMub3V0ZXJIZWlnaHQoKSA6IHMub3V0ZXJXaWR0aCgpLCBuID0gWyJwYWRkaW5nIiwgL25lfG53fG4vLnRlc3QoaSkgPyAiVG9wIiA6IC9zZXxzd3xzLy50ZXN0KGkpID8gIkJvdHRvbSIgOiAvXmUkLy50ZXN0KGkpID8gIlJpZ2h0IiA6ICJMZWZ0Il0uam9pbigiIiksIGUuY3NzKG4sIGEpLCB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSwgdCh0aGlzLmhhbmRsZXNbaV0pLmxlbmd0aCB9LCB0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksIHRoaXMuX2hhbmRsZXMgPSB0KCIudWktcmVzaXphYmxlLWhhbmRsZSIsIHRoaXMuZWxlbWVudCkuZGlzYWJsZVNlbGVjdGlvbigpLCB0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7IG8ucmVzaXppbmcgfHwgKHRoaXMuY2xhc3NOYW1lICYmIChuID0gdGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSkpLCBvLmF4aXMgPSBuICYmIG5bMV0gPyBuWzFdIDogInNlIikgfSksIHIuYXV0b0hpZGUgJiYgKHRoaXMuX2hhbmRsZXMuaGlkZSgpLCB0KHRoaXMuZWxlbWVudCkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLm1vdXNlZW50ZXIoZnVuY3Rpb24gKCkgeyByLmRpc2FibGVkIHx8ICh0KHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSwgby5faGFuZGxlcy5zaG93KCkpIH0pLm1vdXNlbGVhdmUoZnVuY3Rpb24gKCkgeyByLmRpc2FibGVkIHx8IG8ucmVzaXppbmcgfHwgKHQodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLCBvLl9oYW5kbGVzLmhpZGUoKSkgfSkpLCB0aGlzLl9tb3VzZUluaXQoKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLl9tb3VzZURlc3Ryb3koKTsgdmFyIGUsIGkgPSBmdW5jdGlvbiAoZSkgeyB0KGUpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUgdWktcmVzaXphYmxlLWRpc2FibGVkIHVpLXJlc2l6YWJsZS1yZXNpemluZyIpLnJlbW92ZURhdGEoInJlc2l6YWJsZSIpLnJlbW92ZURhdGEoInVpLXJlc2l6YWJsZSIpLnVuYmluZCgiLnJlc2l6YWJsZSIpLmZpbmQoIi51aS1yZXNpemFibGUtaGFuZGxlIikucmVtb3ZlKCkgfTsgcmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciAmJiAoaSh0aGlzLmVsZW1lbnQpLCBlID0gdGhpcy5lbGVtZW50LCB0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoeyBwb3NpdGlvbjogZS5jc3MoInBvc2l0aW9uIiksIHdpZHRoOiBlLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiBlLm91dGVySGVpZ2h0KCksIHRvcDogZS5jc3MoInRvcCIpLCBsZWZ0OiBlLmNzcygibGVmdCIpIH0pLmluc2VydEFmdGVyKGUpLCBlLnJlbW92ZSgpKSwgdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCB0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLCBpKHRoaXMub3JpZ2luYWxFbGVtZW50KSwgdGhpcyB9LCBfbW91c2VDYXB0dXJlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcywgbiA9ICExOyBmb3IgKGkgaW4gdGhpcy5oYW5kbGVzKSBzID0gdCh0aGlzLmhhbmRsZXNbaV0pWzBdLCAocyA9PT0gZS50YXJnZXQgfHwgdC5jb250YWlucyhzLCBlLnRhcmdldCkpICYmIChuID0gITApOyByZXR1cm4gIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiBuIH0sIF9tb3VzZVN0YXJ0OiBmdW5jdGlvbiAoaSkgeyB2YXIgcywgbiwgYSwgbyA9IHRoaXMub3B0aW9ucywgciA9IHRoaXMuZWxlbWVudC5wb3NpdGlvbigpLCBoID0gdGhpcy5lbGVtZW50OyByZXR1cm4gdGhpcy5yZXNpemluZyA9ICEwLCAvYWJzb2x1dGUvLnRlc3QoaC5jc3MoInBvc2l0aW9uIikpID8gaC5jc3MoeyBwb3NpdGlvbjogImFic29sdXRlIiwgdG9wOiBoLmNzcygidG9wIiksIGxlZnQ6IGguY3NzKCJsZWZ0IikgfSkgOiBoLmlzKCIudWktZHJhZ2dhYmxlIikgJiYgaC5jc3MoeyBwb3NpdGlvbjogImFic29sdXRlIiwgdG9wOiByLnRvcCwgbGVmdDogci5sZWZ0IH0pLCB0aGlzLl9yZW5kZXJQcm94eSgpLCBzID0gZSh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSksIG4gPSBlKHRoaXMuaGVscGVyLmNzcygidG9wIikpLCBvLmNvbnRhaW5tZW50ICYmIChzICs9IHQoby5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpIHx8IDAsIG4gKz0gdChvLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKSB8fCAwKSwgdGhpcy5vZmZzZXQgPSB0aGlzLmhlbHBlci5vZmZzZXQoKSwgdGhpcy5wb3NpdGlvbiA9IHsgbGVmdDogcywgdG9wOiBuIH0sIHRoaXMuc2l6ZSA9IHRoaXMuX2hlbHBlciA/IHsgd2lkdGg6IHRoaXMuaGVscGVyLndpZHRoKCksIGhlaWdodDogdGhpcy5oZWxwZXIuaGVpZ2h0KCkgfSA6IHsgd2lkdGg6IGgud2lkdGgoKSwgaGVpZ2h0OiBoLmhlaWdodCgpIH0sIHRoaXMub3JpZ2luYWxTaXplID0gdGhpcy5faGVscGVyID8geyB3aWR0aDogaC5vdXRlcldpZHRoKCksIGhlaWdodDogaC5vdXRlckhlaWdodCgpIH0gOiB7IHdpZHRoOiBoLndpZHRoKCksIGhlaWdodDogaC5oZWlnaHQoKSB9LCB0aGlzLm9yaWdpbmFsUG9zaXRpb24gPSB7IGxlZnQ6IHMsIHRvcDogbiB9LCB0aGlzLnNpemVEaWZmID0geyB3aWR0aDogaC5vdXRlcldpZHRoKCkgLSBoLndpZHRoKCksIGhlaWdodDogaC5vdXRlckhlaWdodCgpIC0gaC5oZWlnaHQoKSB9LCB0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbiA9IHsgbGVmdDogaS5wYWdlWCwgdG9wOiBpLnBhZ2VZIH0sIHRoaXMuYXNwZWN0UmF0aW8gPSAibnVtYmVyIiA9PSB0eXBlb2Ygby5hc3BlY3RSYXRpbyA/IG8uYXNwZWN0UmF0aW8gOiB0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCAvIHRoaXMub3JpZ2luYWxTaXplLmhlaWdodCB8fCAxLCBhID0gdCgiLnVpLXJlc2l6YWJsZS0iICsgdGhpcy5heGlzKS5jc3MoImN1cnNvciIpLCB0KCJib2R5IikuY3NzKCJjdXJzb3IiLCAiYXV0byIgPT09IGEgPyB0aGlzLmF4aXMgKyAiLXJlc2l6ZSIgOiBhKSwgaC5hZGRDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksIHRoaXMuX3Byb3BhZ2F0ZSgic3RhcnQiLCBpKSwgITAgfSwgX21vdXNlRHJhZzogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMgPSB0aGlzLmhlbHBlciwgbiA9IHt9LCBhID0gdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sIG8gPSB0aGlzLmF4aXMsIHIgPSB0aGlzLnBvc2l0aW9uLnRvcCwgaCA9IHRoaXMucG9zaXRpb24ubGVmdCwgbCA9IHRoaXMuc2l6ZS53aWR0aCwgYyA9IHRoaXMuc2l6ZS5oZWlnaHQsIHUgPSBlLnBhZ2VYIC0gYS5sZWZ0IHx8IDAsIGQgPSBlLnBhZ2VZIC0gYS50b3AgfHwgMCwgcCA9IHRoaXMuX2NoYW5nZVtvXTsgcmV0dXJuIHAgPyAoaSA9IHAuYXBwbHkodGhpcywgW2UsIHUsIGRdKSwgdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSksICh0aGlzLl9hc3BlY3RSYXRpbyB8fCBlLnNoaWZ0S2V5KSAmJiAoaSA9IHRoaXMuX3VwZGF0ZVJhdGlvKGksIGUpKSwgaSA9IHRoaXMuX3Jlc3BlY3RTaXplKGksIGUpLCB0aGlzLl91cGRhdGVDYWNoZShpKSwgdGhpcy5fcHJvcGFnYXRlKCJyZXNpemUiLCBlKSwgdGhpcy5wb3NpdGlvbi50b3AgIT09IHIgJiYgKG4udG9wID0gdGhpcy5wb3NpdGlvbi50b3AgKyAicHgiKSwgdGhpcy5wb3NpdGlvbi5sZWZ0ICE9PSBoICYmIChuLmxlZnQgPSB0aGlzLnBvc2l0aW9uLmxlZnQgKyAicHgiKSwgdGhpcy5zaXplLndpZHRoICE9PSBsICYmIChuLndpZHRoID0gdGhpcy5zaXplLndpZHRoICsgInB4IiksIHRoaXMuc2l6ZS5oZWlnaHQgIT09IGMgJiYgKG4uaGVpZ2h0ID0gdGhpcy5zaXplLmhlaWdodCArICJweCIpLCBzLmNzcyhuKSwgIXRoaXMuX2hlbHBlciAmJiB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCAmJiB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLCB0LmlzRW1wdHlPYmplY3QobikgfHwgdGhpcy5fdHJpZ2dlcigicmVzaXplIiwgZSwgdGhpcy51aSgpKSwgITEpIDogITEgfSwgX21vdXNlU3RvcDogZnVuY3Rpb24gKGUpIHsgdGhpcy5yZXNpemluZyA9ICExOyB2YXIgaSwgcywgbiwgYSwgbywgciwgaCwgbCA9IHRoaXMub3B0aW9ucywgYyA9IHRoaXM7IHJldHVybiB0aGlzLl9oZWxwZXIgJiYgKGkgPSB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLCBzID0gaS5sZW5ndGggJiYgL3RleHRhcmVhL2kudGVzdChpWzBdLm5vZGVOYW1lKSwgbiA9IHMgJiYgdC51aS5oYXNTY3JvbGwoaVswXSwgImxlZnQiKSA/IDAgOiBjLnNpemVEaWZmLmhlaWdodCwgYSA9IHMgPyAwIDogYy5zaXplRGlmZi53aWR0aCwgbyA9IHsgd2lkdGg6IGMuaGVscGVyLndpZHRoKCkgLSBhLCBoZWlnaHQ6IGMuaGVscGVyLmhlaWdodCgpIC0gbiB9LCByID0gcGFyc2VJbnQoYy5lbGVtZW50LmNzcygibGVmdCIpLCAxMCkgKyAoYy5wb3NpdGlvbi5sZWZ0IC0gYy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpIHx8IG51bGwsIGggPSBwYXJzZUludChjLmVsZW1lbnQuY3NzKCJ0b3AiKSwgMTApICsgKGMucG9zaXRpb24udG9wIC0gYy5vcmlnaW5hbFBvc2l0aW9uLnRvcCkgfHwgbnVsbCwgbC5hbmltYXRlIHx8IHRoaXMuZWxlbWVudC5jc3ModC5leHRlbmQobywgeyB0b3A6IGgsIGxlZnQ6IHIgfSkpLCBjLmhlbHBlci5oZWlnaHQoYy5zaXplLmhlaWdodCksIGMuaGVscGVyLndpZHRoKGMuc2l6ZS53aWR0aCksIHRoaXMuX2hlbHBlciAmJiAhbC5hbmltYXRlICYmIHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLCB0KCJib2R5IikuY3NzKCJjdXJzb3IiLCAiYXV0byIpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLCB0aGlzLl9wcm9wYWdhdGUoInN0b3AiLCBlKSwgdGhpcy5faGVscGVyICYmIHRoaXMuaGVscGVyLnJlbW92ZSgpLCAhMSB9LCBfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6IGZ1bmN0aW9uICh0KSB7IHZhciBlLCBzLCBuLCBhLCBvLCByID0gdGhpcy5vcHRpb25zOyBvID0geyBtaW5XaWR0aDogaShyLm1pbldpZHRoKSA/IHIubWluV2lkdGggOiAwLCBtYXhXaWR0aDogaShyLm1heFdpZHRoKSA/IHIubWF4V2lkdGggOiAxIC8gMCwgbWluSGVpZ2h0OiBpKHIubWluSGVpZ2h0KSA/IHIubWluSGVpZ2h0IDogMCwgbWF4SGVpZ2h0OiBpKHIubWF4SGVpZ2h0KSA/IHIubWF4SGVpZ2h0IDogMSAvIDAgfSwgKHRoaXMuX2FzcGVjdFJhdGlvIHx8IHQpICYmIChlID0gby5taW5IZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvLCBuID0gby5taW5XaWR0aCAvIHRoaXMuYXNwZWN0UmF0aW8sIHMgPSBvLm1heEhlaWdodCAqIHRoaXMuYXNwZWN0UmF0aW8sIGEgPSBvLm1heFdpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbywgZSA+IG8ubWluV2lkdGggJiYgKG8ubWluV2lkdGggPSBlKSwgbiA+IG8ubWluSGVpZ2h0ICYmIChvLm1pbkhlaWdodCA9IG4pLCBvLm1heFdpZHRoID4gcyAmJiAoby5tYXhXaWR0aCA9IHMpLCBvLm1heEhlaWdodCA+IGEgJiYgKG8ubWF4SGVpZ2h0ID0gYSkpLCB0aGlzLl92Qm91bmRhcmllcyA9IG8gfSwgX3VwZGF0ZUNhY2hlOiBmdW5jdGlvbiAodCkgeyB0aGlzLm9mZnNldCA9IHRoaXMuaGVscGVyLm9mZnNldCgpLCBpKHQubGVmdCkgJiYgKHRoaXMucG9zaXRpb24ubGVmdCA9IHQubGVmdCksIGkodC50b3ApICYmICh0aGlzLnBvc2l0aW9uLnRvcCA9IHQudG9wKSwgaSh0LmhlaWdodCkgJiYgKHRoaXMuc2l6ZS5oZWlnaHQgPSB0LmhlaWdodCksIGkodC53aWR0aCkgJiYgKHRoaXMuc2l6ZS53aWR0aCA9IHQud2lkdGgpIH0sIF91cGRhdGVSYXRpbzogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB0aGlzLnBvc2l0aW9uLCBzID0gdGhpcy5zaXplLCBuID0gdGhpcy5heGlzOyByZXR1cm4gaSh0LmhlaWdodCkgPyB0LndpZHRoID0gdC5oZWlnaHQgKiB0aGlzLmFzcGVjdFJhdGlvIDogaSh0LndpZHRoKSAmJiAodC5oZWlnaHQgPSB0LndpZHRoIC8gdGhpcy5hc3BlY3RSYXRpbyksICJzdyIgPT09IG4gJiYgKHQubGVmdCA9IGUubGVmdCArIChzLndpZHRoIC0gdC53aWR0aCksIHQudG9wID0gbnVsbCksICJudyIgPT09IG4gJiYgKHQudG9wID0gZS50b3AgKyAocy5oZWlnaHQgLSB0LmhlaWdodCksIHQubGVmdCA9IGUubGVmdCArIChzLndpZHRoIC0gdC53aWR0aCkpLCB0IH0sIF9yZXNwZWN0U2l6ZTogZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSB0aGlzLl92Qm91bmRhcmllcywgcyA9IHRoaXMuYXhpcywgbiA9IGkodC53aWR0aCkgJiYgZS5tYXhXaWR0aCAmJiBlLm1heFdpZHRoIDwgdC53aWR0aCwgYSA9IGkodC5oZWlnaHQpICYmIGUubWF4SGVpZ2h0ICYmIGUubWF4SGVpZ2h0IDwgdC5oZWlnaHQsIG8gPSBpKHQud2lkdGgpICYmIGUubWluV2lkdGggJiYgZS5taW5XaWR0aCA+IHQud2lkdGgsIHIgPSBpKHQuaGVpZ2h0KSAmJiBlLm1pbkhlaWdodCAmJiBlLm1pbkhlaWdodCA+IHQuaGVpZ2h0LCBoID0gdGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQgKyB0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCwgbCA9IHRoaXMucG9zaXRpb24udG9wICsgdGhpcy5zaXplLmhlaWdodCwgYyA9IC9zd3xud3x3Ly50ZXN0KHMpLCB1ID0gL253fG5lfG4vLnRlc3Qocyk7IHJldHVybiBvICYmICh0LndpZHRoID0gZS5taW5XaWR0aCksIHIgJiYgKHQuaGVpZ2h0ID0gZS5taW5IZWlnaHQpLCBuICYmICh0LndpZHRoID0gZS5tYXhXaWR0aCksIGEgJiYgKHQuaGVpZ2h0ID0gZS5tYXhIZWlnaHQpLCBvICYmIGMgJiYgKHQubGVmdCA9IGggLSBlLm1pbldpZHRoKSwgbiAmJiBjICYmICh0LmxlZnQgPSBoIC0gZS5tYXhXaWR0aCksIHIgJiYgdSAmJiAodC50b3AgPSBsIC0gZS5taW5IZWlnaHQpLCBhICYmIHUgJiYgKHQudG9wID0gbCAtIGUubWF4SGVpZ2h0KSwgdC53aWR0aCB8fCB0LmhlaWdodCB8fCB0LmxlZnQgfHwgIXQudG9wID8gdC53aWR0aCB8fCB0LmhlaWdodCB8fCB0LnRvcCB8fCAhdC5sZWZ0IHx8ICh0LmxlZnQgPSBudWxsKSA6IHQudG9wID0gbnVsbCwgdCB9LCBfcHJvcG9ydGlvbmFsbHlSZXNpemU6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKSB7IHZhciB0LCBlLCBpLCBzLCBuLCBhID0gdGhpcy5oZWxwZXIgfHwgdGhpcy5lbGVtZW50OyBmb3IgKHQgPSAwOyB0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCA+IHQ7IHQrKykgeyBpZiAobiA9IHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbdF0sICF0aGlzLmJvcmRlckRpZikgZm9yICh0aGlzLmJvcmRlckRpZiA9IFtdLCBpID0gW24uY3NzKCJib3JkZXJUb3BXaWR0aCIpLCBuLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLCBuLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSwgbi5jc3MoImJvcmRlckxlZnRXaWR0aCIpXSwgcyA9IFtuLmNzcygicGFkZGluZ1RvcCIpLCBuLmNzcygicGFkZGluZ1JpZ2h0IiksIG4uY3NzKCJwYWRkaW5nQm90dG9tIiksIG4uY3NzKCJwYWRkaW5nTGVmdCIpXSwgZSA9IDA7IGkubGVuZ3RoID4gZTsgZSsrKSB0aGlzLmJvcmRlckRpZltlXSA9IChwYXJzZUludChpW2VdLCAxMCkgfHwgMCkgKyAocGFyc2VJbnQoc1tlXSwgMTApIHx8IDApOyBuLmNzcyh7IGhlaWdodDogYS5oZWlnaHQoKSAtIHRoaXMuYm9yZGVyRGlmWzBdIC0gdGhpcy5ib3JkZXJEaWZbMl0gfHwgMCwgd2lkdGg6IGEud2lkdGgoKSAtIHRoaXMuYm9yZGVyRGlmWzFdIC0gdGhpcy5ib3JkZXJEaWZbM10gfHwgMCB9KSB9IH0gfSwgX3JlbmRlclByb3h5OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5lbGVtZW50LCBpID0gdGhpcy5vcHRpb25zOyB0aGlzLmVsZW1lbnRPZmZzZXQgPSBlLm9mZnNldCgpLCB0aGlzLl9oZWxwZXIgPyAodGhpcy5oZWxwZXIgPSB0aGlzLmhlbHBlciB8fCB0KCI8ZGl2IHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj4iKSwgdGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3MoeyB3aWR0aDogdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSAtIDEsIGhlaWdodDogdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgLSAxLCBwb3NpdGlvbjogImFic29sdXRlIiwgbGVmdDogdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQgKyAicHgiLCB0b3A6IHRoaXMuZWxlbWVudE9mZnNldC50b3AgKyAicHgiLCB6SW5kZXg6ICsraS56SW5kZXggfSksIHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpKSA6IHRoaXMuaGVscGVyID0gdGhpcy5lbGVtZW50IH0sIF9jaGFuZ2U6IHsgZTogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHsgd2lkdGg6IHRoaXMub3JpZ2luYWxTaXplLndpZHRoICsgZSB9IH0sIHc6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0gdGhpcy5vcmlnaW5hbFNpemUsIHMgPSB0aGlzLm9yaWdpbmFsUG9zaXRpb247IHJldHVybiB7IGxlZnQ6IHMubGVmdCArIGUsIHdpZHRoOiBpLndpZHRoIC0gZSB9IH0sIG46IGZ1bmN0aW9uICh0LCBlLCBpKSB7IHZhciBzID0gdGhpcy5vcmlnaW5hbFNpemUsIG4gPSB0aGlzLm9yaWdpbmFsUG9zaXRpb247IHJldHVybiB7IHRvcDogbi50b3AgKyBpLCBoZWlnaHQ6IHMuaGVpZ2h0IC0gaSB9IH0sIHM6IGZ1bmN0aW9uICh0LCBlLCBpKSB7IHJldHVybiB7IGhlaWdodDogdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0ICsgaSB9IH0sIHNlOiBmdW5jdGlvbiAoZSwgaSwgcykgeyByZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcywgW2UsIGksIHNdKSkgfSwgc3c6IGZ1bmN0aW9uIChlLCBpLCBzKSB7IHJldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLCBbZSwgaSwgc10pKSB9LCBuZTogZnVuY3Rpb24gKGUsIGksIHMpIHsgcmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsIFtlLCBpLCBzXSkpIH0sIG53OiBmdW5jdGlvbiAoZSwgaSwgcykgeyByZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcywgW2UsIGksIHNdKSkgfSB9LCBfcHJvcGFnYXRlOiBmdW5jdGlvbiAoZSwgaSkgeyB0LnVpLnBsdWdpbi5jYWxsKHRoaXMsIGUsIFtpLCB0aGlzLnVpKCldKSwgInJlc2l6ZSIgIT09IGUgJiYgdGhpcy5fdHJpZ2dlcihlLCBpLCB0aGlzLnVpKCkpIH0sIHBsdWdpbnM6IHt9LCB1aTogZnVuY3Rpb24gKCkgeyByZXR1cm4geyBvcmlnaW5hbEVsZW1lbnQ6IHRoaXMub3JpZ2luYWxFbGVtZW50LCBlbGVtZW50OiB0aGlzLmVsZW1lbnQsIGhlbHBlcjogdGhpcy5oZWxwZXIsIHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uLCBzaXplOiB0aGlzLnNpemUsIG9yaWdpbmFsU2l6ZTogdGhpcy5vcmlnaW5hbFNpemUsIG9yaWdpbmFsUG9zaXRpb246IHRoaXMub3JpZ2luYWxQb3NpdGlvbiB9IH0gfSksIHQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwgImFuaW1hdGUiLCB7IHN0b3A6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgcyA9IGkub3B0aW9ucywgbiA9IGkuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsIGEgPSBuLmxlbmd0aCAmJiAvdGV4dGFyZWEvaS50ZXN0KG5bMF0ubm9kZU5hbWUpLCBvID0gYSAmJiB0LnVpLmhhc1Njcm9sbChuWzBdLCAibGVmdCIpID8gMCA6IGkuc2l6ZURpZmYuaGVpZ2h0LCByID0gYSA/IDAgOiBpLnNpemVEaWZmLndpZHRoLCBoID0geyB3aWR0aDogaS5zaXplLndpZHRoIC0gciwgaGVpZ2h0OiBpLnNpemUuaGVpZ2h0IC0gbyB9LCBsID0gcGFyc2VJbnQoaS5lbGVtZW50LmNzcygibGVmdCIpLCAxMCkgKyAoaS5wb3NpdGlvbi5sZWZ0IC0gaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpIHx8IG51bGwsIGMgPSBwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwgMTApICsgKGkucG9zaXRpb24udG9wIC0gaS5vcmlnaW5hbFBvc2l0aW9uLnRvcCkgfHwgbnVsbDsgaS5lbGVtZW50LmFuaW1hdGUodC5leHRlbmQoaCwgYyAmJiBsID8geyB0b3A6IGMsIGxlZnQ6IGwgfSA6IHt9KSwgeyBkdXJhdGlvbjogcy5hbmltYXRlRHVyYXRpb24sIGVhc2luZzogcy5hbmltYXRlRWFzaW5nLCBzdGVwOiBmdW5jdGlvbiAoKSB7IHZhciBzID0geyB3aWR0aDogcGFyc2VJbnQoaS5lbGVtZW50LmNzcygid2lkdGgiKSwgMTApLCBoZWlnaHQ6IHBhcnNlSW50KGkuZWxlbWVudC5jc3MoImhlaWdodCIpLCAxMCksIHRvcDogcGFyc2VJbnQoaS5lbGVtZW50LmNzcygidG9wIiksIDEwKSwgbGVmdDogcGFyc2VJbnQoaS5lbGVtZW50LmNzcygibGVmdCIpLCAxMCkgfTsgbiAmJiBuLmxlbmd0aCAmJiB0KG5bMF0pLmNzcyh7IHdpZHRoOiBzLndpZHRoLCBoZWlnaHQ6IHMuaGVpZ2h0IH0pLCBpLl91cGRhdGVDYWNoZShzKSwgaS5fcHJvcGFnYXRlKCJyZXNpemUiLCBlKSB9IH0pIH0gfSksIHQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwgImNvbnRhaW5tZW50IiwgeyBzdGFydDogZnVuY3Rpb24gKCkgeyB2YXIgaSwgcywgbiwgYSwgbywgciwgaCwgbCA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksIGMgPSBsLm9wdGlvbnMsIHUgPSBsLmVsZW1lbnQsIGQgPSBjLmNvbnRhaW5tZW50LCBwID0gZCBpbnN0YW5jZW9mIHQgPyBkLmdldCgwKSA6IC9wYXJlbnQvLnRlc3QoZCkgPyB1LnBhcmVudCgpLmdldCgwKSA6IGQ7IHAgJiYgKGwuY29udGFpbmVyRWxlbWVudCA9IHQocCksIC9kb2N1bWVudC8udGVzdChkKSB8fCBkID09PSBkb2N1bWVudCA/IChsLmNvbnRhaW5lck9mZnNldCA9IHsgbGVmdDogMCwgdG9wOiAwIH0sIGwuY29udGFpbmVyUG9zaXRpb24gPSB7IGxlZnQ6IDAsIHRvcDogMCB9LCBsLnBhcmVudERhdGEgPSB7IGVsZW1lbnQ6IHQoZG9jdW1lbnQpLCBsZWZ0OiAwLCB0b3A6IDAsIHdpZHRoOiB0KGRvY3VtZW50KS53aWR0aCgpLCBoZWlnaHQ6IHQoZG9jdW1lbnQpLmhlaWdodCgpIHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQgfSkgOiAoaSA9IHQocCksIHMgPSBbXSwgdChbIlRvcCIsICJSaWdodCIsICJMZWZ0IiwgIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uICh0LCBuKSB7IHNbdF0gPSBlKGkuY3NzKCJwYWRkaW5nIiArIG4pKSB9KSwgbC5jb250YWluZXJPZmZzZXQgPSBpLm9mZnNldCgpLCBsLmNvbnRhaW5lclBvc2l0aW9uID0gaS5wb3NpdGlvbigpLCBsLmNvbnRhaW5lclNpemUgPSB7IGhlaWdodDogaS5pbm5lckhlaWdodCgpIC0gc1szXSwgd2lkdGg6IGkuaW5uZXJXaWR0aCgpIC0gc1sxXSB9LCBuID0gbC5jb250YWluZXJPZmZzZXQsIGEgPSBsLmNvbnRhaW5lclNpemUuaGVpZ2h0LCBvID0gbC5jb250YWluZXJTaXplLndpZHRoLCByID0gdC51aS5oYXNTY3JvbGwocCwgImxlZnQiKSA/IHAuc2Nyb2xsV2lkdGggOiBvLCBoID0gdC51aS5oYXNTY3JvbGwocCkgPyBwLnNjcm9sbEhlaWdodCA6IGEsIGwucGFyZW50RGF0YSA9IHsgZWxlbWVudDogcCwgbGVmdDogbi5sZWZ0LCB0b3A6IG4udG9wLCB3aWR0aDogciwgaGVpZ2h0OiBoIH0pKSB9LCByZXNpemU6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBhLCBvID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgciA9IG8ub3B0aW9ucywgaCA9IG8uY29udGFpbmVyT2Zmc2V0LCBsID0gby5wb3NpdGlvbiwgYyA9IG8uX2FzcGVjdFJhdGlvIHx8IGUuc2hpZnRLZXksIHUgPSB7IHRvcDogMCwgbGVmdDogMCB9LCBkID0gby5jb250YWluZXJFbGVtZW50OyBkWzBdICE9PSBkb2N1bWVudCAmJiAvc3RhdGljLy50ZXN0KGQuY3NzKCJwb3NpdGlvbiIpKSAmJiAodSA9IGgpLCBsLmxlZnQgPCAoby5faGVscGVyID8gaC5sZWZ0IDogMCkgJiYgKG8uc2l6ZS53aWR0aCA9IG8uc2l6ZS53aWR0aCArIChvLl9oZWxwZXIgPyBvLnBvc2l0aW9uLmxlZnQgLSBoLmxlZnQgOiBvLnBvc2l0aW9uLmxlZnQgLSB1LmxlZnQpLCBjICYmIChvLnNpemUuaGVpZ2h0ID0gby5zaXplLndpZHRoIC8gby5hc3BlY3RSYXRpbyksIG8ucG9zaXRpb24ubGVmdCA9IHIuaGVscGVyID8gaC5sZWZ0IDogMCksIGwudG9wIDwgKG8uX2hlbHBlciA/IGgudG9wIDogMCkgJiYgKG8uc2l6ZS5oZWlnaHQgPSBvLnNpemUuaGVpZ2h0ICsgKG8uX2hlbHBlciA/IG8ucG9zaXRpb24udG9wIC0gaC50b3AgOiBvLnBvc2l0aW9uLnRvcCksIGMgJiYgKG8uc2l6ZS53aWR0aCA9IG8uc2l6ZS5oZWlnaHQgKiBvLmFzcGVjdFJhdGlvKSwgby5wb3NpdGlvbi50b3AgPSBvLl9oZWxwZXIgPyBoLnRvcCA6IDApLCBvLm9mZnNldC5sZWZ0ID0gby5wYXJlbnREYXRhLmxlZnQgKyBvLnBvc2l0aW9uLmxlZnQsIG8ub2Zmc2V0LnRvcCA9IG8ucGFyZW50RGF0YS50b3AgKyBvLnBvc2l0aW9uLnRvcCwgaSA9IE1hdGguYWJzKChvLl9oZWxwZXIgPyBvLm9mZnNldC5sZWZ0IC0gdS5sZWZ0IDogby5vZmZzZXQubGVmdCAtIHUubGVmdCkgKyBvLnNpemVEaWZmLndpZHRoKSwgcyA9IE1hdGguYWJzKChvLl9oZWxwZXIgPyBvLm9mZnNldC50b3AgLSB1LnRvcCA6IG8ub2Zmc2V0LnRvcCAtIGgudG9wKSArIG8uc2l6ZURpZmYuaGVpZ2h0KSwgbiA9IG8uY29udGFpbmVyRWxlbWVudC5nZXQoMCkgPT09IG8uZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksIGEgPSAvcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3Qoby5jb250YWluZXJFbGVtZW50LmNzcygicG9zaXRpb24iKSksIG4gJiYgYSAmJiAoaSAtPSBNYXRoLmFicyhvLnBhcmVudERhdGEubGVmdCkpLCBpICsgby5zaXplLndpZHRoID49IG8ucGFyZW50RGF0YS53aWR0aCAmJiAoby5zaXplLndpZHRoID0gby5wYXJlbnREYXRhLndpZHRoIC0gaSwgYyAmJiAoby5zaXplLmhlaWdodCA9IG8uc2l6ZS53aWR0aCAvIG8uYXNwZWN0UmF0aW8pKSwgcyArIG8uc2l6ZS5oZWlnaHQgPj0gby5wYXJlbnREYXRhLmhlaWdodCAmJiAoby5zaXplLmhlaWdodCA9IG8ucGFyZW50RGF0YS5oZWlnaHQgLSBzLCBjICYmIChvLnNpemUud2lkdGggPSBvLnNpemUuaGVpZ2h0ICogby5hc3BlY3RSYXRpbykpIH0sIHN0b3A6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLCBpID0gZS5vcHRpb25zLCBzID0gZS5jb250YWluZXJPZmZzZXQsIG4gPSBlLmNvbnRhaW5lclBvc2l0aW9uLCBhID0gZS5jb250YWluZXJFbGVtZW50LCBvID0gdChlLmhlbHBlciksIHIgPSBvLm9mZnNldCgpLCBoID0gby5vdXRlcldpZHRoKCkgLSBlLnNpemVEaWZmLndpZHRoLCBsID0gby5vdXRlckhlaWdodCgpIC0gZS5zaXplRGlmZi5oZWlnaHQ7IGUuX2hlbHBlciAmJiAhaS5hbmltYXRlICYmIC9yZWxhdGl2ZS8udGVzdChhLmNzcygicG9zaXRpb24iKSkgJiYgdCh0aGlzKS5jc3MoeyBsZWZ0OiByLmxlZnQgLSBuLmxlZnQgLSBzLmxlZnQsIHdpZHRoOiBoLCBoZWlnaHQ6IGwgfSksIGUuX2hlbHBlciAmJiAhaS5hbmltYXRlICYmIC9zdGF0aWMvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpICYmIHQodGhpcykuY3NzKHsgbGVmdDogci5sZWZ0IC0gbi5sZWZ0IC0gcy5sZWZ0LCB3aWR0aDogaCwgaGVpZ2h0OiBsIH0pIH0gfSksIHQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwgImFsc29SZXNpemUiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgaSA9IGUub3B0aW9ucywgcyA9IGZ1bmN0aW9uIChlKSB7IHQoZSkuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKTsgZS5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIsIHsgd2lkdGg6IHBhcnNlSW50KGUud2lkdGgoKSwgMTApLCBoZWlnaHQ6IHBhcnNlSW50KGUuaGVpZ2h0KCksIDEwKSwgbGVmdDogcGFyc2VJbnQoZS5jc3MoImxlZnQiKSwgMTApLCB0b3A6IHBhcnNlSW50KGUuY3NzKCJ0b3AiKSwgMTApIH0pIH0pIH07ICJvYmplY3QiICE9IHR5cGVvZiBpLmFsc29SZXNpemUgfHwgaS5hbHNvUmVzaXplLnBhcmVudE5vZGUgPyBzKGkuYWxzb1Jlc2l6ZSkgOiBpLmFsc29SZXNpemUubGVuZ3RoID8gKGkuYWxzb1Jlc2l6ZSA9IGkuYWxzb1Jlc2l6ZVswXSwgcyhpLmFsc29SZXNpemUpKSA6IHQuZWFjaChpLmFsc29SZXNpemUsIGZ1bmN0aW9uICh0KSB7IHModCkgfSkgfSwgcmVzaXplOiBmdW5jdGlvbiAoZSwgaSkgeyB2YXIgcyA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksIG4gPSBzLm9wdGlvbnMsIGEgPSBzLm9yaWdpbmFsU2l6ZSwgbyA9IHMub3JpZ2luYWxQb3NpdGlvbiwgciA9IHsgaGVpZ2h0OiBzLnNpemUuaGVpZ2h0IC0gYS5oZWlnaHQgfHwgMCwgd2lkdGg6IHMuc2l6ZS53aWR0aCAtIGEud2lkdGggfHwgMCwgdG9wOiBzLnBvc2l0aW9uLnRvcCAtIG8udG9wIHx8IDAsIGxlZnQ6IHMucG9zaXRpb24ubGVmdCAtIG8ubGVmdCB8fCAwIH0sIGggPSBmdW5jdGlvbiAoZSwgcykgeyB0KGUpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyksIG4gPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIiksIGEgPSB7fSwgbyA9IHMgJiYgcy5sZW5ndGggPyBzIDogZS5wYXJlbnRzKGkub3JpZ2luYWxFbGVtZW50WzBdKS5sZW5ndGggPyBbIndpZHRoIiwgImhlaWdodCJdIDogWyJ3aWR0aCIsICJoZWlnaHQiLCAidG9wIiwgImxlZnQiXTsgdC5lYWNoKG8sIGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0gKG5bZV0gfHwgMCkgKyAocltlXSB8fCAwKTsgaSAmJiBpID49IDAgJiYgKGFbZV0gPSBpIHx8IG51bGwpIH0pLCBlLmNzcyhhKSB9KSB9OyAib2JqZWN0IiAhPSB0eXBlb2Ygbi5hbHNvUmVzaXplIHx8IG4uYWxzb1Jlc2l6ZS5ub2RlVHlwZSA/IGgobi5hbHNvUmVzaXplKSA6IHQuZWFjaChuLmFsc29SZXNpemUsIGZ1bmN0aW9uICh0LCBlKSB7IGgodCwgZSkgfSkgfSwgc3RvcDogZnVuY3Rpb24gKCkgeyB0KHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIikgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCAiZ2hvc3QiLCB7IHN0YXJ0OiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgaSA9IGUub3B0aW9ucywgcyA9IGUuc2l6ZTsgZS5naG9zdCA9IGUub3JpZ2luYWxFbGVtZW50LmNsb25lKCksIGUuZ2hvc3QuY3NzKHsgb3BhY2l0eTogLjI1LCBkaXNwbGF5OiAiYmxvY2siLCBwb3NpdGlvbjogInJlbGF0aXZlIiwgaGVpZ2h0OiBzLmhlaWdodCwgd2lkdGg6IHMud2lkdGgsIG1hcmdpbjogMCwgbGVmdDogMCwgdG9wOiAwIH0pLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtZ2hvc3QiKS5hZGRDbGFzcygic3RyaW5nIiA9PSB0eXBlb2YgaS5naG9zdCA/IGkuZ2hvc3QgOiAiIiksIGUuZ2hvc3QuYXBwZW5kVG8oZS5oZWxwZXIpIH0sIHJlc2l6ZTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIik7IGUuZ2hvc3QgJiYgZS5naG9zdC5jc3MoeyBwb3NpdGlvbjogInJlbGF0aXZlIiwgaGVpZ2h0OiBlLnNpemUuaGVpZ2h0LCB3aWR0aDogZS5zaXplLndpZHRoIH0pIH0sIHN0b3A6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpOyBlLmdob3N0ICYmIGUuaGVscGVyICYmIGUuaGVscGVyLmdldCgwKS5yZW1vdmVDaGlsZChlLmdob3N0LmdldCgwKSkgfSB9KSwgdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCAiZ3JpZCIsIHsgcmVzaXplOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSwgaSA9IGUub3B0aW9ucywgcyA9IGUuc2l6ZSwgbiA9IGUub3JpZ2luYWxTaXplLCBhID0gZS5vcmlnaW5hbFBvc2l0aW9uLCBvID0gZS5heGlzLCByID0gIm51bWJlciIgPT0gdHlwZW9mIGkuZ3JpZCA/IFtpLmdyaWQsIGkuZ3JpZF0gOiBpLmdyaWQsIGggPSByWzBdIHx8IDEsIGwgPSByWzFdIHx8IDEsIGMgPSBNYXRoLnJvdW5kKChzLndpZHRoIC0gbi53aWR0aCkgLyBoKSAqIGgsIHUgPSBNYXRoLnJvdW5kKChzLmhlaWdodCAtIG4uaGVpZ2h0KSAvIGwpICogbCwgZCA9IG4ud2lkdGggKyBjLCBwID0gbi5oZWlnaHQgKyB1LCBmID0gaS5tYXhXaWR0aCAmJiBkID4gaS5tYXhXaWR0aCwgZyA9IGkubWF4SGVpZ2h0ICYmIHAgPiBpLm1heEhlaWdodCwgbSA9IGkubWluV2lkdGggJiYgaS5taW5XaWR0aCA+IGQsIHYgPSBpLm1pbkhlaWdodCAmJiBpLm1pbkhlaWdodCA+IHA7IGkuZ3JpZCA9IHIsIG0gJiYgKGQgKz0gaCksIHYgJiYgKHAgKz0gbCksIGYgJiYgKGQgLT0gaCksIGcgJiYgKHAgLT0gbCksIC9eKHNlfHN8ZSkkLy50ZXN0KG8pID8gKGUuc2l6ZS53aWR0aCA9IGQsIGUuc2l6ZS5oZWlnaHQgPSBwKSA6IC9eKG5lKSQvLnRlc3QobykgPyAoZS5zaXplLndpZHRoID0gZCwgZS5zaXplLmhlaWdodCA9IHAsIGUucG9zaXRpb24udG9wID0gYS50b3AgLSB1KSA6IC9eKHN3KSQvLnRlc3QobykgPyAoZS5zaXplLndpZHRoID0gZCwgZS5zaXplLmhlaWdodCA9IHAsIGUucG9zaXRpb24ubGVmdCA9IGEubGVmdCAtIGMpIDogKHAgLSBsID4gMCA/IChlLnNpemUuaGVpZ2h0ID0gcCwgZS5wb3NpdGlvbi50b3AgPSBhLnRvcCAtIHUpIDogKGUuc2l6ZS5oZWlnaHQgPSBsLCBlLnBvc2l0aW9uLnRvcCA9IGEudG9wICsgbi5oZWlnaHQgLSBsKSwgZCAtIGggPiAwID8gKGUuc2l6ZS53aWR0aCA9IGQsIGUucG9zaXRpb24ubGVmdCA9IGEubGVmdCAtIGMpIDogKGUuc2l6ZS53aWR0aCA9IGgsIGUucG9zaXRpb24ubGVmdCA9IGEubGVmdCArIG4ud2lkdGggLSBoKSkgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdC53aWRnZXQoInVpLnNlbGVjdGFibGUiLCB0LnVpLm1vdXNlLCB7IHZlcnNpb246ICIxLjEwLjQiLCBvcHRpb25zOiB7IGFwcGVuZFRvOiAiYm9keSIsIGF1dG9SZWZyZXNoOiAhMCwgZGlzdGFuY2U6IDAsIGZpbHRlcjogIioiLCB0b2xlcmFuY2U6ICJ0b3VjaCIsIHNlbGVjdGVkOiBudWxsLCBzZWxlY3Rpbmc6IG51bGwsIHN0YXJ0OiBudWxsLCBzdG9wOiBudWxsLCB1bnNlbGVjdGVkOiBudWxsLCB1bnNlbGVjdGluZzogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpID0gdGhpczsgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksIHRoaXMuZHJhZ2dlZCA9ICExLCB0aGlzLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7IGUgPSB0KGkub3B0aW9ucy5maWx0ZXIsIGkuZWxlbWVudFswXSksIGUuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksIGUuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKSwgaSA9IGUub2Zmc2V0KCk7IHQuZGF0YSh0aGlzLCAic2VsZWN0YWJsZS1pdGVtIiwgeyBlbGVtZW50OiB0aGlzLCAkZWxlbWVudDogZSwgbGVmdDogaS5sZWZ0LCB0b3A6IGkudG9wLCByaWdodDogaS5sZWZ0ICsgZS5vdXRlcldpZHRoKCksIGJvdHRvbTogaS50b3AgKyBlLm91dGVySGVpZ2h0KCksIHN0YXJ0c2VsZWN0ZWQ6ICExLCBzZWxlY3RlZDogZS5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSwgc2VsZWN0aW5nOiBlLmhhc0NsYXNzKCJ1aS1zZWxlY3RpbmciKSwgdW5zZWxlY3Rpbmc6IGUuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikgfSkgfSkgfSwgdGhpcy5yZWZyZXNoKCksIHRoaXMuc2VsZWN0ZWVzID0gZS5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSwgdGhpcy5fbW91c2VJbml0KCksIHRoaXMuaGVscGVyID0gdCgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpIH0sIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7IHRoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLCB0aGlzLl9tb3VzZURlc3Ryb3koKSB9LCBfbW91c2VTdGFydDogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLCBzID0gdGhpcy5vcHRpb25zOyB0aGlzLm9wb3MgPSBbZS5wYWdlWCwgZS5wYWdlWV0sIHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCAodGhpcy5zZWxlY3RlZXMgPSB0KHMuZmlsdGVyLCB0aGlzLmVsZW1lbnRbMF0pLCB0aGlzLl90cmlnZ2VyKCJzdGFydCIsIGUpLCB0KHMuYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksIHRoaXMuaGVscGVyLmNzcyh7IGxlZnQ6IGUucGFnZVgsIHRvcDogZS5wYWdlWSwgd2lkdGg6IDAsIGhlaWdodDogMCB9KSwgcy5hdXRvUmVmcmVzaCAmJiB0aGlzLnJlZnJlc2goKSwgdGhpcy5zZWxlY3RlZXMuZmlsdGVyKCIudWktc2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMgPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyBzLnN0YXJ0c2VsZWN0ZWQgPSAhMCwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSB8fCAocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSwgcy5zZWxlY3RlZCA9ICExLCBzLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBzLnVuc2VsZWN0aW5nID0gITAsIGkuX3RyaWdnZXIoInVuc2VsZWN0aW5nIiwgZSwgeyB1bnNlbGVjdGluZzogcy5lbGVtZW50IH0pKSB9KSwgdChlLnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMsIG4gPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyByZXR1cm4gbiA/IChzID0gIWUubWV0YUtleSAmJiAhZS5jdHJsS2V5IHx8ICFuLiRlbGVtZW50Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpLCBuLiRlbGVtZW50LnJlbW92ZUNsYXNzKHMgPyAidWktdW5zZWxlY3RpbmciIDogInVpLXNlbGVjdGVkIikuYWRkQ2xhc3MocyA/ICJ1aS1zZWxlY3RpbmciIDogInVpLXVuc2VsZWN0aW5nIiksIG4udW5zZWxlY3RpbmcgPSAhcywgbi5zZWxlY3RpbmcgPSBzLCBuLnNlbGVjdGVkID0gcywgcyA/IGkuX3RyaWdnZXIoInNlbGVjdGluZyIsIGUsIHsgc2VsZWN0aW5nOiBuLmVsZW1lbnQgfSkgOiBpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsIGUsIHsgdW5zZWxlY3Rpbmc6IG4uZWxlbWVudCB9KSwgITEpIDogdW5kZWZpbmVkIH0pKSB9LCBfbW91c2VEcmFnOiBmdW5jdGlvbiAoZSkgeyBpZiAodGhpcy5kcmFnZ2VkID0gITAsICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsgdmFyIGksIHMgPSB0aGlzLCBuID0gdGhpcy5vcHRpb25zLCBhID0gdGhpcy5vcG9zWzBdLCBvID0gdGhpcy5vcG9zWzFdLCByID0gZS5wYWdlWCwgbCA9IGUucGFnZVk7IHJldHVybiBhID4gciAmJiAoaSA9IHIsIHIgPSBhLCBhID0gaSksIG8gPiBsICYmIChpID0gbCwgbCA9IG8sIG8gPSBpKSwgdGhpcy5oZWxwZXIuY3NzKHsgbGVmdDogYSwgdG9wOiBvLCB3aWR0aDogciAtIGEsIGhlaWdodDogbCAtIG8gfSksIHRoaXMuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgaSA9IHQuZGF0YSh0aGlzLCAic2VsZWN0YWJsZS1pdGVtIiksIGggPSAhMTsgaSAmJiBpLmVsZW1lbnQgIT09IHMuZWxlbWVudFswXSAmJiAoInRvdWNoIiA9PT0gbi50b2xlcmFuY2UgPyBoID0gIShpLmxlZnQgPiByIHx8IGEgPiBpLnJpZ2h0IHx8IGkudG9wID4gbCB8fCBvID4gaS5ib3R0b20pIDogImZpdCIgPT09IG4udG9sZXJhbmNlICYmIChoID0gaS5sZWZ0ID4gYSAmJiByID4gaS5yaWdodCAmJiBpLnRvcCA+IG8gJiYgbCA+IGkuYm90dG9tKSwgaCA/IChpLnNlbGVjdGVkICYmIChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLCBpLnNlbGVjdGVkID0gITEpLCBpLnVuc2VsZWN0aW5nICYmIChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITEpLCBpLnNlbGVjdGluZyB8fCAoaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksIGkuc2VsZWN0aW5nID0gITAsIHMuX3RyaWdnZXIoInNlbGVjdGluZyIsIGUsIHsgc2VsZWN0aW5nOiBpLmVsZW1lbnQgfSkpKSA6IChpLnNlbGVjdGluZyAmJiAoKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpICYmIGkuc3RhcnRzZWxlY3RlZCA/IChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSwgaS5zZWxlY3RpbmcgPSAhMSwgaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSwgaS5zZWxlY3RlZCA9ICEwKSA6IChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSwgaS5zZWxlY3RpbmcgPSAhMSwgaS5zdGFydHNlbGVjdGVkICYmIChpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITApLCBzLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsIGUsIHsgdW5zZWxlY3Rpbmc6IGkuZWxlbWVudCB9KSkpLCBpLnNlbGVjdGVkICYmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGkuc3RhcnRzZWxlY3RlZCB8fCAoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSwgaS5zZWxlY3RlZCA9ICExLCBpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBpLnVuc2VsZWN0aW5nID0gITAsIHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIiwgZSwgeyB1bnNlbGVjdGluZzogaS5lbGVtZW50IH0pKSkpKSB9KSwgITEgfSB9LCBfbW91c2VTdG9wOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXM7IHJldHVybiB0aGlzLmRyYWdnZWQgPSAhMSwgdCgiLnVpLXVuc2VsZWN0aW5nIiwgdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIHMgPSB0LmRhdGEodGhpcywgInNlbGVjdGFibGUtaXRlbSIpOyBzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLCBzLnVuc2VsZWN0aW5nID0gITEsIHMuc3RhcnRzZWxlY3RlZCA9ICExLCBpLl90cmlnZ2VyKCJ1bnNlbGVjdGVkIiwgZSwgeyB1bnNlbGVjdGVkOiBzLmVsZW1lbnQgfSkgfSksIHQoIi51aS1zZWxlY3RpbmciLCB0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgcyA9IHQuZGF0YSh0aGlzLCAic2VsZWN0YWJsZS1pdGVtIik7IHMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLCBzLnNlbGVjdGluZyA9ICExLCBzLnNlbGVjdGVkID0gITAsIHMuc3RhcnRzZWxlY3RlZCA9ICEwLCBpLl90cmlnZ2VyKCJzZWxlY3RlZCIsIGUsIHsgc2VsZWN0ZWQ6IHMuZWxlbWVudCB9KSB9KSwgdGhpcy5fdHJpZ2dlcigic3RvcCIsIGUpLCB0aGlzLmhlbHBlci5yZW1vdmUoKSwgITEgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgdmFyIGUgPSA1OyB0LndpZGdldCgidWkuc2xpZGVyIiwgdC51aS5tb3VzZSwgeyB2ZXJzaW9uOiAiMS4xMC40Iiwgd2lkZ2V0RXZlbnRQcmVmaXg6ICJzbGlkZSIsIG9wdGlvbnM6IHsgYW5pbWF0ZTogITEsIGRpc3RhbmNlOiAwLCBtYXg6IDEwMCwgbWluOiAwLCBvcmllbnRhdGlvbjogImhvcml6b250YWwiLCByYW5nZTogITEsIHN0ZXA6IDEsIHZhbHVlOiAwLCB2YWx1ZXM6IG51bGwsIGNoYW5nZTogbnVsbCwgc2xpZGU6IG51bGwsIHN0YXJ0OiBudWxsLCBzdG9wOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5fa2V5U2xpZGluZyA9ICExLCB0aGlzLl9tb3VzZVNsaWRpbmcgPSAhMSwgdGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9oYW5kbGVJbmRleCA9IG51bGwsIHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksIHRoaXMuX21vdXNlSW5pdCgpLCB0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIiArIHRoaXMub3JpZW50YXRpb24gKyAiIHVpLXdpZGdldCIgKyAiIHVpLXdpZGdldC1jb250ZW50IiArICIgdWktY29ybmVyLWFsbCIpLCB0aGlzLl9yZWZyZXNoKCksIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLCB0aGlzLl9hbmltYXRlT2ZmID0gITEgfSwgX3JlZnJlc2g6IGZ1bmN0aW9uICgpIHsgdGhpcy5fY3JlYXRlUmFuZ2UoKSwgdGhpcy5fY3JlYXRlSGFuZGxlcygpLCB0aGlzLl9zZXR1cEV2ZW50cygpLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSB9LCBfY3JlYXRlSGFuZGxlczogZnVuY3Rpb24gKCkgeyB2YXIgZSwgaSwgcyA9IHRoaXMub3B0aW9ucywgbiA9IHRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSwgYSA9ICI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjwvYT4iLCBvID0gW107IGZvciAoaSA9IHMudmFsdWVzICYmIHMudmFsdWVzLmxlbmd0aCB8fCAxLCBuLmxlbmd0aCA+IGkgJiYgKG4uc2xpY2UoaSkucmVtb3ZlKCksIG4gPSBuLnNsaWNlKDAsIGkpKSwgZSA9IG4ubGVuZ3RoOyBpID4gZTsgZSsrKSBvLnB1c2goYSk7IHRoaXMuaGFuZGxlcyA9IG4uYWRkKHQoby5qb2luKCIiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksIHRoaXMuaGFuZGxlID0gdGhpcy5oYW5kbGVzLmVxKDApLCB0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbiAoZSkgeyB0KHRoaXMpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiLCBlKSB9KSB9LCBfY3JlYXRlUmFuZ2U6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLm9wdGlvbnMsIGkgPSAiIjsgZS5yYW5nZSA/IChlLnJhbmdlID09PSAhMCAmJiAoZS52YWx1ZXMgPyBlLnZhbHVlcy5sZW5ndGggJiYgMiAhPT0gZS52YWx1ZXMubGVuZ3RoID8gZS52YWx1ZXMgPSBbZS52YWx1ZXNbMF0sIGUudmFsdWVzWzBdXSA6IHQuaXNBcnJheShlLnZhbHVlcykgJiYgKGUudmFsdWVzID0gZS52YWx1ZXMuc2xpY2UoMCkpIDogZS52YWx1ZXMgPSBbdGhpcy5fdmFsdWVNaW4oKSwgdGhpcy5fdmFsdWVNaW4oKV0pLCB0aGlzLnJhbmdlICYmIHRoaXMucmFuZ2UubGVuZ3RoID8gdGhpcy5yYW5nZS5yZW1vdmVDbGFzcygidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4IikuY3NzKHsgbGVmdDogIiIsIGJvdHRvbTogIiIgfSkgOiAodGhpcy5yYW5nZSA9IHQoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSwgaSA9ICJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksIHRoaXMucmFuZ2UuYWRkQ2xhc3MoaSArICgibWluIiA9PT0gZS5yYW5nZSB8fCAibWF4IiA9PT0gZS5yYW5nZSA/ICIgdWktc2xpZGVyLXJhbmdlLSIgKyBlLnJhbmdlIDogIiIpKSkgOiAodGhpcy5yYW5nZSAmJiB0aGlzLnJhbmdlLnJlbW92ZSgpLCB0aGlzLnJhbmdlID0gbnVsbCkgfSwgX3NldHVwRXZlbnRzOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5oYW5kbGVzLmFkZCh0aGlzLnJhbmdlKS5maWx0ZXIoImEiKTsgdGhpcy5fb2ZmKHQpLCB0aGlzLl9vbih0LCB0aGlzLl9oYW5kbGVFdmVudHMpLCB0aGlzLl9ob3ZlcmFibGUodCksIHRoaXMuX2ZvY3VzYWJsZSh0KSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmhhbmRsZXMucmVtb3ZlKCksIHRoaXMucmFuZ2UgJiYgdGhpcy5yYW5nZS5yZW1vdmUoKSwgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksIHRoaXMuX21vdXNlRGVzdHJveSgpIH0sIF9tb3VzZUNhcHR1cmU6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBhLCBvLCByLCBsLCBoLCB1ID0gdGhpcywgYyA9IHRoaXMub3B0aW9uczsgcmV0dXJuIGMuZGlzYWJsZWQgPyAhMSA6ICh0aGlzLmVsZW1lbnRTaXplID0geyB3aWR0aDogdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSB9LCB0aGlzLmVsZW1lbnRPZmZzZXQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCksIGkgPSB7IHg6IGUucGFnZVgsIHk6IGUucGFnZVkgfSwgcyA9IHRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShpKSwgbiA9IHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpICsgMSwgdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSBNYXRoLmFicyhzIC0gdS52YWx1ZXMoZSkpOyAobiA+IGkgfHwgbiA9PT0gaSAmJiAoZSA9PT0gdS5fbGFzdENoYW5nZWRWYWx1ZSB8fCB1LnZhbHVlcyhlKSA9PT0gYy5taW4pKSAmJiAobiA9IGksIGEgPSB0KHRoaXMpLCBvID0gZSkgfSksIHIgPSB0aGlzLl9zdGFydChlLCBvKSwgciA9PT0gITEgPyAhMSA6ICh0aGlzLl9tb3VzZVNsaWRpbmcgPSAhMCwgdGhpcy5faGFuZGxlSW5kZXggPSBvLCBhLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5mb2N1cygpLCBsID0gYS5vZmZzZXQoKSwgaCA9ICF0KGUudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmlzKCIudWktc2xpZGVyLWhhbmRsZSIpLCB0aGlzLl9jbGlja09mZnNldCA9IGggPyB7IGxlZnQ6IDAsIHRvcDogMCB9IDogeyBsZWZ0OiBlLnBhZ2VYIC0gbC5sZWZ0IC0gYS53aWR0aCgpIC8gMiwgdG9wOiBlLnBhZ2VZIC0gbC50b3AgLSBhLmhlaWdodCgpIC8gMiAtIChwYXJzZUludChhLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApIC0gKHBhcnNlSW50KGEuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLCAxMCkgfHwgMCkgKyAocGFyc2VJbnQoYS5jc3MoIm1hcmdpblRvcCIpLCAxMCkgfHwgMCkgfSwgdGhpcy5oYW5kbGVzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpIHx8IHRoaXMuX3NsaWRlKGUsIG8sIHMpLCB0aGlzLl9hbmltYXRlT2ZmID0gITAsICEwKSkgfSwgX21vdXNlU3RhcnQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEwIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0geyB4OiB0LnBhZ2VYLCB5OiB0LnBhZ2VZIH0sIGkgPSB0aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoZSk7IHJldHVybiB0aGlzLl9zbGlkZSh0LCB0aGlzLl9oYW5kbGVJbmRleCwgaSksICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLCB0aGlzLl9tb3VzZVNsaWRpbmcgPSAhMSwgdGhpcy5fc3RvcCh0LCB0aGlzLl9oYW5kbGVJbmRleCksIHRoaXMuX2NoYW5nZSh0LCB0aGlzLl9oYW5kbGVJbmRleCksIHRoaXMuX2hhbmRsZUluZGV4ID0gbnVsbCwgdGhpcy5fY2xpY2tPZmZzZXQgPSBudWxsLCB0aGlzLl9hbmltYXRlT2ZmID0gITEsICExIH0sIF9kZXRlY3RPcmllbnRhdGlvbjogZnVuY3Rpb24gKCkgeyB0aGlzLm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiA9PT0gdGhpcy5vcHRpb25zLm9yaWVudGF0aW9uID8gInZlcnRpY2FsIiA6ICJob3Jpem9udGFsIiB9LCBfbm9ybVZhbHVlRnJvbU1vdXNlOiBmdW5jdGlvbiAodCkgeyB2YXIgZSwgaSwgcywgbiwgYTsgcmV0dXJuICJob3Jpem9udGFsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiA/IChlID0gdGhpcy5lbGVtZW50U2l6ZS53aWR0aCwgaSA9IHQueCAtIHRoaXMuZWxlbWVudE9mZnNldC5sZWZ0IC0gKHRoaXMuX2NsaWNrT2Zmc2V0ID8gdGhpcy5fY2xpY2tPZmZzZXQubGVmdCA6IDApKSA6IChlID0gdGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsIGkgPSB0LnkgLSB0aGlzLmVsZW1lbnRPZmZzZXQudG9wIC0gKHRoaXMuX2NsaWNrT2Zmc2V0ID8gdGhpcy5fY2xpY2tPZmZzZXQudG9wIDogMCkpLCBzID0gaSAvIGUsIHMgPiAxICYmIChzID0gMSksIDAgPiBzICYmIChzID0gMCksICJ2ZXJ0aWNhbCIgPT09IHRoaXMub3JpZW50YXRpb24gJiYgKHMgPSAxIC0gcyksIG4gPSB0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKSwgYSA9IHRoaXMuX3ZhbHVlTWluKCkgKyBzICogbiwgdGhpcy5fdHJpbUFsaWduVmFsdWUoYSkgfSwgX3N0YXJ0OiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSA9IHsgaGFuZGxlOiB0aGlzLmhhbmRsZXNbZV0sIHZhbHVlOiB0aGlzLnZhbHVlKCkgfTsgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggJiYgKGkudmFsdWUgPSB0aGlzLnZhbHVlcyhlKSwgaS52YWx1ZXMgPSB0aGlzLnZhbHVlcygpKSwgdGhpcy5fdHJpZ2dlcigic3RhcnQiLCB0LCBpKSB9LCBfc2xpZGU6IGZ1bmN0aW9uICh0LCBlLCBpKSB7IHZhciBzLCBuLCBhOyB0aGlzLm9wdGlvbnMudmFsdWVzICYmIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoID8gKHMgPSB0aGlzLnZhbHVlcyhlID8gMCA6IDEpLCAyID09PSB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMucmFuZ2UgPT09ICEwICYmICgwID09PSBlICYmIGkgPiBzIHx8IDEgPT09IGUgJiYgcyA+IGkpICYmIChpID0gcyksIGkgIT09IHRoaXMudmFsdWVzKGUpICYmIChuID0gdGhpcy52YWx1ZXMoKSwgbltlXSA9IGksIGEgPSB0aGlzLl90cmlnZ2VyKCJzbGlkZSIsIHQsIHsgaGFuZGxlOiB0aGlzLmhhbmRsZXNbZV0sIHZhbHVlOiBpLCB2YWx1ZXM6IG4gfSksIHMgPSB0aGlzLnZhbHVlcyhlID8gMCA6IDEpLCBhICE9PSAhMSAmJiB0aGlzLnZhbHVlcyhlLCBpKSkpIDogaSAhPT0gdGhpcy52YWx1ZSgpICYmIChhID0gdGhpcy5fdHJpZ2dlcigic2xpZGUiLCB0LCB7IGhhbmRsZTogdGhpcy5oYW5kbGVzW2VdLCB2YWx1ZTogaSB9KSwgYSAhPT0gITEgJiYgdGhpcy52YWx1ZShpKSkgfSwgX3N0b3A6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpID0geyBoYW5kbGU6IHRoaXMuaGFuZGxlc1tlXSwgdmFsdWU6IHRoaXMudmFsdWUoKSB9OyB0aGlzLm9wdGlvbnMudmFsdWVzICYmIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoICYmIChpLnZhbHVlID0gdGhpcy52YWx1ZXMoZSksIGkudmFsdWVzID0gdGhpcy52YWx1ZXMoKSksIHRoaXMuX3RyaWdnZXIoInN0b3AiLCB0LCBpKSB9LCBfY2hhbmdlOiBmdW5jdGlvbiAodCwgZSkgeyBpZiAoIXRoaXMuX2tleVNsaWRpbmcgJiYgIXRoaXMuX21vdXNlU2xpZGluZykgeyB2YXIgaSA9IHsgaGFuZGxlOiB0aGlzLmhhbmRsZXNbZV0sIHZhbHVlOiB0aGlzLnZhbHVlKCkgfTsgdGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCAmJiAoaS52YWx1ZSA9IHRoaXMudmFsdWVzKGUpLCBpLnZhbHVlcyA9IHRoaXMudmFsdWVzKCkpLCB0aGlzLl9sYXN0Q2hhbmdlZFZhbHVlID0gZSwgdGhpcy5fdHJpZ2dlcigiY2hhbmdlIiwgdCwgaSkgfSB9LCB2YWx1ZTogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy5fdHJpbUFsaWduVmFsdWUodCksIHRoaXMuX3JlZnJlc2hWYWx1ZSgpLCB0aGlzLl9jaGFuZ2UobnVsbCwgMCksIHVuZGVmaW5lZCkgOiB0aGlzLl92YWx1ZSgpIH0sIHZhbHVlczogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMsIG4sIGE7IGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXNbZV0gPSB0aGlzLl90cmltQWxpZ25WYWx1ZShpKSwgdGhpcy5fcmVmcmVzaFZhbHVlKCksIHRoaXMuX2NoYW5nZShudWxsLCBlKSwgdW5kZWZpbmVkOyBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzLl92YWx1ZXMoKTsgaWYgKCF0LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggPyB0aGlzLl92YWx1ZXMoZSkgOiB0aGlzLnZhbHVlKCk7IGZvciAocyA9IHRoaXMub3B0aW9ucy52YWx1ZXMsIG4gPSBhcmd1bWVudHNbMF0sIGEgPSAwOyBzLmxlbmd0aCA+IGE7IGEgKz0gMSkgc1thXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKG5bYV0pLCB0aGlzLl9jaGFuZ2UobnVsbCwgYSk7IHRoaXMuX3JlZnJlc2hWYWx1ZSgpIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uIChlLCBpKSB7IHZhciBzLCBuID0gMDsgc3dpdGNoICgicmFuZ2UiID09PSBlICYmIHRoaXMub3B0aW9ucy5yYW5nZSA9PT0gITAgJiYgKCJtaW4iID09PSBpID8gKHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX3ZhbHVlcygwKSwgdGhpcy5vcHRpb25zLnZhbHVlcyA9IG51bGwpIDogIm1heCIgPT09IGkgJiYgKHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuX3ZhbHVlcyh0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCAtIDEpLCB0aGlzLm9wdGlvbnMudmFsdWVzID0gbnVsbCkpLCB0LmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykgJiYgKG4gPSB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksIHQuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIGUpIHsgY2FzZSAib3JpZW50YXRpb24iOiB0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCIpLmFkZENsYXNzKCJ1aS1zbGlkZXItIiArIHRoaXMub3JpZW50YXRpb24pLCB0aGlzLl9yZWZyZXNoVmFsdWUoKTsgYnJlYWs7IGNhc2UgInZhbHVlIjogdGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9yZWZyZXNoVmFsdWUoKSwgdGhpcy5fY2hhbmdlKG51bGwsIDApLCB0aGlzLl9hbmltYXRlT2ZmID0gITE7IGJyZWFrOyBjYXNlICJ2YWx1ZXMiOiBmb3IgKHRoaXMuX2FuaW1hdGVPZmYgPSAhMCwgdGhpcy5fcmVmcmVzaFZhbHVlKCksIHMgPSAwOyBuID4gczsgcyArPSAxKSB0aGlzLl9jaGFuZ2UobnVsbCwgcyk7IHRoaXMuX2FuaW1hdGVPZmYgPSAhMTsgYnJlYWs7IGNhc2UgIm1pbiI6IGNhc2UgIm1heCI6IHRoaXMuX2FuaW1hdGVPZmYgPSAhMCwgdGhpcy5fcmVmcmVzaFZhbHVlKCksIHRoaXMuX2FuaW1hdGVPZmYgPSAhMTsgYnJlYWs7IGNhc2UgInJhbmdlIjogdGhpcy5fYW5pbWF0ZU9mZiA9ICEwLCB0aGlzLl9yZWZyZXNoKCksIHRoaXMuX2FuaW1hdGVPZmYgPSAhMSB9IH0sIF92YWx1ZTogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9ucy52YWx1ZTsgcmV0dXJuIHQgPSB0aGlzLl90cmltQWxpZ25WYWx1ZSh0KSB9LCBfdmFsdWVzOiBmdW5jdGlvbiAodCkgeyB2YXIgZSwgaSwgczsgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBlID0gdGhpcy5vcHRpb25zLnZhbHVlc1t0XSwgZSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKGUpOyBpZiAodGhpcy5vcHRpb25zLnZhbHVlcyAmJiB0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCkgeyBmb3IgKGkgPSB0aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCksIHMgPSAwOyBpLmxlbmd0aCA+IHM7IHMgKz0gMSkgaVtzXSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pOyByZXR1cm4gaSB9IHJldHVybiBbXSB9LCBfdHJpbUFsaWduVmFsdWU6IGZ1bmN0aW9uICh0KSB7IGlmICh0aGlzLl92YWx1ZU1pbigpID49IHQpIHJldHVybiB0aGlzLl92YWx1ZU1pbigpOyBpZiAodCA+PSB0aGlzLl92YWx1ZU1heCgpKSByZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTsgdmFyIGUgPSB0aGlzLm9wdGlvbnMuc3RlcCA+IDAgPyB0aGlzLm9wdGlvbnMuc3RlcCA6IDEsIGkgPSAodCAtIHRoaXMuX3ZhbHVlTWluKCkpICUgZSwgcyA9IHQgLSBpOyByZXR1cm4gMiAqIE1hdGguYWJzKGkpID49IGUgJiYgKHMgKz0gaSA+IDAgPyBlIDogLWUpLCBwYXJzZUZsb2F0KHMudG9GaXhlZCg1KSkgfSwgX3ZhbHVlTWluOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLm9wdGlvbnMubWluIH0sIF92YWx1ZU1heDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5vcHRpb25zLm1heCB9LCBfcmVmcmVzaFZhbHVlOiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpLCBzLCBuLCBhLCBvID0gdGhpcy5vcHRpb25zLnJhbmdlLCByID0gdGhpcy5vcHRpb25zLCBsID0gdGhpcywgaCA9IHRoaXMuX2FuaW1hdGVPZmYgPyAhMSA6IHIuYW5pbWF0ZSwgdSA9IHt9OyB0aGlzLm9wdGlvbnMudmFsdWVzICYmIHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoID8gdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24gKHMpIHsgaSA9IDEwMCAqICgobC52YWx1ZXMocykgLSBsLl92YWx1ZU1pbigpKSAvIChsLl92YWx1ZU1heCgpIC0gbC5fdmFsdWVNaW4oKSkpLCB1WyJob3Jpem9udGFsIiA9PT0gbC5vcmllbnRhdGlvbiA/ICJsZWZ0IiA6ICJib3R0b20iXSA9IGkgKyAiJSIsIHQodGhpcykuc3RvcCgxLCAxKVtoID8gImFuaW1hdGUiIDogImNzcyJdKHUsIHIuYW5pbWF0ZSksIGwub3B0aW9ucy5yYW5nZSA9PT0gITAgJiYgKCJob3Jpem9udGFsIiA9PT0gbC5vcmllbnRhdGlvbiA/ICgwID09PSBzICYmIGwucmFuZ2Uuc3RvcCgxLCAxKVtoID8gImFuaW1hdGUiIDogImNzcyJdKHsgbGVmdDogaSArICIlIiB9LCByLmFuaW1hdGUpLCAxID09PSBzICYmIGwucmFuZ2VbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IHdpZHRoOiBpIC0gZSArICIlIiB9LCB7IHF1ZXVlOiAhMSwgZHVyYXRpb246IHIuYW5pbWF0ZSB9KSkgOiAoMCA9PT0gcyAmJiBsLnJhbmdlLnN0b3AoMSwgMSlbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IGJvdHRvbTogaSArICIlIiB9LCByLmFuaW1hdGUpLCAxID09PSBzICYmIGwucmFuZ2VbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh7IGhlaWdodDogaSAtIGUgKyAiJSIgfSwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiByLmFuaW1hdGUgfSkpKSwgZSA9IGkgfSkgOiAocyA9IHRoaXMudmFsdWUoKSwgbiA9IHRoaXMuX3ZhbHVlTWluKCksIGEgPSB0aGlzLl92YWx1ZU1heCgpLCBpID0gYSAhPT0gbiA/IDEwMCAqICgocyAtIG4pIC8gKGEgLSBuKSkgOiAwLCB1WyJob3Jpem9udGFsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiA/ICJsZWZ0IiA6ICJib3R0b20iXSA9IGkgKyAiJSIsIHRoaXMuaGFuZGxlLnN0b3AoMSwgMSlbaCA/ICJhbmltYXRlIiA6ICJjc3MiXSh1LCByLmFuaW1hdGUpLCAibWluIiA9PT0gbyAmJiAiaG9yaXpvbnRhbCIgPT09IHRoaXMub3JpZW50YXRpb24gJiYgdGhpcy5yYW5nZS5zdG9wKDEsIDEpW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0oeyB3aWR0aDogaSArICIlIiB9LCByLmFuaW1hdGUpLCAibWF4IiA9PT0gbyAmJiAiaG9yaXpvbnRhbCIgPT09IHRoaXMub3JpZW50YXRpb24gJiYgdGhpcy5yYW5nZVtoID8gImFuaW1hdGUiIDogImNzcyJdKHsgd2lkdGg6IDEwMCAtIGkgKyAiJSIgfSwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiByLmFuaW1hdGUgfSksICJtaW4iID09PSBvICYmICJ2ZXJ0aWNhbCIgPT09IHRoaXMub3JpZW50YXRpb24gJiYgdGhpcy5yYW5nZS5zdG9wKDEsIDEpW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0oeyBoZWlnaHQ6IGkgKyAiJSIgfSwgci5hbmltYXRlKSwgIm1heCIgPT09IG8gJiYgInZlcnRpY2FsIiA9PT0gdGhpcy5vcmllbnRhdGlvbiAmJiB0aGlzLnJhbmdlW2ggPyAiYW5pbWF0ZSIgOiAiY3NzIl0oeyBoZWlnaHQ6IDEwMCAtIGkgKyAiJSIgfSwgeyBxdWV1ZTogITEsIGR1cmF0aW9uOiByLmFuaW1hdGUgfSkpIH0sIF9oYW5kbGVFdmVudHM6IHsga2V5ZG93bjogZnVuY3Rpb24gKGkpIHsgdmFyIHMsIG4sIGEsIG8sIHIgPSB0KGkudGFyZ2V0KS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iik7IHN3aXRjaCAoaS5rZXlDb2RlKSB7IGNhc2UgdC51aS5rZXlDb2RlLkhPTUU6IGNhc2UgdC51aS5rZXlDb2RlLkVORDogY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDogY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOiBjYXNlIHQudWkua2V5Q29kZS5VUDogY2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6IGNhc2UgdC51aS5rZXlDb2RlLkRPV046IGNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6IGlmIChpLnByZXZlbnREZWZhdWx0KCksICF0aGlzLl9rZXlTbGlkaW5nICYmICh0aGlzLl9rZXlTbGlkaW5nID0gITAsIHQoaS50YXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSwgcyA9IHRoaXMuX3N0YXJ0KGksIHIpLCBzID09PSAhMSkpIHJldHVybiB9IHN3aXRjaCAobyA9IHRoaXMub3B0aW9ucy5zdGVwLCBuID0gYSA9IHRoaXMub3B0aW9ucy52YWx1ZXMgJiYgdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGggPyB0aGlzLnZhbHVlcyhyKSA6IHRoaXMudmFsdWUoKSwgaS5rZXlDb2RlKSB7IGNhc2UgdC51aS5rZXlDb2RlLkhPTUU6IGEgPSB0aGlzLl92YWx1ZU1pbigpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuRU5EOiBhID0gdGhpcy5fdmFsdWVNYXgoKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6IGEgPSB0aGlzLl90cmltQWxpZ25WYWx1ZShuICsgKHRoaXMuX3ZhbHVlTWF4KCkgLSB0aGlzLl92YWx1ZU1pbigpKSAvIGUpOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOiBhID0gdGhpcy5fdHJpbUFsaWduVmFsdWUobiAtICh0aGlzLl92YWx1ZU1heCgpIC0gdGhpcy5fdmFsdWVNaW4oKSkgLyBlKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLlVQOiBjYXNlIHQudWkua2V5Q29kZS5SSUdIVDogaWYgKG4gPT09IHRoaXMuX3ZhbHVlTWF4KCkpIHJldHVybjsgYSA9IHRoaXMuX3RyaW1BbGlnblZhbHVlKG4gKyBvKTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLkRPV046IGNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6IGlmIChuID09PSB0aGlzLl92YWx1ZU1pbigpKSByZXR1cm47IGEgPSB0aGlzLl90cmltQWxpZ25WYWx1ZShuIC0gbykgfSB0aGlzLl9zbGlkZShpLCByLCBhKSB9LCBjbGljazogZnVuY3Rpb24gKHQpIHsgdC5wcmV2ZW50RGVmYXVsdCgpIH0sIGtleXVwOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHQoZS50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTsgdGhpcy5fa2V5U2xpZGluZyAmJiAodGhpcy5fa2V5U2xpZGluZyA9ICExLCB0aGlzLl9zdG9wKGUsIGkpLCB0aGlzLl9jaGFuZ2UoZSwgaSksIHQoZS50YXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSkgfSB9IH0pIH0pKGpRdWVyeSk7IChmdW5jdGlvbiAodCkgeyBmdW5jdGlvbiBlKHQsIGUsIGkpIHsgcmV0dXJuIHQgPiBlICYmIGUgKyBpID4gdCB9IGZ1bmN0aW9uIGkodCkgeyByZXR1cm4gL2xlZnR8cmlnaHQvLnRlc3QodC5jc3MoImZsb2F0IikpIHx8IC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdCh0LmNzcygiZGlzcGxheSIpKSB9IHQud2lkZ2V0KCJ1aS5zb3J0YWJsZSIsIHQudWkubW91c2UsIHsgdmVyc2lvbjogIjEuMTAuNCIsIHdpZGdldEV2ZW50UHJlZml4OiAic29ydCIsIHJlYWR5OiAhMSwgb3B0aW9uczogeyBhcHBlbmRUbzogInBhcmVudCIsIGF4aXM6ICExLCBjb25uZWN0V2l0aDogITEsIGNvbnRhaW5tZW50OiAhMSwgY3Vyc29yOiAiYXV0byIsIGN1cnNvckF0OiAhMSwgZHJvcE9uRW1wdHk6ICEwLCBmb3JjZVBsYWNlaG9sZGVyU2l6ZTogITEsIGZvcmNlSGVscGVyU2l6ZTogITEsIGdyaWQ6ICExLCBoYW5kbGU6ICExLCBoZWxwZXI6ICJvcmlnaW5hbCIsIGl0ZW1zOiAiPiAqIiwgb3BhY2l0eTogITEsIHBsYWNlaG9sZGVyOiAhMSwgcmV2ZXJ0OiAhMSwgc2Nyb2xsOiAhMCwgc2Nyb2xsU2Vuc2l0aXZpdHk6IDIwLCBzY3JvbGxTcGVlZDogMjAsIHNjb3BlOiAiZGVmYXVsdCIsIHRvbGVyYW5jZTogImludGVyc2VjdCIsIHpJbmRleDogMWUzLCBhY3RpdmF0ZTogbnVsbCwgYmVmb3JlU3RvcDogbnVsbCwgY2hhbmdlOiBudWxsLCBkZWFjdGl2YXRlOiBudWxsLCBvdXQ6IG51bGwsIG92ZXI6IG51bGwsIHJlY2VpdmU6IG51bGwsIHJlbW92ZTogbnVsbCwgc29ydDogbnVsbCwgc3RhcnQ6IG51bGwsIHN0b3A6IG51bGwsIHVwZGF0ZTogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5vcHRpb25zOyB0aGlzLmNvbnRhaW5lckNhY2hlID0ge30sIHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc29ydGFibGUiKSwgdGhpcy5yZWZyZXNoKCksIHRoaXMuZmxvYXRpbmcgPSB0aGlzLml0ZW1zLmxlbmd0aCA/ICJ4IiA9PT0gdC5heGlzIHx8IGkodGhpcy5pdGVtc1swXS5pdGVtKSA6ICExLCB0aGlzLm9mZnNldCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKSwgdGhpcy5fbW91c2VJbml0KCksIHRoaXMucmVhZHkgPSAhMCB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlIHVpLXNvcnRhYmxlLWRpc2FibGVkIiksIHRoaXMuX21vdXNlRGVzdHJveSgpOyBmb3IgKHZhciB0ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyB0ID49IDA7IHQtLSkgdGhpcy5pdGVtc1t0XS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lICsgIi1pdGVtIik7IHJldHVybiB0aGlzIH0sIF9zZXRPcHRpb246IGZ1bmN0aW9uIChlLCBpKSB7ICJkaXNhYmxlZCIgPT09IGUgPyAodGhpcy5vcHRpb25zW2VdID0gaSwgdGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc29ydGFibGUtZGlzYWJsZWQiLCAhIWkpKSA6IHQuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfSwgX21vdXNlQ2FwdHVyZTogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSBudWxsLCBuID0gITEsIG8gPSB0aGlzOyByZXR1cm4gdGhpcy5yZXZlcnRpbmcgPyAhMSA6IHRoaXMub3B0aW9ucy5kaXNhYmxlZCB8fCAic3RhdGljIiA9PT0gdGhpcy5vcHRpb25zLnR5cGUgPyAhMSA6ICh0aGlzLl9yZWZyZXNoSXRlbXMoZSksIHQoZS50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHQuZGF0YSh0aGlzLCBvLndpZGdldE5hbWUgKyAiLWl0ZW0iKSA9PT0gbyA/IChzID0gdCh0aGlzKSwgITEpIDogdW5kZWZpbmVkIH0pLCB0LmRhdGEoZS50YXJnZXQsIG8ud2lkZ2V0TmFtZSArICItaXRlbSIpID09PSBvICYmIChzID0gdChlLnRhcmdldCkpLCBzID8gIXRoaXMub3B0aW9ucy5oYW5kbGUgfHwgaSB8fCAodCh0aGlzLm9wdGlvbnMuaGFuZGxlLCBzKS5maW5kKCIqIikuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24gKCkgeyB0aGlzID09PSBlLnRhcmdldCAmJiAobiA9ICEwKSB9KSwgbikgPyAodGhpcy5jdXJyZW50SXRlbSA9IHMsIHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksICEwKSA6ICExIDogITEpIH0sIF9tb3VzZVN0YXJ0OiBmdW5jdGlvbiAoZSwgaSwgcykgeyB2YXIgbiwgbywgYSA9IHRoaXMub3B0aW9uczsgaWYgKHRoaXMuY3VycmVudENvbnRhaW5lciA9IHRoaXMsIHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLCB0aGlzLmhlbHBlciA9IHRoaXMuX2NyZWF0ZUhlbHBlcihlKSwgdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCB0aGlzLl9jYWNoZU1hcmdpbnMoKSwgdGhpcy5zY3JvbGxQYXJlbnQgPSB0aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSwgdGhpcy5vZmZzZXQgPSB0aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLCB0aGlzLm9mZnNldCA9IHsgdG9wOiB0aGlzLm9mZnNldC50b3AgLSB0aGlzLm1hcmdpbnMudG9wLCBsZWZ0OiB0aGlzLm9mZnNldC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgfSwgdC5leHRlbmQodGhpcy5vZmZzZXQsIHsgY2xpY2s6IHsgbGVmdDogZS5wYWdlWCAtIHRoaXMub2Zmc2V0LmxlZnQsIHRvcDogZS5wYWdlWSAtIHRoaXMub2Zmc2V0LnRvcCB9LCBwYXJlbnQ6IHRoaXMuX2dldFBhcmVudE9mZnNldCgpLCByZWxhdGl2ZTogdGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSB9KSwgdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpLCB0aGlzLmNzc1Bvc2l0aW9uID0gdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIpLCB0aGlzLm9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLCB0aGlzLm9yaWdpbmFsUGFnZVggPSBlLnBhZ2VYLCB0aGlzLm9yaWdpbmFsUGFnZVkgPSBlLnBhZ2VZLCBhLmN1cnNvckF0ICYmIHRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoYS5jdXJzb3JBdCksIHRoaXMuZG9tUG9zaXRpb24gPSB7IHByZXY6IHRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLCBwYXJlbnQ6IHRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF0gfSwgdGhpcy5oZWxwZXJbMF0gIT09IHRoaXMuY3VycmVudEl0ZW1bMF0gJiYgdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksIHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCksIGEuY29udGFpbm1lbnQgJiYgdGhpcy5fc2V0Q29udGFpbm1lbnQoKSwgYS5jdXJzb3IgJiYgImF1dG8iICE9PSBhLmN1cnNvciAmJiAobyA9IHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLCB0aGlzLnN0b3JlZEN1cnNvciA9IG8uY3NzKCJjdXJzb3IiKSwgby5jc3MoImN1cnNvciIsIGEuY3Vyc29yKSwgdGhpcy5zdG9yZWRTdHlsZXNoZWV0ID0gdCgiPHN0eWxlPip7IGN1cnNvcjogIiArIGEuY3Vyc29yICsgIiAhaW1wb3J0YW50OyB9PC9zdHlsZT4iKS5hcHBlbmRUbyhvKSksIGEub3BhY2l0eSAmJiAodGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikgJiYgKHRoaXMuX3N0b3JlZE9wYWNpdHkgPSB0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSksIHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsIGEub3BhY2l0eSkpLCBhLnpJbmRleCAmJiAodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSAmJiAodGhpcy5fc3RvcmVkWkluZGV4ID0gdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSksIHRoaXMuaGVscGVyLmNzcygiekluZGV4IiwgYS56SW5kZXgpKSwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmICJIVE1MIiAhPT0gdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSAmJiAodGhpcy5vdmVyZmxvd09mZnNldCA9IHRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSwgdGhpcy5fdHJpZ2dlcigic3RhcnQiLCBlLCB0aGlzLl91aUhhc2goKSksIHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnMgfHwgdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCAhcykgZm9yIChuID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSB0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoImFjdGl2YXRlIiwgZSwgdGhpcy5fdWlIYXNoKHRoaXMpKTsgcmV0dXJuIHQudWkuZGRtYW5hZ2VyICYmICh0LnVpLmRkbWFuYWdlci5jdXJyZW50ID0gdGhpcyksIHQudWkuZGRtYW5hZ2VyICYmICFhLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcywgZSksIHRoaXMuZHJhZ2dpbmcgPSAhMCwgdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLCB0aGlzLl9tb3VzZURyYWcoZSksICEwIH0sIF9tb3VzZURyYWc6IGZ1bmN0aW9uIChlKSB7IHZhciBpLCBzLCBuLCBvLCBhID0gdGhpcy5vcHRpb25zLCByID0gITE7IGZvciAodGhpcy5wb3NpdGlvbiA9IHRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSksIHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwgdGhpcy5sYXN0UG9zaXRpb25BYnMgfHwgKHRoaXMubGFzdFBvc2l0aW9uQWJzID0gdGhpcy5wb3NpdGlvbkFicyksIHRoaXMub3B0aW9ucy5zY3JvbGwgJiYgKHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiAiSFRNTCIgIT09IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUgPyAodGhpcy5vdmVyZmxvd09mZnNldC50b3AgKyB0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQgLSBlLnBhZ2VZIDwgYS5zY3JvbGxTZW5zaXRpdml0eSA/IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCA9IHIgPSB0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AgKyBhLnNjcm9sbFNwZWVkIDogZS5wYWdlWSAtIHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wID0gciA9IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCAtIGEuc2Nyb2xsU3BlZWQpLCB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgKyB0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aCAtIGUucGFnZVggPCBhLnNjcm9sbFNlbnNpdGl2aXR5ID8gdGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCA9IHIgPSB0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0ICsgYS5zY3JvbGxTcGVlZCA6IGUucGFnZVggLSB0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQgPCBhLnNjcm9sbFNlbnNpdGl2aXR5ICYmICh0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0ID0gciA9IHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQgLSBhLnNjcm9sbFNwZWVkKSkgOiAoZS5wYWdlWSAtIHQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSA/IHIgPSB0KGRvY3VtZW50KS5zY3JvbGxUb3AodChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgLSBhLnNjcm9sbFNwZWVkKSA6IHQod2luZG93KS5oZWlnaHQoKSAtIChlLnBhZ2VZIC0gdChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAociA9IHQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSArIGEuc2Nyb2xsU3BlZWQpKSwgZS5wYWdlWCAtIHQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSA8IGEuc2Nyb2xsU2Vuc2l0aXZpdHkgPyByID0gdChkb2N1bWVudCkuc2Nyb2xsTGVmdCh0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkgLSBhLnNjcm9sbFNwZWVkKSA6IHQod2luZG93KS53aWR0aCgpIC0gKGUucGFnZVggLSB0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpIDwgYS5zY3JvbGxTZW5zaXRpdml0eSAmJiAociA9IHQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpICsgYS5zY3JvbGxTcGVlZCkpKSwgciAhPT0gITEgJiYgdC51aS5kZG1hbmFnZXIgJiYgIWEuZHJvcEJlaGF2aW91ciAmJiB0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLCBlKSksIHRoaXMucG9zaXRpb25BYnMgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwgdGhpcy5vcHRpb25zLmF4aXMgJiYgInkiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCAodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdCA9IHRoaXMucG9zaXRpb24ubGVmdCArICJweCIpLCB0aGlzLm9wdGlvbnMuYXhpcyAmJiAieCIgPT09IHRoaXMub3B0aW9ucy5heGlzIHx8ICh0aGlzLmhlbHBlclswXS5zdHlsZS50b3AgPSB0aGlzLnBvc2l0aW9uLnRvcCArICJweCIpLCBpID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKHMgPSB0aGlzLml0ZW1zW2ldLCBuID0gcy5pdGVtWzBdLCBvID0gdGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpLCBvICYmIHMuaW5zdGFuY2UgPT09IHRoaXMuY3VycmVudENvbnRhaW5lciAmJiBuICE9PSB0aGlzLmN1cnJlbnRJdGVtWzBdICYmIHRoaXMucGxhY2Vob2xkZXJbMSA9PT0gbyA/ICJuZXh0IiA6ICJwcmV2Il0oKVswXSAhPT0gbiAmJiAhdC5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLCBuKSAmJiAoInNlbWktZHluYW1pYyIgPT09IHRoaXMub3B0aW9ucy50eXBlID8gIXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLCBuKSA6ICEwKSkgeyBpZiAodGhpcy5kaXJlY3Rpb24gPSAxID09PSBvID8gImRvd24iIDogInVwIiwgInBvaW50ZXIiICE9PSB0aGlzLm9wdGlvbnMudG9sZXJhbmNlICYmICF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKSBicmVhazsgdGhpcy5fcmVhcnJhbmdlKGUsIHMpLCB0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLCBlLCB0aGlzLl91aUhhc2goKSk7IGJyZWFrIH0gcmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGUpLCB0LnVpLmRkbWFuYWdlciAmJiB0LnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsIGUpLCB0aGlzLl90cmlnZ2VyKCJzb3J0IiwgZSwgdGhpcy5fdWlIYXNoKCkpLCB0aGlzLmxhc3RQb3NpdGlvbkFicyA9IHRoaXMucG9zaXRpb25BYnMsICExIH0sIF9tb3VzZVN0b3A6IGZ1bmN0aW9uIChlLCBpKSB7IGlmIChlKSB7IGlmICh0LnVpLmRkbWFuYWdlciAmJiAhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXIgJiYgdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLCBlKSwgdGhpcy5vcHRpb25zLnJldmVydCkgeyB2YXIgcyA9IHRoaXMsIG4gPSB0aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLCBvID0gdGhpcy5vcHRpb25zLmF4aXMsIGEgPSB7fTsgbyAmJiAieCIgIT09IG8gfHwgKGEubGVmdCA9IG4ubGVmdCAtIHRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0IC0gdGhpcy5tYXJnaW5zLmxlZnQgKyAodGhpcy5vZmZzZXRQYXJlbnRbMF0gPT09IGRvY3VtZW50LmJvZHkgPyAwIDogdGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLCBvICYmICJ5IiAhPT0gbyB8fCAoYS50b3AgPSBuLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgLSB0aGlzLm1hcmdpbnMudG9wICsgKHRoaXMub2Zmc2V0UGFyZW50WzBdID09PSBkb2N1bWVudC5ib2R5ID8gMCA6IHRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbFRvcCkpLCB0aGlzLnJldmVydGluZyA9ICEwLCB0KHRoaXMuaGVscGVyKS5hbmltYXRlKGEsIHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsIDEwKSB8fCA1MDAsIGZ1bmN0aW9uICgpIHsgcy5fY2xlYXIoZSkgfSkgfSBlbHNlIHRoaXMuX2NsZWFyKGUsIGkpOyByZXR1cm4gITEgfSB9LCBjYW5jZWw6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMuZHJhZ2dpbmcpIHsgdGhpcy5fbW91c2VVcCh7IHRhcmdldDogbnVsbCB9KSwgIm9yaWdpbmFsIiA9PT0gdGhpcy5vcHRpb25zLmhlbHBlciA/IHRoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpIDogdGhpcy5jdXJyZW50SXRlbS5zaG93KCk7IGZvciAodmFyIGUgPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgZSA+PSAwOyBlLS0pIHRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsIG51bGwsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyICYmICh0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoIm91dCIsIG51bGwsIHRoaXMuX3VpSGFzaCh0aGlzKSksIHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyID0gMCkgfSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlciAmJiAodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlICYmIHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwgIm9yaWdpbmFsIiAhPT0gdGhpcy5vcHRpb25zLmhlbHBlciAmJiB0aGlzLmhlbHBlciAmJiB0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlICYmIHRoaXMuaGVscGVyLnJlbW92ZSgpLCB0LmV4dGVuZCh0aGlzLCB7IGhlbHBlcjogbnVsbCwgZHJhZ2dpbmc6ICExLCByZXZlcnRpbmc6ICExLCBfbm9GaW5hbFNvcnQ6IG51bGwgfSksIHRoaXMuZG9tUG9zaXRpb24ucHJldiA/IHQodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKSA6IHQodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLCB0aGlzIH0sIHNlcmlhbGl6ZTogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUgJiYgZS5jb25uZWN0ZWQpLCBzID0gW107IHJldHVybiBlID0gZSB8fCB7fSwgdChpKS5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGkgPSAodChlLml0ZW0gfHwgdGhpcykuYXR0cihlLmF0dHJpYnV0ZSB8fCAiaWQiKSB8fCAiIikubWF0Y2goZS5leHByZXNzaW9uIHx8IC8oLispW1wtPV9dKC4rKS8pOyBpICYmIHMucHVzaCgoZS5rZXkgfHwgaVsxXSArICJbXSIpICsgIj0iICsgKGUua2V5ICYmIGUuZXhwcmVzc2lvbiA/IGlbMV0gOiBpWzJdKSkgfSksICFzLmxlbmd0aCAmJiBlLmtleSAmJiBzLnB1c2goZS5rZXkgKyAiPSIpLCBzLmpvaW4oIiYiKSB9LCB0b0FycmF5OiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZSAmJiBlLmNvbm5lY3RlZCksIHMgPSBbXTsgcmV0dXJuIGUgPSBlIHx8IHt9LCBpLmVhY2goZnVuY3Rpb24gKCkgeyBzLnB1c2godChlLml0ZW0gfHwgdGhpcykuYXR0cihlLmF0dHJpYnV0ZSB8fCAiaWQiKSB8fCAiIikgfSksIHMgfSwgX2ludGVyc2VjdHNXaXRoOiBmdW5jdGlvbiAodCkgeyB2YXIgZSA9IHRoaXMucG9zaXRpb25BYnMubGVmdCwgaSA9IGUgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLCBzID0gdGhpcy5wb3NpdGlvbkFicy50b3AsIG4gPSBzICsgdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsIG8gPSB0LmxlZnQsIGEgPSBvICsgdC53aWR0aCwgciA9IHQudG9wLCBoID0gciArIHQuaGVpZ2h0LCBsID0gdGhpcy5vZmZzZXQuY2xpY2sudG9wLCBjID0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCwgdSA9ICJ4IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgcyArIGwgPiByICYmIGggPiBzICsgbCwgZCA9ICJ5IiA9PT0gdGhpcy5vcHRpb25zLmF4aXMgfHwgZSArIGMgPiBvICYmIGEgPiBlICsgYywgcCA9IHUgJiYgZDsgcmV0dXJuICJwb2ludGVyIiA9PT0gdGhpcy5vcHRpb25zLnRvbGVyYW5jZSB8fCB0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVycyB8fCAicG9pbnRlciIgIT09IHRoaXMub3B0aW9ucy50b2xlcmFuY2UgJiYgdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nID8gIndpZHRoIiA6ICJoZWlnaHQiXSA+IHRbdGhpcy5mbG9hdGluZyA/ICJ3aWR0aCIgOiAiaGVpZ2h0Il0gPyBwIDogZSArIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyID4gbyAmJiBhID4gaSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLyAyICYmIHMgKyB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAvIDIgPiByICYmIGggPiBuIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLyAyIH0sIF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6IGZ1bmN0aW9uICh0KSB7IHZhciBpID0gIngiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCBlKHRoaXMucG9zaXRpb25BYnMudG9wICsgdGhpcy5vZmZzZXQuY2xpY2sudG9wLCB0LnRvcCwgdC5oZWlnaHQpLCBzID0gInkiID09PSB0aGlzLm9wdGlvbnMuYXhpcyB8fCBlKHRoaXMucG9zaXRpb25BYnMubGVmdCArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIHQubGVmdCwgdC53aWR0aCksIG4gPSBpICYmIHMsIG8gPSB0aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSwgYSA9IHRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7IHJldHVybiBuID8gdGhpcy5mbG9hdGluZyA/IGEgJiYgInJpZ2h0IiA9PT0gYSB8fCAiZG93biIgPT09IG8gPyAyIDogMSA6IG8gJiYgKCJkb3duIiA9PT0gbyA/IDIgOiAxKSA6ICExIH0sIF9pbnRlcnNlY3RzV2l0aFNpZGVzOiBmdW5jdGlvbiAodCkgeyB2YXIgaSA9IGUodGhpcy5wb3NpdGlvbkFicy50b3AgKyB0aGlzLm9mZnNldC5jbGljay50b3AsIHQudG9wICsgdC5oZWlnaHQgLyAyLCB0LmhlaWdodCksIHMgPSBlKHRoaXMucG9zaXRpb25BYnMubGVmdCArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsIHQubGVmdCArIHQud2lkdGggLyAyLCB0LndpZHRoKSwgbiA9IHRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLCBvID0gdGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTsgcmV0dXJuIHRoaXMuZmxvYXRpbmcgJiYgbyA/ICJyaWdodCIgPT09IG8gJiYgcyB8fCAibGVmdCIgPT09IG8gJiYgIXMgOiBuICYmICgiZG93biIgPT09IG4gJiYgaSB8fCAidXAiID09PSBuICYmICFpKSB9LCBfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOiBmdW5jdGlvbiAoKSB7IHZhciB0ID0gdGhpcy5wb3NpdGlvbkFicy50b3AgLSB0aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7IHJldHVybiAwICE9PSB0ICYmICh0ID4gMCA/ICJkb3duIiA6ICJ1cCIpIH0sIF9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMucG9zaXRpb25BYnMubGVmdCAtIHRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7IHJldHVybiAwICE9PSB0ICYmICh0ID4gMCA/ICJyaWdodCIgOiAibGVmdCIpIH0sIHJlZnJlc2g6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLl9yZWZyZXNoSXRlbXModCksIHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLCB0aGlzIH0sIF9jb25uZWN0V2l0aDogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMub3B0aW9uczsgcmV0dXJuIHQuY29ubmVjdFdpdGguY29uc3RydWN0b3IgPT09IFN0cmluZyA/IFt0LmNvbm5lY3RXaXRoXSA6IHQuY29ubmVjdFdpdGggfSwgX2dldEl0ZW1zQXNqUXVlcnk6IGZ1bmN0aW9uIChlKSB7IGZ1bmN0aW9uIGkoKSB7IHIucHVzaCh0aGlzKSB9IHZhciBzLCBuLCBvLCBhLCByID0gW10sIGggPSBbXSwgbCA9IHRoaXMuX2Nvbm5lY3RXaXRoKCk7IGlmIChsICYmIGUpIGZvciAocyA9IGwubGVuZ3RoIC0gMTsgcyA+PSAwOyBzLS0pIGZvciAobyA9IHQobFtzXSksIG4gPSBvLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBhID0gdC5kYXRhKG9bbl0sIHRoaXMud2lkZ2V0RnVsbE5hbWUpLCBhICYmIGEgIT09IHRoaXMgJiYgIWEub3B0aW9ucy5kaXNhYmxlZCAmJiBoLnB1c2goW3QuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpID8gYS5vcHRpb25zLml0ZW1zLmNhbGwoYS5lbGVtZW50KSA6IHQoYS5vcHRpb25zLml0ZW1zLCBhLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksIGFdKTsgZm9yIChoLnB1c2goW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpID8gdGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LCBudWxsLCB7IG9wdGlvbnM6IHRoaXMub3B0aW9ucywgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQodGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksIHRoaXNdKSwgcyA9IGgubGVuZ3RoIC0gMTsgcyA+PSAwOyBzLS0pIGhbc11bMF0uZWFjaChpKTsgcmV0dXJuIHQocikgfSwgX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiICsgdGhpcy53aWRnZXROYW1lICsgIi1pdGVtKSIpOyB0aGlzLml0ZW1zID0gdC5ncmVwKHRoaXMuaXRlbXMsIGZ1bmN0aW9uICh0KSB7IGZvciAodmFyIGkgPSAwOyBlLmxlbmd0aCA+IGk7IGkrKykgaWYgKGVbaV0gPT09IHQuaXRlbVswXSkgcmV0dXJuICExOyByZXR1cm4gITAgfSkgfSwgX3JlZnJlc2hJdGVtczogZnVuY3Rpb24gKGUpIHsgdGhpcy5pdGVtcyA9IFtdLCB0aGlzLmNvbnRhaW5lcnMgPSBbdGhpc107IHZhciBpLCBzLCBuLCBvLCBhLCByLCBoLCBsLCBjID0gdGhpcy5pdGVtcywgdSA9IFtbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcykgPyB0aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sIGUsIHsgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQodGhpcy5vcHRpb25zLml0ZW1zLCB0aGlzLmVsZW1lbnQpLCB0aGlzXV0sIGQgPSB0aGlzLl9jb25uZWN0V2l0aCgpOyBpZiAoZCAmJiB0aGlzLnJlYWR5KSBmb3IgKGkgPSBkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBmb3IgKG4gPSB0KGRbaV0pLCBzID0gbi5sZW5ndGggLSAxOyBzID49IDA7IHMtLSkgbyA9IHQuZGF0YShuW3NdLCB0aGlzLndpZGdldEZ1bGxOYW1lKSwgbyAmJiBvICE9PSB0aGlzICYmICFvLm9wdGlvbnMuZGlzYWJsZWQgJiYgKHUucHVzaChbdC5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcykgPyBvLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnRbMF0sIGUsIHsgaXRlbTogdGhpcy5jdXJyZW50SXRlbSB9KSA6IHQoby5vcHRpb25zLml0ZW1zLCBvLmVsZW1lbnQpLCBvXSksIHRoaXMuY29udGFpbmVycy5wdXNoKG8pKTsgZm9yIChpID0gdS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgZm9yIChhID0gdVtpXVsxXSwgciA9IHVbaV1bMF0sIHMgPSAwLCBsID0gci5sZW5ndGg7IGwgPiBzOyBzKyspIGggPSB0KHJbc10pLCBoLmRhdGEodGhpcy53aWRnZXROYW1lICsgIi1pdGVtIiwgYSksIGMucHVzaCh7IGl0ZW06IGgsIGluc3RhbmNlOiBhLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBsZWZ0OiAwLCB0b3A6IDAgfSkgfSwgcmVmcmVzaFBvc2l0aW9uczogZnVuY3Rpb24gKGUpIHsgdGhpcy5vZmZzZXRQYXJlbnQgJiYgdGhpcy5oZWxwZXIgJiYgKHRoaXMub2Zmc2V0LnBhcmVudCA9IHRoaXMuX2dldFBhcmVudE9mZnNldCgpKTsgdmFyIGksIHMsIG4sIG87IGZvciAoaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHMgPSB0aGlzLml0ZW1zW2ldLCBzLmluc3RhbmNlICE9PSB0aGlzLmN1cnJlbnRDb250YWluZXIgJiYgdGhpcy5jdXJyZW50Q29udGFpbmVyICYmIHMuaXRlbVswXSAhPT0gdGhpcy5jdXJyZW50SXRlbVswXSB8fCAobiA9IHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50ID8gdCh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCwgcy5pdGVtKSA6IHMuaXRlbSwgZSB8fCAocy53aWR0aCA9IG4ub3V0ZXJXaWR0aCgpLCBzLmhlaWdodCA9IG4ub3V0ZXJIZWlnaHQoKSksIG8gPSBuLm9mZnNldCgpLCBzLmxlZnQgPSBvLmxlZnQsIHMudG9wID0gby50b3ApOyBpZiAodGhpcy5vcHRpb25zLmN1c3RvbSAmJiB0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKSB0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwodGhpcyk7IGVsc2UgZm9yIChpID0gdGhpcy5jb250YWluZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBvID0gdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0ID0gby5sZWZ0LCB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wID0gby50b3AsIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aCA9IHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSwgdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7IHJldHVybiB0aGlzIH0sIF9jcmVhdGVQbGFjZWhvbGRlcjogZnVuY3Rpb24gKGUpIHsgZSA9IGUgfHwgdGhpczsgdmFyIGksIHMgPSBlLm9wdGlvbnM7IHMucGxhY2Vob2xkZXIgJiYgcy5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nIHx8IChpID0gcy5wbGFjZWhvbGRlciwgcy5wbGFjZWhvbGRlciA9IHsgZWxlbWVudDogZnVuY3Rpb24gKCkgeyB2YXIgcyA9IGUuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgbiA9IHQoIjwiICsgcyArICI+IiwgZS5kb2N1bWVudFswXSkuYWRkQ2xhc3MoaSB8fCBlLmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSArICIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7IHJldHVybiAidHIiID09PSBzID8gZS5jdXJyZW50SXRlbS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24gKCkgeyB0KCI8dGQ+JiMxNjA7PC90ZD4iLCBlLmRvY3VtZW50WzBdKS5hdHRyKCJjb2xzcGFuIiwgdCh0aGlzKS5hdHRyKCJjb2xzcGFuIikgfHwgMSkuYXBwZW5kVG8obikgfSkgOiAiaW1nIiA9PT0gcyAmJiBuLmF0dHIoInNyYyIsIGUuY3VycmVudEl0ZW0uYXR0cigic3JjIikpLCBpIHx8IG4uY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpLCBuIH0sIHVwZGF0ZTogZnVuY3Rpb24gKHQsIG4pIHsgKCFpIHx8IHMuZm9yY2VQbGFjZWhvbGRlclNpemUpICYmIChuLmhlaWdodCgpIHx8IG4uaGVpZ2h0KGUuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKSAtIHBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nVG9wIikgfHwgMCwgMTApIC0gcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKSB8fCAwLCAxMCkpLCBuLndpZHRoKCkgfHwgbi53aWR0aChlLmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKSAtIHBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nTGVmdCIpIHx8IDAsIDEwKSAtIHBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nUmlnaHQiKSB8fCAwLCAxMCkpKSB9IH0pLCBlLnBsYWNlaG9sZGVyID0gdChzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbChlLmVsZW1lbnQsIGUuY3VycmVudEl0ZW0pKSwgZS5jdXJyZW50SXRlbS5hZnRlcihlLnBsYWNlaG9sZGVyKSwgcy5wbGFjZWhvbGRlci51cGRhdGUoZSwgZS5wbGFjZWhvbGRlcikgfSwgX2NvbnRhY3RDb250YWluZXJzOiBmdW5jdGlvbiAocykgeyB2YXIgbiwgbywgYSwgciwgaCwgbCwgYywgdSwgZCwgcCwgZiA9IG51bGwsIGcgPSBudWxsOyBmb3IgKG4gPSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoIC0gMTsgbiA+PSAwOyBuLS0pIGlmICghdC5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLCB0aGlzLmNvbnRhaW5lcnNbbl0uZWxlbWVudFswXSkpIGlmICh0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUpKSB7IGlmIChmICYmIHQuY29udGFpbnModGhpcy5jb250YWluZXJzW25dLmVsZW1lbnRbMF0sIGYuZWxlbWVudFswXSkpIGNvbnRpbnVlOyBmID0gdGhpcy5jb250YWluZXJzW25dLCBnID0gbiB9IGVsc2UgdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLm92ZXIgJiYgKHRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcigib3V0IiwgcywgdGhpcy5fdWlIYXNoKHRoaXMpKSwgdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAwKTsgaWYgKGYpIGlmICgxID09PSB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoKSB0aGlzLmNvbnRhaW5lcnNbZ10uY29udGFpbmVyQ2FjaGUub3ZlciB8fCAodGhpcy5jb250YWluZXJzW2ddLl90cmlnZ2VyKCJvdmVyIiwgcywgdGhpcy5fdWlIYXNoKHRoaXMpKSwgdGhpcy5jb250YWluZXJzW2ddLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAxKTsgZWxzZSB7IGZvciAoYSA9IDFlNCwgciA9IG51bGwsIHAgPSBmLmZsb2F0aW5nIHx8IGkodGhpcy5jdXJyZW50SXRlbSksIGggPSBwID8gImxlZnQiIDogInRvcCIsIGwgPSBwID8gIndpZHRoIiA6ICJoZWlnaHQiLCBjID0gdGhpcy5wb3NpdGlvbkFic1toXSArIHRoaXMub2Zmc2V0LmNsaWNrW2hdLCBvID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxOyBvID49IDA7IG8tLSkgdC5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbZ10uZWxlbWVudFswXSwgdGhpcy5pdGVtc1tvXS5pdGVtWzBdKSAmJiB0aGlzLml0ZW1zW29dLml0ZW1bMF0gIT09IHRoaXMuY3VycmVudEl0ZW1bMF0gJiYgKCFwIHx8IGUodGhpcy5wb3NpdGlvbkFicy50b3AgKyB0aGlzLm9mZnNldC5jbGljay50b3AsIHRoaXMuaXRlbXNbb10udG9wLCB0aGlzLml0ZW1zW29dLmhlaWdodCkpICYmICh1ID0gdGhpcy5pdGVtc1tvXS5pdGVtLm9mZnNldCgpW2hdLCBkID0gITEsIE1hdGguYWJzKHUgLSBjKSA+IE1hdGguYWJzKHUgKyB0aGlzLml0ZW1zW29dW2xdIC0gYykgJiYgKGQgPSAhMCwgdSArPSB0aGlzLml0ZW1zW29dW2xdKSwgYSA+IE1hdGguYWJzKHUgLSBjKSAmJiAoYSA9IE1hdGguYWJzKHUgLSBjKSwgciA9IHRoaXMuaXRlbXNbb10sIHRoaXMuZGlyZWN0aW9uID0gZCA/ICJ1cCIgOiAiZG93biIpKTsgaWYgKCFyICYmICF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpIHJldHVybjsgaWYgKHRoaXMuY3VycmVudENvbnRhaW5lciA9PT0gdGhpcy5jb250YWluZXJzW2ddKSByZXR1cm47IHIgPyB0aGlzLl9yZWFycmFuZ2UocywgciwgbnVsbCwgITApIDogdGhpcy5fcmVhcnJhbmdlKHMsIG51bGwsIHRoaXMuY29udGFpbmVyc1tnXS5lbGVtZW50LCAhMCksIHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsIHMsIHRoaXMuX3VpSGFzaCgpKSwgdGhpcy5jb250YWluZXJzW2ddLl90cmlnZ2VyKCJjaGFuZ2UiLCBzLCB0aGlzLl91aUhhc2godGhpcykpLCB0aGlzLmN1cnJlbnRDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lcnNbZ10sIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLCB0aGlzLnBsYWNlaG9sZGVyKSwgdGhpcy5jb250YWluZXJzW2ddLl90cmlnZ2VyKCJvdmVyIiwgcywgdGhpcy5fdWlIYXNoKHRoaXMpKSwgdGhpcy5jb250YWluZXJzW2ddLmNvbnRhaW5lckNhY2hlLm92ZXIgPSAxIH0gfSwgX2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0aGlzLm9wdGlvbnMsIHMgPSB0LmlzRnVuY3Rpb24oaS5oZWxwZXIpID8gdChpLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sIFtlLCB0aGlzLmN1cnJlbnRJdGVtXSkpIDogImNsb25lIiA9PT0gaS5oZWxwZXIgPyB0aGlzLmN1cnJlbnRJdGVtLmNsb25lKCkgOiB0aGlzLmN1cnJlbnRJdGVtOyByZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RoIHx8IHQoInBhcmVudCIgIT09IGkuYXBwZW5kVG8gPyBpLmFwcGVuZFRvIDogdGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChzWzBdKSwgc1swXSA9PT0gdGhpcy5jdXJyZW50SXRlbVswXSAmJiAodGhpcy5fc3RvcmVkQ1NTID0geyB3aWR0aDogdGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCwgaGVpZ2h0OiB0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCwgcG9zaXRpb246IHRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLCB0b3A6IHRoaXMuY3VycmVudEl0ZW0uY3NzKCJ0b3AiKSwgbGVmdDogdGhpcy5jdXJyZW50SXRlbS5jc3MoImxlZnQiKSB9KSwgKCFzWzBdLnN0eWxlLndpZHRoIHx8IGkuZm9yY2VIZWxwZXJTaXplKSAmJiBzLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksICghc1swXS5zdHlsZS5oZWlnaHQgfHwgaS5mb3JjZUhlbHBlclNpemUpICYmIHMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLCBzIH0sIF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOiBmdW5jdGlvbiAoZSkgeyAic3RyaW5nIiA9PSB0eXBlb2YgZSAmJiAoZSA9IGUuc3BsaXQoIiAiKSksIHQuaXNBcnJheShlKSAmJiAoZSA9IHsgbGVmdDogK2VbMF0sIHRvcDogK2VbMV0gfHwgMCB9KSwgImxlZnQiIGluIGUgJiYgKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPSBlLmxlZnQgKyB0aGlzLm1hcmdpbnMubGVmdCksICJyaWdodCIgaW4gZSAmJiAodGhpcy5vZmZzZXQuY2xpY2subGVmdCA9IHRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGggLSBlLnJpZ2h0ICsgdGhpcy5tYXJnaW5zLmxlZnQpLCAidG9wIiBpbiBlICYmICh0aGlzLm9mZnNldC5jbGljay50b3AgPSBlLnRvcCArIHRoaXMubWFyZ2lucy50b3ApLCAiYm90dG9tIiBpbiBlICYmICh0aGlzLm9mZnNldC5jbGljay50b3AgPSB0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCAtIGUuYm90dG9tICsgdGhpcy5tYXJnaW5zLnRvcCkgfSwgX2dldFBhcmVudE9mZnNldDogZnVuY3Rpb24gKCkgeyB0aGlzLm9mZnNldFBhcmVudCA9IHRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpOyB2YXIgZSA9IHRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpOyByZXR1cm4gImFic29sdXRlIiA9PT0gdGhpcy5jc3NQb3NpdGlvbiAmJiB0aGlzLnNjcm9sbFBhcmVudFswXSAhPT0gZG9jdW1lbnQgJiYgdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSwgdGhpcy5vZmZzZXRQYXJlbnRbMF0pICYmIChlLmxlZnQgKz0gdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLCBlLnRvcCArPSB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksICh0aGlzLm9mZnNldFBhcmVudFswXSA9PT0gZG9jdW1lbnQuYm9keSB8fCB0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lICYmICJodG1sIiA9PT0gdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmIHQudWkuaWUpICYmIChlID0geyB0b3A6IDAsIGxlZnQ6IDAgfSksIHsgdG9wOiBlLnRvcCArIChwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksIDEwKSB8fCAwKSwgbGVmdDogZS5sZWZ0ICsgKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksIDEwKSB8fCAwKSB9IH0sIF9nZXRSZWxhdGl2ZU9mZnNldDogZnVuY3Rpb24gKCkgeyBpZiAoInJlbGF0aXZlIiA9PT0gdGhpcy5jc3NQb3NpdGlvbikgeyB2YXIgdCA9IHRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTsgcmV0dXJuIHsgdG9wOiB0LnRvcCAtIChwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLCAxMCkgfHwgMCkgKyB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSwgbGVmdDogdC5sZWZ0IC0gKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLCAxMCkgfHwgMCkgKyB0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkgfSB9IHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9IH0sIF9jYWNoZU1hcmdpbnM6IGZ1bmN0aW9uICgpIHsgdGhpcy5tYXJnaW5zID0geyBsZWZ0OiBwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLCAxMCkgfHwgMCwgdG9wOiBwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luVG9wIiksIDEwKSB8fCAwIH0gfSwgX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6IGZ1bmN0aW9uICgpIHsgdGhpcy5oZWxwZXJQcm9wb3J0aW9ucyA9IHsgd2lkdGg6IHRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSwgaGVpZ2h0OiB0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpIH0gfSwgX3NldENvbnRhaW5tZW50OiBmdW5jdGlvbiAoKSB7IHZhciBlLCBpLCBzLCBuID0gdGhpcy5vcHRpb25zOyAicGFyZW50IiA9PT0gbi5jb250YWlubWVudCAmJiAobi5jb250YWlubWVudCA9IHRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLCAoImRvY3VtZW50IiA9PT0gbi5jb250YWlubWVudCB8fCAid2luZG93IiA9PT0gbi5jb250YWlubWVudCkgJiYgKHRoaXMuY29udGFpbm1lbnQgPSBbMCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgLSB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCwgMCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCAtIHRoaXMub2Zmc2V0LnBhcmVudC50b3AsIHQoImRvY3VtZW50IiA9PT0gbi5jb250YWlubWVudCA/IGRvY3VtZW50IDogd2luZG93KS53aWR0aCgpIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIHRoaXMubWFyZ2lucy5sZWZ0LCAodCgiZG9jdW1lbnQiID09PSBuLmNvbnRhaW5tZW50ID8gZG9jdW1lbnQgOiB3aW5kb3cpLmhlaWdodCgpIHx8IGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQgLSB0aGlzLm1hcmdpbnMudG9wXSksIC9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChuLmNvbnRhaW5tZW50KSB8fCAoZSA9IHQobi5jb250YWlubWVudClbMF0sIGkgPSB0KG4uY29udGFpbm1lbnQpLm9mZnNldCgpLCBzID0gImhpZGRlbiIgIT09IHQoZSkuY3NzKCJvdmVyZmxvdyIpLCB0aGlzLmNvbnRhaW5tZW50ID0gW2kubGVmdCArIChwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksIDEwKSB8fCAwKSArIChwYXJzZUludCh0KGUpLmNzcygicGFkZGluZ0xlZnQiKSwgMTApIHx8IDApIC0gdGhpcy5tYXJnaW5zLmxlZnQsIGkudG9wICsgKHBhcnNlSW50KHQoZSkuY3NzKCJib3JkZXJUb3BXaWR0aCIpLCAxMCkgfHwgMCkgKyAocGFyc2VJbnQodChlKS5jc3MoInBhZGRpbmdUb3AiKSwgMTApIHx8IDApIC0gdGhpcy5tYXJnaW5zLnRvcCwgaS5sZWZ0ICsgKHMgPyBNYXRoLm1heChlLnNjcm9sbFdpZHRoLCBlLm9mZnNldFdpZHRoKSA6IGUub2Zmc2V0V2lkdGgpIC0gKHBhcnNlSW50KHQoZSkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwgMTApIHx8IDApIC0gKHBhcnNlSW50KHQoZSkuY3NzKCJwYWRkaW5nUmlnaHQiKSwgMTApIHx8IDApIC0gdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCAtIHRoaXMubWFyZ2lucy5sZWZ0LCBpLnRvcCArIChzID8gTWF0aC5tYXgoZS5zY3JvbGxIZWlnaHQsIGUub2Zmc2V0SGVpZ2h0KSA6IGUub2Zmc2V0SGVpZ2h0KSAtIChwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwgMTApIHx8IDApIC0gKHBhcnNlSW50KHQoZSkuY3NzKCJwYWRkaW5nQm90dG9tIiksIDEwKSB8fCAwKSAtIHRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0IC0gdGhpcy5tYXJnaW5zLnRvcF0pIH0sIF9jb252ZXJ0UG9zaXRpb25UbzogZnVuY3Rpb24gKGUsIGkpIHsgaSB8fCAoaSA9IHRoaXMucG9zaXRpb24pOyB2YXIgcyA9ICJhYnNvbHV0ZSIgPT09IGUgPyAxIDogLTEsIG4gPSAiYWJzb2x1dGUiICE9PSB0aGlzLmNzc1Bvc2l0aW9uIHx8IHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiB0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLCB0aGlzLm9mZnNldFBhcmVudFswXSkgPyB0aGlzLnNjcm9sbFBhcmVudCA6IHRoaXMub2Zmc2V0UGFyZW50LCBvID0gLyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpOyByZXR1cm4geyB0b3A6IGkudG9wICsgdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wICogcyArIHRoaXMub2Zmc2V0LnBhcmVudC50b3AgKiBzIC0gKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOiBvID8gMCA6IG4uc2Nyb2xsVG9wKCkpICogcywgbGVmdDogaS5sZWZ0ICsgdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCAqIHMgKyB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCAqIHMgLSAoImZpeGVkIiA9PT0gdGhpcy5jc3NQb3NpdGlvbiA/IC10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkgOiBvID8gMCA6IG4uc2Nyb2xsTGVmdCgpKSAqIHMgfSB9LCBfZ2VuZXJhdGVQb3NpdGlvbjogZnVuY3Rpb24gKGUpIHsgdmFyIGksIHMsIG4gPSB0aGlzLm9wdGlvbnMsIG8gPSBlLnBhZ2VYLCBhID0gZS5wYWdlWSwgciA9ICJhYnNvbHV0ZSIgIT09IHRoaXMuY3NzUG9zaXRpb24gfHwgdGhpcy5zY3JvbGxQYXJlbnRbMF0gIT09IGRvY3VtZW50ICYmIHQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sIHRoaXMub2Zmc2V0UGFyZW50WzBdKSA/IHRoaXMuc2Nyb2xsUGFyZW50IDogdGhpcy5vZmZzZXRQYXJlbnQsIGggPSAvKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7IHJldHVybiAicmVsYXRpdmUiICE9PSB0aGlzLmNzc1Bvc2l0aW9uIHx8IHRoaXMuc2Nyb2xsUGFyZW50WzBdICE9PSBkb2N1bWVudCAmJiB0aGlzLnNjcm9sbFBhcmVudFswXSAhPT0gdGhpcy5vZmZzZXRQYXJlbnRbMF0gfHwgKHRoaXMub2Zmc2V0LnJlbGF0aXZlID0gdGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSksIHRoaXMub3JpZ2luYWxQb3NpdGlvbiAmJiAodGhpcy5jb250YWlubWVudCAmJiAoZS5wYWdlWCAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPCB0aGlzLmNvbnRhaW5tZW50WzBdICYmIChvID0gdGhpcy5jb250YWlubWVudFswXSArIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLCBlLnBhZ2VZIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wIDwgdGhpcy5jb250YWlubWVudFsxXSAmJiAoYSA9IHRoaXMuY29udGFpbm1lbnRbMV0gKyB0aGlzLm9mZnNldC5jbGljay50b3ApLCBlLnBhZ2VYIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA+IHRoaXMuY29udGFpbm1lbnRbMl0gJiYgKG8gPSB0aGlzLmNvbnRhaW5tZW50WzJdICsgdGhpcy5vZmZzZXQuY2xpY2subGVmdCksIGUucGFnZVkgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPiB0aGlzLmNvbnRhaW5tZW50WzNdICYmIChhID0gdGhpcy5jb250YWlubWVudFszXSArIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLCBuLmdyaWQgJiYgKGkgPSB0aGlzLm9yaWdpbmFsUGFnZVkgKyBNYXRoLnJvdW5kKChhIC0gdGhpcy5vcmlnaW5hbFBhZ2VZKSAvIG4uZ3JpZFsxXSkgKiBuLmdyaWRbMV0sIGEgPSB0aGlzLmNvbnRhaW5tZW50ID8gaSAtIHRoaXMub2Zmc2V0LmNsaWNrLnRvcCA+PSB0aGlzLmNvbnRhaW5tZW50WzFdICYmIGkgLSB0aGlzLm9mZnNldC5jbGljay50b3AgPD0gdGhpcy5jb250YWlubWVudFszXSA/IGkgOiBpIC0gdGhpcy5vZmZzZXQuY2xpY2sudG9wID49IHRoaXMuY29udGFpbm1lbnRbMV0gPyBpIC0gbi5ncmlkWzFdIDogaSArIG4uZ3JpZFsxXSA6IGksIHMgPSB0aGlzLm9yaWdpbmFsUGFnZVggKyBNYXRoLnJvdW5kKChvIC0gdGhpcy5vcmlnaW5hbFBhZ2VYKSAvIG4uZ3JpZFswXSkgKiBuLmdyaWRbMF0sIG8gPSB0aGlzLmNvbnRhaW5tZW50ID8gcyAtIHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQgPj0gdGhpcy5jb250YWlubWVudFswXSAmJiBzIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCA8PSB0aGlzLmNvbnRhaW5tZW50WzJdID8gcyA6IHMgLSB0aGlzLm9mZnNldC5jbGljay5sZWZ0ID49IHRoaXMuY29udGFpbm1lbnRbMF0gPyBzIC0gbi5ncmlkWzBdIDogcyArIG4uZ3JpZFswXSA6IHMpKSwgeyB0b3A6IGEgLSB0aGlzLm9mZnNldC5jbGljay50b3AgLSB0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AgLSB0aGlzLm9mZnNldC5wYXJlbnQudG9wICsgKCJmaXhlZCIgPT09IHRoaXMuY3NzUG9zaXRpb24gPyAtdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkgOiBoID8gMCA6IHIuc2Nyb2xsVG9wKCkpLCBsZWZ0OiBvIC0gdGhpcy5vZmZzZXQuY2xpY2subGVmdCAtIHRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQgLSB0aGlzLm9mZnNldC5wYXJlbnQubGVmdCArICgiZml4ZWQiID09PSB0aGlzLmNzc1Bvc2l0aW9uID8gLXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSA6IGggPyAwIDogci5zY3JvbGxMZWZ0KCkpIH0gfSwgX3JlYXJyYW5nZTogZnVuY3Rpb24gKHQsIGUsIGksIHMpIHsgaSA/IGlbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSkgOiBlLml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSwgImRvd24iID09PSB0aGlzLmRpcmVjdGlvbiA/IGUuaXRlbVswXSA6IGUuaXRlbVswXS5uZXh0U2libGluZyksIHRoaXMuY291bnRlciA9IHRoaXMuY291bnRlciA/ICsrdGhpcy5jb3VudGVyIDogMTsgdmFyIG4gPSB0aGlzLmNvdW50ZXI7IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgbiA9PT0gdGhpcy5jb3VudGVyICYmIHRoaXMucmVmcmVzaFBvc2l0aW9ucyghcykgfSkgfSwgX2NsZWFyOiBmdW5jdGlvbiAodCwgZSkgeyBmdW5jdGlvbiBpKHQsIGUsIGkpIHsgcmV0dXJuIGZ1bmN0aW9uIChzKSB7IGkuX3RyaWdnZXIodCwgcywgZS5fdWlIYXNoKGUpKSB9IH0gdGhpcy5yZXZlcnRpbmcgPSAhMTsgdmFyIHMsIG4gPSBbXTsgaWYgKCF0aGlzLl9ub0ZpbmFsU29ydCAmJiB0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpLmxlbmd0aCAmJiB0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSwgdGhpcy5fbm9GaW5hbFNvcnQgPSBudWxsLCB0aGlzLmhlbHBlclswXSA9PT0gdGhpcy5jdXJyZW50SXRlbVswXSkgeyBmb3IgKHMgaW4gdGhpcy5fc3RvcmVkQ1NTKSAoImF1dG8iID09PSB0aGlzLl9zdG9yZWRDU1Nbc10gfHwgInN0YXRpYyIgPT09IHRoaXMuX3N0b3JlZENTU1tzXSkgJiYgKHRoaXMuX3N0b3JlZENTU1tzXSA9ICIiKTsgdGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIikgfSBlbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpOyBmb3IgKHRoaXMuZnJvbU91dHNpZGUgJiYgIWUgJiYgbi5wdXNoKGZ1bmN0aW9uICh0KSB7IHRoaXMuX3RyaWdnZXIoInJlY2VpdmUiLCB0LCB0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpIH0pLCAhdGhpcy5mcm9tT3V0c2lkZSAmJiB0aGlzLmRvbVBvc2l0aW9uLnByZXYgPT09IHRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpWzBdICYmIHRoaXMuZG9tUG9zaXRpb24ucGFyZW50ID09PSB0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdIHx8IGUgfHwgbi5wdXNoKGZ1bmN0aW9uICh0KSB7IHRoaXMuX3RyaWdnZXIoInVwZGF0ZSIsIHQsIHRoaXMuX3VpSGFzaCgpKSB9KSwgdGhpcyAhPT0gdGhpcy5jdXJyZW50Q29udGFpbmVyICYmIChlIHx8IChuLnB1c2goZnVuY3Rpb24gKHQpIHsgdGhpcy5fdHJpZ2dlcigicmVtb3ZlIiwgdCwgdGhpcy5fdWlIYXNoKCkpIH0pLCBuLnB1c2goZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHQuX3RyaWdnZXIoInJlY2VpdmUiLCBlLCB0aGlzLl91aUhhc2godGhpcykpIH0gfS5jYWxsKHRoaXMsIHRoaXMuY3VycmVudENvbnRhaW5lcikpLCBuLnB1c2goZnVuY3Rpb24gKHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChlKSB7IHQuX3RyaWdnZXIoInVwZGF0ZSIsIGUsIHRoaXMuX3VpSGFzaCh0aGlzKSkgfSB9LmNhbGwodGhpcywgdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKSwgcyA9IHRoaXMuY29udGFpbmVycy5sZW5ndGggLSAxOyBzID49IDA7IHMtLSkgZSB8fCBuLnB1c2goaSgiZGVhY3RpdmF0ZSIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1tzXSkpLCB0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3ZlciAmJiAobi5wdXNoKGkoIm91dCIsIHRoaXMsIHRoaXMuY29udGFpbmVyc1tzXSkpLCB0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3ZlciA9IDApOyBpZiAodGhpcy5zdG9yZWRDdXJzb3IgJiYgKHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLmNzcygiY3Vyc29yIiwgdGhpcy5zdG9yZWRDdXJzb3IpLCB0aGlzLnN0b3JlZFN0eWxlc2hlZXQucmVtb3ZlKCkpLCB0aGlzLl9zdG9yZWRPcGFjaXR5ICYmIHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsIHRoaXMuX3N0b3JlZE9wYWNpdHkpLCB0aGlzLl9zdG9yZWRaSW5kZXggJiYgdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLCAiYXV0byIgPT09IHRoaXMuX3N0b3JlZFpJbmRleCA/ICIiIDogdGhpcy5fc3RvcmVkWkluZGV4KSwgdGhpcy5kcmFnZ2luZyA9ICExLCB0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpIHsgaWYgKCFlKSB7IGZvciAodGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsIHQsIHRoaXMuX3VpSGFzaCgpKSwgcyA9IDA7IG4ubGVuZ3RoID4gczsgcysrKSBuW3NdLmNhbGwodGhpcywgdCk7IHRoaXMuX3RyaWdnZXIoInN0b3AiLCB0LCB0aGlzLl91aUhhc2goKSkgfSByZXR1cm4gdGhpcy5mcm9tT3V0c2lkZSA9ICExLCAhMSB9IGlmIChlIHx8IHRoaXMuX3RyaWdnZXIoImJlZm9yZVN0b3AiLCB0LCB0aGlzLl91aUhhc2goKSksIHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwgdGhpcy5oZWxwZXJbMF0gIT09IHRoaXMuY3VycmVudEl0ZW1bMF0gJiYgdGhpcy5oZWxwZXIucmVtb3ZlKCksIHRoaXMuaGVscGVyID0gbnVsbCwgIWUpIHsgZm9yIChzID0gMDsgbi5sZW5ndGggPiBzOyBzKyspIG5bc10uY2FsbCh0aGlzLCB0KTsgdGhpcy5fdHJpZ2dlcigic3RvcCIsIHQsIHRoaXMuX3VpSGFzaCgpKSB9IHJldHVybiB0aGlzLmZyb21PdXRzaWRlID0gITEsICEwIH0sIF90cmlnZ2VyOiBmdW5jdGlvbiAoKSB7IHQuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpID09PSAhMSAmJiB0aGlzLmNhbmNlbCgpIH0sIF91aUhhc2g6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZSB8fCB0aGlzOyByZXR1cm4geyBoZWxwZXI6IGkuaGVscGVyLCBwbGFjZWhvbGRlcjogaS5wbGFjZWhvbGRlciB8fCB0KFtdKSwgcG9zaXRpb246IGkucG9zaXRpb24sIG9yaWdpbmFsUG9zaXRpb246IGkub3JpZ2luYWxQb3NpdGlvbiwgb2Zmc2V0OiBpLnBvc2l0aW9uQWJzLCBpdGVtOiBpLmN1cnJlbnRJdGVtLCBzZW5kZXI6IGUgPyBlLmVsZW1lbnQgOiBudWxsIH0gfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQpIHsgZnVuY3Rpb24gZSh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpcy5lbGVtZW50LnZhbCgpOyB0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuX3JlZnJlc2goKSwgZSAhPT0gdGhpcy5lbGVtZW50LnZhbCgpICYmIHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpIH0gfSB0LndpZGdldCgidWkuc3Bpbm5lciIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIGRlZmF1bHRFbGVtZW50OiAiPGlucHV0PiIsIHdpZGdldEV2ZW50UHJlZml4OiAic3BpbiIsIG9wdGlvbnM6IHsgY3VsdHVyZTogbnVsbCwgaWNvbnM6IHsgZG93bjogInVpLWljb24tdHJpYW5nbGUtMS1zIiwgdXA6ICJ1aS1pY29uLXRyaWFuZ2xlLTEtbiIgfSwgaW5jcmVtZW50YWw6ICEwLCBtYXg6IG51bGwsIG1pbjogbnVsbCwgbnVtYmVyRm9ybWF0OiBudWxsLCBwYWdlOiAxMCwgc3RlcDogMSwgY2hhbmdlOiBudWxsLCBzcGluOiBudWxsLCBzdGFydDogbnVsbCwgc3RvcDogbnVsbCB9LCBfY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHRoaXMuX3NldE9wdGlvbigibWF4IiwgdGhpcy5vcHRpb25zLm1heCksIHRoaXMuX3NldE9wdGlvbigibWluIiwgdGhpcy5vcHRpb25zLm1pbiksIHRoaXMuX3NldE9wdGlvbigic3RlcCIsIHRoaXMub3B0aW9ucy5zdGVwKSwgIiIgIT09IHRoaXMudmFsdWUoKSAmJiB0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksICEwKSwgdGhpcy5fZHJhdygpLCB0aGlzLl9vbih0aGlzLl9ldmVudHMpLCB0aGlzLl9yZWZyZXNoKCksIHRoaXMuX29uKHRoaXMud2luZG93LCB7IGJlZm9yZXVubG9hZDogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIikgfSB9KSB9LCBfZ2V0Q3JlYXRlT3B0aW9uczogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHt9LCBpID0gdGhpcy5lbGVtZW50OyByZXR1cm4gdC5lYWNoKFsibWluIiwgIm1heCIsICJzdGVwIl0sIGZ1bmN0aW9uICh0LCBzKSB7IHZhciBuID0gaS5hdHRyKHMpOyB2b2lkIDAgIT09IG4gJiYgbi5sZW5ndGggJiYgKGVbc10gPSBuKSB9KSwgZSB9LCBfZXZlbnRzOiB7IGtleWRvd246IGZ1bmN0aW9uICh0KSB7IHRoaXMuX3N0YXJ0KHQpICYmIHRoaXMuX2tleWRvd24odCkgJiYgdC5wcmV2ZW50RGVmYXVsdCgpIH0sIGtleXVwOiAiX3N0b3AiLCBmb2N1czogZnVuY3Rpb24gKCkgeyB0aGlzLnByZXZpb3VzID0gdGhpcy5lbGVtZW50LnZhbCgpIH0sIGJsdXI6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0aGlzLmNhbmNlbEJsdXIgPyAoZGVsZXRlIHRoaXMuY2FuY2VsQmx1ciwgdm9pZCAwKSA6ICh0aGlzLl9zdG9wKCksIHRoaXMuX3JlZnJlc2goKSwgdGhpcy5wcmV2aW91cyAhPT0gdGhpcy5lbGVtZW50LnZhbCgpICYmIHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsIHQpLCB2b2lkIDApIH0sIG1vdXNld2hlZWw6IGZ1bmN0aW9uICh0LCBlKSB7IGlmIChlKSB7IGlmICghdGhpcy5zcGlubmluZyAmJiAhdGhpcy5fc3RhcnQodCkpIHJldHVybiAhMTsgdGhpcy5fc3BpbigoZSA+IDAgPyAxIDogLTEpICogdGhpcy5vcHRpb25zLnN0ZXAsIHQpLCBjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLCB0aGlzLm1vdXNld2hlZWxUaW1lciA9IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5zcGlubmluZyAmJiB0aGlzLl9zdG9wKHQpIH0sIDEwMCksIHQucHJldmVudERlZmF1bHQoKSB9IH0sICJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjogZnVuY3Rpb24gKGUpIHsgZnVuY3Rpb24gaSgpIHsgdmFyIHQgPSB0aGlzLmVsZW1lbnRbMF0gPT09IHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudDsgdCB8fCAodGhpcy5lbGVtZW50LmZvY3VzKCksIHRoaXMucHJldmlvdXMgPSBzLCB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMucHJldmlvdXMgPSBzIH0pKSB9IHZhciBzOyBzID0gdGhpcy5lbGVtZW50WzBdID09PSB0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQgPyB0aGlzLnByZXZpb3VzIDogdGhpcy5lbGVtZW50LnZhbCgpLCBlLnByZXZlbnREZWZhdWx0KCksIGkuY2FsbCh0aGlzKSwgdGhpcy5jYW5jZWxCbHVyID0gITAsIHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgZGVsZXRlIHRoaXMuY2FuY2VsQmx1ciwgaS5jYWxsKHRoaXMpIH0pLCB0aGlzLl9zdGFydChlKSAhPT0gITEgJiYgdGhpcy5fcmVwZWF0KG51bGwsIHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpID8gMSA6IC0xLCBlKSB9LCAibW91c2V1cCAudWktc3Bpbm5lci1idXR0b24iOiAiX3N0b3AiLCAibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSA/IHRoaXMuX3N0YXJ0KGUpID09PSAhMSA/ICExIDogKHRoaXMuX3JlcGVhdChudWxsLCB0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXNwaW5uZXItdXAiKSA/IDEgOiAtMSwgZSksIHZvaWQgMCkgOiB2b2lkIDAgfSwgIm1vdXNlbGVhdmUgLnVpLXNwaW5uZXItYnV0dG9uIjogIl9zdG9wIiB9LCBfZHJhdzogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IHRoaXMudWlTcGlubmVyID0gdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zcGlubmVyLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwgIm9mZiIpLndyYXAodGhpcy5fdWlTcGlubmVySHRtbCgpKS5wYXJlbnQoKS5hcHBlbmQodGhpcy5fYnV0dG9uSHRtbCgpKTsgdGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCAic3BpbmJ1dHRvbiIpLCB0aGlzLmJ1dHRvbnMgPSB0LmZpbmQoIi51aS1zcGlubmVyLWJ1dHRvbiIpLmF0dHIoInRhYkluZGV4IiwgLTEpLmJ1dHRvbigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksIHRoaXMuYnV0dG9ucy5oZWlnaHQoKSA+IE1hdGguY2VpbCguNSAqIHQuaGVpZ2h0KCkpICYmIHQuaGVpZ2h0KCkgPiAwICYmIHQuaGVpZ2h0KHQuaGVpZ2h0KCkpLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgJiYgdGhpcy5kaXNhYmxlKCkgfSwgX2tleWRvd246IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zLCBzID0gdC51aS5rZXlDb2RlOyBzd2l0Y2ggKGUua2V5Q29kZSkgeyBjYXNlIHMuVVA6IHJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwgMSwgZSksICEwOyBjYXNlIHMuRE9XTjogcmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLCAtMSwgZSksICEwOyBjYXNlIHMuUEFHRV9VUDogcmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLCBpLnBhZ2UsIGUpLCAhMDsgY2FzZSBzLlBBR0VfRE9XTjogcmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLCAtaS5wYWdlLCBlKSwgITAgfSByZXR1cm4gITEgfSwgX3VpU3Bpbm5lckh0bWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiIgfSwgX2J1dHRvbkh0bWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICI8YSBjbGFzcz0ndWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci11cCB1aS1jb3JuZXItdHInPjxzcGFuIGNsYXNzPSd1aS1pY29uICIgKyB0aGlzLm9wdGlvbnMuaWNvbnMudXAgKyAiJz4mIzk2NTA7PC9zcGFuPiIgKyAiPC9hPiIgKyAiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIgKyAiPHNwYW4gY2xhc3M9J3VpLWljb24gIiArIHRoaXMub3B0aW9ucy5pY29ucy5kb3duICsgIic+JiM5NjYwOzwvc3Bhbj4iICsgIjwvYT4iIH0sIF9zdGFydDogZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHRoaXMuc3Bpbm5pbmcgfHwgdGhpcy5fdHJpZ2dlcigic3RhcnQiLCB0KSAhPT0gITEgPyAodGhpcy5jb3VudGVyIHx8ICh0aGlzLmNvdW50ZXIgPSAxKSwgdGhpcy5zcGlubmluZyA9ICEwLCAhMCkgOiAhMSB9LCBfcmVwZWF0OiBmdW5jdGlvbiAodCwgZSwgaSkgeyB0ID0gdCB8fCA1MDAsIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwgdGhpcy50aW1lciA9IHRoaXMuX2RlbGF5KGZ1bmN0aW9uICgpIHsgdGhpcy5fcmVwZWF0KDQwLCBlLCBpKSB9LCB0KSwgdGhpcy5fc3BpbihlICogdGhpcy5vcHRpb25zLnN0ZXAsIGkpIH0sIF9zcGluOiBmdW5jdGlvbiAodCwgZSkgeyB2YXIgaSA9IHRoaXMudmFsdWUoKSB8fCAwOyB0aGlzLmNvdW50ZXIgfHwgKHRoaXMuY291bnRlciA9IDEpLCBpID0gdGhpcy5fYWRqdXN0VmFsdWUoaSArIHQgKiB0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksIHRoaXMuc3Bpbm5pbmcgJiYgdGhpcy5fdHJpZ2dlcigic3BpbiIsIGUsIHsgdmFsdWU6IGkgfSkgPT09ICExIHx8ICh0aGlzLl92YWx1ZShpKSwgdGhpcy5jb3VudGVyKyspIH0sIF9pbmNyZW1lbnQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gdGhpcy5vcHRpb25zLmluY3JlbWVudGFsOyByZXR1cm4gaSA/IHQuaXNGdW5jdGlvbihpKSA/IGkoZSkgOiBNYXRoLmZsb29yKGUgKiBlICogZSAvIDVlNCAtIGUgKiBlIC8gNTAwICsgMTcgKiBlIC8gMjAwICsgMSkgOiAxIH0sIF9wcmVjaXNpb246IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7IHJldHVybiBudWxsICE9PSB0aGlzLm9wdGlvbnMubWluICYmICh0ID0gTWF0aC5tYXgodCwgdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSwgdCB9LCBfcHJlY2lzaW9uT2Y6IGZ1bmN0aW9uICh0KSB7IHZhciBlID0gIiIgKyB0LCBpID0gZS5pbmRleE9mKCIuIik7IHJldHVybiAtMSA9PT0gaSA/IDAgOiBlLmxlbmd0aCAtIGkgLSAxIH0sIF9hZGp1c3RWYWx1ZTogZnVuY3Rpb24gKHQpIHsgdmFyIGUsIGksIHMgPSB0aGlzLm9wdGlvbnM7IHJldHVybiBlID0gbnVsbCAhPT0gcy5taW4gPyBzLm1pbiA6IDAsIGkgPSB0IC0gZSwgaSA9IE1hdGgucm91bmQoaSAvIHMuc3RlcCkgKiBzLnN0ZXAsIHQgPSBlICsgaSwgdCA9IHBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksIG51bGwgIT09IHMubWF4ICYmIHQgPiBzLm1heCA/IHMubWF4IDogbnVsbCAhPT0gcy5taW4gJiYgcy5taW4gPiB0ID8gcy5taW4gOiB0IH0sIF9zdG9wOiBmdW5jdGlvbiAodCkgeyB0aGlzLnNwaW5uaW5nICYmIChjbGVhclRpbWVvdXQodGhpcy50aW1lciksIGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksIHRoaXMuY291bnRlciA9IDAsIHRoaXMuc3Bpbm5pbmcgPSAhMSwgdGhpcy5fdHJpZ2dlcigic3RvcCIsIHQpKSB9LCBfc2V0T3B0aW9uOiBmdW5jdGlvbiAodCwgZSkgeyBpZiAoImN1bHR1cmUiID09PSB0IHx8ICJudW1iZXJGb3JtYXQiID09PSB0KSB7IHZhciBpID0gdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKTsgcmV0dXJuIHRoaXMub3B0aW9uc1t0XSA9IGUsIHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKSwgdm9pZCAwIH0gKCJtYXgiID09PSB0IHx8ICJtaW4iID09PSB0IHx8ICJzdGVwIiA9PT0gdCkgJiYgInN0cmluZyIgPT0gdHlwZW9mIGUgJiYgKGUgPSB0aGlzLl9wYXJzZShlKSksICJpY29ucyIgPT09IHQgJiYgKHRoaXMuYnV0dG9ucy5maXJzdCgpLmZpbmQoIi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnVwKS5hZGRDbGFzcyhlLnVwKSwgdGhpcy5idXR0b25zLmxhc3QoKS5maW5kKCIudWktaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy5kb3duKS5hZGRDbGFzcyhlLmRvd24pKSwgdGhpcy5fc3VwZXIodCwgZSksICJkaXNhYmxlZCIgPT09IHQgJiYgKGUgPyAodGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwgITApLCB0aGlzLmJ1dHRvbnMuYnV0dG9uKCJkaXNhYmxlIikpIDogKHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsICExKSwgdGhpcy5idXR0b25zLmJ1dHRvbigiZW5hYmxlIikpKSB9LCBfc2V0T3B0aW9uczogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdXBlcih0KSwgdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpKSB9KSwgX3BhcnNlOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gInN0cmluZyIgPT0gdHlwZW9mIHQgJiYgIiIgIT09IHQgJiYgKHQgPSB3aW5kb3cuR2xvYmFsaXplICYmIHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQgPyBHbG9iYWxpemUucGFyc2VGbG9hdCh0LCAxMCwgdGhpcy5vcHRpb25zLmN1bHR1cmUpIDogK3QpLCAiIiA9PT0gdCB8fCBpc05hTih0KSA/IG51bGwgOiB0IH0sIF9mb3JtYXQ6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAiIiA9PT0gdCA/ICIiIDogd2luZG93Lkdsb2JhbGl6ZSAmJiB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0ID8gR2xvYmFsaXplLmZvcm1hdCh0LCB0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LCB0aGlzLm9wdGlvbnMuY3VsdHVyZSkgOiB0IH0sIF9yZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHRoaXMuZWxlbWVudC5hdHRyKHsgImFyaWEtdmFsdWVtaW4iOiB0aGlzLm9wdGlvbnMubWluLCAiYXJpYS12YWx1ZW1heCI6IHRoaXMub3B0aW9ucy5tYXgsICJhcmlhLXZhbHVlbm93IjogdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKSB9KSB9LCBfdmFsdWU6IGZ1bmN0aW9uICh0LCBlKSB7IHZhciBpOyAiIiAhPT0gdCAmJiAoaSA9IHRoaXMuX3BhcnNlKHQpLCBudWxsICE9PSBpICYmIChlIHx8IChpID0gdGhpcy5fYWRqdXN0VmFsdWUoaSkpLCB0ID0gdGhpcy5fZm9ybWF0KGkpKSksIHRoaXMuZWxlbWVudC52YWwodCksIHRoaXMuX3JlZnJlc2goKSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5wcm9wKCJkaXNhYmxlZCIsICExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksIHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCkgfSwgc3RlcFVwOiBlKGZ1bmN0aW9uICh0KSB7IHRoaXMuX3N0ZXBVcCh0KSB9KSwgX3N0ZXBVcDogZnVuY3Rpb24gKHQpIHsgdGhpcy5fc3RhcnQoKSAmJiAodGhpcy5fc3BpbigodCB8fCAxKSAqIHRoaXMub3B0aW9ucy5zdGVwKSwgdGhpcy5fc3RvcCgpKSB9LCBzdGVwRG93bjogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGVwRG93bih0KSB9KSwgX3N0ZXBEb3duOiBmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGFydCgpICYmICh0aGlzLl9zcGluKCh0IHx8IDEpICogLXRoaXMub3B0aW9ucy5zdGVwKSwgdGhpcy5fc3RvcCgpKSB9LCBwYWdlVXA6IGUoZnVuY3Rpb24gKHQpIHsgdGhpcy5fc3RlcFVwKCh0IHx8IDEpICogdGhpcy5vcHRpb25zLnBhZ2UpIH0pLCBwYWdlRG93bjogZShmdW5jdGlvbiAodCkgeyB0aGlzLl9zdGVwRG93bigodCB8fCAxKSAqIHRoaXMub3B0aW9ucy5wYWdlKSB9KSwgdmFsdWU6IGZ1bmN0aW9uICh0KSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGUodGhpcy5fdmFsdWUpLmNhbGwodGhpcywgdCksIHZvaWQgMCkgOiB0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpIH0sIHdpZGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy51aVNwaW5uZXIgfSB9KSB9KShqUXVlcnkpOyAoZnVuY3Rpb24gKHQsIGUpIHsgZnVuY3Rpb24gaSgpIHsgcmV0dXJuICsrbiB9IGZ1bmN0aW9uIHModCkgeyByZXR1cm4gdCA9IHQuY2xvbmVOb2RlKCExKSwgdC5oYXNoLmxlbmd0aCA+IDEgJiYgZGVjb2RlVVJJQ29tcG9uZW50KHQuaHJlZi5yZXBsYWNlKGEsICIiKSkgPT09IGRlY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnJlcGxhY2UoYSwgIiIpKSB9IHZhciBuID0gMCwgYSA9IC8jLiokLzsgdC53aWRnZXQoInVpLnRhYnMiLCB7IHZlcnNpb246ICIxLjEwLjQiLCBkZWxheTogMzAwLCBvcHRpb25zOiB7IGFjdGl2ZTogbnVsbCwgY29sbGFwc2libGU6ICExLCBldmVudDogImNsaWNrIiwgaGVpZ2h0U3R5bGU6ICJjb250ZW50IiwgaGlkZTogbnVsbCwgc2hvdzogbnVsbCwgYWN0aXZhdGU6IG51bGwsIGJlZm9yZUFjdGl2YXRlOiBudWxsLCBiZWZvcmVMb2FkOiBudWxsLCBsb2FkOiBudWxsIH0sIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzLCBpID0gdGhpcy5vcHRpb25zOyB0aGlzLnJ1bm5pbmcgPSAhMSwgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLCBpLmNvbGxhcHNpYmxlKS5kZWxlZ2F0ZSgiLnVpLXRhYnMtbmF2ID4gbGkiLCAibW91c2Vkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uIChlKSB7IHQodGhpcykuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpICYmIGUucHJldmVudERlZmF1bHQoKSB9KS5kZWxlZ2F0ZSgiLnVpLXRhYnMtYW5jaG9yIiwgImZvY3VzIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsgdCh0aGlzKS5jbG9zZXN0KCJsaSIpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSAmJiB0aGlzLmJsdXIoKSB9KSwgdGhpcy5fcHJvY2Vzc1RhYnMoKSwgaS5hY3RpdmUgPSB0aGlzLl9pbml0aWFsQWN0aXZlKCksIHQuaXNBcnJheShpLmRpc2FibGVkKSAmJiAoaS5kaXNhYmxlZCA9IHQudW5pcXVlKGkuZGlzYWJsZWQuY29uY2F0KHQubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gZS50YWJzLmluZGV4KHQpIH0pKSkuc29ydCgpKSwgdGhpcy5hY3RpdmUgPSB0aGlzLm9wdGlvbnMuYWN0aXZlICE9PSAhMSAmJiB0aGlzLmFuY2hvcnMubGVuZ3RoID8gdGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkgOiB0KCksIHRoaXMuX3JlZnJlc2goKSwgdGhpcy5hY3RpdmUubGVuZ3RoICYmIHRoaXMubG9hZChpLmFjdGl2ZSkgfSwgX2luaXRpYWxBY3RpdmU6IGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0aGlzLm9wdGlvbnMuYWN0aXZlLCBzID0gdGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLCBuID0gbG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7IHJldHVybiBudWxsID09PSBpICYmIChuICYmIHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uIChzLCBhKSB7IHJldHVybiB0KGEpLmF0dHIoImFyaWEtY29udHJvbHMiKSA9PT0gbiA/IChpID0gcywgITEpIDogZSB9KSwgbnVsbCA9PT0gaSAmJiAoaSA9IHRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpLCAobnVsbCA9PT0gaSB8fCAtMSA9PT0gaSkgJiYgKGkgPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6ICExKSksIGkgIT09ICExICYmIChpID0gdGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcShpKSksIC0xID09PSBpICYmIChpID0gcyA/ICExIDogMCkpLCAhcyAmJiBpID09PSAhMSAmJiB0aGlzLmFuY2hvcnMubGVuZ3RoICYmIChpID0gMCksIGkgfSwgX2dldENyZWF0ZUV2ZW50RGF0YTogZnVuY3Rpb24gKCkgeyByZXR1cm4geyB0YWI6IHRoaXMuYWN0aXZlLCBwYW5lbDogdGhpcy5hY3RpdmUubGVuZ3RoID8gdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpIDogdCgpIH0gfSwgX3RhYktleWRvd246IGZ1bmN0aW9uIChpKSB7IHZhciBzID0gdCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIiksIG4gPSB0aGlzLnRhYnMuaW5kZXgocyksIGEgPSAhMDsgaWYgKCF0aGlzLl9oYW5kbGVQYWdlTmF2KGkpKSB7IHN3aXRjaCAoaS5rZXlDb2RlKSB7IGNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOiBjYXNlIHQudWkua2V5Q29kZS5ET1dOOiBuKys7IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5VUDogY2FzZSB0LnVpLmtleUNvZGUuTEVGVDogYSA9ICExLCBuLS07IGJyZWFrOyBjYXNlIHQudWkua2V5Q29kZS5FTkQ6IG4gPSB0aGlzLmFuY2hvcnMubGVuZ3RoIC0gMTsgYnJlYWs7IGNhc2UgdC51aS5rZXlDb2RlLkhPTUU6IG4gPSAwOyBicmVhazsgY2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6IHJldHVybiBpLnByZXZlbnREZWZhdWx0KCksIGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLCB0aGlzLl9hY3RpdmF0ZShuKSwgZTsgY2FzZSB0LnVpLmtleUNvZGUuRU5URVI6IHJldHVybiBpLnByZXZlbnREZWZhdWx0KCksIGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLCB0aGlzLl9hY3RpdmF0ZShuID09PSB0aGlzLm9wdGlvbnMuYWN0aXZlID8gITEgOiBuKSwgZTsgZGVmYXVsdDogcmV0dXJuIH0gaS5wcmV2ZW50RGVmYXVsdCgpLCBjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSwgbiA9IHRoaXMuX2ZvY3VzTmV4dFRhYihuLCBhKSwgaS5jdHJsS2V5IHx8IChzLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCAiZmFsc2UiKSwgdGhpcy50YWJzLmVxKG4pLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCAidHJ1ZSIpLCB0aGlzLmFjdGl2YXRpbmcgPSB0aGlzLl9kZWxheShmdW5jdGlvbiAoKSB7IHRoaXMub3B0aW9uKCJhY3RpdmUiLCBuKSB9LCB0aGlzLmRlbGF5KSkgfSB9LCBfcGFuZWxLZXlkb3duOiBmdW5jdGlvbiAoZSkgeyB0aGlzLl9oYW5kbGVQYWdlTmF2KGUpIHx8IGUuY3RybEtleSAmJiBlLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5VUCAmJiAoZS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLmFjdGl2ZS5mb2N1cygpKSB9LCBfaGFuZGxlUGFnZU5hdjogZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGkuYWx0S2V5ICYmIGkua2V5Q29kZSA9PT0gdC51aS5rZXlDb2RlLlBBR0VfVVAgPyAodGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUgLSAxLCAhMSkpLCAhMCkgOiBpLmFsdEtleSAmJiBpLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5QQUdFX0RPV04gPyAodGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUgKyAxLCAhMCkpLCAhMCkgOiBlIH0sIF9maW5kTmV4dFRhYjogZnVuY3Rpb24gKGUsIGkpIHsgZnVuY3Rpb24gcygpIHsgcmV0dXJuIGUgPiBuICYmIChlID0gMCksIDAgPiBlICYmIChlID0gbiksIGUgfSBmb3IgKHZhciBuID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7IC0xICE9PSB0LmluQXJyYXkocygpLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIDspIGUgPSBpID8gZSArIDEgOiBlIC0gMTsgcmV0dXJuIGUgfSwgX2ZvY3VzTmV4dFRhYjogZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIHQgPSB0aGlzLl9maW5kTmV4dFRhYih0LCBlKSwgdGhpcy50YWJzLmVxKHQpLmZvY3VzKCksIHQgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKHQsIGkpIHsgcmV0dXJuICJhY3RpdmUiID09PSB0ID8gKHRoaXMuX2FjdGl2YXRlKGkpLCBlKSA6ICJkaXNhYmxlZCIgPT09IHQgPyAodGhpcy5fc2V0dXBEaXNhYmxlZChpKSwgZSkgOiAodGhpcy5fc3VwZXIodCwgaSksICJjb2xsYXBzaWJsZSIgPT09IHQgJiYgKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsIGkpLCBpIHx8IHRoaXMub3B0aW9ucy5hY3RpdmUgIT09ICExIHx8IHRoaXMuX2FjdGl2YXRlKDApKSwgImV2ZW50IiA9PT0gdCAmJiB0aGlzLl9zZXR1cEV2ZW50cyhpKSwgImhlaWdodFN0eWxlIiA9PT0gdCAmJiB0aGlzLl9zZXR1cEhlaWdodFN0eWxlKGkpLCBlKSB9LCBfdGFiSWQ6IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0LmF0dHIoImFyaWEtY29udHJvbHMiKSB8fCAidWktdGFicy0iICsgaSgpIH0sIF9zYW5pdGl6ZVNlbGVjdG9yOiBmdW5jdGlvbiAodCkgeyByZXR1cm4gdCA/IHQucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCAiXFwkJiIpIDogIiIgfSwgcmVmcmVzaDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXMub3B0aW9ucywgaSA9IHRoaXMudGFibGlzdC5jaGlsZHJlbigiOmhhcyhhW2hyZWZdKSIpOyBlLmRpc2FibGVkID0gdC5tYXAoaS5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLCBmdW5jdGlvbiAodCkgeyByZXR1cm4gaS5pbmRleCh0KSB9KSwgdGhpcy5fcHJvY2Vzc1RhYnMoKSwgZS5hY3RpdmUgIT09ICExICYmIHRoaXMuYW5jaG9ycy5sZW5ndGggPyB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgIXQuY29udGFpbnModGhpcy50YWJsaXN0WzBdLCB0aGlzLmFjdGl2ZVswXSkgPyB0aGlzLnRhYnMubGVuZ3RoID09PSBlLmRpc2FibGVkLmxlbmd0aCA/IChlLmFjdGl2ZSA9ICExLCB0aGlzLmFjdGl2ZSA9IHQoKSkgOiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLCBlLmFjdGl2ZSAtIDEpLCAhMSkpIDogZS5hY3RpdmUgPSB0aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpIDogKGUuYWN0aXZlID0gITEsIHRoaXMuYWN0aXZlID0gdCgpKSwgdGhpcy5fcmVmcmVzaCgpIH0sIF9yZWZyZXNoOiBmdW5jdGlvbiAoKSB7IHRoaXMuX3NldHVwRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSwgdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSwgdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLCB0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHsgImFyaWEtc2VsZWN0ZWQiOiAiZmFsc2UiLCB0YWJJbmRleDogLTEgfSksIHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAiZmFsc2UiLCAiYXJpYS1oaWRkZW4iOiAidHJ1ZSIgfSksIHRoaXMuYWN0aXZlLmxlbmd0aCA/ICh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ICJhcmlhLXNlbGVjdGVkIjogInRydWUiLCB0YWJJbmRleDogMCB9KSwgdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIsICJhcmlhLWhpZGRlbiI6ICJmYWxzZSIgfSkpIDogdGhpcy50YWJzLmVxKDApLmF0dHIoInRhYkluZGV4IiwgMCkgfSwgX3Byb2Nlc3NUYWJzOiBmdW5jdGlvbiAoKSB7IHZhciBlID0gdGhpczsgdGhpcy50YWJsaXN0ID0gdGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCAidGFibGlzdCIpLCB0aGlzLnRhYnMgPSB0aGlzLnRhYmxpc3QuZmluZCgiPiBsaTpoYXMoYVtocmVmXSkiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuYXR0cih7IHJvbGU6ICJ0YWIiLCB0YWJJbmRleDogLTEgfSksIHRoaXMuYW5jaG9ycyA9IHRoaXMudGFicy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdCgiYSIsIHRoaXMpWzBdIH0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoeyByb2xlOiAicHJlc2VudGF0aW9uIiwgdGFiSW5kZXg6IC0xIH0pLCB0aGlzLnBhbmVscyA9IHQoKSwgdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24gKGksIG4pIHsgdmFyIGEsIG8sIHIsIGggPSB0KG4pLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSwgbCA9IHQobikuY2xvc2VzdCgibGkiKSwgYyA9IGwuYXR0cigiYXJpYS1jb250cm9scyIpOyBzKG4pID8gKGEgPSBuLmhhc2gsIG8gPSBlLmVsZW1lbnQuZmluZChlLl9zYW5pdGl6ZVNlbGVjdG9yKGEpKSkgOiAociA9IGUuX3RhYklkKGwpLCBhID0gIiMiICsgciwgbyA9IGUuZWxlbWVudC5maW5kKGEpLCBvLmxlbmd0aCB8fCAobyA9IGUuX2NyZWF0ZVBhbmVsKHIpLCBvLmluc2VydEFmdGVyKGUucGFuZWxzW2kgLSAxXSB8fCBlLnRhYmxpc3QpKSwgby5hdHRyKCJhcmlhLWxpdmUiLCAicG9saXRlIikpLCBvLmxlbmd0aCAmJiAoZS5wYW5lbHMgPSBlLnBhbmVscy5hZGQobykpLCBjICYmIGwuZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIiwgYyksIGwuYXR0cih7ICJhcmlhLWNvbnRyb2xzIjogYS5zdWJzdHJpbmcoMSksICJhcmlhLWxhYmVsbGVkYnkiOiBoIH0pLCBvLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsIGgpIH0pLCB0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsICJ0YWJwYW5lbCIpIH0sIF9nZXRMaXN0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnRhYmxpc3QgfHwgdGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCkgfSwgX2NyZWF0ZVBhbmVsOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gdCgiPGRpdj4iKS5hdHRyKCJpZCIsIGUpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCAhMCkgfSwgX3NldHVwRGlzYWJsZWQ6IGZ1bmN0aW9uIChlKSB7IHQuaXNBcnJheShlKSAmJiAoZS5sZW5ndGggPyBlLmxlbmd0aCA9PT0gdGhpcy5hbmNob3JzLmxlbmd0aCAmJiAoZSA9ICEwKSA6IGUgPSAhMSk7IGZvciAodmFyIGksIHMgPSAwOyBpID0gdGhpcy50YWJzW3NdOyBzKyspIGUgPT09ICEwIHx8IC0xICE9PSB0LmluQXJyYXkocywgZSkgPyB0KGkpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCAidHJ1ZSIpIDogdChpKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIik7IHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IGUgfSwgX3NldHVwRXZlbnRzOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHsgY2xpY2s6IGZ1bmN0aW9uICh0KSB7IHQucHJldmVudERlZmF1bHQoKSB9IH07IGUgJiYgdC5lYWNoKGUuc3BsaXQoIiAiKSwgZnVuY3Rpb24gKHQsIGUpIHsgaVtlXSA9ICJfZXZlbnRIYW5kbGVyIiB9KSwgdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSwgdGhpcy5fb24odGhpcy5hbmNob3JzLCBpKSwgdGhpcy5fb24odGhpcy50YWJzLCB7IGtleWRvd246ICJfdGFiS2V5ZG93biIgfSksIHRoaXMuX29uKHRoaXMucGFuZWxzLCB7IGtleWRvd246ICJfcGFuZWxLZXlkb3duIiB9KSwgdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksIHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpIH0sIF9zZXR1cEhlaWdodFN0eWxlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcyA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKTsgImZpbGwiID09PSBlID8gKGkgPSBzLmhlaWdodCgpLCBpIC09IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpIC0gdGhpcy5lbGVtZW50LmhlaWdodCgpLCB0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKSwgcyA9IGUuY3NzKCJwb3NpdGlvbiIpOyAiYWJzb2x1dGUiICE9PSBzICYmICJmaXhlZCIgIT09IHMgJiYgKGkgLT0gZS5vdXRlckhlaWdodCghMCkpIH0pLCB0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24gKCkgeyBpIC09IHQodGhpcykub3V0ZXJIZWlnaHQoITApIH0pLCB0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uICgpIHsgdCh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCwgaSAtIHQodGhpcykuaW5uZXJIZWlnaHQoKSArIHQodGhpcykuaGVpZ2h0KCkpKSB9KS5jc3MoIm92ZXJmbG93IiwgImF1dG8iKSkgOiAiYXV0byIgPT09IGUgJiYgKGkgPSAwLCB0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uICgpIHsgaSA9IE1hdGgubWF4KGksIHQodGhpcykuaGVpZ2h0KCIiKS5oZWlnaHQoKSkgfSkuaGVpZ2h0KGkpKSB9LCBfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMub3B0aW9ucywgcyA9IHRoaXMuYWN0aXZlLCBuID0gdChlLmN1cnJlbnRUYXJnZXQpLCBhID0gbi5jbG9zZXN0KCJsaSIpLCBvID0gYVswXSA9PT0gc1swXSwgciA9IG8gJiYgaS5jb2xsYXBzaWJsZSwgaCA9IHIgPyB0KCkgOiB0aGlzLl9nZXRQYW5lbEZvclRhYihhKSwgbCA9IHMubGVuZ3RoID8gdGhpcy5fZ2V0UGFuZWxGb3JUYWIocykgOiB0KCksIGMgPSB7IG9sZFRhYjogcywgb2xkUGFuZWw6IGwsIG5ld1RhYjogciA/IHQoKSA6IGEsIG5ld1BhbmVsOiBoIH07IGUucHJldmVudERlZmF1bHQoKSwgYS5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSB8fCBhLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSB8fCB0aGlzLnJ1bm5pbmcgfHwgbyAmJiAhaS5jb2xsYXBzaWJsZSB8fCB0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsIGUsIGMpID09PSAhMSB8fCAoaS5hY3RpdmUgPSByID8gITEgOiB0aGlzLnRhYnMuaW5kZXgoYSksIHRoaXMuYWN0aXZlID0gbyA/IHQoKSA6IGEsIHRoaXMueGhyICYmIHRoaXMueGhyLmFib3J0KCksIGwubGVuZ3RoIHx8IGgubGVuZ3RoIHx8IHQuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLCBoLmxlbmd0aCAmJiB0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLCBlKSwgdGhpcy5fdG9nZ2xlKGUsIGMpKSB9LCBfdG9nZ2xlOiBmdW5jdGlvbiAoZSwgaSkgeyBmdW5jdGlvbiBzKCkgeyBhLnJ1bm5pbmcgPSAhMSwgYS5fdHJpZ2dlcigiYWN0aXZhdGUiLCBlLCBpKSB9IGZ1bmN0aW9uIG4oKSB7IGkubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLCBvLmxlbmd0aCAmJiBhLm9wdGlvbnMuc2hvdyA/IGEuX3Nob3cobywgYS5vcHRpb25zLnNob3csIHMpIDogKG8uc2hvdygpLCBzKCkpIH0gdmFyIGEgPSB0aGlzLCBvID0gaS5uZXdQYW5lbCwgciA9IGkub2xkUGFuZWw7IHRoaXMucnVubmluZyA9ICEwLCByLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuaGlkZSA/IHRoaXMuX2hpZGUociwgdGhpcy5vcHRpb25zLmhpZGUsIGZ1bmN0aW9uICgpIHsgaS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksIG4oKSB9KSA6IChpLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSwgci5oaWRlKCksIG4oKSksIHIuYXR0cih7ICJhcmlhLWV4cGFuZGVkIjogImZhbHNlIiwgImFyaWEtaGlkZGVuIjogInRydWUiIH0pLCBpLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwgImZhbHNlIiksIG8ubGVuZ3RoICYmIHIubGVuZ3RoID8gaS5vbGRUYWIuYXR0cigidGFiSW5kZXgiLCAtMSkgOiBvLmxlbmd0aCAmJiB0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDAgPT09IHQodGhpcykuYXR0cigidGFiSW5kZXgiKSB9KS5hdHRyKCJ0YWJJbmRleCIsIC0xKSwgby5hdHRyKHsgImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIsICJhcmlhLWhpZGRlbiI6ICJmYWxzZSIgfSksIGkubmV3VGFiLmF0dHIoeyAiYXJpYS1zZWxlY3RlZCI6ICJ0cnVlIiwgdGFiSW5kZXg6IDAgfSkgfSwgX2FjdGl2YXRlOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSwgcyA9IHRoaXMuX2ZpbmRBY3RpdmUoZSk7IHNbMF0gIT09IHRoaXMuYWN0aXZlWzBdICYmIChzLmxlbmd0aCB8fCAocyA9IHRoaXMuYWN0aXZlKSwgaSA9IHMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sIHRoaXMuX2V2ZW50SGFuZGxlcih7IHRhcmdldDogaSwgY3VycmVudFRhcmdldDogaSwgcHJldmVudERlZmF1bHQ6IHQubm9vcCB9KSkgfSwgX2ZpbmRBY3RpdmU6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID09PSAhMSA/IHQoKSA6IHRoaXMudGFicy5lcShlKSB9LCBfZ2V0SW5kZXg6IGZ1bmN0aW9uICh0KSB7IHJldHVybiAic3RyaW5nIiA9PSB0eXBlb2YgdCAmJiAodCA9IHRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIgKyB0ICsgIiddIikpKSwgdCB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB0aGlzLnhociAmJiB0aGlzLnhoci5hYm9ydCgpLCB0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLCB0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLCB0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSwgdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbiAoKSB7IHQuZGF0YSh0aGlzLCAidWktdGFicy1kZXN0cm95IikgPyB0KHRoaXMpLnJlbW92ZSgpIDogdCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLXdpZGdldC1jb250ZW50IHVpLXRhYnMtYWN0aXZlIHVpLXRhYnMtcGFuZWwiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGl2ZSIpLnJlbW92ZUF0dHIoImFyaWEtYnVzeSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJyb2xlIikgfSksIHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0KHRoaXMpLCBpID0gZS5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTsgaSA/IGUuYXR0cigiYXJpYS1jb250cm9scyIsIGkpLnJlbW92ZURhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpIDogZS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikgfSksIHRoaXMucGFuZWxzLnNob3coKSwgImNvbnRlbnQiICE9PSB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgJiYgdGhpcy5wYW5lbHMuY3NzKCJoZWlnaHQiLCAiIikgfSwgZW5hYmxlOiBmdW5jdGlvbiAoaSkgeyB2YXIgcyA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDsgcyAhPT0gITEgJiYgKGkgPT09IGUgPyBzID0gITEgOiAoaSA9IHRoaXMuX2dldEluZGV4KGkpLCBzID0gdC5pc0FycmF5KHMpID8gdC5tYXAocywgZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgIT09IGkgPyB0IDogbnVsbCB9KSA6IHQubWFwKHRoaXMudGFicywgZnVuY3Rpb24gKHQsIGUpIHsgcmV0dXJuIGUgIT09IGkgPyBlIDogbnVsbCB9KSksIHRoaXMuX3NldHVwRGlzYWJsZWQocykpIH0sIGRpc2FibGU6IGZ1bmN0aW9uIChpKSB7IHZhciBzID0gdGhpcy5vcHRpb25zLmRpc2FibGVkOyBpZiAocyAhPT0gITApIHsgaWYgKGkgPT09IGUpIHMgPSAhMDsgZWxzZSB7IGlmIChpID0gdGhpcy5fZ2V0SW5kZXgoaSksIC0xICE9PSB0LmluQXJyYXkoaSwgcykpIHJldHVybjsgcyA9IHQuaXNBcnJheShzKSA/IHQubWVyZ2UoW2ldLCBzKS5zb3J0KCkgOiBbaV0gfSB0aGlzLl9zZXR1cERpc2FibGVkKHMpIH0gfSwgbG9hZDogZnVuY3Rpb24gKGUsIGkpIHsgZSA9IHRoaXMuX2dldEluZGV4KGUpOyB2YXIgbiA9IHRoaXMsIGEgPSB0aGlzLnRhYnMuZXEoZSksIG8gPSBhLmZpbmQoIi51aS10YWJzLWFuY2hvciIpLCByID0gdGhpcy5fZ2V0UGFuZWxGb3JUYWIoYSksIGggPSB7IHRhYjogYSwgcGFuZWw6IHIgfTsgcyhvWzBdKSB8fCAodGhpcy54aHIgPSB0LmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8sIGksIGgpKSwgdGhpcy54aHIgJiYgImNhbmNlbGVkIiAhPT0gdGhpcy54aHIuc3RhdHVzVGV4dCAmJiAoYS5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksIHIuYXR0cigiYXJpYS1idXN5IiwgInRydWUiKSwgdGhpcy54aHIuc3VjY2VzcyhmdW5jdGlvbiAodCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgci5odG1sKHQpLCBuLl90cmlnZ2VyKCJsb2FkIiwgaSwgaCkgfSwgMSkgfSkuY29tcGxldGUoZnVuY3Rpb24gKHQsIGUpIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICJhYm9ydCIgPT09IGUgJiYgbi5wYW5lbHMuc3RvcCghMSwgITApLCBhLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSwgci5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSwgdCA9PT0gbi54aHIgJiYgZGVsZXRlIG4ueGhyIH0sIDEpIH0pKSkgfSwgX2FqYXhTZXR0aW5nczogZnVuY3Rpb24gKGUsIGksIHMpIHsgdmFyIG4gPSB0aGlzOyByZXR1cm4geyB1cmw6IGUuYXR0cigiaHJlZiIpLCBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgYSkgeyByZXR1cm4gbi5fdHJpZ2dlcigiYmVmb3JlTG9hZCIsIGksIHQuZXh0ZW5kKHsganFYSFI6IGUsIGFqYXhTZXR0aW5nczogYSB9LCBzKSkgfSB9IH0sIF9nZXRQYW5lbEZvclRhYjogZnVuY3Rpb24gKGUpIHsgdmFyIGkgPSB0KGUpLmF0dHIoImFyaWEtY29udHJvbHMiKTsgcmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIiMiICsgaSkpIH0gfSkgfSkoalF1ZXJ5KTsgKGZ1bmN0aW9uICh0KSB7IGZ1bmN0aW9uIGUoZSwgaSkgeyB2YXIgcyA9IChlLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKSB8fCAiIikuc3BsaXQoL1xzKy8pOyBzLnB1c2goaSksIGUuZGF0YSgidWktdG9vbHRpcC1pZCIsIGkpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLCB0LnRyaW0ocy5qb2luKCIgIikpKSB9IGZ1bmN0aW9uIGkoZSkgeyB2YXIgaSA9IGUuZGF0YSgidWktdG9vbHRpcC1pZCIpLCBzID0gKGUuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpIHx8ICIiKS5zcGxpdCgvXHMrLyksIG4gPSB0LmluQXJyYXkoaSwgcyk7IC0xICE9PSBuICYmIHMuc3BsaWNlKG4sIDEpLCBlLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtaWQiKSwgcyA9IHQudHJpbShzLmpvaW4oIiAiKSksIHMgPyBlLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLCBzKSA6IGUucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpIH0gdmFyIHMgPSAwOyB0LndpZGdldCgidWkudG9vbHRpcCIsIHsgdmVyc2lvbjogIjEuMTAuNCIsIG9wdGlvbnM6IHsgY29udGVudDogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcykuYXR0cigidGl0bGUiKSB8fCAiIjsgcmV0dXJuIHQoIjxhPiIpLnRleHQoZSkuaHRtbCgpIH0sIGhpZGU6ICEwLCBpdGVtczogIlt0aXRsZV06bm90KFtkaXNhYmxlZF0pIiwgcG9zaXRpb246IHsgbXk6ICJsZWZ0IHRvcCsxNSIsIGF0OiAibGVmdCBib3R0b20iLCBjb2xsaXNpb246ICJmbGlwZml0IGZsaXAiIH0sIHNob3c6ICEwLCB0b29sdGlwQ2xhc3M6IG51bGwsIHRyYWNrOiAhMSwgY2xvc2U6IG51bGwsIG9wZW46IG51bGwgfSwgX2NyZWF0ZTogZnVuY3Rpb24gKCkgeyB0aGlzLl9vbih7IG1vdXNlb3ZlcjogIm9wZW4iLCBmb2N1c2luOiAib3BlbiIgfSksIHRoaXMudG9vbHRpcHMgPSB7fSwgdGhpcy5wYXJlbnRzID0ge30sIHRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiB0aGlzLl9kaXNhYmxlKCkgfSwgX3NldE9wdGlvbjogZnVuY3Rpb24gKGUsIGkpIHsgdmFyIHMgPSB0aGlzOyByZXR1cm4gImRpc2FibGVkIiA9PT0gZSA/ICh0aGlzW2kgPyAiX2Rpc2FibGUiIDogIl9lbmFibGUiXSgpLCB0aGlzLm9wdGlvbnNbZV0gPSBpLCB2b2lkIDApIDogKHRoaXMuX3N1cGVyKGUsIGkpLCAiY29udGVudCIgPT09IGUgJiYgdC5lYWNoKHRoaXMudG9vbHRpcHMsIGZ1bmN0aW9uICh0LCBlKSB7IHMuX3VwZGF0ZUNvbnRlbnQoZSkgfSksIHZvaWQgMCkgfSwgX2Rpc2FibGU6IGZ1bmN0aW9uICgpIHsgdmFyIGUgPSB0aGlzOyB0LmVhY2godGhpcy50b29sdGlwcywgZnVuY3Rpb24gKGksIHMpIHsgdmFyIG4gPSB0LkV2ZW50KCJibHVyIik7IG4udGFyZ2V0ID0gbi5jdXJyZW50VGFyZ2V0ID0gc1swXSwgZS5jbG9zZShuLCAhMCkgfSksIHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHQodGhpcyk7IGUuaXMoIlt0aXRsZV0iKSAmJiBlLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLCBlLmF0dHIoInRpdGxlIikpLmF0dHIoInRpdGxlIiwgIiIpIH0pIH0sIF9lbmFibGU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbiAoKSB7IHZhciBlID0gdCh0aGlzKTsgZS5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgZS5hdHRyKCJ0aXRsZSIsIGUuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSB9KSB9LCBvcGVuOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9IHRoaXMsIHMgPSB0KGUgPyBlLnRhcmdldCA6IHRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpOyBzLmxlbmd0aCAmJiAhcy5kYXRhKCJ1aS10b29sdGlwLWlkIikgJiYgKHMuYXR0cigidGl0bGUiKSAmJiBzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLCBzLmF0dHIoInRpdGxlIikpLCBzLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIsICEwKSwgZSAmJiAibW91c2VvdmVyIiA9PT0gZS50eXBlICYmIHMucGFyZW50cygpLmVhY2goZnVuY3Rpb24gKCkgeyB2YXIgZSwgcyA9IHQodGhpcyk7IHMuZGF0YSgidWktdG9vbHRpcC1vcGVuIikgJiYgKGUgPSB0LkV2ZW50KCJibHVyIiksIGUudGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0ID0gdGhpcywgaS5jbG9zZShlLCAhMCkpLCBzLmF0dHIoInRpdGxlIikgJiYgKHMudW5pcXVlSWQoKSwgaS5wYXJlbnRzW3RoaXMuaWRdID0geyBlbGVtZW50OiB0aGlzLCB0aXRsZTogcy5hdHRyKCJ0aXRsZSIpIH0sIHMuYXR0cigidGl0bGUiLCAiIikpIH0pLCB0aGlzLl91cGRhdGVDb250ZW50KHMsIGUpKSB9LCBfdXBkYXRlQ29udGVudDogZnVuY3Rpb24gKHQsIGUpIHsgdmFyIGksIHMgPSB0aGlzLm9wdGlvbnMuY29udGVudCwgbiA9IHRoaXMsIG8gPSBlID8gZS50eXBlIDogbnVsbDsgcmV0dXJuICJzdHJpbmciID09IHR5cGVvZiBzID8gdGhpcy5fb3BlbihlLCB0LCBzKSA6IChpID0gcy5jYWxsKHRbMF0sIGZ1bmN0aW9uIChpKSB7IHQuZGF0YSgidWktdG9vbHRpcC1vcGVuIikgJiYgbi5fZGVsYXkoZnVuY3Rpb24gKCkgeyBlICYmIChlLnR5cGUgPSBvKSwgdGhpcy5fb3BlbihlLCB0LCBpKSB9KSB9KSwgaSAmJiB0aGlzLl9vcGVuKGUsIHQsIGkpLCB2b2lkIDApIH0sIF9vcGVuOiBmdW5jdGlvbiAoaSwgcywgbikgeyBmdW5jdGlvbiBvKHQpIHsgbC5vZiA9IHQsIGEuaXMoIjpoaWRkZW4iKSB8fCBhLnBvc2l0aW9uKGwpIH0gdmFyIGEsIHIsIGgsIGwgPSB0LmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLnBvc2l0aW9uKTsgaWYgKG4pIHsgaWYgKGEgPSB0aGlzLl9maW5kKHMpLCBhLmxlbmd0aCkgcmV0dXJuIGEuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwobiksIHZvaWQgMDsgcy5pcygiW3RpdGxlXSIpICYmIChpICYmICJtb3VzZW92ZXIiID09PSBpLnR5cGUgPyBzLmF0dHIoInRpdGxlIiwgIiIpIDogcy5yZW1vdmVBdHRyKCJ0aXRsZSIpKSwgYSA9IHRoaXMuX3Rvb2x0aXAocyksIGUocywgYS5hdHRyKCJpZCIpKSwgYS5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChuKSwgdGhpcy5vcHRpb25zLnRyYWNrICYmIGkgJiYgL15tb3VzZS8udGVzdChpLnR5cGUpID8gKHRoaXMuX29uKHRoaXMuZG9jdW1lbnQsIHsgbW91c2Vtb3ZlOiBvIH0pLCBvKGkpKSA6IGEucG9zaXRpb24odC5leHRlbmQoeyBvZjogcyB9LCB0aGlzLm9wdGlvbnMucG9zaXRpb24pKSwgYS5oaWRlKCksIHRoaXMuX3Nob3coYSwgdGhpcy5vcHRpb25zLnNob3cpLCB0aGlzLm9wdGlvbnMuc2hvdyAmJiB0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSAmJiAoaCA9IHRoaXMuZGVsYXllZFNob3cgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IGEuaXMoIjp2aXNpYmxlIikgJiYgKG8obC5vZiksIGNsZWFySW50ZXJ2YWwoaCkpIH0sIHQuZnguaW50ZXJ2YWwpKSwgdGhpcy5fdHJpZ2dlcigib3BlbiIsIGksIHsgdG9vbHRpcDogYSB9KSwgciA9IHsga2V5dXA6IGZ1bmN0aW9uIChlKSB7IGlmIChlLmtleUNvZGUgPT09IHQudWkua2V5Q29kZS5FU0NBUEUpIHsgdmFyIGkgPSB0LkV2ZW50KGUpOyBpLmN1cnJlbnRUYXJnZXQgPSBzWzBdLCB0aGlzLmNsb3NlKGksICEwKSB9IH0sIHJlbW92ZTogZnVuY3Rpb24gKCkgeyB0aGlzLl9yZW1vdmVUb29sdGlwKGEpIH0gfSwgaSAmJiAibW91c2VvdmVyIiAhPT0gaS50eXBlIHx8IChyLm1vdXNlbGVhdmUgPSAiY2xvc2UiKSwgaSAmJiAiZm9jdXNpbiIgIT09IGkudHlwZSB8fCAoci5mb2N1c291dCA9ICJjbG9zZSIpLCB0aGlzLl9vbighMCwgcywgcikgfSB9LCBjbG9zZTogZnVuY3Rpb24gKGUpIHsgdmFyIHMgPSB0aGlzLCBuID0gdChlID8gZS5jdXJyZW50VGFyZ2V0IDogdGhpcy5lbGVtZW50KSwgbyA9IHRoaXMuX2ZpbmQobik7IHRoaXMuY2xvc2luZyB8fCAoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSwgbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgbi5hdHRyKCJ0aXRsZSIsIG4uZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSwgaShuKSwgby5zdG9wKCEwKSwgdGhpcy5faGlkZShvLCB0aGlzLm9wdGlvbnMuaGlkZSwgZnVuY3Rpb24gKCkgeyBzLl9yZW1vdmVUb29sdGlwKHQodGhpcykpIH0pLCBuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLCB0aGlzLl9vZmYobiwgIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSwgblswXSAhPT0gdGhpcy5lbGVtZW50WzBdICYmIHRoaXMuX29mZihuLCAicmVtb3ZlIiksIHRoaXMuX29mZih0aGlzLmRvY3VtZW50LCAibW91c2Vtb3ZlIiksIGUgJiYgIm1vdXNlbGVhdmUiID09PSBlLnR5cGUgJiYgdC5lYWNoKHRoaXMucGFyZW50cywgZnVuY3Rpb24gKGUsIGkpIHsgdChpLmVsZW1lbnQpLmF0dHIoInRpdGxlIiwgaS50aXRsZSksIGRlbGV0ZSBzLnBhcmVudHNbZV0gfSksIHRoaXMuY2xvc2luZyA9ICEwLCB0aGlzLl90cmlnZ2VyKCJjbG9zZSIsIGUsIHsgdG9vbHRpcDogbyB9KSwgdGhpcy5jbG9zaW5nID0gITEpIH0sIF90b29sdGlwOiBmdW5jdGlvbiAoZSkgeyB2YXIgaSA9ICJ1aS10b29sdGlwLSIgKyBzKyssIG4gPSB0KCI8ZGl2PiIpLmF0dHIoeyBpZDogaSwgcm9sZTogInRvb2x0aXAiIH0pLmFkZENsYXNzKCJ1aS10b29sdGlwIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1jb250ZW50ICIgKyAodGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyB8fCAiIikpOyByZXR1cm4gdCgiPGRpdj4iKS5hZGRDbGFzcygidWktdG9vbHRpcC1jb250ZW50IikuYXBwZW5kVG8obiksIG4uYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSwgdGhpcy50b29sdGlwc1tpXSA9IGUsIG4gfSwgX2ZpbmQ6IGZ1bmN0aW9uIChlKSB7IHZhciBpID0gZS5kYXRhKCJ1aS10b29sdGlwLWlkIik7IHJldHVybiBpID8gdCgiIyIgKyBpKSA6IHQoKSB9LCBfcmVtb3ZlVG9vbHRpcDogZnVuY3Rpb24gKHQpIHsgdC5yZW1vdmUoKSwgZGVsZXRlIHRoaXMudG9vbHRpcHNbdC5hdHRyKCJpZCIpXSB9LCBfZGVzdHJveTogZnVuY3Rpb24gKCkgeyB2YXIgZSA9IHRoaXM7IHQuZWFjaCh0aGlzLnRvb2x0aXBzLCBmdW5jdGlvbiAoaSwgcykgeyB2YXIgbiA9IHQuRXZlbnQoImJsdXIiKTsgbi50YXJnZXQgPSBuLmN1cnJlbnRUYXJnZXQgPSBzWzBdLCBlLmNsb3NlKG4sICEwKSwgdCgiIyIgKyBpKS5yZW1vdmUoKSwgcy5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikgJiYgKHMuYXR0cigidGl0bGUiLCBzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksIHMucmVtb3ZlRGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSB9KSB9IH0pIH0pKGpRdWVyeSk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKgogKiBGaWxlOiAgICAgICAganF1ZXJ5LmRhdGFUYWJsZXMuanMKICogVmVyc2lvbjogICAgIDEuOC4xCiAqIERlc2NyaXB0aW9uOiBQYWdpbmF0ZSwgc2VhcmNoIGFuZCBzb3J0IEhUTUwgdGFibGVzCiAqIEF1dGhvcjogICAgICBBbGxhbiBKYXJkaW5lICh3d3cuc3ByeW1lZGlhLmNvLnVrKQogKiBDcmVhdGVkOiAgICAgMjgvMy8yMDA4CiAqIExhbmd1YWdlOiAgICBKYXZhc2NyaXB0CiAqIExpY2Vuc2U6ICAgICBHUEwgdjIgb3IgQlNEIDMgcG9pbnQgc3R5bGUKICogUHJvamVjdDogICAgIE10YWFsYQogKiBDb250YWN0OiAgICAgYWxsYW4uamFyZGluZUBzcHJ5bWVkaWEuY28udWsKICogCiAqIENvcHlyaWdodCAyMDA4LTIwMTEgQWxsYW4gSmFyZGluZSwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCB1bmRlciBlaXRoZXIgdGhlIEdQTCB2MiBsaWNlbnNlIG9yIGEKICogQlNEIHN0eWxlIGxpY2Vuc2UsIGFzIHN1cHBsaWVkIHdpdGggdGhpcyBzb2Z0d2FyZS4KICogCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICogCiAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0bzogaHR0cDovL3d3dy5kYXRhdGFibGVzLm5ldAogKi8KCi8qCiAqIFdoZW4gY29uc2lkZXJpbmcganNMaW50LCB3ZSBuZWVkIHRvIGFsbG93IGV2YWwoKSBhcyBpdCBpdCBpcyB1c2VkIGZvciByZWFkaW5nIGNvb2tpZXMKICovCi8qanNsaW50IGV2aWw6IHRydWUsIHVuZGVmOiB0cnVlLCBicm93c2VyOiB0cnVlICovCi8qZ2xvYmFscyAkLCBqUXVlcnksX2ZuRXh0ZXJuQXBpRnVuYyxfZm5Jbml0YWxpc2UsX2ZuSW5pdENvbXBsZXRlLF9mbkxhbmd1YWdlUHJvY2VzcyxfZm5BZGRDb2x1bW4sX2ZuQ29sdW1uT3B0aW9ucyxfZm5BZGREYXRhLF9mbkNyZWF0ZVRyLF9mbkdhdGhlckRhdGEsX2ZuQnVpbGRIZWFkLF9mbkRyYXdIZWFkLF9mbkRyYXcsX2ZuUmVEcmF3LF9mbkFqYXhVcGRhdGUsX2ZuQWpheFVwZGF0ZURyYXcsX2ZuQWRkT3B0aW9uc0h0bWwsX2ZuRmVhdHVyZUh0bWxUYWJsZSxfZm5TY3JvbGxEcmF3LF9mbkFqdXN0Q29sdW1uU2l6aW5nLF9mbkZlYXR1cmVIdG1sRmlsdGVyLF9mbkZpbHRlckNvbXBsZXRlLF9mbkZpbHRlckN1c3RvbSxfZm5GaWx0ZXJDb2x1bW4sX2ZuRmlsdGVyLF9mbkJ1aWxkU2VhcmNoQXJyYXksX2ZuQnVpbGRTZWFyY2hSb3csX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoLF9mbkRhdGFUb1NlYXJjaCxfZm5Tb3J0LF9mblNvcnRBdHRhY2hMaXN0ZW5lcixfZm5Tb3J0aW5nQ2xhc3NlcyxfZm5GZWF0dXJlSHRtbFBhZ2luYXRlLF9mblBhZ2VDaGFuZ2UsX2ZuRmVhdHVyZUh0bWxJbmZvLF9mblVwZGF0ZUluZm8sX2ZuRmVhdHVyZUh0bWxMZW5ndGgsX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nLF9mblByb2Nlc3NpbmdEaXNwbGF5LF9mblZpc2libGVUb0NvbHVtbkluZGV4LF9mbkNvbHVtbkluZGV4VG9WaXNpYmxlLF9mbk5vZGVUb0RhdGFJbmRleCxfZm5WaXNibGVDb2x1bW5zLF9mbkNhbGN1bGF0ZUVuZCxfZm5Db252ZXJ0VG9XaWR0aCxfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMsX2ZuU2Nyb2xsaW5nV2lkdGhBZGp1c3QsX2ZuR2V0V2lkZXN0Tm9kZSxfZm5HZXRNYXhMZW5TdHJpbmcsX2ZuU3RyaW5nVG9Dc3MsX2ZuQXJyYXlDbXAsX2ZuRGV0ZWN0VHlwZSxfZm5TZXR0aW5nc0Zyb21Ob2RlLF9mbkdldERhdGFNYXN0ZXIsX2ZuR2V0VHJOb2RlcyxfZm5HZXRUZE5vZGVzLF9mbkVzY2FwZVJlZ2V4LF9mbkRlbGV0ZUluZGV4LF9mblJlT3JkZXJJbmRleCxfZm5Db2x1bW5PcmRlcmluZyxfZm5Mb2csX2ZuQ2xlYXJUYWJsZSxfZm5TYXZlU3RhdGUsX2ZuTG9hZFN0YXRlLF9mbkNyZWF0ZUNvb2tpZSxfZm5SZWFkQ29va2llLF9mbkRldGVjdEhlYWRlcixfZm5HZXRVbmlxdWVUaHMsX2ZuU2Nyb2xsQmFyV2lkdGgsX2ZuQXBwbHlUb0NoaWxkcmVuLF9mbk1hcCxfZm5HZXRSb3dEYXRhLF9mbkdldENlbGxEYXRhLF9mblNldENlbGxEYXRhLF9mbkdldE9iamVjdERhdGFGbixfZm5TZXRPYmplY3REYXRhRm4qLwoKKGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQpIHsKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFNlY3Rpb24gLSBEYXRhVGFibGVzIHZhcmlhYmxlcwoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBkYXRhVGFibGVTZXR0aW5ncwoJICogUHVycG9zZTogIFN0b3JlIHRoZSBzZXR0aW5ncyBmb3IgZWFjaCBkYXRhVGFibGVzIGluc3RhbmNlCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuCgkgKi8KCSQuZm4uZGF0YVRhYmxlU2V0dGluZ3MgPSBbXTsKCXZhciBfYW9TZXR0aW5ncyA9ICQuZm4uZGF0YVRhYmxlU2V0dGluZ3M7IC8qIFNob3J0IHJlZmVyZW5jZSBmb3IgZmFzdCBpbnRlcm5hbCBsb29rdXAgKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBkYXRhVGFibGVFeHQKCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIGN1c3RvbWlzYWJsZSBwYXJ0cyBvZiBEYXRhVGFibGVzCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuCgkgKi8KCSQuZm4uZGF0YVRhYmxlRXh0ID0ge307Cgl2YXIgX29FeHQgPSAkLmZuLmRhdGFUYWJsZUV4dDsKCQoJCgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBTZWN0aW9uIC0gRGF0YVRhYmxlcyBleHRlbnNpYmxlIG9iamVjdHMKCSAqIAoJICogVGhlIF9vRXh0IG9iamVjdCBpcyB1c2VkIHRvIHByb3ZpZGUgYW4gYXJlYSB3aGVyZSB1c2VyIGRmaW5lZCBwbHVnaW5zIGNhbiBiZSAKCSAqIGFkZGVkIHRvIERhdGFUYWJsZXMuIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGFyZSB1c2VkOgoJICogICBvQXBpIC0gUGx1Zy1pbiBBUEkgZnVuY3Rpb25zCgkgKiAgIGFUeXBlcyAtIEF1dG8tZGV0ZWN0aW9uIG9mIHR5cGVzCgkgKiAgIG9Tb3J0IC0gU29ydGluZyBmdW5jdGlvbnMgdXNlZCBieSBEYXRhVGFibGVzIChiYXNlZCBvbiB0aGUgdHlwZSkKCSAqICAgb1BhZ2luYXRpb24gLSBQYWdpbmF0aW9uIGZ1bmN0aW9ucyBmb3IgZGlmZmVyZW50IGlucHV0IHN0eWxlcwoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQoJLyoKCSAqIFZhcmlhYmxlOiBzVmVyc2lvbgoJICogUHVycG9zZTogIFZlcnNpb24gc3RyaW5nIGZvciBwbHVnLWlucyB0byBjaGVjayBjb21wYXRpYmlsaXR5CgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIEFsbG93ZWQgZm9ybWF0IGlzIGEuYi5jLmQuZSB3aGVyZToKCSAqICAgYTppbnQsIGI6aW50LCBjOmludCwgZDpzdHJpbmcoZGV2fGJldGEpLCBlOmludC4gZCBhbmQgZSBhcmUgb3B0aW9uYWwKCSAqLwoJX29FeHQuc1ZlcnNpb24gPSAiMS44LjEiOwoJCgkvKgoJICogVmFyaWFibGU6IHNFcnJNb2RlCgkgKiBQdXJwb3NlOiAgSG93IHNob3VsZCBEYXRhVGFibGVzIHJlcG9ydCBhbiBlcnJvci4gQ2FuIHRha2UgdGhlIHZhbHVlICdhbGVydCcgb3IgJ3Rocm93JwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQuc0Vyck1vZGUgPSAiYWxlcnQiOwoJCgkvKgoJICogVmFyaWFibGU6IGlBcGlJbmRleAoJICogUHVycG9zZTogIEluZGV4IGZvciB3aGF0ICd0aGlzJyBpbmRleCBBUEkgZnVuY3Rpb25zIHNob3VsZCB1c2UKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0LmlBcGlJbmRleCA9IDA7CgkKCS8qCgkgKiBWYXJpYWJsZTogb0FwaQoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgcGx1Z2luIEFQSSBmdW5jdGlvbnMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0Lm9BcGkgPSB7IH07CgkKCS8qCgkgKiBWYXJpYWJsZTogYUZpbHRlcmluZwoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgcGx1Z2luIGZpbHRlcmluZyBmdW5jdGlvbnMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0LmFmbkZpbHRlcmluZyA9IFsgXTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBhb0ZlYXR1cmVzCgkgKiBQdXJwb3NlOiAgQ29udGFpbmVyIGZvciBwbHVnaW4gZnVuY3Rpb24gZnVuY3Rpb25zCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIEFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgkgKiAgIGZuSW5pdDogRnVuY3Rpb24gZm9yIGluaXRpYWxpc2F0aW9uIG9mIEZlYXR1cmUuIFRha2VzIG9TZXR0aW5ncyBhbmQgcmV0dXJucyBub2RlCgkgKiAgIGNGZWF0dXJlOiBDaGFyYWN0ZXIgdGhhdCB3aWxsIGJlIG1hdGNoZWQgaW4gc0RvbSAtIGNhc2Ugc2Vuc2l0aXZlCgkgKiAgIHNGZWF0dXJlOiBGZWF0dXJlIG5hbWUgLSBqdXN0IGZvciBjb21wbGV0ZW5lc3MgOi0pCgkgKi8KCV9vRXh0LmFvRmVhdHVyZXMgPSBbIF07CgkKCS8qCgkgKiBWYXJpYWJsZTogb2ZuU2VhcmNoCgkgKiBQdXJwb3NlOiAgQ29udGFpbmVyIGZvciBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqIE5vdGVzOiAgICBUaGlzIGlzIGFuIG9iamVjdCAodGhlIG5hbWUgc2hvdWxkIG1hdGNoIHRoZSB0eXBlKSBmb3IgY3VzdG9tIGZpbHRlcmluZyBmdW5jdGlvbiwKCSAqICAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGxpdmUgRE9NIGNoZWNraW5nIG9yIGZvcm1hdHRlZCB0ZXh0IGZpbHRlcmluZwoJICovCglfb0V4dC5vZm5TZWFyY2ggPSB7IH07CgkKCS8qCgkgKiBWYXJpYWJsZTogYWZuU29ydERhdGEKCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIGN1c3RvbSBzb3J0aW5nIGRhdGEgc291cmNlIGZ1bmN0aW9ucwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqIE5vdGVzOiAgICBBcnJheSAoYXNzb2NpYXRpdmUpIG9mIGZ1bmN0aW9ucyB3aGljaCBpcyBydW4gcHJpb3IgdG8gYSBjb2x1bW4gb2YgdGhpcyAKCSAqICAgJ1NvcnREYXRhVHlwZScgYmVpbmcgc29ydGVkIHVwb24uCgkgKiAgIEZ1bmN0aW9uIGlucHV0IHBhcmFtZXRlcnM6CgkgKiAgICAgb2JqZWN0Om9TZXR0aW5ncy0gIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgICAgaW50OmlDb2x1bW4gLSBUYXJnZXQgY29sdW1uIG51bWJlcgoJICogICBSZXR1cm4gdmFsdWU6IEFycmF5IG9mIGRhdGEgd2hpY2ggZXhhY3RseSBtYXRjaGVkIHRoZSBmdWxsIGRhdGEgc2V0IHNpemUgZm9yIHRoZSBjb2x1bW4gdG8KCSAqICAgICBiZSBzb3J0ZWQgdXBvbgoJICovCglfb0V4dC5hZm5Tb3J0RGF0YSA9IFsgXTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBvU3RkQ2xhc3NlcwoJICogUHVycG9zZTogIFN0b3JhZ2UgZm9yIHRoZSB2YXJpb3VzIGNsYXNzZXMgdGhhdCBEYXRhVGFibGVzIHVzZXMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0Lm9TdGRDbGFzc2VzID0gewoJCS8qIFR3byBidXR0b25zIGJ1dHRvbnMgKi8KCQkic1BhZ2VQcmV2RW5hYmxlZCI6ICJwYWdpbmF0ZV9lbmFibGVkX3ByZXZpb3VzIiwKCQkic1BhZ2VQcmV2RGlzYWJsZWQiOiAicGFnaW5hdGVfZGlzYWJsZWRfcHJldmlvdXMiLAoJCSJzUGFnZU5leHRFbmFibGVkIjogInBhZ2luYXRlX2VuYWJsZWRfbmV4dCIsCgkJInNQYWdlTmV4dERpc2FibGVkIjogInBhZ2luYXRlX2Rpc2FibGVkX25leHQiLAoJCSJzUGFnZUpVSU5leHQiOiAiIiwKCQkic1BhZ2VKVUlQcmV2IjogIiIsCgkJCgkJLyogRnVsbCBudW1iZXJzIHBhZ2luZyBidXR0b25zICovCgkJInNQYWdlQnV0dG9uIjogInBhZ2luYXRlX2J1dHRvbiIsCgkJInNQYWdlQnV0dG9uQWN0aXZlIjogInBhZ2luYXRlX2FjdGl2ZSIsCgkJInNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQiOiAicGFnaW5hdGVfYnV0dG9uIHBhZ2luYXRlX2J1dHRvbl9kaXNhYmxlZCIsCgkJInNQYWdlRmlyc3QiOiAiZmlyc3QiLAoJCSJzUGFnZVByZXZpb3VzIjogInByZXZpb3VzIiwKCQkic1BhZ2VOZXh0IjogIm5leHQiLAoJCSJzUGFnZUxhc3QiOiAibGFzdCIsCgkJCgkJLyogU3RyaXBwaW5nIGNsYXNzZXMgKi8KCQkic1N0cmlwT2RkIjogIm9kZCIsCgkJInNTdHJpcEV2ZW4iOiAiZXZlbiIsCgkJCgkJLyogRW1wdHkgcm93ICovCgkJInNSb3dFbXB0eSI6ICJkYXRhVGFibGVzX2VtcHR5IiwKCQkKCQkvKiBGZWF0dXJlcyAqLwoJCSJzV3JhcHBlciI6ICJkYXRhVGFibGVzX3dyYXBwZXIiLAoJCSJzRmlsdGVyIjogImRhdGFUYWJsZXNfZmlsdGVyIiwKCQkic0luZm8iOiAiZGF0YVRhYmxlc19pbmZvIiwKCQkic1BhZ2luZyI6ICJkYXRhVGFibGVzX3BhZ2luYXRlIHBhZ2luZ18iLCAvKiBOb3RlIHRoYXQgdGhlIHR5cGUgaXMgcG9zdGZpeGVkICovCgkJInNMZW5ndGgiOiAiZGF0YVRhYmxlc19sZW5ndGgiLAoJCSJzUHJvY2Vzc2luZyI6ICJkYXRhVGFibGVzX3Byb2Nlc3NpbmciLAoJCQoJCS8qIFNvcnRpbmcgKi8KCQkic1NvcnRBc2MiOiAic29ydGluZ19hc2MiLAoJCSJzU29ydERlc2MiOiAic29ydGluZ19kZXNjIiwKCQkic1NvcnRhYmxlIjogInNvcnRpbmciLCAvKiBTb3J0YWJsZSBpbiBib3RoIGRpcmVjdGlvbnMgKi8KCQkic1NvcnRhYmxlQXNjIjogInNvcnRpbmdfYXNjX2Rpc2FibGVkIiwKCQkic1NvcnRhYmxlRGVzYyI6ICJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLAoJCSJzU29ydGFibGVOb25lIjogInNvcnRpbmdfZGlzYWJsZWQiLAoJCSJzU29ydENvbHVtbiI6ICJzb3J0aW5nXyIsIC8qIE5vdGUgdGhhdCBhbiBpbnQgaXMgcG9zdGZpeGVkIGZvciB0aGUgc29ydGluZyBvcmRlciAqLwoJCSJzU29ydEpVSUFzYyI6ICIiLAoJCSJzU29ydEpVSURlc2MiOiAiIiwKCQkic1NvcnRKVUkiOiAiIiwKCQkic1NvcnRKVUlBc2NBbGxvd2VkIjogIiIsCgkJInNTb3J0SlVJRGVzY0FsbG93ZWQiOiAiIiwKCQkic1NvcnRKVUlXcmFwcGVyIjogIiIsCgkJInNTb3J0SWNvbiI6ICIiLAoJCQoJCS8qIFNjcm9sbGluZyAqLwoJCSJzU2Nyb2xsV3JhcHBlciI6ICJkYXRhVGFibGVzX3Njcm9sbCIsCgkJInNTY3JvbGxIZWFkIjogImRhdGFUYWJsZXNfc2Nyb2xsSGVhZCIsCgkJInNTY3JvbGxIZWFkSW5uZXIiOiAiZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXIiLAoJCSJzU2Nyb2xsQm9keSI6ICJkYXRhVGFibGVzX3Njcm9sbEJvZHkiLAoJCSJzU2Nyb2xsRm9vdCI6ICJkYXRhVGFibGVzX3Njcm9sbEZvb3QiLAoJCSJzU2Nyb2xsRm9vdElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIiwKCQkKCQkvKiBNaXNjICovCgkJInNGb290ZXJUSCI6ICIiCgl9OwoJCgkvKgoJICogVmFyaWFibGU6IG9KVUlDbGFzc2VzCgkgKiBQdXJwb3NlOiAgU3RvcmFnZSBmb3IgdGhlIHZhcmlvdXMgY2xhc3NlcyB0aGF0IERhdGFUYWJsZXMgdXNlcyAtIGpRdWVyeSBVSSBzdWl0YWJsZQoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQub0pVSUNsYXNzZXMgPSB7CgkJLyogVHdvIGJ1dHRvbnMgYnV0dG9ucyAqLwoJCSJzUGFnZVByZXZFbmFibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItbGVmdCIsCgkJInNQYWdlUHJldkRpc2FibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItbGVmdCB1aS1zdGF0ZS1kaXNhYmxlZCIsCgkJInNQYWdlTmV4dEVuYWJsZWQiOiAiZmctYnV0dG9uIHVpLWJ1dHRvbiB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1yaWdodCIsCgkJInNQYWdlTmV4dERpc2FibGVkIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItcmlnaHQgdWktc3RhdGUtZGlzYWJsZWQiLAoJCSJzUGFnZUpVSU5leHQiOiAidWktaWNvbiB1aS1pY29uLWNpcmNsZS1hcnJvdy1lIiwKCQkic1BhZ2VKVUlQcmV2IjogInVpLWljb24gdWktaWNvbi1jaXJjbGUtYXJyb3ctdyIsCgkJCgkJLyogRnVsbCBudW1iZXJzIHBhZ2luZyBidXR0b25zICovCgkJInNQYWdlQnV0dG9uIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCIsCgkJInNQYWdlQnV0dG9uQWN0aXZlIjogImZnLWJ1dHRvbiB1aS1idXR0b24gdWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1kaXNhYmxlZCIsCgkJInNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQiOiAiZmctYnV0dG9uIHVpLWJ1dHRvbiB1aS1zdGF0ZS1kZWZhdWx0IHVpLXN0YXRlLWRpc2FibGVkIiwKCQkic1BhZ2VGaXJzdCI6ICJmaXJzdCB1aS1jb3JuZXItdGwgdWktY29ybmVyLWJsIiwKCQkic1BhZ2VQcmV2aW91cyI6ICJwcmV2aW91cyIsCgkJInNQYWdlTmV4dCI6ICJuZXh0IiwKCQkic1BhZ2VMYXN0IjogImxhc3QgdWktY29ybmVyLXRyIHVpLWNvcm5lci1iciIsCgkJCgkJLyogU3RyaXBwaW5nIGNsYXNzZXMgKi8KCQkic1N0cmlwT2RkIjogIm9kZCIsCgkJInNTdHJpcEV2ZW4iOiAiZXZlbiIsCgkJCgkJLyogRW1wdHkgcm93ICovCgkJInNSb3dFbXB0eSI6ICJkYXRhVGFibGVzX2VtcHR5IiwKCQkKCQkvKiBGZWF0dXJlcyAqLwoJCSJzV3JhcHBlciI6ICJkYXRhVGFibGVzX3dyYXBwZXIiLAoJCSJzRmlsdGVyIjogImRhdGFUYWJsZXNfZmlsdGVyIiwKCQkic0luZm8iOiAiZGF0YVRhYmxlc19pbmZvIiwKCQkic1BhZ2luZyI6ICJkYXRhVGFibGVzX3BhZ2luYXRlIGZnLWJ1dHRvbnNldCB1aS1idXR0b25zZXQgZmctYnV0dG9uc2V0LW11bHRpICIrCgkJCSJ1aS1idXR0b25zZXQtbXVsdGkgcGFnaW5nXyIsIC8qIE5vdGUgdGhhdCB0aGUgdHlwZSBpcyBwb3N0Zml4ZWQgKi8KCQkic0xlbmd0aCI6ICJkYXRhVGFibGVzX2xlbmd0aCIsCgkJInNQcm9jZXNzaW5nIjogImRhdGFUYWJsZXNfcHJvY2Vzc2luZyIsCgkJCgkJLyogU29ydGluZyAqLwoJCSJzU29ydEFzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnREZXNjIjogInVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU29ydGFibGUiOiAidWktc3RhdGUtZGVmYXVsdCIsCgkJInNTb3J0YWJsZUFzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRhYmxlRGVzYyI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRhYmxlTm9uZSI6ICJ1aS1zdGF0ZS1kZWZhdWx0IiwKCQkic1NvcnRDb2x1bW4iOiAic29ydGluZ18iLCAvKiBOb3RlIHRoYXQgYW4gaW50IGlzIHBvc3RmaXhlZCBmb3IgdGhlIHNvcnRpbmcgb3JkZXIgKi8KCQkic1NvcnRKVUlBc2MiOiAiY3NzX3JpZ2h0IHVpLWljb24gdWktaWNvbi10cmlhbmdsZS0xLW4iLAoJCSJzU29ydEpVSURlc2MiOiAiY3NzX3JpZ2h0IHVpLWljb24gdWktaWNvbi10cmlhbmdsZS0xLXMiLAoJCSJzU29ydEpVSSI6ICJjc3NfcmlnaHQgdWktaWNvbiB1aS1pY29uLWNhcmF0LTItbi1zIiwKCQkic1NvcnRKVUlBc2NBbGxvd2VkIjogImNzc19yaWdodCB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIiwKCQkic1NvcnRKVUlEZXNjQWxsb3dlZCI6ICJjc3NfcmlnaHQgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtcyIsCgkJInNTb3J0SlVJV3JhcHBlciI6ICJEYXRhVGFibGVzX3NvcnRfd3JhcHBlciIsCgkJInNTb3J0SWNvbiI6ICJEYXRhVGFibGVzX3NvcnRfaWNvbiIsCgkJCgkJLyogU2Nyb2xsaW5nICovCgkJInNTY3JvbGxXcmFwcGVyIjogImRhdGFUYWJsZXNfc2Nyb2xsIiwKCQkic1Njcm9sbEhlYWQiOiAiZGF0YVRhYmxlc19zY3JvbGxIZWFkIHVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU2Nyb2xsSGVhZElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsSGVhZElubmVyIiwKCQkic1Njcm9sbEJvZHkiOiAiZGF0YVRhYmxlc19zY3JvbGxCb2R5IiwKCQkic1Njcm9sbEZvb3QiOiAiZGF0YVRhYmxlc19zY3JvbGxGb290IHVpLXN0YXRlLWRlZmF1bHQiLAoJCSJzU2Nyb2xsRm9vdElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIiwKCQkKCQkvKiBNaXNjICovCgkJInNGb290ZXJUSCI6ICJ1aS1zdGF0ZS1kZWZhdWx0IgoJfTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBvUGFnaW5hdGlvbgoJICogUHVycG9zZTogIENvbnRhaW5lciBmb3IgdGhlIHZhcmlvdXMgdHlwZSBvZiBwYWdpbmF0aW9uIHRoYXQgZGF0YVRhYmxlcyBzdXBwb3J0cwoJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQKCSAqLwoJX29FeHQub1BhZ2luYXRpb24gPSB7CgkJLyoKCQkgKiBWYXJpYWJsZTogdHdvX2J1dHRvbgoJCSAqIFB1cnBvc2U6ICBTdGFuZGFyZCB0d28gYnV0dG9uIChmb3J3YXJkL2JhY2spIHBhZ2luYXRpb24KCQkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dC5vUGFnaW5hdGlvbgoJCSAqLwoJCSJ0d29fYnV0dG9uIjogewoJCQkvKgoJCQkgKiBGdW5jdGlvbjogb1BhZ2luYXRpb24udHdvX2J1dHRvbi5mbkluaXQKCQkJICogUHVycG9zZTogIEluaXRhbGlzZSBkb20gZWxlbWVudHMgcmVxdWlyZWQgZm9yIHBhZ2luYXRpb24gd2l0aCBmb3J3YXJkL2JhY2sgYnV0dG9ucyBvbmx5CgkJCSAqIFJldHVybnM6ICAtCgkJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkJICogICAgICAgICAgIG5vZGU6blBhZ2luZyAtIHRoZSBESVYgd2hpY2ggY29udGFpbnMgdGhpcyBwYWdpbmF0aW9uIGNvbnRyb2wKCQkJICogICAgICAgICAgIGZ1bmN0aW9uOmZuQ2FsbGJhY2tEcmF3IC0gZHJhdyBmdW5jdGlvbiB3aGljaCBtdXN0IGJlIGNhbGxlZCBvbiB1cGRhdGUKCQkJICovCgkJCSJmbkluaXQiOiBmdW5jdGlvbiAoIG9TZXR0aW5ncywgblBhZ2luZywgZm5DYWxsYmFja0RyYXcgKQoJCQl7CgkJCQl2YXIgblByZXZpb3VzLCBuTmV4dCwgblByZXZpb3VzSW5uZXIsIG5OZXh0SW5uZXI7CgkJCQkKCQkJCS8qIFN0b3JlIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVtZW50cyBpbiB0aGUgb1NldHRpbmdzIG9iamVjdCBhcyB0aGV5IGNhbiBiZSB2ZXJ5CgkJCQkgKiB1c2Z1bCBmb3IgYXV0b21hdGlvbiAtIHBhcnRpY3VsYXJseSB0ZXN0aW5nCgkJCQkgKi8KCQkJCWlmICggIW9TZXR0aW5ncy5iSlVJICkKCQkJCXsKCQkJCQluUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQkJCW5OZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQluUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYScgKTsKCQkJCQluTmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApOwoJCQkJCQoJCQkJCW5OZXh0SW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CgkJCQkJbk5leHRJbm5lci5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VKVUlOZXh0OwoJCQkJCW5OZXh0LmFwcGVuZENoaWxkKCBuTmV4dElubmVyICk7CgkJCQkJCgkJCQkJblByZXZpb3VzSW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CgkJCQkJblByZXZpb3VzSW5uZXIuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlSlVJUHJldjsKCQkJCQluUHJldmlvdXMuYXBwZW5kQ2hpbGQoIG5QcmV2aW91c0lubmVyICk7CgkJCQl9CgkJCQkKCQkJCW5QcmV2aW91cy5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VQcmV2RGlzYWJsZWQ7CgkJCQluTmV4dC5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RGlzYWJsZWQ7CgkJCQkKCQkJCW5QcmV2aW91cy50aXRsZSA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNQcmV2aW91czsKCQkJCW5OZXh0LnRpdGxlID0gb1NldHRpbmdzLm9MYW5ndWFnZS5vUGFnaW5hdGUuc05leHQ7CgkJCQkKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5QcmV2aW91cyApOwoJCQkJblBhZ2luZy5hcHBlbmRDaGlsZCggbk5leHQgKTsKCQkJCQoJCQkJJChuUHJldmlvdXMpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAicHJldmlvdXMiICkgKQoJCQkJCXsKCQkJCQkJLyogT25seSBkcmF3IHdoZW4gdGhlIHBhZ2UgaGFzIGFjdHVhbGx5IGNoYW5nZWQgKi8KCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuTmV4dCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBvU2V0dGluZ3Mub0FwaS5fZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsICJuZXh0IiApICkKCQkJCQl7CgkJCQkJCWZuQ2FsbGJhY2tEcmF3KCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQl9ICk7CgkJCQkKCQkJCS8qIFRha2UgdGhlIGJydXRhbCBhcHByb2FjaCB0byBjYW5jZWxsaW5nIHRleHQgc2VsZWN0aW9uICovCgkJCQkkKG5QcmV2aW91cykuYmluZCggJ3NlbGVjdHN0YXJ0LkRUJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0gKTsKCQkJCSQobk5leHQpLmJpbmQoICdzZWxlY3RzdGFydC5EVCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9ICk7CgkJCQkKCQkJCS8qIElEIHRoZSBmaXJzdCBlbGVtZW50cyBvbmx5ICovCgkJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wID09ICJ1bmRlZmluZWQiICkKCQkJCXsKCQkJCQluUGFnaW5nLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcGFnaW5hdGUnICk7CgkJCQkJblByZXZpb3VzLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcHJldmlvdXMnICk7CgkJCQkJbk5leHQuc2V0QXR0cmlidXRlKCAnaWQnLCBvU2V0dGluZ3Muc1RhYmxlSWQrJ19uZXh0JyApOwoJCQkJfQoJCQl9LAoJCQkKCQkJLyoKCQkJICogRnVuY3Rpb246IG9QYWdpbmF0aW9uLnR3b19idXR0b24uZm5VcGRhdGUKCQkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgdHdvIGJ1dHRvbiBwYWdpbmF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGRyYXcKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHRvIGNhbGwgb24gcGFnZSBjaGFuZ2UKCQkJICovCgkJCSJmblVwZGF0ZSI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCWlmICggIW9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCS8qIExvb3Agb3ZlciBlYWNoIGluc3RhbmNlIG9mIHRoZSBwYWdlciAqLwoJCQkJdmFyIGFuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLnA7CgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFuLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBhbltpXS5jaGlsZE5vZGVzLmxlbmd0aCAhPT0gMCApCgkJCQkJewoJCQkJCQlhbltpXS5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZSA9IAoJCQkJCQkJKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPT09IDAgKSA/IAoJCQkJCQkJb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlUHJldkRpc2FibGVkIDogb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdlUHJldkVuYWJsZWQ7CgkJCQkJCQoJCQkJCQlhbltpXS5jaGlsZE5vZGVzWzFdLmNsYXNzTmFtZSA9IAoJCQkJCQkJKCBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCkgPT0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSApID8gCgkJCQkJCQlvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RGlzYWJsZWQgOiBvU2V0dGluZ3Mub0NsYXNzZXMuc1BhZ2VOZXh0RW5hYmxlZDsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCQoJCQoJCS8qCgkJICogVmFyaWFibGU6IGlGdWxsTnVtYmVyc1Nob3dQYWdlcwoJCSAqIFB1cnBvc2U6ICBDaGFuZ2UgdGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCBjYW4gYmUgc2VlbgoJCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0Lm9QYWdpbmF0aW9uCgkJICovCgkJImlGdWxsTnVtYmVyc1Nob3dQYWdlcyI6IDUsCgkJCgkJLyoKCQkgKiBWYXJpYWJsZTogZnVsbF9udW1iZXJzCgkJICogUHVycG9zZTogIEZ1bGwgbnVtYmVycyBwYWdpbmF0aW9uCgkJICogU2NvcGU6ICAgIGpRdWVyeS5mbi5kYXRhVGFibGVFeHQub1BhZ2luYXRpb24KCQkgKi8KCQkiZnVsbF9udW1iZXJzIjogewoJCQkvKgoJCQkgKiBGdW5jdGlvbjogb1BhZ2luYXRpb24uZnVsbF9udW1iZXJzLmZuSW5pdAoJCQkgKiBQdXJwb3NlOiAgSW5pdGFsaXNlIGRvbSBlbGVtZW50cyByZXF1aXJlZCBmb3IgcGFnaW5hdGlvbiB3aXRoIGEgbGlzdCBvZiB0aGUgcGFnZXMKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgbm9kZTpuUGFnaW5nIC0gdGhlIERJViB3aGljaCBjb250YWlucyB0aGlzIHBhZ2luYXRpb24gY29udHJvbAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHdoaWNoIG11c3QgYmUgY2FsbGVkIG9uIHVwZGF0ZQoJCQkgKi8KCQkJImZuSW5pdCI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBuUGFnaW5nLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCXZhciBuRmlyc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCXZhciBuUHJldmlvdXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCXZhciBuTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdzcGFuJyApOwoJCQkJdmFyIG5OZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3NwYW4nICk7CgkJCQl2YXIgbkxhc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc3BhbicgKTsKCQkJCQoJCQkJbkZpcnN0LmlubmVySFRNTCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNGaXJzdDsKCQkJCW5QcmV2aW91cy5pbm5lckhUTUwgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZS5zUHJldmlvdXM7CgkJCQluTmV4dC5pbm5lckhUTUwgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZS5zTmV4dDsKCQkJCW5MYXN0LmlubmVySFRNTCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLnNMYXN0OwoJCQkJCgkJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQluRmlyc3QuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1BhZ2VCdXR0b24rIiAiK29DbGFzc2VzLnNQYWdlRmlyc3Q7CgkJCQluUHJldmlvdXMuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1BhZ2VCdXR0b24rIiAiK29DbGFzc2VzLnNQYWdlUHJldmlvdXM7CgkJCQluTmV4dC5jbGFzc05hbWU9IG9DbGFzc2VzLnNQYWdlQnV0dG9uKyIgIitvQ2xhc3Nlcy5zUGFnZU5leHQ7CgkJCQluTGFzdC5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zUGFnZUJ1dHRvbisiICIrb0NsYXNzZXMuc1BhZ2VMYXN0OwoJCQkJCgkJCQluUGFnaW5nLmFwcGVuZENoaWxkKCBuRmlyc3QgKTsKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5QcmV2aW91cyApOwoJCQkJblBhZ2luZy5hcHBlbmRDaGlsZCggbkxpc3QgKTsKCQkJCW5QYWdpbmcuYXBwZW5kQ2hpbGQoIG5OZXh0ICk7CgkJCQluUGFnaW5nLmFwcGVuZENoaWxkKCBuTGFzdCApOwoJCQkJCgkJCQkkKG5GaXJzdCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24gKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAiZmlyc3QiICkgKQoJCQkJCXsKCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuUHJldmlvdXMpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAicHJldmlvdXMiICkgKQoJCQkJCXsKCQkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCQoJCQkJJChuTmV4dCkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBvU2V0dGluZ3Mub0FwaS5fZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsICJuZXh0IiApICkKCQkJCQl7CgkJCQkJCWZuQ2FsbGJhY2tEcmF3KCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQl9ICk7CgkJCQkKCQkJCSQobkxhc3QpLmJpbmQoICdjbGljay5EVCcsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb1NldHRpbmdzLm9BcGkuX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAibGFzdCIgKSApCgkJCQkJewoJCQkJCQlmbkNhbGxiYWNrRHJhdyggb1NldHRpbmdzICk7CgkJCQkJfQoJCQkJfSApOwoJCQkJCgkJCQkvKiBUYWtlIHRoZSBicnV0YWwgYXBwcm9hY2ggdG8gY2FuY2VsbGluZyB0ZXh0IHNlbGVjdGlvbiAqLwoJCQkJJCgnc3BhbicsIG5QYWdpbmcpCgkJCQkJLmJpbmQoICdtb3VzZWRvd24uRFQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZTsgfSApCgkJCQkJLmJpbmQoICdzZWxlY3RzdGFydC5EVCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9ICk7CgkJCQkKCQkJCS8qIElEIHRoZSBmaXJzdCBlbGVtZW50cyBvbmx5ICovCgkJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wID09ICJ1bmRlZmluZWQiICkKCQkJCXsKCQkJCQluUGFnaW5nLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcGFnaW5hdGUnICk7CgkJCQkJbkZpcnN0LnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfZmlyc3QnICk7CgkJCQkJblByZXZpb3VzLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfcHJldmlvdXMnICk7CgkJCQkJbk5leHQuc2V0QXR0cmlidXRlKCAnaWQnLCBvU2V0dGluZ3Muc1RhYmxlSWQrJ19uZXh0JyApOwoJCQkJCW5MYXN0LnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfbGFzdCcgKTsKCQkJCX0KCQkJfSwKCQkJCgkJCS8qCgkJCSAqIEZ1bmN0aW9uOiBvUGFnaW5hdGlvbi5mdWxsX251bWJlcnMuZm5VcGRhdGUKCQkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgbGlzdCBvZiBwYWdlIGJ1dHRvbnMgc2hvd3MKCQkJICogUmV0dXJuczogIC0KCQkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCQkgKiAgICAgICAgICAgZnVuY3Rpb246Zm5DYWxsYmFja0RyYXcgLSBkcmF3IGZ1bmN0aW9uIHRvIGNhbGwgb24gcGFnZSBjaGFuZ2UKCQkJICovCgkJCSJmblVwZGF0ZSI6IGZ1bmN0aW9uICggb1NldHRpbmdzLCBmbkNhbGxiYWNrRHJhdyApCgkJCXsKCQkJCWlmICggIW9TZXR0aW5ncy5hYW5GZWF0dXJlcy5wICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCXZhciBpUGFnZUNvdW50ID0gX29FeHQub1BhZ2luYXRpb24uaUZ1bGxOdW1iZXJzU2hvd1BhZ2VzOwoJCQkJdmFyIGlQYWdlQ291bnRIYWxmID0gTWF0aC5mbG9vcihpUGFnZUNvdW50IC8gMik7CgkJCQl2YXIgaVBhZ2VzID0gTWF0aC5jZWlsKChvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpKSAvIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpOwoJCQkJdmFyIGlDdXJyZW50UGFnZSA9IE1hdGguY2VpbChvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgLyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKSArIDE7CgkJCQl2YXIgc0xpc3QgPSAiIjsKCQkJCXZhciBpU3RhcnRCdXR0b24sIGlFbmRCdXR0b24sIGksIGlMZW47CgkJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQkKCQkJCS8qIFBhZ2VzIGNhbGN1bGF0aW9uICovCgkJCQlpZiAoaVBhZ2VzIDwgaVBhZ2VDb3VudCkKCQkJCXsKCQkJCQlpU3RhcnRCdXR0b24gPSAxOwoJCQkJCWlFbmRCdXR0b24gPSBpUGFnZXM7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJaWYgKGlDdXJyZW50UGFnZSA8PSBpUGFnZUNvdW50SGFsZikKCQkJCQl7CgkJCQkJCWlTdGFydEJ1dHRvbiA9IDE7CgkJCQkJCWlFbmRCdXR0b24gPSBpUGFnZUNvdW50OwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlpZiAoaUN1cnJlbnRQYWdlID49IChpUGFnZXMgLSBpUGFnZUNvdW50SGFsZikpCgkJCQkJCXsKCQkJCQkJCWlTdGFydEJ1dHRvbiA9IGlQYWdlcyAtIGlQYWdlQ291bnQgKyAxOwoJCQkJCQkJaUVuZEJ1dHRvbiA9IGlQYWdlczsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCWlTdGFydEJ1dHRvbiA9IGlDdXJyZW50UGFnZSAtIE1hdGguY2VpbChpUGFnZUNvdW50IC8gMikgKyAxOwoJCQkJCQkJaUVuZEJ1dHRvbiA9IGlTdGFydEJ1dHRvbiArIGlQYWdlQ291bnQgLSAxOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBCdWlsZCB0aGUgZHluYW1pYyBsaXN0ICovCgkJCQlmb3IgKCBpPWlTdGFydEJ1dHRvbiA7IGk8PWlFbmRCdXR0b24gOyBpKysgKQoJCQkJewoJCQkJCWlmICggaUN1cnJlbnRQYWdlICE9IGkgKQoJCQkJCXsKCQkJCQkJc0xpc3QgKz0gJzxzcGFuIGNsYXNzPSInK29DbGFzc2VzLnNQYWdlQnV0dG9uKyciPicraSsnPC9zcGFuPic7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXNMaXN0ICs9ICc8c3BhbiBjbGFzcz0iJytvQ2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSsnIj4nK2krJzwvc3Bhbj4nOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogTG9vcCBvdmVyIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHBhZ2VyICovCgkJCQl2YXIgYW4gPSBvU2V0dGluZ3MuYWFuRmVhdHVyZXMucDsKCQkJCXZhciBhbkJ1dHRvbnMsIGFuU3RhdGljLCBuUGFnaW5hdGVMaXN0OwoJCQkJdmFyIGZuQ2xpY2sgPSBmdW5jdGlvbihlKSB7CgkJCQkJLyogVXNlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZWxlbWVudCB0byBqdW1wIHRvIHRoZSByZXF1aXJlZCBwYWdlICovCgkJCQkJdmFyIGlUYXJnZXQgPSAodGhpcy5pbm5lckhUTUwgKiAxKSAtIDE7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gaVRhcmdldCAqIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg7CgkJCQkJZm5DYWxsYmFja0RyYXcoIG9TZXR0aW5ncyApOwoJCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCX07CgkJCQl2YXIgZm5GYWxzZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9OwoJCQkJCgkJCQlmb3IgKCBpPTAsIGlMZW49YW4ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIGFuW2ldLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwICkKCQkJCQl7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCQkJCQkKCQkJCQkvKiBCdWlsZCB1cCB0aGUgZHluYW1pYyBsaXN0IGZvcnN0IC0gaHRtbCBhbmQgbGlzdGVuZXJzICovCgkJCQkJdmFyIHFqUGFnaW5hdGVMaXN0ID0gJCgnc3BhbjplcSgyKScsIGFuW2ldKTsKCQkJCQlxalBhZ2luYXRlTGlzdC5odG1sKCBzTGlzdCApOwoJCQkJCSQoJ3NwYW4nLCBxalBhZ2luYXRlTGlzdCkuYmluZCggJ2NsaWNrLkRUJywgZm5DbGljayApLmJpbmQoICdtb3VzZWRvd24uRFQnLCBmbkZhbHNlICkKCQkJCQkJLmJpbmQoICdzZWxlY3RzdGFydC5EVCcsIGZuRmFsc2UgKTsKCQkJCQkKCQkJCQkvKiBVcGRhdGUgdGhlICdwcmVtYW5lbnQgYm90dG9uJ3MgY2xhc3NlcyAqLwoJCQkJCWFuQnV0dG9ucyA9IGFuW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzcGFuJyk7CgkJCQkJYW5TdGF0aWMgPSBbCgkJCQkJCWFuQnV0dG9uc1swXSwgYW5CdXR0b25zWzFdLCAKCQkJCQkJYW5CdXR0b25zW2FuQnV0dG9ucy5sZW5ndGgtMl0sIGFuQnV0dG9uc1thbkJ1dHRvbnMubGVuZ3RoLTFdCgkJCQkJXTsKCQkJCQkkKGFuU3RhdGljKS5yZW1vdmVDbGFzcyggb0NsYXNzZXMuc1BhZ2VCdXR0b24rIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlKyIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvblN0YXRpY0Rpc2FibGVkICk7CgkJCQkJaWYgKCBpQ3VycmVudFBhZ2UgPT0gMSApCgkJCQkJewoJCQkJCQlhblN0YXRpY1swXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uU3RhdGljRGlzYWJsZWQ7CgkJCQkJCWFuU3RhdGljWzFdLmNsYXNzTmFtZSArPSAiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b25TdGF0aWNEaXNhYmxlZDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJYW5TdGF0aWNbMF0uY2xhc3NOYW1lICs9ICIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvbjsKCQkJCQkJYW5TdGF0aWNbMV0uY2xhc3NOYW1lICs9ICIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvbjsKCQkJCQl9CgkJCQkJCgkJCQkJaWYgKCBpUGFnZXMgPT09IDAgfHwgaUN1cnJlbnRQYWdlID09IGlQYWdlcyB8fCBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID09IC0xICkKCQkJCQl7CgkJCQkJCWFuU3RhdGljWzJdLmNsYXNzTmFtZSArPSAiICIrb0NsYXNzZXMuc1BhZ2VCdXR0b25TdGF0aWNEaXNhYmxlZDsKCQkJCQkJYW5TdGF0aWNbM10uY2xhc3NOYW1lICs9ICIgIitvQ2xhc3Nlcy5zUGFnZUJ1dHRvblN0YXRpY0Rpc2FibGVkOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlhblN0YXRpY1syXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uOwoJCQkJCQlhblN0YXRpY1szXS5jbGFzc05hbWUgKz0gIiAiK29DbGFzc2VzLnNQYWdlQnV0dG9uOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX07CgkKCS8qCgkgKiBWYXJpYWJsZTogb1NvcnQKCSAqIFB1cnBvc2U6ICBXcmFwcGVyIGZvciB0aGUgc29ydGluZyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBpbiBEYXRhVGFibGVzCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIFRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgaW4gdGhpcyBvYmplY3QgYXJlIGJhc2ljYWxseSBzdGFuZGFyZCBqYXZhc2NyaXB0IHNvcnQKCSAqICAgZnVuY3Rpb25zIC0gdGhleSBleHBlY3QgdHdvIGlucHV0cyB3aGljaCB0aGV5IHRoZW4gY29tcGFyZSBhbmQgdGhlbiByZXR1cm4gYSBwcmlvcml0eQoJICogICByZXN1bHQuIEZvciBlYWNoIHNvcnQgbWV0aG9kIGFkZGVkLCB0d28gZnVuY3Rpb25zIG5lZWQgdG8gYmUgZGVmaW5lZCwgYW4gYXNjZW5kaW5nIHNvcnQgYW5kCgkgKiAgIGEgZGVzY2VuZGluZyBzb3J0LgoJICovCglfb0V4dC5vU29ydCA9IHsKCQkvKgoJCSAqIHRleHQgc29ydGluZwoJCSAqLwoJCSJzdHJpbmctYXNjIjogZnVuY3Rpb24gKCBhLCBiICkKCQl7CgkJCWlmICggdHlwZW9mIGEgIT0gJ3N0cmluZycgKSB7IGEgPSAnJzsgfQoJCQlpZiAoIHR5cGVvZiBiICE9ICdzdHJpbmcnICkgeyBiID0gJyc7IH0KCQkJdmFyIHggPSBhLnRvTG93ZXJDYXNlKCk7CgkJCXZhciB5ID0gYi50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gKCh4IDwgeSkgPyAtMSA6ICgoeCA+IHkpID8gMSA6IDApKTsKCQl9LAoJCQoJCSJzdHJpbmctZGVzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQlpZiAoIHR5cGVvZiBhICE9ICdzdHJpbmcnICkgeyBhID0gJyc7IH0KCQkJaWYgKCB0eXBlb2YgYiAhPSAnc3RyaW5nJyApIHsgYiA9ICcnOyB9CgkJCXZhciB4ID0gYS50b0xvd2VyQ2FzZSgpOwoJCQl2YXIgeSA9IGIudG9Mb3dlckNhc2UoKTsKCQkJcmV0dXJuICgoeCA8IHkpID8gMSA6ICgoeCA+IHkpID8gLTEgOiAwKSk7CgkJfSwKCQkKCQkKCQkvKgoJCSAqIGh0bWwgc29ydGluZyAoaWdub3JlIGh0bWwgdGFncykKCQkgKi8KCQkiaHRtbC1hc2MiOiBmdW5jdGlvbiAoIGEsIGIgKQoJCXsKCQkJdmFyIHggPSBhLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApLnRvTG93ZXJDYXNlKCk7CgkJCXZhciB5ID0gYi5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKS50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gKCh4IDwgeSkgPyAtMSA6ICgoeCA+IHkpID8gMSA6IDApKTsKCQl9LAoJCQoJCSJodG1sLWRlc2MiOiBmdW5jdGlvbiAoIGEsIGIgKQoJCXsKCQkJdmFyIHggPSBhLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApLnRvTG93ZXJDYXNlKCk7CgkJCXZhciB5ID0gYi5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKS50b0xvd2VyQ2FzZSgpOwoJCQlyZXR1cm4gKCh4IDwgeSkgPyAxIDogKCh4ID4geSkgPyAtMSA6IDApKTsKCQl9LAoJCQoJCQoJCS8qCgkJICogZGF0ZSBzb3J0aW5nCgkJICovCgkJImRhdGUtYXNjIjogZnVuY3Rpb24gKCBhLCBiICkKCQl7CgkJCXZhciB4ID0gRGF0ZS5wYXJzZSggYSApOwoJCQl2YXIgeSA9IERhdGUucGFyc2UoIGIgKTsKCQkJCgkJCWlmICggaXNOYU4oeCkgfHwgeD09PSIiICkKCQkJewoJCQl4ID0gRGF0ZS5wYXJzZSggIjAxLzAxLzE5NzAgMDA6MDA6MDAiICk7CgkJCX0KCQkJaWYgKCBpc05hTih5KSB8fCB5PT09IiIgKQoJCQl7CgkJCQl5ID0JRGF0ZS5wYXJzZSggIjAxLzAxLzE5NzAgMDA6MDA6MDAiICk7CgkJCX0KCQkJCgkJCXJldHVybiB4IC0geTsKCQl9LAoJCQoJCSJkYXRlLWRlc2MiOiBmdW5jdGlvbiAoIGEsIGIgKQoJCXsKCQkJdmFyIHggPSBEYXRlLnBhcnNlKCBhICk7CgkJCXZhciB5ID0gRGF0ZS5wYXJzZSggYiApOwoJCQkKCQkJaWYgKCBpc05hTih4KSB8fCB4PT09IiIgKQoJCQl7CgkJCXggPSBEYXRlLnBhcnNlKCAiMDEvMDEvMTk3MCAwMDowMDowMCIgKTsKCQkJfQoJCQlpZiAoIGlzTmFOKHkpIHx8IHk9PT0iIiApCgkJCXsKCQkJCXkgPQlEYXRlLnBhcnNlKCAiMDEvMDEvMTk3MCAwMDowMDowMCIgKTsKCQkJfQoJCQkKCQkJcmV0dXJuIHkgLSB4OwoJCX0sCgkJCgkJCgkJLyoKCQkgKiBudW1lcmljYWwgc29ydGluZwoJCSAqLwoJCSJudW1lcmljLWFzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQl2YXIgeCA9IChhPT0iLSIgfHwgYT09PSIiKSA/IDAgOiBhKjE7CgkJCXZhciB5ID0gKGI9PSItIiB8fCBiPT09IiIpID8gMCA6IGIqMTsKCQkJcmV0dXJuIHggLSB5OwoJCX0sCgkJCgkJIm51bWVyaWMtZGVzYyI6IGZ1bmN0aW9uICggYSwgYiApCgkJewoJCQl2YXIgeCA9IChhPT0iLSIgfHwgYT09PSIiKSA/IDAgOiBhKjE7CgkJCXZhciB5ID0gKGI9PSItIiB8fCBiPT09IiIpID8gMCA6IGIqMTsKCQkJcmV0dXJuIHkgLSB4OwoJCX0KCX07CgkKCQoJLyoKCSAqIFZhcmlhYmxlOiBhVHlwZXMKCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIHRoZSB2YXJpb3VzIHR5cGUgb2YgdHlwZSBkZXRlY3Rpb24gdGhhdCBkYXRhVGFibGVzIHN1cHBvcnRzCgkgKiBTY29wZTogICAgalF1ZXJ5LmZuLmRhdGFUYWJsZUV4dAoJICogTm90ZXM6ICAgIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBhcnJheSBhcmUgZXhwZWN0ZWQgdG8gcGFyc2UgYSBzdHJpbmcgdG8gc2VlIGlmIGl0IGlzIGEgZGF0YQoJICogICB0eXBlIHRoYXQgaXQgcmVjb2duaXNlcy4gSWYgc28gdGhlbiB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgdHlwZSAoYQoJICogICBjb3JyZXNwb25kaW5nIHNvcnQgZnVuY3Rpb24gc2hvdWxkIGJlIGRlZmluZWQhKSwgaWYgdGhlIHR5cGUgaXMgbm90IHJlY29nbmlzZWQgdGhlbiB0aGUKCSAqICAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBudWxsIHN1Y2ggdGhhdCB0aGUgcGFyc2VyIGFuZCBtb3ZlIG9uIHRvIGNoZWNrIHRoZSBuZXh0IHR5cGUuCgkgKiAgIE5vdGUgdGhhdCBvcmRlcmluZyBpcyBpbXBvcnRhbnQgaW4gdGhpcyBhcnJheSAtIHRoZSBmdW5jdGlvbnMgYXJlIHByb2Nlc3NlZCBsaW5lYXJseSwKCSAqICAgc3RhcnRpbmcgYXQgaW5kZXggMC4KCSAqICAgTm90ZSB0aGF0IHRoZSBpbnB1dCBmb3IgdGhlc2UgZnVuY3Rpb25zIGlzIGFsd2F5cyBhIHN0cmluZyEgSXQgY2Fubm90IGJlIGFueSBvdGhlciBkYXRhCgkgKiAgIHR5cGUKCSAqLwoJX29FeHQuYVR5cGVzID0gWwoJCS8qCgkJICogRnVuY3Rpb246IC0KCQkgKiBQdXJwb3NlOiAgQ2hlY2sgdG8gc2VlIGlmIGEgc3RyaW5nIGlzIG51bWVyaWMKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOidudW1lcmljJyBvciBudWxsCgkJICogSW5wdXRzOiAgIG1peGVkOnNUZXh0IC0gc3RyaW5nIHRvIGNoZWNrCgkJICovCgkJZnVuY3Rpb24gKCBzRGF0YSApCgkJewoJCQkvKiBBbGxvdyB6ZXJvIGxlbmd0aCBzdHJpbmdzIGFzIGEgbnVtYmVyICovCgkJCWlmICggdHlwZW9mIHNEYXRhID09ICdudW1iZXInICkKCQkJewoJCQkJcmV0dXJuICdudW1lcmljJzsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIHNEYXRhICE9ICdzdHJpbmcnICkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCXZhciBzVmFsaWRGaXJzdENoYXJzID0gIjAxMjM0NTY3ODktIjsKCQkJdmFyIHNWYWxpZENoYXJzID0gIjAxMjM0NTY3ODkuIjsKCQkJdmFyIENoYXI7CgkJCXZhciBiRGVjaW1hbCA9IGZhbHNlOwoJCQkKCQkJLyogQ2hlY2sgZm9yIGEgdmFsaWQgZmlyc3QgY2hhciAobm8gcGVyaW9kIGFuZCBhbGxvdyBuZWdhdGl2ZXMpICovCgkJCUNoYXIgPSBzRGF0YS5jaGFyQXQoMCk7IAoJCQlpZiAoc1ZhbGlkRmlyc3RDaGFycy5pbmRleE9mKENoYXIpID09IC0xKSAKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCS8qIENoZWNrIGFsbCB0aGUgb3RoZXIgY2hhcmFjdGVycyBhcmUgdmFsaWQgKi8KCQkJZm9yICggdmFyIGk9MSA7IGk8c0RhdGEubGVuZ3RoIDsgaSsrICkgCgkJCXsKCQkJCUNoYXIgPSBzRGF0YS5jaGFyQXQoaSk7IAoJCQkJaWYgKHNWYWxpZENoYXJzLmluZGV4T2YoQ2hhcikgPT0gLTEpIAoJCQkJewoJCQkJCXJldHVybiBudWxsOwoJCQkJfQoJCQkJCgkJCQkvKiBPbmx5IGFsbG93ZWQgb25lIGRlY2ltYWwgcGxhY2UuLi4gKi8KCQkJCWlmICggQ2hhciA9PSAiLiIgKQoJCQkJewoJCQkJCWlmICggYkRlY2ltYWwgKQoJCQkJCXsKCQkJCQkJcmV0dXJuIG51bGw7CgkJCQkJfQoJCQkJCWJEZWNpbWFsID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCQkKCQkJcmV0dXJuICdudW1lcmljJzsKCQl9LAoJCQoJCS8qCgkJICogRnVuY3Rpb246IC0KCQkgKiBQdXJwb3NlOiAgQ2hlY2sgdG8gc2VlIGlmIGEgc3RyaW5nIGlzIGFjdHVhbGx5IGEgZm9ybWF0dGVkIGRhdGUKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOidkYXRlJyBvciBudWxsCgkJICogSW5wdXRzOiAgIHN0cmluZzpzVGV4dCAtIHN0cmluZyB0byBjaGVjawoJCSAqLwoJCWZ1bmN0aW9uICggc0RhdGEgKQoJCXsKCQkJdmFyIGlQYXJzZSA9IERhdGUucGFyc2Uoc0RhdGEpOwoJCQlpZiAoIChpUGFyc2UgIT09IG51bGwgJiYgIWlzTmFOKGlQYXJzZSkpIHx8ICh0eXBlb2Ygc0RhdGEgPT0gJ3N0cmluZycgJiYgc0RhdGEubGVuZ3RoID09PSAwKSApCgkJCXsKCQkJCXJldHVybiAnZGF0ZSc7CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfSwKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiAtCgkJICogUHVycG9zZTogIENoZWNrIHRvIHNlZSBpZiBhIHN0cmluZyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBIVE1MIHN0cmluZwoJCSAqIFJldHVybnM6ICBzdHJpbmc6J2h0bWwnIG9yIG51bGwKCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNUZXh0IC0gc3RyaW5nIHRvIGNoZWNrCgkJICovCgkJZnVuY3Rpb24gKCBzRGF0YSApCgkJewoJCQlpZiAoIHR5cGVvZiBzRGF0YSA9PSAnc3RyaW5nJyAmJiBzRGF0YS5pbmRleE9mKCc8JykgIT0gLTEgJiYgc0RhdGEuaW5kZXhPZignPicpICE9IC0xICkKCQkJewoJCQkJcmV0dXJuICdodG1sJzsKCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9CgldOwoJCgkvKgoJICogRnVuY3Rpb246IGZuVmVyc2lvbkNoZWNrCgkgKiBQdXJwb3NlOiAgQ2hlY2sgYSB2ZXJzaW9uIHN0cmluZyBhZ2FpbnN0IHRoaXMgdmVyc2lvbiBvZiBEYXRhVGFibGVzLiBVc2VmdWwgZm9yIHBsdWctaW5zCgkgKiBSZXR1cm5zOiAgYm9vbDp0cnVlIC10aGlzIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSByZXF1aXJlZCB2ZXJzaW9uCgkgKiAgICAgICAgICAgICAgICBmYWxzZSAtdGhpcyB2ZXJzaW9uIG9mIERhdGFUYWxlcyBpcyBub3Qgc3VpdGFibGUKCSAqIElucHV0czogICBzdHJpbmc6c1ZlcnNpb24gLSB0aGUgdmVyc2lvbiB0byBjaGVjayBhZ2FpbnN0LiBNYXkgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXRzOgoJICogICAgICAgICAgICAgImEiLCAiYS5iIiBvciAiYS5iLmMiCgkgKiBOb3RlczogICAgVGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgY2hlY2sgdGhlIGZpcnN0IHRocmVlIHBhcnRzIG9mIGEgdmVyc2lvbiBzdHJpbmcuIEl0IGlzCgkgKiAgIGFzc3VtZWQgdGhhdCBiZXRhIGFuZCBkZXYgdmVyc2lvbnMgd2lsbCBtZWV0IHRoZSByZXF1aXJlbWVudHMuIFRoaXMgbWlnaHQgY2hhbmdlIGluIGZ1dHVyZQoJICovCglfb0V4dC5mblZlcnNpb25DaGVjayA9IGZ1bmN0aW9uKCBzVmVyc2lvbiApCgl7CgkJLyogVGhpcyBpcyBjaGVhcCwgYnV0IHZlcnkgZWZmZWN0aXZlICovCgkJdmFyIGZuWlBhZCA9IGZ1bmN0aW9uIChacGFkLCBjb3VudCkKCQl7CgkJCXdoaWxlKFpwYWQubGVuZ3RoIDwgY291bnQpIHsKCQkJCVpwYWQgKz0gJzAnOwoJCQl9CgkJCXJldHVybiBacGFkOwoJCX07CgkJdmFyIGFUaGlzID0gX29FeHQuc1ZlcnNpb24uc3BsaXQoJy4nKTsKCQl2YXIgYVRoYXQgPSBzVmVyc2lvbi5zcGxpdCgnLicpOwoJCXZhciBzVGhpcyA9ICcnLCBzVGhhdCA9ICcnOwoJCQoJCWZvciAoIHZhciBpPTAsIGlMZW49YVRoYXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCXNUaGlzICs9IGZuWlBhZCggYVRoaXNbaV0sIDMgKTsKCQkJc1RoYXQgKz0gZm5aUGFkKCBhVGhhdFtpXSwgMyApOwoJCX0KCQkKCQlyZXR1cm4gcGFyc2VJbnQoc1RoaXMsIDEwKSA+PSBwYXJzZUludChzVGhhdCwgMTApOwoJfTsKCQoJLyoKCSAqIFZhcmlhYmxlOiBfb0V4dGVybkNvbmZpZwoJICogUHVycG9zZTogIFN0b3JlIGluZm9ybWF0aW9uIGZvciBEYXRhVGFibGVzIHRvIGFjY2VzcyBnbG9iYWxseSBhYm91dCBvdGhlciBpbnN0YW5jZXMKCSAqIFNjb3BlOiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0CgkgKi8KCV9vRXh0Ll9vRXh0ZXJuQ29uZmlnID0gewoJCS8qIGludDppTmV4dFVuaXF1ZSAtIG5leHQgdW5pcXVlIG51bWJlciBmb3IgYW4gaW5zdGFuY2UgKi8KCQkiaU5leHRVbmlxdWUiOiAwCgl9OwoJCgkKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFNlY3Rpb24gLSBEYXRhVGFibGVzIHByb3RvdHlwZQoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQoJLyoKCSAqIEZ1bmN0aW9uOiBkYXRhVGFibGUKCSAqIFB1cnBvc2U6ICBEYXRhVGFibGVzIGluZm9ybWF0aW9uCgkgKiBSZXR1cm5zOiAgLQoJICogSW5wdXRzOiAgIG9iamVjdDpvSW5pdCAtIGluaXRhbGlzYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhYmxlCgkgKi8KCSQuZm4uZGF0YVRhYmxlID0gZnVuY3Rpb24oIG9Jbml0ICkKCXsKCQkvKgoJCSAqIEZ1bmN0aW9uOiBjbGFzc1NldHRpbmdzCgkJICogUHVycG9zZTogIFNldHRpbmdzIGNvbnRhaW5lciBmdW5jdGlvbiBmb3IgYWxsICdjbGFzcycgcHJvcGVydGllcyB3aGljaCBhcmUgcmVxdWlyZWQKCQkgKiAgIGJ5IGRhdGFUYWJsZXMKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICAtCgkJICovCgkJZnVuY3Rpb24gY2xhc3NTZXR0aW5ncyAoKQoJCXsKCQkJdGhpcy5mblJlY29yZHNUb3RhbCA9IGZ1bmN0aW9uICgpCgkJCXsKCQkJCWlmICggdGhpcy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKSB7CgkJCQkJcmV0dXJuIHBhcnNlSW50KHRoaXMuX2lSZWNvcmRzVG90YWwsIDEwKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIHRoaXMuYWlEaXNwbGF5TWFzdGVyLmxlbmd0aDsKCQkJCX0KCQkJfTsKCQkJCgkJCXRoaXMuZm5SZWNvcmRzRGlzcGxheSA9IGZ1bmN0aW9uICgpCgkJCXsKCQkJCWlmICggdGhpcy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKSB7CgkJCQkJcmV0dXJuIHBhcnNlSW50KHRoaXMuX2lSZWNvcmRzRGlzcGxheSwgMTApOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gdGhpcy5haURpc3BsYXkubGVuZ3RoOwoJCQkJfQoJCQl9OwoJCQkKCQkJdGhpcy5mbkRpc3BsYXlFbmQgPSBmdW5jdGlvbiAoKQoJCQl7CgkJCQlpZiAoIHRoaXMub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkgewoJCQkJCWlmICggdGhpcy5vRmVhdHVyZXMuYlBhZ2luYXRlID09PSBmYWxzZSB8fCB0aGlzLl9pRGlzcGxheUxlbmd0aCA9PSAtMSApIHsKCQkJCQkJcmV0dXJuIHRoaXMuX2lEaXNwbGF5U3RhcnQrdGhpcy5haURpc3BsYXkubGVuZ3RoOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXJldHVybiBNYXRoLm1pbiggdGhpcy5faURpc3BsYXlTdGFydCt0aGlzLl9pRGlzcGxheUxlbmd0aCwgCgkJCQkJCQl0aGlzLl9pUmVjb3Jkc0Rpc3BsYXkgKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCXJldHVybiB0aGlzLl9pRGlzcGxheUVuZDsKCQkJCX0KCQkJfTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvSW5zdGFuY2UKCQkJICogUHVycG9zZTogIFRoZSBEYXRhVGFibGVzIG9iamVjdCBmb3IgdGhpcyB0YWJsZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzIAoJCQkgKi8KCQkJdGhpcy5vSW5zdGFuY2UgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNJbnN0YW5jZQoJCQkgKiBQdXJwb3NlOiAgVW5pcXVlIGlkZW5kaWZpZXIgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIERhdGFUYWJsZXMgb2JqZWN0CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLnNJbnN0YW5jZSA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogb0ZlYXR1cmVzCgkJCSAqIFB1cnBvc2U6ICBJbmRpY2F0ZSB0aGUgZW5hYmxlbWVudCBvZiBrZXkgZGF0YVRhYmxlIGZlYXR1cmVzCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLm9GZWF0dXJlcyA9IHsKCQkJCSJiUGFnaW5hdGUiOiB0cnVlLAoJCQkJImJMZW5ndGhDaGFuZ2UiOiB0cnVlLAoJCQkJImJGaWx0ZXIiOiB0cnVlLAoJCQkJImJTb3J0IjogdHJ1ZSwKCQkJCSJiSW5mbyI6IHRydWUsCgkJCQkiYkF1dG9XaWR0aCI6IHRydWUsCgkJCQkiYlByb2Nlc3NpbmciOiBmYWxzZSwKCQkJCSJiU29ydENsYXNzZXMiOiB0cnVlLAoJCQkJImJTdGF0ZVNhdmUiOiBmYWxzZSwKCQkJCSJiU2VydmVyU2lkZSI6IGZhbHNlLAoJCQkJImJEZWZlclJlbmRlciI6IGZhbHNlCgkJCX07CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogb1Njcm9sbAoJCQkgKiBQdXJwb3NlOiAgQ29udGFpbmVyIGZvciBzY3JvbGxpbmcgb3B0aW9ucwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzIAoJCQkgKi8KCQkJdGhpcy5vU2Nyb2xsID0gewoJCQkJInNYIjogIiIsCgkJCQkic1hJbm5lciI6ICIiLAoJCQkJInNZIjogIiIsCgkJCQkiYkNvbGxhcHNlIjogZmFsc2UsCgkJCQkiYkluZmluaXRlIjogZmFsc2UsCgkJCQkiaUxvYWRHYXAiOiAxMDAsCgkJCQkiaUJhcldpZHRoIjogMCwKCQkJCSJiQXV0b0NzcyI6IHRydWUKCQkJfTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhYW5GZWF0dXJlcwoJCQkgKiBQdXJwb3NlOiAgQXJyYXkgcmVmZXJlbmNpbmcgdGhlIG5vZGVzIHdoaWNoIGFyZSB1c2VkIGZvciB0aGUgZmVhdHVyZXMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICogTm90ZXM6ICAgIFRoZSBwYXJhbWV0ZXJzIG9mIHRoaXMgb2JqZWN0IG1hdGNoIHdoYXQgaXMgYWxsb3dlZCBieSBzRG9tIC0gaS5lLgoJCQkgKiAgICdsJyAtIExlbmd0aCBjaGFuZ2luZwoJCQkgKiAgICdmJyAtIEZpbHRlcmluZyBpbnB1dAoJCQkgKiAgICd0JyAtIFRoZSB0YWJsZSEKCQkJICogICAnaScgLSBJbmZvcm1hdGlvbgoJCQkgKiAgICdwJyAtIFBhZ2luYXRpb24KCQkJICogICAncicgLSBwUm9jZXNzaW5nCgkJCSAqLwoJCQl0aGlzLmFhbkZlYXR1cmVzID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogb0xhbmd1YWdlCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSB0aGUgbGFuZ3VhZ2Ugc3RyaW5ncyB1c2VkIGJ5IGRhdGFUYWJsZXMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgVGhlIHdvcmRzIGluIHRoZSBmb3JtYXQgX1ZBUl8gYXJlIHZhcmlhYmxlcyB3aGljaCBhcmUgZHluYW1pY2FsbHkgcmVwbGFjZWQKCQkJICogICBieSBqYXZhc2NyaXB0CgkJCSAqLwoJCQl0aGlzLm9MYW5ndWFnZSA9IHsKCQkJICAgICJzUHJvY2Vzc2luZyI6ICJTcHJhY8O6dmEgc2EuLi4iLAoJCQkgICAgInNMZW5ndGhNZW51IjogIlVrYXp1amUgc2EgX01FTlVfIHBvbG/FvmllayIsCgkJCSAgICAic1plcm9SZWNvcmRzIjogIk5lbmHFoWxpIHNhIHpvZHBvdmVkYWrDumNlIHrDoXpuYW15IiwKCQkJICAgICJzRW1wdHlUYWJsZSI6ICJUYWJ1xL5rYSBuZW3DoSBkw6F0YSIsCgkJCSAgICAic0xvYWRpbmdSZWNvcmRzIjogIk1vbWVudCBwcm9zw61tLi4uIiwKCQkJICAgICJzSW5mbyI6ICJvZCBfU1RBUlRfIGRvIF9FTkRfIHogY2Vsa292w71jaCBfVE9UQUxfIHBvbG/FvmllayIsCgkJCSAgICAic0luZm9FbXB0eSI6ICJPZCAwIGRvIDAgeiAwIHBvbG/FvmllayIsCgkJCQkic0luZm9GaWx0ZXJlZCI6ICIiLAoJCQkJInNJbmZvUG9zdEZpeCI6ICIiLAoJCQkJInNTZWFyY2giOiAiU2VhcmNoOiIsCgkJCQkic1VybCI6ICIiLAoJCQkJIm9QYWdpbmF0ZSI6IHsKCQkJCQkic0ZpcnN0IjogICAgIkZpcnN0IiwKCQkJCQkic1ByZXZpb3VzIjogIlByZXZpb3VzIiwKCQkJCQkic05leHQiOiAgICAgIk5leHQiLAoJCQkJCSJzTGFzdCI6ICAgICAiTGFzdCIKCQkJCX0sCgkJCQkiZm5JbmZvQ2FsbGJhY2siOiBudWxsCgkJCX07CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYW9EYXRhCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSBkYXRhIGluZm9ybWF0aW9uCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqIE5vdGVzOiAgICBUaGlzIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgkJCSAqICAgaW50OiBfaUlkIC0gaW50ZXJuYWwgaWQgZm9yIHRyYWNraW5nCgkJCSAqICAgYXJyYXk6IF9hRGF0YSAtIGludGVybmFsIGRhdGEgLSB1c2VkIGZvciBzb3J0aW5nIC8gZmlsdGVyaW5nIGV0YwoJCQkgKiAgIG5vZGU6IG5UciAtIGRpc3BsYXkgbm9kZQoJCQkgKiAgIGFycmF5IG5vZGU6IF9hbkhpZGRlbiAtIGhpZGRlbiBURCBub2RlcwoJCQkgKiAgIHN0cmluZzogX3NSb3dTdHJpcGUKCQkJICovCgkJCXRoaXMuYW9EYXRhID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYWlEaXNwbGF5CgkJCSAqIFB1cnBvc2U6ICBBcnJheSBvZiBpbmRleGVzIHdoaWNoIGFyZSBpbiB0aGUgY3VycmVudCBkaXNwbGF5IChhZnRlciBmaWx0ZXJpbmcgZXRjKQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFpRGlzcGxheSA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFpRGlzcGxheU1hc3RlcgoJCQkgKiBQdXJwb3NlOiAgQXJyYXkgb2YgaW5kZXhlcyBmb3IgZGlzcGxheSAtIG5vIGZpbHRlcmluZwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFpRGlzcGxheU1hc3RlciA9IFtdOwoJCQkJCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhb0NvbHVtbnMKCQkJICogUHVycG9zZTogIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY29sdW1uIHRoYXQgaXMgaW4gdXNlCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLmFvQ29sdW1ucyA9IFtdOwoJCQkJCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhb0hlYWRlcgoJCQkgKiBQdXJwb3NlOiAgU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlJ3MgaGVhZGVyCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLmFvSGVhZGVyID0gW107CgkJCQkJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvRm9vdGVyCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFibGUncyBmb290ZXIKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncyAKCQkJICovCgkJCXRoaXMuYW9Gb290ZXIgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBpTmV4dElkCgkJCSAqIFB1cnBvc2U6ICBTdG9yZSB0aGUgbmV4dCB1bmlxdWUgaWQgdG8gYmUgdXNlZCBmb3IgYSBuZXcgcm93CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MgCgkJCSAqLwoJCQl0aGlzLmlOZXh0SWQgPSAwOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFzRGF0YVNlYXJjaAoJCQkgKiBQdXJwb3NlOiAgU2VhcmNoIGRhdGEgYXJyYXkgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2hpbmcKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5hc0RhdGFTZWFyY2ggPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvUHJldmlvdXNTZWFyY2gKCQkJICogUHVycG9zZTogIFN0b3JlIHRoZSBwcmV2aW91cyBzZWFyY2ggaW5jYXNlIHdlIHdhbnQgdG8gZm9yY2UgYSByZS1zZWFyY2gKCQkJICogICBvciBjb21wYXJlIHRoZSBvbGQgc2VhcmNoIHRvIGEgbmV3IG9uZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm9QcmV2aW91c1NlYXJjaCA9IHsKCQkJCSJzU2VhcmNoIjogIiIsCgkJCQkiYlJlZ2V4IjogZmFsc2UsCgkJCQkiYlNtYXJ0IjogdHJ1ZQoJCQl9OwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvUHJlU2VhcmNoQ29scwoJCQkgKiBQdXJwb3NlOiAgU3RvcmUgdGhlIHByZXZpb3VzIHNlYXJjaCBmb3IgZWFjaCBjb2x1bW4KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5hb1ByZVNlYXJjaENvbHMgPSBbXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhYVNvcnRpbmcKCQkJICogUHVycG9zZTogIFNvcnRpbmcgaW5mb3JtYXRpb24KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgSW5kZXggMCAtIGNvbHVtbiBudW1iZXIKCQkJICogICAgICAgICAgIEluZGV4IDEgLSBjdXJyZW50IHNvcnRpbmcgZGlyZWN0aW9uCgkJCSAqICAgICAgICAgICBJbmRleCAyIC0gaW5kZXggb2YgYXNTb3J0aW5nIGZvciB0aGlzIGNvbHVtbgoJCQkgKi8KCQkJdGhpcy5hYVNvcnRpbmcgPSBbIFswLCAnYXNjJywgMF0gXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhYVNvcnRpbmdGaXhlZAoJCQkgKiBQdXJwb3NlOiAgU29ydGluZyBpbmZvcm1hdGlvbiB0aGF0IGlzIGFsd2F5cyBhcHBsaWVkCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuYWFTb3J0aW5nRml4ZWQgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFzU3RyaXBDbGFzc2VzCgkJCSAqIFB1cnBvc2U6ICBDbGFzc2VzIHRvIHVzZSBmb3IgdGhlIHN0cmlwaW5nIG9mIGEgdGFibGUKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5hc1N0cmlwQ2xhc3NlcyA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFzRGVzdG9yeVN0cmlwcwoJCQkgKiBQdXJwb3NlOiAgSWYgcmVzdG9yaW5nIGEgdGFibGUgLSB3ZSBzaG91bGQgcmVzdG9yZSBpdCdzIHN0cmlwaW5nIGNsYXNzZXMgYXMgd2VsbAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmFzRGVzdG9yeVN0cmlwcyA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IHNEZXN0cm95V2lkdGgKCQkJICogUHVycG9zZTogIElmIHJlc3RvcmluZyBhIHRhYmxlIC0gd2Ugc2hvdWxkIHJlc3RvcmUgaXQncyB3aWR0aAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLnNEZXN0cm95V2lkdGggPSAwOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuUm93Q2FsbGJhY2sKCQkJICogUHVycG9zZTogIENhbGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIGEgcm93IGlzIGluc2VydGVkIChkcmF3KQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuUm93Q2FsbGJhY2sgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuSGVhZGVyQ2FsbGJhY2sKCQkJICogUHVycG9zZTogIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgaGVhZGVyIG9uIGVhY2ggZHJhdwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuSGVhZGVyQ2FsbGJhY2sgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuRm9vdGVyQ2FsbGJhY2sKCQkJICogUHVycG9zZTogIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZm9vdGVyIG9uIGVhY2ggZHJhdwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuRm9vdGVyQ2FsbGJhY2sgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvRHJhd0NhbGxiYWNrCgkJCSAqIFB1cnBvc2U6ICBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIGRyYXcgY2FsbGJhY2sgZnVuY3Rpb25zCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICogTm90ZXM6ICAgIEVhY2ggYXJyYXkgZWxlbWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CgkJCSAqICAgZnVuY3Rpb246Zm4gLSBmdW5jdGlvbiB0byBjYWxsCgkJCSAqICAgc3RyaW5nOnNOYW1lIC0gbmFtZSBjYWxsYmFjayAoZmVhdHVyZSkuIHVzZWZ1bCBmb3IgYXJyYW5naW5nIGFycmF5CgkJCSAqLwoJCQl0aGlzLmFvRHJhd0NhbGxiYWNrID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5QcmVEcmF3Q2FsbGJhY2sKCQkJICogUHVycG9zZTogIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBqdXN0IGJlZm9yZSB0aGUgdGFibGUgaXMgcmVkcmF3bi4gQSByZXR1cm4gb2YgZmFsc2UKCQkJICogICAgICAgICAgIHdpbGwgYmUgdXNlZCB0byBjYW5jZWwgdGhlIGRyYXcuCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5QcmVEcmF3Q2FsbGJhY2sgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuSW5pdENvbXBsZXRlCgkJCSAqIFB1cnBvc2U6ICBDYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB0aGUgdGFibGUgaGFzIGJlZW4gaW5pdGFsaXNlZAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuSW5pdENvbXBsZXRlID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzVGFibGVJZAoJCQkgKiBQdXJwb3NlOiAgQ2FjaGUgdGhlIHRhYmxlIElEIGZvciBxdWljayBhY2Nlc3MKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5zVGFibGVJZCA9ICIiOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG5UYWJsZQoJCQkgKiBQdXJwb3NlOiAgQ2FjaGUgdGhlIHRhYmxlIG5vZGUgZm9yIHF1aWNrIGFjY2VzcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm5UYWJsZSA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogblRIZWFkCgkJCSAqIFB1cnBvc2U6ICBQZXJtYW5lbnQgcmVmIHRvIHRoZSB0aGVhZCBlbGVtZW50CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMublRIZWFkID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBuVEZvb3QKCQkJICogUHVycG9zZTogIFBlcm1hbmVudCByZWYgdG8gdGhlIHRmb290IGVsZW1lbnQgLSBpZiBpdCBleGlzdHMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5uVEZvb3QgPSBudWxsOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IG5UQm9keQoJCQkgKiBQdXJwb3NlOiAgUGVybWFuZW50IHJlZiB0byB0aGUgdGJvZHkgZWxlbWVudAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm5UQm9keSA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogblRhYmxlV3JhcHBlcgoJCQkgKiBQdXJwb3NlOiAgQ2FjaGUgdGhlIHdyYXBwZXIgbm9kZSAoY29udGFpbnMgYWxsIERhdGFUYWJsZXMgY29udHJvbGxlZCBlbGVtZW50cykKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5uVGFibGVXcmFwcGVyID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiRGVmZXJMb2FkaW5nCgkJCSAqIFB1cnBvc2U6ICBJbmRpY2F0ZSBpZiB3aGVuIHVzaW5nIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgdGhlIGxvYWRpbmcgb2YgZGF0YSAKCQkJICogICAgICAgICAgIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgc2Vjb25kIGRyYXcKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5iRGVmZXJMb2FkaW5nID0gZmFsc2U7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYkluaXRpYWxpc2VkCgkJCSAqIFB1cnBvc2U6ICBJbmRpY2F0ZSBpZiBhbGwgcmVxdWlyZWQgaW5mb3JtYXRpb24gaGFzIGJlZW4gcmVhZCBpbgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJJbml0aWFsaXNlZCA9IGZhbHNlOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvT3BlblJvd3MKCQkJICogUHVycG9zZTogIEluZm9ybWF0aW9uIGFib3V0IG9wZW4gcm93cwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGVzOiAgICBIYXMgdGhlIHBhcmFtZXRlcnMgJ25UcicgYW5kICduUGFyZW50JwoJCQkgKi8KCQkJdGhpcy5hb09wZW5Sb3dzID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogc0RvbQoJCQkgKiBQdXJwb3NlOiAgRGljdGF0ZSB0aGUgcG9zaXRpb25pbmcgdGhhdCB0aGUgY3JlYXRlZCBlbGVtZW50cyB3aWxsIHRha2UKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgCgkJCSAqICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkOgoJCQkgKiAgICAgJ2wnIC0gTGVuZ3RoIGNoYW5naW5nCgkJCSAqICAgICAnZicgLSBGaWx0ZXJpbmcgaW5wdXQKCQkJICogICAgICd0JyAtIFRoZSB0YWJsZSEKCQkJICogICAgICdpJyAtIEluZm9ybWF0aW9uCgkJCSAqICAgICAncCcgLSBQYWdpbmF0aW9uCgkJCSAqICAgICAncicgLSBwUm9jZXNzaW5nCgkJCSAqICAgVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGFsbG93ZWQ6CgkJCSAqICAgICAnSCcgLSBqUXVlcnlVSSB0aGVtZSAiaGVhZGVyIiBjbGFzc2VzCgkJCSAqICAgICAnRicgLSBqUXVlcnlVSSB0aGVtZSAiZm9vdGVyIiBjbGFzc2VzCgkJCSAqICAgVGhlIGZvbGxvd2luZyBzeW50YXggaXMgZXhwZWN0ZWQ6CgkJCSAqICAgICAnPCcgYW5kICc+JyAtIGRpdiBlbGVtZW50cwoJCQkgKiAgICAgJzwiY2xhc3MiIGFuZCAnPicgLSBkaXYgd2l0aCBhIGNsYXNzCgkJCSAqICAgRXhhbXBsZXM6CgkJCSAqICAgICAnPCJ3cmFwcGVyImZsaXB0PicsICc8bGY8dD5pcD4nCgkJCSAqLwoJCQl0aGlzLnNEb20gPSAnbGZydGlwJzsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzUGFnaW5hdGlvblR5cGUKCQkJICogUHVycG9zZTogIE5vdGUgd2hpY2ggdHlwZSBvZiBzb3J0aW5nIHNob3VsZCBiZSB1c2VkCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuc1BhZ2luYXRpb25UeXBlID0gInR3b19idXR0b24iOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGlDb29raWVEdXJhdGlvbgoJCQkgKiBQdXJwb3NlOiAgVGhlIGNvb2tpZSBkdXJhdGlvbiAoZm9yIGJTdGF0ZVNhdmUpIGluIHNlY29uZHMgLSBkZWZhdWx0IDIgaG91cnMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5pQ29va2llRHVyYXRpb24gPSA2MCAqIDYwICogMjsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzQ29va2llUHJlZml4CgkJCSAqIFB1cnBvc2U6ICBUaGUgY29va2llIG5hbWUgcHJlZml4CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuc0Nvb2tpZVByZWZpeCA9ICJTcHJ5TWVkaWFfRGF0YVRhYmxlc18iOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGZuQ29va2llQ2FsbGJhY2sKCQkJICogUHVycG9zZTogIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBjb29raWUgY3JlYXRpb24KCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5mbkNvb2tpZUNhbGxiYWNrID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBhb1N0YXRlU2F2ZQoJCQkgKiBQdXJwb3NlOiAgQXJyYXkgb2YgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBzdGF0ZSBzYXZpbmcKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgRWFjaCBhcnJheSBlbGVtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCQkJICogICBmdW5jdGlvbjpmbiAtIGZ1bmN0aW9uIHRvIGNhbGwuIFRha2VzIHR3byBwYXJhbWV0ZXJzLCBvU2V0dGluZ3MgYW5kIHRoZSBKU09OIHN0cmluZyB0bwoJCQkgKiAgICAgc2F2ZSB0aGF0IGhhcyBiZWVuIHRodXMgZmFyIGNyZWF0ZWQuIFJldHVybnMgYSBKU09OIHN0cmluZyB0byBiZSBpbnNlcnRlZCBpbnRvIGEgCgkJCSAqICAgICBqc29uIG9iamVjdCAoaS5lLiAnInBhcmFtIjogWyAwLCAxLCAyXScpCgkJCSAqICAgc3RyaW5nOnNOYW1lIC0gbmFtZSBvZiBjYWxsYmFjawoJCQkgKi8KCQkJdGhpcy5hb1N0YXRlU2F2ZSA9IFtdOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFvU3RhdGVMb2FkCgkJCSAqIFB1cnBvc2U6ICBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHN0YXRlIGxvYWRpbmcKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgRWFjaCBhcnJheSBlbGVtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCQkJICogICBmdW5jdGlvbjpmbiAtIGZ1bmN0aW9uIHRvIGNhbGwuIFRha2VzIHR3byBwYXJhbWV0ZXJzLCBvU2V0dGluZ3MgYW5kIHRoZSBvYmplY3Qgc3RvcmVkLgoJCQkgKiAgICAgTWF5IHJldHVybiBmYWxzZSB0byBjYW5jZWwgc3RhdGUgbG9hZGluZy4KCQkJICogICBzdHJpbmc6c05hbWUgLSBuYW1lIG9mIGNhbGxiYWNrCgkJCSAqLwoJCQl0aGlzLmFvU3RhdGVMb2FkID0gW107CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogb0xvYWRlZFN0YXRlCgkJCSAqIFB1cnBvc2U6ICBTdGF0ZSB0aGF0IHdhcyBsb2FkZWQgZnJvbSB0aGUgY29va2llLiBVc2VmdWwgZm9yIGJhY2sgcmVmZXJlbmNlCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMub0xvYWRlZFN0YXRlID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBzQWpheFNvdXJjZQoJCQkgKiBQdXJwb3NlOiAgU291cmNlIHVybCBmb3IgQUpBWCBkYXRhIGZvciB0aGUgdGFibGUKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5zQWpheFNvdXJjZSA9IG51bGw7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogc0FqYXhEYXRhUHJvcAoJCQkgKiBQdXJwb3NlOiAgUHJvcGVydHkgZnJvbSBhIGdpdmVuIG9iamVjdCBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIHRhYmxlIGRhdGEgZnJvbS4gVGhpcyBjYW4KCQkJICogICAgICAgICAgIGJlIGFuIGVtcHR5IHN0cmluZyAod2hlbiBub3Qgc2VydmVyLXNpZGUgcHJvY2Vzc2luZyksIGluIHdoaWNoIGNhc2UgaXQgaXMgCgkJCSAqICAgICAgICAgICBhc3N1bWVkIGFuIGFuIGFycmF5IGlzIGdpdmVuIGRpcmVjdGx5LgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLnNBamF4RGF0YVByb3AgPSAnYWFEYXRhJzsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiQWpheERhdGFHZXQKCQkJICogUHVycG9zZTogIE5vdGUgaWYgZHJhdyBzaG91bGQgYmUgYmxvY2tlZCB3aGlsZSBnZXR0aW5nIGRhdGEKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5iQWpheERhdGFHZXQgPSB0cnVlOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGpxWEhSCgkJCSAqIFB1cnBvc2U6ICBUaGUgbGFzdCBqUXVlcnkgWEhSIG9iamVjdCB0aGF0IHdhcyB1c2VkIGZvciBzZXJ2ZXItc2lkZSBkYXRhIGdhdGhlcmluZy4gCgkJCSAqICAgICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIGZvciB3b3JraW5nIHdpdGggdGhlIFhIUiBpbmZvcm1hdGlvbiBpbiBvbmUgb2YgdGhlIGNhbGxiYWNrcwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmpxWEhSID0gbnVsbDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBmblNlcnZlckRhdGEKCQkJICogUHVycG9zZTogIEZ1bmN0aW9uIHRvIGdldCB0aGUgc2VydmVyLXNpZGUgZGF0YSAtIGNhbiBiZSBvdmVycnVsZWQgYnkgdGhlIGRldmVsb3BlcgoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmZuU2VydmVyRGF0YSA9IGZ1bmN0aW9uICggdXJsLCBkYXRhLCBjYWxsYmFjaywgc2V0dGluZ3MgKSB7CgkJCQlzZXR0aW5ncy5qcVhIUiA9ICQuYWpheCggewoJCQkJCSJ1cmwiOiB1cmwsCgkJCQkJImRhdGEiOiBkYXRhLAoJCQkJCSJzdWNjZXNzIjogY2FsbGJhY2ssCgkJCQkJImRhdGFUeXBlIjogImpzb24iLAoJCQkJCSJjYWNoZSI6IGZhbHNlLAoJCQkJCSJlcnJvciI6IGZ1bmN0aW9uICh4aHIsIGVycm9yLCB0aHJvd24pIHsKCQkJCQkJaWYgKCBlcnJvciA9PSAicGFyc2VyZXJyb3IiICkgewoJCQkJCQkJYWxlcnQoICJEYXRhVGFibGVzIHdhcm5pbmc6IEpTT04gZGF0YSBmcm9tIHNlcnZlciBjb3VsZCBub3QgYmUgcGFyc2VkLiAiKwoJCQkJCQkJCSJUaGlzIGlzIGNhdXNlZCBieSBhIEpTT04gZm9ybWF0dGluZyBlcnJvci4iICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9ICk7CgkJCX07CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogZm5Gb3JtYXROdW1iZXIKCQkJICogUHVycG9zZTogIEZvcm1hdCBudW1iZXJzIGZvciBkaXNwbGF5CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMuZm5Gb3JtYXROdW1iZXIgPSBmdW5jdGlvbiAoIGlJbiApCgkJCXsKCQkJCWlmICggaUluIDwgMTAwMCApCgkJCQl7CgkJCQkJLyogQSBzbWFsbCBvcHRpbWlzYXRpb24gZm9yIHdoYXQgaXMgbGlrZWx5IHRvIGJlIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZSBjYXNlcyAqLwoJCQkJCXJldHVybiBpSW47CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdmFyIHM9KGlJbisiIiksIGE9cy5zcGxpdCgiIiksIG91dD0iIiwgaUxlbj1zLmxlbmd0aDsKCQkJCQkKCQkJCQlmb3IgKCB2YXIgaT0wIDsgaTxpTGVuIDsgaSsrICkKCQkJCQl7CgkJCQkJCWlmICggaSUzID09PSAwICYmIGkgIT09IDAgKQoJCQkJCQl7CgkJCQkJCQlvdXQgPSAnLCcrb3V0OwoJCQkJCQl9CgkJCQkJCW91dCA9IGFbaUxlbi1pLTFdK291dDsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gb3V0OwoJCQl9OwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGFMZW5ndGhNZW51CgkJCSAqIFB1cnBvc2U6ICBMaXN0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhlIHVzZXIgc2VsZWN0YWJsZSBsZW5ndGggbWVudQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqIE5vdGU6ICAgICBUaGlzIHZhcmFpYmxlIGNhbiB0YWtlIGZvciBmb3JtIG9mIGEgMUQgYXJyYXksIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIGFuZCB0aGUgCgkJCSAqICAgZGlzcGxheWVkIHZhbHVlIGluIHRoZSBtZW51IGFyZSB0aGUgc2FtZSwgb3IgYSAyRCBhcnJheSBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBjb21lcwoJCQkgKiAgIGZyb20gdGhlIGZpcnN0IGFycmF5LCBhbmQgdGhlIGRpc3BsYXllZCB2YWx1ZSB0byB0aGUgZW5kIHVzZXIgY29tZXMgZnJvbSB0aGUgc2Vjb25kCgkJCSAqICAgYXJyYXkuIDJEIGV4YW1wbGU6IFsgWyAxMCwgMjUsIDUwLCAxMDAsIC0xIF0sIFsgMTAsIDI1LCA1MCwgMTAwLCAnQWxsJyBdIF07CgkJCSAqLwoJCQl0aGlzLmFMZW5ndGhNZW51ID0gWyAxMCwgMjUsIDUwLCAxMDAgXTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBpRHJhdwoJCQkgKiBQdXJwb3NlOiAgQ291bnRlciBmb3IgdGhlIGRyYXdzIHRoYXQgdGhlIHRhYmxlIGRvZXMuIEFsc28gdXNlZCBhcyBhIHRyYWNrZXIgZm9yCgkJCSAqICAgc2VydmVyLXNpZGUgcHJvY2Vzc2luZwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmlEcmF3ID0gMDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiRHJhd2luZwoJCQkgKiBQdXJwb3NlOiAgSW5kaWNhdGUgaWYgYSByZWRyYXcgaXMgYmVpbmcgZG9uZSAtIHVzZWZ1bCBmb3IgQWpheAoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJEcmF3aW5nID0gMDsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBpRHJhd0Vycm9yCgkJCSAqIFB1cnBvc2U6ICBMYXN0IGRyYXcgZXJyb3IKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5pRHJhd0Vycm9yID0gLTE7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogX2lEaXNwbGF5TGVuZ3RoLCBfaURpc3BsYXlTdGFydCwgX2lEaXNwbGF5RW5kCgkJCSAqIFB1cnBvc2U6ICBEaXNwbGF5IGxlbmd0aCB2YXJpYWJsZXMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKiBOb3RlczogICAgVGhlc2UgdmFyaWFibGUgbXVzdCBOT1QgYmUgdXNlZCBleHRlcm5hbGx5IHRvIGdldCB0aGUgZGF0YSBsZW5ndGguIFJhdGhlciwgdXNlCgkJCSAqICAgdGhlIGZuUmVjb3Jkc1RvdGFsKCkgKGV0YykgZnVuY3Rpb25zLgoJCQkgKi8KCQkJdGhpcy5faURpc3BsYXlMZW5ndGggPSAxMDsKCQkJdGhpcy5faURpc3BsYXlTdGFydCA9IDA7CgkJCXRoaXMuX2lEaXNwbGF5RW5kID0gMTA7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogX2lSZWNvcmRzVG90YWwsIF9pUmVjb3Jkc0Rpc3BsYXkKCQkJICogUHVycG9zZTogIERpc3BsYXkgbGVuZ3RoIHZhcmlhYmxlcyB1c2VkIGZvciBzZXJ2ZXIgc2lkZSBwcm9jZXNzaW5nCgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICogTm90ZXM6ICAgIFRoZXNlIHZhcmlhYmxlIG11c3QgTk9UIGJlIHVzZWQgZXh0ZXJuYWxseSB0byBnZXQgdGhlIGRhdGEgbGVuZ3RoLiBSYXRoZXIsIHVzZQoJCQkgKiAgIHRoZSBmblJlY29yZHNUb3RhbCgpIChldGMpIGZ1bmN0aW9ucy4KCQkJICovCgkJCXRoaXMuX2lSZWNvcmRzVG90YWwgPSAwOwoJCQl0aGlzLl9pUmVjb3Jkc0Rpc3BsYXkgPSAwOwoJCQkKCQkJLyoKCQkJICogVmFyaWFibGU6IGJKVUkKCQkJICogUHVycG9zZTogIFNob3VsZCB3ZSBhZGQgdGhlIG1hcmt1cCBuZWVkZWQgZm9yIGpRdWVyeSBVSSB0aGVtaW5nPwoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLmJKVUkgPSBmYWxzZTsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBvQ2xhc3NlcwoJCQkgKiBQdXJwb3NlOiAgU2hvdWxkIHdlIGFkZCB0aGUgbWFya3VwIG5lZWRlZCBmb3IgalF1ZXJ5IFVJIHRoZW1pbmc/CgkJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlLmNsYXNzU2V0dGluZ3MKCQkJICovCgkJCXRoaXMub0NsYXNzZXMgPSBfb0V4dC5vU3RkQ2xhc3NlczsKCQkJCgkJCS8qCgkJCSAqIFZhcmlhYmxlOiBiRmlsdGVyZWQgYW5kIGJTb3J0ZWQKCQkJICogUHVycG9zZTogIEZsYWdzIHRvIGFsbG93IGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBzZWUgd2hhdCBhY3Rpb25zIGhhdmUgYmVlbiBwZXJmb3JtZWQKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5iRmlsdGVyZWQgPSBmYWxzZTsKCQkJdGhpcy5iU29ydGVkID0gZmFsc2U7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogYlNvcnRDZWxsc1RvcAoJCQkgKiBQdXJwb3NlOiAgSW5kaWNhdGUgdGhhdCBpZiBtdWx0aXBsZSByb3dzIGFyZSBpbiB0aGUgaGVhZGVyIGFuZCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lCgkJCSAqICAgICAgICAgICB1bmlxdWUgY2VsbCBwZXIgY29sdW1uLCBpZiB0aGUgdG9wIG9uZSAodHJ1ZSkgb3IgYm90dG9tIG9uZSAoZmFsc2UpIHNob3VsZAoJCQkgKiAgICAgICAgICAgYmUgdXNlZCBmb3Igc29ydGluZyAvIHRpdGxlIGJ5IERhdGFUYWJsZXMKCQkJICogU2NvcGU6ICAgIGpRdWVyeS5kYXRhVGFibGUuY2xhc3NTZXR0aW5ncwoJCQkgKi8KCQkJdGhpcy5iU29ydENlbGxzVG9wID0gZmFsc2U7CgkJCQoJCQkvKgoJCQkgKiBWYXJpYWJsZTogb0luaXQKCQkJICogUHVycG9zZTogIEluaXRpYWxpc2F0aW9uIG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIHRoZSB0YWJsZQoJCQkgKiBTY29wZTogICAgalF1ZXJ5LmRhdGFUYWJsZS5jbGFzc1NldHRpbmdzCgkJCSAqLwoJCQl0aGlzLm9Jbml0ID0gbnVsbDsKCQl9CgkJCgkJLyoKCQkgKiBWYXJpYWJsZTogb0FwaQoJCSAqIFB1cnBvc2U6ICBDb250YWluZXIgZm9yIHB1YmxpY2x5IGV4cG9zZWQgJ3ByaXZhdGUnIGZ1bmN0aW9ucwoJCSAqIFNjb3BlOiAgICBqUXVlcnkuZGF0YVRhYmxlCgkJICovCgkJdGhpcy5vQXBpID0ge307CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gQVBJIGZ1bmN0aW9ucwoJCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuRHJhdwoJCSAqIFB1cnBvc2U6ICBSZWRyYXcgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgYm9vbDpiQ29tcGxldGUgLSBSZWZpbHRlciBhbmQgcmVzb3J0IChpZiBlbmFibGVkKSB0aGUgdGFibGUgYmVmb3JlIHRoZSBkcmF3LgoJCSAqICAgICAgICAgICAgIE9wdGlvbmFsOiBkZWZhdWx0IC0gdHJ1ZQoJCSAqLwoJCXRoaXMuZm5EcmF3ID0gZnVuY3Rpb24oIGJDb21wbGV0ZSApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCWlmICggdHlwZW9mIGJDb21wbGV0ZSAhPSAndW5kZWZpbmVkJyAmJiBiQ29tcGxldGUgPT09IGZhbHNlICkKCQkJewoJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJX2ZuUmVEcmF3KCBvU2V0dGluZ3MgKTsKCQkJfQoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5GaWx0ZXIKCQkgKiBQdXJwb3NlOiAgRmlsdGVyIHRoZSBpbnB1dCBiYXNlZCBvbiBkYXRhCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNJbnB1dCAtIHN0cmluZyB0byBmaWx0ZXIgdGhlIHRhYmxlIG9uCgkJICogICAgICAgICAgIGludDppQ29sdW1uIC0gb3B0aW9uYWwgLSBjb2x1bW4gdG8gbGltaXQgZmlsdGVyaW5nIHRvCgkJICogICAgICAgICAgIGJvb2w6YlJlZ2V4IC0gb3B0aW9uYWwgLSB0cmVhdCBhcyByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90IC0gZGVmYXVsdCBmYWxzZQoJCSAqICAgICAgICAgICBib29sOmJTbWFydCAtIG9wdGlvbmFsIC0gcGVyZm9ybSBzbWFydCBmaWx0ZXJpbmcgb3Igbm90IC0gZGVmYXVsdCB0cnVlCgkJICogICAgICAgICAgIGJvb2w6YlNob3dHbG9iYWwgLSBvcHRpb25hbCAtIHNob3cgdGhlIGlucHV0IGdsb2JhbCBmaWx0ZXIgaW4gaXQncyBpbnB1dCBib3goZXMpCgkJICogICAgICAgICAgICAgIC0gZGVmYXVsdCB0cnVlCgkJICovCgkJdGhpcy5mbkZpbHRlciA9IGZ1bmN0aW9uKCBzSW5wdXQsIGlDb2x1bW4sIGJSZWdleCwgYlNtYXJ0LCBiU2hvd0dsb2JhbCApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCQoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIGJSZWdleCA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWJSZWdleCA9IGZhbHNlOwoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBiU21hcnQgPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQliU21hcnQgPSB0cnVlOwoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBiU2hvd0dsb2JhbCA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWJTaG93R2xvYmFsID0gdHJ1ZTsKCQkJfQoJCQkKCQkJaWYgKCB0eXBlb2YgaUNvbHVtbiA9PSAidW5kZWZpbmVkIiB8fCBpQ29sdW1uID09PSBudWxsICkKCQkJewoJCQkJLyogR2xvYmFsIGZpbHRlciAqLwoJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIG9TZXR0aW5ncywgewoJCQkJCSJzU2VhcmNoIjpzSW5wdXQsCgkJCQkJImJSZWdleCI6IGJSZWdleCwKCQkJCQkiYlNtYXJ0IjogYlNtYXJ0CgkJCQl9LCAxICk7CgkJCQkKCQkJCWlmICggYlNob3dHbG9iYWwgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5mICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQl2YXIgbiA9IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5mOwoJCQkJCWZvciAoIHZhciBpPTAsIGlMZW49bi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJCXsKCQkJCQkJJCgnaW5wdXQnLCBuW2ldKS52YWwoIHNJbnB1dCApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIFNpbmdsZSBjb2x1bW4gZmlsdGVyICovCgkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sdW1uIF0uc1NlYXJjaCA9IHNJbnB1dDsKCQkJCW9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbIGlDb2x1bW4gXS5iUmVnZXggPSBiUmVnZXg7CgkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sdW1uIF0uYlNtYXJ0ID0gYlNtYXJ0OwoJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIG9TZXR0aW5ncywgb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaCwgMSApOwoJCQl9CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmblNldHRpbmdzCgkJICogUHVycG9zZTogIEdldCB0aGUgc2V0dGluZ3MgZm9yIGEgcGFydGljdWxhciB0YWJsZSBmb3IgZXh0ZXJuLiBtYW5pcHVsYXRpb24KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICAtCgkJICovCgkJdGhpcy5mblNldHRpbmdzID0gZnVuY3Rpb24oIG5Ob2RlICApCgkJewoJCQlyZXR1cm4gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmblZlcnNpb25DaGVjawoJCSAqIE5vdGVzOiAgICBUaGUgZnVuY3Rpb24gaXMgdGhlIHNhbWUgYXMgdGhlICdzdGF0aWMnIGZ1bmN0aW9uIHByb3ZpZGVkIGluIHRoZSBleHQgdmFyaWFibGUKCQkgKi8KCQl0aGlzLmZuVmVyc2lvbkNoZWNrID0gX29FeHQuZm5WZXJzaW9uQ2hlY2s7CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5Tb3J0CgkJICogUHVycG9zZTogIFNvcnQgdGhlIHRhYmxlIGJ5IGEgcGFydGljdWxhciByb3cKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBpbnQ6aUNvbCAtIHRoZSBkYXRhIGluZGV4IHRvIHNvcnQgb24uIE5vdGUgdGhhdCB0aGlzIHdpbGwKCQkgKiAgIG5vdCBtYXRjaCB0aGUgJ2Rpc3BsYXkgaW5kZXgnIGlmIHlvdSBoYXZlIGhpZGRlbiBkYXRhIGVudHJpZXMKCQkgKi8KCQl0aGlzLmZuU29ydCA9IGZ1bmN0aW9uKCBhYVNvcnQgKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQlvU2V0dGluZ3MuYWFTb3J0aW5nID0gYWFTb3J0OwoJCQlfZm5Tb3J0KCBvU2V0dGluZ3MgKTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuU29ydExpc3RlbmVyCgkJICogUHVycG9zZTogIEF0dGFjaCBhIHNvcnQgbGlzdGVuZXIgdG8gYW4gZWxlbWVudCBmb3IgYSBnaXZlbiBjb2x1bW4KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBub2RlOm5Ob2RlIC0gdGhlIGVsZW1lbnQgdG8gYXR0YWNoIHRoZSBzb3J0IGxpc3RlbmVyIHRvCgkJICogICAgICAgICAgIGludDppQ29sdW1uIC0gdGhlIGNvbHVtbiB0aGF0IGEgY2xpY2sgb24gdGhpcyBub2RlIHdpbGwgc29ydCBvbgoJCSAqICAgICAgICAgICBmdW5jdGlvbjpmbkNhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBzb3J0IGlzIHJ1biAtIG9wdGlvbmFsCgkJICovCgkJdGhpcy5mblNvcnRMaXN0ZW5lciA9IGZ1bmN0aW9uKCBuTm9kZSwgaUNvbHVtbiwgZm5DYWxsYmFjayApCgkJewoJCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXIoIF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApLCBuTm9kZSwgaUNvbHVtbiwKCQkJIAlmbkNhbGxiYWNrICk7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkFkZERhdGEKCQkgKiBQdXJwb3NlOiAgQWRkIG5ldyByb3cocykgaW50byB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgYXJyYXkgaW50OiBhcnJheSBvZiBpbmRleGVzIChhb0RhdGEpIHdoaWNoIGhhdmUgYmVlbiBhZGRlZCAoemVybyBsZW5ndGggb24gZXJyb3IpCgkJICogSW5wdXRzOiAgIGFycmF5Om1EYXRhIC0gdGhlIGRhdGEgdG8gYmUgYWRkZWQuIFRoZSBsZW5ndGggbXVzdCBtYXRjaAoJCSAqICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIGRhdGEgZnJvbSB0aGUgRE9NCgkJICogICAgICAgICAgICAgb3IKCQkgKiAgICAgICAgICAgICBhcnJheSBhcnJheTptRGF0YSAtIDJEIGFycmF5IG9mIGRhdGEgdG8gYmUgYWRkZWQKCQkgKiAgICAgICAgICAgYm9vbDpiUmVkcmF3IC0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QgLSBkZWZhdWx0IHRydWUKCQkgKiBOb3RlczogICAgV2FybmluZyAtIHRoZSByZWZpbHRlciBoZXJlIHdpbGwgY2F1c2UgdGhlIHRhYmxlIHRvIHJlZHJhdwoJCSAqICAgICAgICAgICAgIHN0YXJ0aW5nIGF0IHplcm8KCQkgKiBOb3RlczogICAgVGhhbmtzIHRvIFlla2ltb3YgRGVuaXMgZm9yIGNvbnRyaWJ1dGluZyB0aGUgYmFzaXMgZm9yIHRoaXMgZnVuY3Rpb24hCgkJICovCgkJdGhpcy5mbkFkZERhdGEgPSBmdW5jdGlvbiggbURhdGEsIGJSZWRyYXcgKQoJCXsKCQkJaWYgKCBtRGF0YS5sZW5ndGggPT09IDAgKQoJCQl7CgkJCQlyZXR1cm4gW107CgkJCX0KCQkJCgkJCXZhciBhaVJldHVybiA9IFtdOwoJCQl2YXIgaVRlc3Q7CgkJCQoJCQkvKiBGaW5kIHNldHRpbmdzIGZyb20gdGFibGUgbm9kZSAqLwoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCQoJCQkvKiBDaGVjayBpZiB3ZSB3YW50IHRvIGFkZCBtdWx0aXBsZSByb3dzIG9yIG5vdCAqLwoJCQlpZiAoIHR5cGVvZiBtRGF0YVswXSA9PSAib2JqZWN0IiApCgkJCXsKCQkJCWZvciAoIHZhciBpPTAgOyBpPG1EYXRhLmxlbmd0aCA7IGkrKyApCgkJCQl7CgkJCQkJaVRlc3QgPSBfZm5BZGREYXRhKCBvU2V0dGluZ3MsIG1EYXRhW2ldICk7CgkJCQkJaWYgKCBpVGVzdCA9PSAtMSApCgkJCQkJewoJCQkJCQlyZXR1cm4gYWlSZXR1cm47CgkJCQkJfQoJCQkJCWFpUmV0dXJuLnB1c2goIGlUZXN0ICk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpVGVzdCA9IF9mbkFkZERhdGEoIG9TZXR0aW5ncywgbURhdGEgKTsKCQkJCWlmICggaVRlc3QgPT0gLTEgKQoJCQkJewoJCQkJCXJldHVybiBhaVJldHVybjsKCQkJCX0KCQkJCWFpUmV0dXJuLnB1c2goIGlUZXN0ICk7CgkJCX0KCQkJCgkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQlfZm5SZURyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCXJldHVybiBhaVJldHVybjsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuRGVsZXRlUm93CgkJICogUHVycG9zZTogIFJlbW92ZSBhIHJvdyBmb3IgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIGFycmF5OmFSZXR1cm4gLSB0aGUgcm93IHRoYXQgd2FzIGRlbGV0ZWQKCQkgKiBJbnB1dHM6ICAgbWl4ZWQ6bVRhcmdldCAtIAoJCSAqICAgICAgICAgICAgIGludDogLSBpbmRleCBvZiBhb0RhdGEgdG8gYmUgZGVsZXRlZCwgb3IKCQkgKiAgICAgICAgICAgICBub2RlKFRSKTogLSBUUiBlbGVtZW50IHlvdSB3YW50IHRvIGRlbGV0ZQoJCSAqICAgICAgICAgICBmdW5jdGlvbjpmbkNhbGxCYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gLSBkZWZhdWx0IG51bGwKCQkgKiAgICAgICAgICAgYm9vbDpiUmVkcmF3IC0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QgLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuRGVsZXRlUm93ID0gZnVuY3Rpb24oIG1UYXJnZXQsIGZuQ2FsbEJhY2ssIGJSZWRyYXcgKQoJCXsKCQkJLyogRmluZCBzZXR0aW5ncyBmcm9tIHRhYmxlIG5vZGUgKi8KCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQl2YXIgaSwgaUFPRGF0YUluZGV4OwoJCQkKCQkJaUFPRGF0YUluZGV4ID0gKHR5cGVvZiBtVGFyZ2V0ID09ICdvYmplY3QnKSA/IAoJCQkJX2ZuTm9kZVRvRGF0YUluZGV4KG9TZXR0aW5ncywgbVRhcmdldCkgOiBtVGFyZ2V0OwoJCQkKCQkJLyogUmV0dXJuIHRoZSBkYXRhIGFycmF5IGZyb20gdGhpcyByb3cgKi8KCQkJdmFyIG9EYXRhID0gb1NldHRpbmdzLmFvRGF0YS5zcGxpY2UoIGlBT0RhdGFJbmRleCwgMSApOwoJCQkKCQkJLyogUmVtb3ZlIHRoZSB0YXJnZXQgcm93IGZyb20gdGhlIHNlYXJjaCBhcnJheSAqLwoJCQl2YXIgaURpc3BsYXlJbmRleCA9ICQuaW5BcnJheSggaUFPRGF0YUluZGV4LCBvU2V0dGluZ3MuYWlEaXNwbGF5ICk7CgkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2guc3BsaWNlKCBpRGlzcGxheUluZGV4LCAxICk7CgkJCQoJCQkvKiBEZWxldGUgZnJvbSB0aGUgZGlzcGxheSBhcnJheXMgKi8KCQkJX2ZuRGVsZXRlSW5kZXgoIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIsIGlBT0RhdGFJbmRleCApOwoJCQlfZm5EZWxldGVJbmRleCggb1NldHRpbmdzLmFpRGlzcGxheSwgaUFPRGF0YUluZGV4ICk7CgkJCQoJCQkvKiBJZiB0aGVyZSBpcyBhIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24gLSBjYWxsIGl0ICovCgkJCWlmICggdHlwZW9mIGZuQ2FsbEJhY2sgPT0gImZ1bmN0aW9uIiApCgkJCXsKCQkJCWZuQ2FsbEJhY2suY2FsbCggdGhpcywgb1NldHRpbmdzLCBvRGF0YSApOwoJCQl9CgkJCQoJCQkvKiBDaGVjayBmb3IgYW4gJ292ZXJmbG93JyB0aGV5IGNhc2UgZm9yIGRpc2xheWluZyB0aGUgdGFibGUgKi8KCQkJaWYgKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPj0gb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggKQoJCQl7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgLT0gb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aDsKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0IDwgMCApCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJCX0KCQkJfQoJCQkKCQkJaWYgKCB0eXBlb2YgYlJlZHJhdyA9PSAndW5kZWZpbmVkJyB8fCBiUmVkcmF3ICkKCQkJewoJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQlyZXR1cm4gb0RhdGE7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkNsZWFyVGFibGUKCQkgKiBQdXJwb3NlOiAgUXVpY2tseSBhbmQgc2ltcGx5IGNsZWFyIGEgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCAtIGRlZmF1bHQgdHJ1ZQoJCSAqIE5vdGVzOiAgICBUaGFua3MgdG8gWWVraW1vdiBEZW5pcyBmb3IgY29udHJpYnV0aW5nIHRoZSBiYXNpcyBmb3IgdGhpcyBmdW5jdGlvbiEKCQkgKi8KCQl0aGlzLmZuQ2xlYXJUYWJsZSA9IGZ1bmN0aW9uKCBiUmVkcmF3ICkKCQl7CgkJCS8qIEZpbmQgc2V0dGluZ3MgZnJvbSB0YWJsZSBub2RlICovCgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJX2ZuQ2xlYXJUYWJsZSggb1NldHRpbmdzICk7CgkJCQoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJfQoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5PcGVuCgkJICogUHVycG9zZTogIE9wZW4gYSBkaXNwbGF5IHJvdyAoYXBwZW5kIGEgcm93IGFmdGVyIHRoZSByb3cgaW4gcXVlc3Rpb24pCgkJICogUmV0dXJuczogIG5vZGU6bk5ld1JvdyAtIHRoZSByb3cgb3BlbmVkCgkJICogSW5wdXRzOiAgIG5vZGU6blRyIC0gdGhlIHRhYmxlIHJvdyB0byAnb3BlbicKCQkgKiAgICAgICAgICAgc3RyaW5nfG5vZGV8alF1ZXJ5Om1IdG1sIC0gdGhlIEhUTUwgdG8gcHV0IGludG8gdGhlIHJvdwoJCSAqICAgICAgICAgICBzdHJpbmc6c0NsYXNzIC0gY2xhc3MgdG8gZ2l2ZSB0aGUgbmV3IFREIGNlbGwKCQkgKi8KCQl0aGlzLmZuT3BlbiA9IGZ1bmN0aW9uKCBuVHIsIG1IdG1sLCBzQ2xhc3MgKQoJCXsKCQkJLyogRmluZCBzZXR0aW5ncyBmcm9tIHRhYmxlIG5vZGUgKi8KCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQkKCQkJLyogdGhlIG9sZCBvcGVuIG9uZSBpZiB0aGVyZSBpcyBvbmUgKi8KCQkJdGhpcy5mbkNsb3NlKCBuVHIgKTsKCQkJCgkJCXZhciBuTmV3Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKCQkJdmFyIG5OZXdDZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKCQkJbk5ld1Jvdy5hcHBlbmRDaGlsZCggbk5ld0NlbGwgKTsKCQkJbk5ld0NlbGwuY2xhc3NOYW1lID0gc0NsYXNzOwoJCQluTmV3Q2VsbC5jb2xTcGFuID0gX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICk7CgoJCQlpZiggdHlwZW9mIG1IdG1sLmpxdWVyeSAhPSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgbUh0bWwgPT0gIm9iamVjdCIgKQoJCQl7CgkJCQluTmV3Q2VsbC5hcHBlbmRDaGlsZCggbUh0bWwgKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW5OZXdDZWxsLmlubmVySFRNTCA9IG1IdG1sOwoJCQl9CgoJCQkvKiBJZiB0aGUgblRyIGlzbid0IG9uIHRoZSBwYWdlIGF0IHRoZSBtb21lbnQgLSB0aGVuIHdlIGRvbid0IGluc2VydCBhdCB0aGUgbW9tZW50ICovCgkJCXZhciBuVHJzID0gJCgndHInLCBvU2V0dGluZ3MublRCb2R5KTsKCQkJaWYgKCAkLmluQXJyYXkoblRyLCBuVHJzKSAhPSAtMSApCgkJCXsKCQkJCSQobk5ld1JvdykuaW5zZXJ0QWZ0ZXIoblRyKTsKCQkJfQoJCQkKCQkJb1NldHRpbmdzLmFvT3BlblJvd3MucHVzaCggewoJCQkJIm5UciI6IG5OZXdSb3csCgkJCQkiblBhcmVudCI6IG5UcgoJCQl9ICk7CgkJCQoJCQlyZXR1cm4gbk5ld1JvdzsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuQ2xvc2UKCQkgKiBQdXJwb3NlOiAgQ2xvc2UgYSBkaXNwbGF5IHJvdwoJCSAqIFJldHVybnM6ICBpbnQ6IDAgKHN1Y2Nlc3MpIG9yIDEgKGZhaWxlZCkKCQkgKiBJbnB1dHM6ICAgbm9kZTpuVHIgLSB0aGUgdGFibGUgcm93IHRvICdjbG9zZScKCQkgKi8KCQl0aGlzLmZuQ2xvc2UgPSBmdW5jdGlvbiggblRyICkKCQl7CgkJCS8qIEZpbmQgc2V0dGluZ3MgZnJvbSB0YWJsZSBub2RlICovCgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJCgkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb09wZW5Sb3dzLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvT3BlblJvd3NbaV0ublBhcmVudCA9PSBuVHIgKQoJCQkJewoJCQkJCXZhciBuVHJQYXJlbnQgPSBvU2V0dGluZ3MuYW9PcGVuUm93c1tpXS5uVHIucGFyZW50Tm9kZTsKCQkJCQlpZiAoIG5UclBhcmVudCApCgkJCQkJewoJCQkJCQkvKiBSZW1vdmUgaXQgaWYgaXQgaXMgY3VycmVudGx5IG9uIGRpc3BsYXkgKi8KCQkJCQkJblRyUGFyZW50LnJlbW92ZUNoaWxkKCBvU2V0dGluZ3MuYW9PcGVuUm93c1tpXS5uVHIgKTsKCQkJCQl9CgkJCQkJb1NldHRpbmdzLmFvT3BlblJvd3Muc3BsaWNlKCBpLCAxICk7CgkJCQkJcmV0dXJuIDA7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIDE7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkdldERhdGEKCQkgKiBQdXJwb3NlOiAgUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIGRhdGEgd2hpY2ggaXMgdXNlZCB0byBtYWtlIHVwIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICBhcnJheSBhcnJheSBzdHJpbmc6IDJkIGRhdGEgYXJyYXkgKFtyb3ddW2NvbHVtbl0pIG9yIGFycmF5IHN0cmluZzogMWQgZGF0YSBhcnJheQoJCSAqICAgICAgICAgICBvciBzdHJpbmcgaWYgYm90aCByb3cgYW5kIGNvbHVtbiBhcmUgZ2l2ZW4KCQkgKiBJbnB1dHM6ICAgbWl4ZWQ6bVJvdyAtIG9wdGlvbmFsIC0gaWYgbm90IHByZXNlbnQsIHRoZW4gdGhlIGZ1bGwgMkQgYXJyYXkgZm9yIHRoZSB0YWJsZSAKCQkgKiAgICAgICAgICAgICBpZiBnaXZlbiB0aGVuOgoJCSAqICAgICAgICAgICAgICAgaW50OiAtIHJldHVybiBkYXRhIG9iamVjdCBmb3IgYW9EYXRhIGVudHJ5IG9mIHRoaXMgaW5kZXgKCQkgKiAgICAgICAgICAgICAgIG5vZGUoVFIpOiAtIHJldHVybiBkYXRhIG9iamVjdCBmb3IgdGhpcyBUUiBlbGVtZW50CgkJICogICAgICAgICAgIGludDppQ29sIC0gb3B0aW9uYWwgLSB0aGUgY29sdW1uIHRoYXQgeW91IHdhbnQgdGhlIGRhdGEgb2YuIFRoaXMgd2lsbCB0YWtlIGludG8KCQkgKiAgICAgICAgICAgICAgIGFjY291bnQgbURhdGFQcm9wIGFuZCByZXR1cm4gdGhlIHZhbHVlIERhdGFUYWJsZXMgdXNlcyBmb3IgdGhpcyBjb2x1bW4KCQkgKi8KCQl0aGlzLmZuR2V0RGF0YSA9IGZ1bmN0aW9uKCBtUm93LCBpQ29sICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJCgkJCWlmICggdHlwZW9mIG1Sb3cgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQl2YXIgaVJvdyA9ICh0eXBlb2YgbVJvdyA9PSAnb2JqZWN0JykgPyAKCQkJCQlfZm5Ob2RlVG9EYXRhSW5kZXgob1NldHRpbmdzLCBtUm93KSA6IG1Sb3c7CgkJCQkKCQkJCWlmICggdHlwZW9mIGlDb2wgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCXJldHVybiBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sLCAnJyApOwoJCQkJfQoJCQkJcmV0dXJuICh0eXBlb2Ygb1NldHRpbmdzLmFvRGF0YVtpUm93XSAhPSAndW5kZWZpbmVkJykgPyAKCQkJCQlvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLl9hRGF0YSA6IG51bGw7CgkJCX0KCQkJcmV0dXJuIF9mbkdldERhdGFNYXN0ZXIoIG9TZXR0aW5ncyApOwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5HZXROb2RlcwoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgVFIgbm9kZXMgdXNlZCBmb3IgZHJhd2luZyB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgYXJyYXkgbm9kZTogVFIgZWxlbWVudHMKCQkgKiAgICAgICAgICAgb3IKCQkgKiAgICAgICAgICAgbm9kZSAoaWYgaVJvdyBzcGVjaWZpZWQpCgkJICogSW5wdXRzOiAgIGludDppUm93IC0gb3B0aW9uYWwgLSBpZiBwcmVzZW50IHRoZW4gdGhlIGFycmF5IHJldHVybmVkIHdpbGwgYmUgdGhlIG5vZGUgZm9yCgkJICogICAgICAgICAgICAgdGhlIHJvdyB3aXRoIHRoZSBpbmRleCAnaVJvdycKCQkgKi8KCQl0aGlzLmZuR2V0Tm9kZXMgPSBmdW5jdGlvbiggaVJvdyApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCQoJCQlpZiAoIHR5cGVvZiBpUm93ICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJcmV0dXJuICh0eXBlb2Ygb1NldHRpbmdzLmFvRGF0YVtpUm93XSAhPSAndW5kZWZpbmVkJykgPyBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLm5UciA6IG51bGw7CgkJCX0KCQkJcmV0dXJuIF9mbkdldFRyTm9kZXMoIG9TZXR0aW5ncyApOwoJCX07CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5HZXRQb3NpdGlvbgoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIGFycmF5IGluZGV4ZXMgb2YgYSBwYXJ0aWN1bGFyIGNlbGwgZnJvbSBpdCdzIERPTSBlbGVtZW50CgkJICogUmV0dXJuczogIGludDogLSByb3cgaW5kZXgsIG9yIGFycmF5WyBpbnQsIGludCwgaW50IF06IC0gcm93IGluZGV4LCBjb2x1bW4gaW5kZXggKHZpc2libGUpCgkJICogICAgICAgICAgICAgYW5kIGNvbHVtbiBpbmRleCBpbmNsdWRpbmcgaGlkZGVuIGNvbHVtbnMKCQkgKiBJbnB1dHM6ICAgbm9kZTpuTm9kZSAtIHRoaXMgY2FuIGVpdGhlciBiZSBhIFRSLCBURCBvciBUSCBpbiB0aGUgdGFibGUncyBib2R5LCB0aGUgcmV0dXJuIGlzCgkJICogICAgICAgICAgICAgZGVwZW5kZW50IG9uIHRoaXMgaW5wdXQKCQkgKi8KCQl0aGlzLmZuR2V0UG9zaXRpb24gPSBmdW5jdGlvbiggbk5vZGUgKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQl2YXIgc05vZGVOYW1lID0gbk5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTsKCQkJCgkJCWlmICggc05vZGVOYW1lID09ICJUUiIgKQoJCQl7CgkJCQlyZXR1cm4gX2ZuTm9kZVRvRGF0YUluZGV4KG9TZXR0aW5ncywgbk5vZGUpOwoJCQl9CgkJCWVsc2UgaWYgKCBzTm9kZU5hbWUgPT0gIlREIiB8fCBzTm9kZU5hbWUgPT0gIlRIIiApCgkJCXsKCQkJCXZhciBpRGF0YUluZGV4ID0gX2ZuTm9kZVRvRGF0YUluZGV4KG9TZXR0aW5ncywgbk5vZGUucGFyZW50Tm9kZSk7CgkJCQl2YXIgYW5DZWxscyA9IF9mbkdldFRkTm9kZXMoIG9TZXR0aW5ncywgaURhdGFJbmRleCApOwoKCQkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIGFuQ2VsbHNbaV0gPT0gbk5vZGUgKQoJCQkJCXsKCQkJCQkJcmV0dXJuIFsgaURhdGFJbmRleCwgX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUob1NldHRpbmdzLCBpICksIGkgXTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmblVwZGF0ZQoJCSAqIFB1cnBvc2U6ICBVcGRhdGUgYSB0YWJsZSBjZWxsIG9yIHJvdyAtIHRoaXMgbWV0aG9kIHdpbGwgYWNjZXB0IGVpdGhlciBhIHNpbmdsZSB2YWx1ZSB0bwoJCSAqICAgICAgICAgICAgIHVwZGF0ZSB0aGUgY2VsbCB3aXRoLCBhbiBhcnJheSBvZiB2YWx1ZXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBjb2x1bW4gb3IKCQkgKiAgICAgICAgICAgICBhbiBvYmplY3QgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZS4gVGhlIGZ1bmN0aW9uIGlzCgkJICogICAgICAgICAgICAgc2VsZi1yZWZlcmVuY2luZyBpbiBvcmRlciB0byBtYWtlIHRoZSBtdWx0aSBjb2x1bW4gdXBkYXRlcyBlYXNpZXIuCgkJICogUmV0dXJuczogIGludDogMCBva2F5LCAxIGVycm9yCgkJICogSW5wdXRzOiAgIG9iamVjdCB8IGFycmF5IHN0cmluZyB8IHN0cmluZzptRGF0YSAtIGRhdGEgdG8gdXBkYXRlIHRoZSBjZWxsL3JvdyB3aXRoCgkJICogICAgICAgICAgIG1peGVkOm1Sb3cgLSAKCQkgKiAgICAgICAgICAgICBpbnQ6IC0gaW5kZXggb2YgYW9EYXRhIHRvIGJlIHVwZGF0ZWQsIG9yCgkJICogICAgICAgICAgICAgbm9kZShUUik6IC0gVFIgZWxlbWVudCB5b3Ugd2FudCB0byB1cGRhdGUKCQkgKiAgICAgICAgICAgaW50OmlDb2x1bW4gLSB0aGUgY29sdW1uIHRvIHVwZGF0ZSAtIG9wdGlvbmFsIChub3QgdXNlZCBvZiBtRGF0YSBpcyBhbiBhcnJheSBvciBvYmplY3QpCgkJICogICAgICAgICAgIGJvb2w6YlJlZHJhdyAtIHJlZHJhdyB0aGUgdGFibGUgb3Igbm90IC0gZGVmYXVsdCB0cnVlCgkJICogICAgICAgICAgIGJvb2w6YkFjdGlvbiAtIHBlcmZvcm0gcHJlZHJhdyBhY3Rpb25zIG9yIG5vdCAoeW91IHdpbGwgd2FudCB0aGlzIGFzICd0cnVlJyBpZgoJCSAqICAgICAgICAgICAgIHlvdSBoYXZlIGJSZWRyYXcgYXMgdHJ1ZSkgLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuVXBkYXRlID0gZnVuY3Rpb24oIG1EYXRhLCBtUm93LCBpQ29sdW1uLCBiUmVkcmF3LCBiQWN0aW9uICkKCQl7CgkJCXZhciBvU2V0dGluZ3MgPSBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19vRXh0LmlBcGlJbmRleF0gKTsKCQkJdmFyIGlWaXNpYmxlQ29sdW1uLCBpLCBpTGVuLCBzRGlzcGxheTsKCQkJdmFyIGlSb3cgPSAodHlwZW9mIG1Sb3cgPT0gJ29iamVjdCcpID8gCgkJCQlfZm5Ob2RlVG9EYXRhSW5kZXgob1NldHRpbmdzLCBtUm93KSA6IG1Sb3c7CgkJCQoJCQlpZiAoICQuaXNBcnJheShtRGF0YSkgJiYgdHlwZW9mIG1EYXRhID09ICdvYmplY3QnICkKCQkJewoJCQkJLyogQXJyYXkgdXBkYXRlIC0gdXBkYXRlIHRoZSB3aG9sZSByb3cgKi8KCQkJCW9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FEYXRhID0gbURhdGEuc2xpY2UoKTsKCgkJCQlmb3IgKCBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJCXsKCQkJCQl0aGlzLmZuVXBkYXRlKCBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpICksIGlSb3csIGksIGZhbHNlLCBmYWxzZSApOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgbURhdGEgPT0gJ29iamVjdCcgKQoJCQl7CgkJCQkvKiBPYmplY3QgdXBkYXRlIC0gdXBkYXRlIHRoZSB3aG9sZSByb3cgLSBhc3N1bWUgdGhlIGRldmVsb3BlciBnZXRzIHRoZSBvYmplY3QgcmlnaHQgKi8KCQkJCW9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FEYXRhID0gJC5leHRlbmQoIHRydWUsIHt9LCBtRGF0YSApOwoKCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCXRoaXMuZm5VcGRhdGUoIF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGkgKSwgaVJvdywgaSwgZmFsc2UsIGZhbHNlICk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBJbmRpdmlkdWFsIGNlbGwgdXBkYXRlICovCgkJCQlzRGlzcGxheSA9IG1EYXRhOwoJCQkJX2ZuU2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaUNvbHVtbiwgc0Rpc3BsYXkgKTsKCQkJCQoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmZuUmVuZGVyICE9PSBudWxsICkKCQkJCXsKCQkJCQlzRGlzcGxheSA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uZm5SZW5kZXIoIHsKCQkJCQkJImlEYXRhUm93IjogaVJvdywKCQkJCQkJImlEYXRhQ29sdW1uIjogaUNvbHVtbiwKCQkJCQkJImFEYXRhIjogb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYURhdGEsCgkJCQkJCSJvU2V0dGluZ3MiOiBvU2V0dGluZ3MKCQkJCQl9ICk7CgkJCQkJCgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmJVc2VSZW5kZXJlZCApCgkJCQkJewoJCQkJCQlfZm5TZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sdW1uLCBzRGlzcGxheSApOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJaWYgKCBvU2V0dGluZ3MuYW9EYXRhW2lSb3ddLm5UciAhPT0gbnVsbCApCgkJCQl7CgkJCQkJLyogRG8gdGhlIGFjdHVhbCBIVE1MIHVwZGF0ZSAqLwoJCQkJCV9mbkdldFRkTm9kZXMoIG9TZXR0aW5ncywgaVJvdyApW2lDb2x1bW5dLmlubmVySFRNTCA9IHNEaXNwbGF5OwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBNb2RpZnkgdGhlIHNlYXJjaCBpbmRleCBmb3IgdGhpcyByb3cgKHN0cmljdGx5IHRoaXMgaXMgbGlrZWx5IG5vdCBuZWVkZWQsIHNpbmNlIGZuUmVEcmF3CgkJCSAqIHdpbGwgcmVidWlsZCB0aGUgc2VhcmNoIGFycmF5IC0gaG93ZXZlciwgdGhlIHJlZHJhdyBtaWdodCBiZSBkaXNhYmxlZCBieSB0aGUgdXNlcikKCQkJICovCgkJCXZhciBpRGlzcGxheUluZGV4ID0gJC5pbkFycmF5KCBpUm93LCBvU2V0dGluZ3MuYWlEaXNwbGF5ICk7CgkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2hbaURpc3BsYXlJbmRleF0gPSBfZm5CdWlsZFNlYXJjaFJvdyggb1NldHRpbmdzLCAKCQkJCV9mbkdldFJvd0RhdGEoIG9TZXR0aW5ncywgaVJvdywgJ2ZpbHRlcicgKSApOwoJCQkKCQkJLyogUGVyZm9ybSBwcmUtZHJhdyBhY3Rpb25zICovCgkJCWlmICggdHlwZW9mIGJBY3Rpb24gPT0gJ3VuZGVmaW5lZCcgfHwgYkFjdGlvbiApCgkJCXsKCQkJCV9mbkFqdXN0Q29sdW1uU2l6aW5nKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogUmVkcmF3IHRoZSB0YWJsZSAqLwoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQlfZm5SZURyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJCXJldHVybiAwOwoJCX07CgkJCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogZm5TaG93Q29sb3VtbgoJCSAqIFB1cnBvc2U6ICBTaG93IGEgcGFydGljdWxhciBjb2x1bW4KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBpbnQ6aUNvbCAtIHRoZSBjb2x1bW4gd2hvc2UgZGlzcGxheSBzaG91bGQgYmUgY2hhbmdlZAoJCSAqICAgICAgICAgICBib29sOmJTaG93IC0gc2hvdyAodHJ1ZSkgb3IgaGlkZSAoZmFsc2UpIHRoZSBjb2x1bW4KCQkgKiAgICAgICAgICAgYm9vbDpiUmVkcmF3IC0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QgLSBkZWZhdWx0IHRydWUKCQkgKi8KCQl0aGlzLmZuU2V0Q29sdW1uVmlzID0gZnVuY3Rpb24gKCBpQ29sLCBiU2hvdywgYlJlZHJhdyApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tfb0V4dC5pQXBpSW5kZXhdICk7CgkJCXZhciBpLCBpTGVuOwoJCQl2YXIgaUNvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aDsKCQkJdmFyIG5UZCwgbkNlbGwsIGFuVHJzLCBqcUNoaWxkcmVuLCBiQXBwZW5kLCBpQmVmb3JlOwoJCQkKCQkJLyogTm8gcG9pbnQgaW4gZG9pbmcgYW55dGhpbmcgaWYgd2UgYXJlIHJlcXVlc3Rpbmcgd2hhdCBpcyBhbHJlYWR5IHRydWUgKi8KCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2xdLmJWaXNpYmxlID09IGJTaG93ICkKCQkJewoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQkvKiBTaG93IHRoZSBjb2x1bW4gKi8KCQkJaWYgKCBiU2hvdyApCgkJCXsKCQkJCXZhciBpSW5zZXJ0ID0gMDsKCQkJCWZvciAoIGk9MCA7IGk8aUNvbCA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkKCQkJCQl7CgkJCQkJCWlJbnNlcnQrKzsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIE5lZWQgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCB1c2UgYXBwZW5kQ2hpbGQgb3IgaW5zZXJ0QmVmb3JlICovCgkJCQliQXBwZW5kID0gKGlJbnNlcnQgPj0gX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICkpOwoKCQkJCS8qIFdoaWNoIGNvbG91bW4gc2hvdWxkIHdlIGJlIGluc2VydGluZyBiZWZvcmU/ICovCgkJCQlpZiAoICFiQXBwZW5kICkKCQkJCXsKCQkJCQlmb3IgKCBpPWlDb2wgOyBpPGlDb2x1bW5zIDsgaSsrICkKCQkJCQl7CgkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSApCgkJCQkJCXsKCQkJCQkJCWlCZWZvcmUgPSBpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaV0ublRyICE9PSBudWxsICkKCQkJCQl7CgkJCQkJCWlmICggYkFwcGVuZCApCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaV0ublRyLmFwcGVuZENoaWxkKCAKCQkJCQkJCQlvU2V0dGluZ3MuYW9EYXRhW2ldLl9hbkhpZGRlbltpQ29sXQoJCQkJCQkJKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaV0ublRyLmluc2VydEJlZm9yZSgKCQkJCQkJCQlvU2V0dGluZ3MuYW9EYXRhW2ldLl9hbkhpZGRlbltpQ29sXSwgCgkJCQkJCQkJX2ZuR2V0VGROb2Rlcyggb1NldHRpbmdzLCBpIClbaUJlZm9yZV0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIFJlbW92ZSBhIGNvbHVtbiBmcm9tIGRpc3BsYXkgKi8KCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9EYXRhW2ldLm5UciAhPT0gbnVsbCApCgkJCQkJewoJCQkJCQluVGQgPSBfZm5HZXRUZE5vZGVzKCBvU2V0dGluZ3MsIGkgKVtpQ29sXTsKCQkJCQkJb1NldHRpbmdzLmFvRGF0YVtpXS5fYW5IaWRkZW5baUNvbF0gPSBuVGQ7CgkJCQkJCW5UZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBuVGQgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8qIENsZWFyIHRvIHNldCB0aGUgdmlzaWJsZSBmbGFnICovCgkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbF0uYlZpc2libGUgPSBiU2hvdzsKCgkJCS8qIFJlZHJhdyB0aGUgaGVhZGVyIGFuZCBmb290ZXIgYmFzZWQgb24gdGhlIG5ldyBjb2x1bW4gdmlzaWJpbGl0eSAqLwoJCQlfZm5EcmF3SGVhZCggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9IZWFkZXIgKTsKCQkJaWYgKCBvU2V0dGluZ3MublRGb290ICkKCQkJewoJCQkJX2ZuRHJhd0hlYWQoIG9TZXR0aW5ncywgb1NldHRpbmdzLmFvRm9vdGVyICk7CgkJCX0KCQkJCgkJCS8qIElmIHRoZXJlIGFyZSBhbnkgJ29wZW4nIHJvd3MsIHRoZW4gd2UgbmVlZCB0byBhbHRlciB0aGUgY29sc3BhbiBmb3IgdGhpcyBjb2wgY2hhbmdlICovCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9PcGVuUm93cy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYW9PcGVuUm93c1tpXS5uVHIuY29sU3BhbiA9IF9mblZpc2JsZUNvbHVtbnMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBEbyBhIHJlZHJhdyBpbmNhc2UgYW55dGhpbmcgZGVwZW5kaW5nIG9uIHRoZSB0YWJsZSBjb2x1bW5zIG5lZWRzIGl0IAoJCQkgKiAoYnVpbHQtaW46IHNjcm9sbGluZykgCgkJCSAqLwoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQlfZm5BanVzdENvbHVtblNpemluZyggb1NldHRpbmdzICk7CgkJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJX2ZuU2F2ZVN0YXRlKCBvU2V0dGluZ3MgKTsKCQl9OwoJCQoJCS8qCgkJICogRnVuY3Rpb246IGZuUGFnZUNoYW5nZQoJCSAqIFB1cnBvc2U6ICBDaGFuZ2UgdGhlIHBhZ2luYXRpb24KCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBzdHJpbmc6c0FjdGlvbiAtIHBhZ2luZyBhY3Rpb24gdG8gdGFrZTogImZpcnN0IiwgInByZXZpb3VzIiwgIm5leHQiIG9yICJsYXN0IgoJCSAqICAgICAgICAgICBib29sOmJSZWRyYXcgLSByZWRyYXcgdGhlIHRhYmxlIG9yIG5vdCAtIG9wdGlvbmFsIC0gZGVmYXVsdCB0cnVlCgkJICovCgkJdGhpcy5mblBhZ2VDaGFuZ2UgPSBmdW5jdGlvbiAoIHNBY3Rpb24sIGJSZWRyYXcgKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQlfZm5QYWdlQ2hhbmdlKCBvU2V0dGluZ3MsIHNBY3Rpb24gKTsKCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCgkJCWlmICggdHlwZW9mIGJSZWRyYXcgPT0gJ3VuZGVmaW5lZCcgfHwgYlJlZHJhdyApCgkJCXsKCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQl9CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkRlc3Ryb3kKCQkgKiBQdXJwb3NlOiAgRGVzdHJ1Y3RvciBmb3IgdGhlIERhdGFUYWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIC0KCQkgKi8KCQl0aGlzLmZuRGVzdHJveSA9IGZ1bmN0aW9uICggKQoJCXsKCQkJdmFyIG9TZXR0aW5ncyA9IF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX29FeHQuaUFwaUluZGV4XSApOwoJCQl2YXIgbk9yaWcgPSBvU2V0dGluZ3MublRhYmxlV3JhcHBlci5wYXJlbnROb2RlOwoJCQl2YXIgbkJvZHkgPSBvU2V0dGluZ3MublRCb2R5OwoJCQl2YXIgaSwgaUxlbjsKCQkJCgkJCS8qIEZsYWcgdG8gbm90ZSB0aGF0IHRoZSB0YWJsZSBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdG9yeWVkIC0gbm8gYWN0aW9uIHNob3VsZCBiZSB0YWtlbiAqLwoJCQlvU2V0dGluZ3MuYkRlc3Ryb3lpbmcgPSB0cnVlOwoJCQkKCQkJLyogUmVzdG9yZSBoaWRkZW4gY29sdW1ucyAqLwoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgPT09IGZhbHNlICkKCQkJCXsKCQkJCQl0aGlzLmZuU2V0Q29sdW1uVmlzKCBpLCB0cnVlICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEJsaXR6IGFsbCBEVCBldmVudHMgKi8KCQkJJChvU2V0dGluZ3MublRhYmxlV3JhcHBlcikuZmluZCgnKicpLmFuZFNlbGYoKS51bmJpbmQoJy5EVCcpOwoJCQkKCQkJLyogSWYgdGhlcmUgaXMgYW4gJ2VtcHR5JyBpbmRpY2F0b3Igcm93LCByZW1vdmUgaXQgKi8KCQkJJCgndGJvZHk+dHI+dGQuJytvU2V0dGluZ3Mub0NsYXNzZXMuc1Jvd0VtcHR5LCBvU2V0dGluZ3MublRhYmxlKS5wYXJlbnQoKS5yZW1vdmUoKTsKCQkJCgkJCS8qIFdoZW4gc2Nyb2xsaW5nIHdlIGhhZCB0byBicmVhayB0aGUgdGFibGUgdXAgLSByZXN0b3JlIGl0ICovCgkJCWlmICggb1NldHRpbmdzLm5UYWJsZSAhPSBvU2V0dGluZ3MublRIZWFkLnBhcmVudE5vZGUgKQoJCQl7CgkJCQkkKCc+dGhlYWQnLCBvU2V0dGluZ3MublRhYmxlKS5yZW1vdmUoKTsKCQkJCW9TZXR0aW5ncy5uVGFibGUuYXBwZW5kQ2hpbGQoIG9TZXR0aW5ncy5uVEhlYWQgKTsKCQkJfQoJCQkKCQkJaWYgKCBvU2V0dGluZ3MublRGb290ICYmIG9TZXR0aW5ncy5uVGFibGUgIT0gb1NldHRpbmdzLm5URm9vdC5wYXJlbnROb2RlICkKCQkJewoJCQkJJCgnPnRmb290Jywgb1NldHRpbmdzLm5UYWJsZSkucmVtb3ZlKCk7CgkJCQlvU2V0dGluZ3MublRhYmxlLmFwcGVuZENoaWxkKCBvU2V0dGluZ3MublRGb290ICk7CgkJCX0KCQkJCgkJCS8qIFJlbW92ZSB0aGUgRGF0YVRhYmxlcyBnZW5lcmF0ZWQgbm9kZXMsIGV2ZW50cyBhbmQgY2xhc3NlcyAqLwoJCQlvU2V0dGluZ3MublRhYmxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG9TZXR0aW5ncy5uVGFibGUgKTsKCQkJJChvU2V0dGluZ3MublRhYmxlV3JhcHBlcikucmVtb3ZlKCk7CgkJCQoJCQlvU2V0dGluZ3MuYWFTb3J0aW5nID0gW107CgkJCW9TZXR0aW5ncy5hYVNvcnRpbmdGaXhlZCA9IFtdOwoJCQlfZm5Tb3J0aW5nQ2xhc3Nlcyggb1NldHRpbmdzICk7CgkJCQoJCQkkKF9mbkdldFRyTm9kZXMoIG9TZXR0aW5ncyApKS5yZW1vdmVDbGFzcyggb1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzLmpvaW4oJyAnKSApOwoJCQkKCQkJaWYgKCAhb1NldHRpbmdzLmJKVUkgKQoJCQl7CgkJCQkkKCd0aCcsIG9TZXR0aW5ncy5uVEhlYWQpLnJlbW92ZUNsYXNzKCBbIF9vRXh0Lm9TdGRDbGFzc2VzLnNTb3J0YWJsZSwKCQkJCQlfb0V4dC5vU3RkQ2xhc3Nlcy5zU29ydGFibGVBc2MsCgkJCQkJX29FeHQub1N0ZENsYXNzZXMuc1NvcnRhYmxlRGVzYywKCQkJCQlfb0V4dC5vU3RkQ2xhc3Nlcy5zU29ydGFibGVOb25lIF0uam9pbignICcpCgkJCQkpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJCgndGgnLCBvU2V0dGluZ3MublRIZWFkKS5yZW1vdmVDbGFzcyggWyBfb0V4dC5vU3RkQ2xhc3Nlcy5zU29ydGFibGUsCgkJCQkJX29FeHQub0pVSUNsYXNzZXMuc1NvcnRhYmxlQXNjLAoJCQkJCV9vRXh0Lm9KVUlDbGFzc2VzLnNTb3J0YWJsZURlc2MsCgkJCQkJX29FeHQub0pVSUNsYXNzZXMuc1NvcnRhYmxlTm9uZSBdLmpvaW4oJyAnKQoJCQkJKTsKCQkJCSQoJ3RoIHNwYW4uJytfb0V4dC5vSlVJQ2xhc3Nlcy5zU29ydEljb24sIG9TZXR0aW5ncy5uVEhlYWQpLnJlbW92ZSgpOwoKCQkJCSQoJ3RoJywgb1NldHRpbmdzLm5USGVhZCkuZWFjaCggZnVuY3Rpb24gKCkgewoJCQkJCXZhciBqcVdyYXBwZXIgPSAkKCdkaXYuJytfb0V4dC5vSlVJQ2xhc3Nlcy5zU29ydEpVSVdyYXBwZXIsIHRoaXMpOwoJCQkJCXZhciBraWRzID0ganFXcmFwcGVyLmNvbnRlbnRzKCk7CgkJCQkJJCh0aGlzKS5hcHBlbmQoIGtpZHMgKTsKCQkJCQlqcVdyYXBwZXIucmVtb3ZlKCk7CgkJCQl9ICk7CgkJCX0KCQkJCgkJCS8qIEFkZCB0aGUgVFIgZWxlbWVudHMgYmFjayBpbnRvIHRoZSB0YWJsZSBpbiB0aGVpciBvcmlnaW5hbCBvcmRlciAqLwoJCQlpZiAoIG9TZXR0aW5ncy5uVGFibGVSZWluc2VydEJlZm9yZSApCgkJCXsKCQkJCW5PcmlnLmluc2VydEJlZm9yZSggb1NldHRpbmdzLm5UYWJsZSwgb1NldHRpbmdzLm5UYWJsZVJlaW5zZXJ0QmVmb3JlICk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQluT3JpZy5hcHBlbmRDaGlsZCggb1NldHRpbmdzLm5UYWJsZSApOwoJCQl9CgoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaV0ublRyICE9PSBudWxsICkKCQkJCXsKCQkJCQluQm9keS5hcHBlbmRDaGlsZCggb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogUmVzdG9yZSB0aGUgd2lkdGggb2YgdGhlIG9yaWdpbmFsIHRhYmxlICovCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iQXV0b1dpZHRoID09PSB0cnVlICkKCQkJewoJCQkgIG9TZXR0aW5ncy5uVGFibGUuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyhvU2V0dGluZ3Muc0Rlc3Ryb3lXaWR0aCk7CgkJCX0KCQkJCgkJCS8qIElmIHRoZSB3ZXJlIG9yaWdpbmFsbHkgb2RkL2V2ZW4gdHlwZSBjbGFzc2VzIC0gdGhlbiB3ZSBhZGQgdGhlbSBiYWNrIGhlcmUuIE5vdGUKCQkJICogdGhpcyBpcyBub3QgZm9vbCBwcm9vZiAoZm9yIGV4YW1wbGUgaWYgbm90IGFsbCByb3dzIGFzIG9kZC9ldmVuIGNsYXNzZXMgLSBidXQgCgkJCSAqIGl0J3MgYSBnb29kIGVmZm9ydCB3aXRob3V0IGdldHRpbmcgY2FycmllZCBhd2F5CgkJCSAqLwoJCQkkKCc+dHI6ZXZlbicsIG5Cb2R5KS5hZGRDbGFzcyggb1NldHRpbmdzLmFzRGVzdG9yeVN0cmlwc1swXSApOwoJCQkkKCc+dHI6b2RkJywgbkJvZHkpLmFkZENsYXNzKCBvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzFdICk7CgkJCQoJCQkvKiBSZW1vdmUgdGhlIHNldHRpbmdzIG9iamVjdCBmcm9tIHRoZSBzZXR0aW5ncyBhcnJheSAqLwoJCQlmb3IgKCBpPTAsIGlMZW49X2FvU2V0dGluZ3MubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaWYgKCBfYW9TZXR0aW5nc1tpXSA9PSBvU2V0dGluZ3MgKQoJCQkJewoJCQkJCV9hb1NldHRpbmdzLnNwbGljZSggaSwgMSApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBFbmQgaXQgYWxsICovCgkJCW9TZXR0aW5ncyA9IG51bGw7CgkJfTsKCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBmbkFqdXN0Q29sdW1uU2l6aW5nCgkJICogUHVycG9zZTogIFVwZGF0ZSB0YWxlIHNpemluZyBiYXNlZCBvbiBjb250ZW50LiBUaGlzIHdvdWxkIG1vc3QgbGlrZWx5IGJlIHVzZWQgZm9yIHNjcm9sbGluZwoJCSAqICAgYW5kIHdpbGwgdHlwaWNhbGx5IG5lZWQgYSByZWRyYXcgYWZ0ZXIgaXQuCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgYm9vbDpiUmVkcmF3IC0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QsIHlvdSB3aWxsIHR5cGljYWxseSB3YW50IHRvIC0gZGVmYXVsdCB0cnVlCgkJICovCgkJdGhpcy5mbkFkanVzdENvbHVtblNpemluZyA9IGZ1bmN0aW9uICggYlJlZHJhdyApCgkJewoJCQl2YXIgb1NldHRpbmdzID0gX2ZuU2V0dGluZ3NGcm9tTm9kZSh0aGlzW19vRXh0LmlBcGlJbmRleF0pOwoJCQlfZm5BanVzdENvbHVtblNpemluZyggb1NldHRpbmdzICk7CgkJCQoJCQlpZiAoIHR5cGVvZiBiUmVkcmF3ID09ICd1bmRlZmluZWQnIHx8IGJSZWRyYXcgKQoJCQl7CgkJCQl0aGlzLmZuRHJhdyggZmFsc2UgKTsKCQkJfQoJCQllbHNlIGlmICggb1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiIHx8IG9TZXR0aW5ncy5vU2Nyb2xsLnNZICE9PSAiIiApCgkJCXsKCQkJCS8qIElmIG5vdCByZWRyYXdpbmcsIGJ1dCBzY3JvbGxpbmcsIHdlIHdhbnQgdG8gYXBwbHkgdGhlIG5ldyBjb2x1bW4gc2l6ZXMgYW55d2F5ICovCgkJCQl0aGlzLm9BcGkuX2ZuU2Nyb2xsRHJhdyhvU2V0dGluZ3MpOwoJCQl9CgkJfTsKCQkKCQkvKgoJCSAqIFBsdWdpbiBBUEkgZnVuY3Rpb25zCgkJICogCgkJICogVGhpcyBjYWxsIHdpbGwgYWRkIHRoZSBmdW5jdGlvbnMgd2hpY2ggYXJlIGRlZmluZWQgaW4gX29FeHQub0FwaSB0byB0aGUKCQkgKiBEYXRhVGFibGVzIG9iamVjdCwgcHJvdmlkaW5nIGEgcmF0aGVyIG5pY2Ugd2F5IHRvIGFsbG93IHBsdWctaW4gQVBJIGZ1bmN0aW9ucy4gTm90ZSB0aGF0CgkJICogdGhpcyBpcyBkb25lIGhlcmUsIHNvIHRoYXQgQVBJIGZ1bmN0aW9uIGNhbiBhY3R1YWxseSBvdmVycmlkZSB0aGUgYnVpbHQgaW4gQVBJIGZ1bmN0aW9ucyBpZgoJCSAqIHJlcXVpcmVkIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5FeHRlcm5BcGlGdW5jCgkJICogUHVycG9zZTogIENyZWF0ZSBhIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGV4cG9ydGluZyBhbiBpbnRlcm5hbCBmdW5jIHRvIGFuIGV4dGVybmFsIEFQSSBmdW5jCgkJICogUmV0dXJuczogIGZ1bmN0aW9uOiAtIHdyYXBwZWQgZnVuY3Rpb24KCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNGdW5jIC0gQVBJIGZ1bmN0aW9uIG5hbWUKCQkgKi8KCQlmdW5jdGlvbiBfZm5FeHRlcm5BcGlGdW5jIChzRnVuYykKCQl7CgkJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJCQl2YXIgYUFyZ3MgPSBbX2ZuU2V0dGluZ3NGcm9tTm9kZSh0aGlzW19vRXh0LmlBcGlJbmRleF0pXS5jb25jYXQoIAoJCQkJCQlBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpICk7CgkJCQkJcmV0dXJuIF9vRXh0Lm9BcGlbc0Z1bmNdLmFwcGx5KCB0aGlzLCBhQXJncyApOwoJCQkJfTsKCQl9CgkJCgkJZm9yICggdmFyIHNGdW5jIGluIF9vRXh0Lm9BcGkgKQoJCXsKCQkJaWYgKCBzRnVuYyApCgkJCXsKCQkJCS8qCgkJCQkgKiBGdW5jdGlvbjogYW5vbgoJCQkJICogUHVycG9zZTogIFdyYXAgdGhlIHBsdWctaW4gQVBJIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBzZXR0aW5ncyBhcyAxc3QgYXJnIAoJCQkJICogICBhbmQgZXhlY3V0ZSBpbiB0aGlzIHNjb3BlCgkJCQkgKiBSZXR1cm5zOiAgLQoJCQkJICogSW5wdXRzOiAgIC0KCQkJCSAqLwoJCQkJdGhpc1tzRnVuY10gPSBfZm5FeHRlcm5BcGlGdW5jKHNGdW5jKTsKCQkJfQoJCX0KCQkKCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBMb2NhbCBmdW5jdGlvbnMKCQkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBJbml0YWxpc2F0aW9uCgkJICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuSW5pdGFsaXNlCgkJICogUHVycG9zZTogIERyYXcgdGhlIHRhYmxlIGZvciB0aGUgZmlyc3QgdGltZSwgYWRkaW5nIGFsbCByZXF1aXJlZCBmZWF0dXJlcwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkluaXRhbGlzZSAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaSwgaUxlbiwgaUFqYXhTdGFydD1vU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJCQoJCQkvKiBFbnN1cmUgdGhhdCB0aGUgdGFibGUgZGF0YSBpcyBmdWxseSBpbml0aWFsaXNlZCAqLwoJCQlpZiAoIG9TZXR0aW5ncy5iSW5pdGlhbGlzZWQgPT09IGZhbHNlICkKCQkJewoJCQkJc2V0VGltZW91dCggZnVuY3Rpb24oKXsgX2ZuSW5pdGFsaXNlKCBvU2V0dGluZ3MgKTsgfSwgMjAwICk7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCS8qIFNob3cgdGhlIGRpc3BsYXkgSFRNTCBvcHRpb25zICovCgkJCV9mbkFkZE9wdGlvbnNIdG1sKCBvU2V0dGluZ3MgKTsKCQkJCgkJCS8qIEJ1aWxkIGFuZCBkcmF3IHRoZSBoZWFkZXIgLyBmb290ZXIgZm9yIHRoZSB0YWJsZSAqLwoJCQlfZm5CdWlsZEhlYWQoIG9TZXR0aW5ncyApOwoJCQlfZm5EcmF3SGVhZCggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9IZWFkZXIgKTsKCQkJaWYgKCBvU2V0dGluZ3MublRGb290ICkKCQkJewoJCQkJX2ZuRHJhd0hlYWQoIG9TZXR0aW5ncywgb1NldHRpbmdzLmFvRm9vdGVyICk7CgkJCX0KCgkJCS8qIE9rYXkgdG8gc2hvdyB0aGF0IHNvbWV0aGluZyBpcyBnb2luZyBvbiBub3cgKi8KCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgdHJ1ZSApOwoJCQkKCQkJLyogQ2FsY3VsYXRlIHNpemVzIGZvciBjb2x1bW5zICovCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iQXV0b1dpZHRoICkKCQkJewoJCQkJX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNXaWR0aCAhPT0gbnVsbCApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGguc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0Nzcyggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGggKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogSWYgdGhlcmUgaXMgZGVmYXVsdCBzb3J0aW5nIHJlcXVpcmVkIC0gbGV0J3MgZG8gaXQuIFRoZSBzb3J0IGZ1bmN0aW9uIHdpbGwgZG8gdGhlCgkJCSAqIGRyYXdpbmcgZm9yIHVzLiBPdGhlcndpc2Ugd2UgZHJhdyB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiB0aGUgQWpheCBzb3VyY2UgLSB0aGlzIGFsbG93cwoJCQkgKiB0aGUgdGFibGUgdG8gbG9vayBpbml0aWFsaXNlZCBmb3IgQWpheCBzb3VyY2luZyBkYXRhIChzaG93ICdsb2FkaW5nJyBtZXNzYWdlIHBvc3NpYmx5KQoJCQkgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0ICkKCQkJewoJCQkJX2ZuU29ydCggb1NldHRpbmdzICk7CgkJCX0KCQkJZWxzZSBpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCXsKCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2ggKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQkJCgkJCS8qIGlmIHRoZXJlIGlzIGFuIGFqYXggc291cmNlIGxvYWQgdGhlIGRhdGEgKi8KCQkJaWYgKCBvU2V0dGluZ3Muc0FqYXhTb3VyY2UgIT09IG51bGwgJiYgIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKQoJCQl7CgkJCQlvU2V0dGluZ3MuZm5TZXJ2ZXJEYXRhLmNhbGwoIG9TZXR0aW5ncy5vSW5zdGFuY2UsIG9TZXR0aW5ncy5zQWpheFNvdXJjZSwgW10sIGZ1bmN0aW9uKGpzb24pIHsKCQkJCQl2YXIgYURhdGEgPSBqc29uOwoJCQkJCWlmICggb1NldHRpbmdzLnNBamF4RGF0YVByb3AgIT09ICIiICkKCQkJCQl7CgkJCQkJCXZhciBmbkRhdGFTcmMgPSBfZm5HZXRPYmplY3REYXRhRm4oIG9TZXR0aW5ncy5zQWpheERhdGFQcm9wICk7CgkJCQkJCWFEYXRhID0gZm5EYXRhU3JjKCBqc29uICk7CgkJCQkJfQoKCQkJCQkvKiBHb3QgdGhlIGRhdGEgLSBhZGQgaXQgdG8gdGhlIHRhYmxlICovCgkJCQkJZm9yICggaT0wIDsgaTxhRGF0YS5sZW5ndGggOyBpKysgKQoJCQkJCXsKCQkJCQkJX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBhRGF0YVtpXSApOwoJCQkJCX0KCQkJCQkKCQkJCQkvKiBSZXNldCB0aGUgaW5pdCBkaXNwbGF5IGZvciBjb29raWUgc2F2aW5nLiBXZSd2ZSBhbHJlYWR5IGRvbmUgYSBmaWx0ZXIsIGFuZAoJCQkJCSAqIHRoZXJlZm9yZSBjbGVhcmVkIGl0IGJlZm9yZS4gU28gd2UgbmVlZCB0byBtYWtlIGl0IGFwcGVhciAnZnJlc2gnCgkJCQkJICovCgkJCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gaUFqYXhTdGFydDsKCQkJCQkKCQkJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgKQoJCQkJCXsKCQkJCQkJX2ZuU29ydCggb1NldHRpbmdzICk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCQkKCQkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCQkJCV9mbkluaXRDb21wbGV0ZSggb1NldHRpbmdzLCBqc29uICk7CgkJCQl9LCBvU2V0dGluZ3MgKTsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJLyogU2VydmVyLXNpZGUgcHJvY2Vzc2luZyBpbml0aWFsaXNhdGlvbiBjb21wbGV0ZSBpcyBkb25lIGF0IHRoZSBlbmQgb2YgX2ZuRHJhdyAqLwoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkKCQkJewoJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgZmFsc2UgKTsKCQkJCV9mbkluaXRDb21wbGV0ZSggb1NldHRpbmdzICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuSW5pdGFsaXNlCgkJICogUHVycG9zZTogIERyYXcgdGhlIHRhYmxlIGZvciB0aGUgZmlyc3QgdGltZSwgYWRkaW5nIGFsbCByZXF1aXJlZCBmZWF0dXJlcwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkluaXRDb21wbGV0ZSAoIG9TZXR0aW5ncywganNvbiApCgkJewoJCQlvU2V0dGluZ3MuX2JJbml0Q29tcGxldGUgPSB0cnVlOwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuZm5Jbml0Q29tcGxldGUgPT0gJ2Z1bmN0aW9uJyApCgkJCXsKCQkJCWlmICggdHlwZW9mIGpzb24gIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5mbkluaXRDb21wbGV0ZS5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBvU2V0dGluZ3MsIGpzb24gKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlvU2V0dGluZ3MuZm5Jbml0Q29tcGxldGUuY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgb1NldHRpbmdzICk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuTGFuZ3VhZ2VQcm9jZXNzCgkJICogUHVycG9zZTogIENvcHkgbGFuZ3VhZ2UgdmFyaWFibGVzIGZyb20gcmVtb3RlIG9iamVjdCB0byBhIGxvY2FsIG9uZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBvYmplY3Q6b0xhbmd1YWdlIC0gTGFuZ3VhZ2UgaW5mb3JtYXRpb24KCQkgKiAgICAgICAgICAgYm9vbDpiSW5pdCAtIGluaXQgb25jZSBjb21wbGV0ZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkxhbmd1YWdlUHJvY2Vzcyggb1NldHRpbmdzLCBvTGFuZ3VhZ2UsIGJJbml0ICkKCQl7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc1Byb2Nlc3NpbmcnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc0xlbmd0aE1lbnUnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc0VtcHR5VGFibGUnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc0xvYWRpbmdSZWNvcmRzJyApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NaZXJvUmVjb3JkcycgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzSW5mbycgKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvTGFuZ3VhZ2UsICdzSW5mb0VtcHR5JyApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NJbmZvRmlsdGVyZWQnICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc0luZm9Qb3N0Rml4JyApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NTZWFyY2gnICk7CgkJCQoJCQlpZiAoIHR5cGVvZiBvTGFuZ3VhZ2Uub1BhZ2luYXRlICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLm9QYWdpbmF0ZSwgb0xhbmd1YWdlLm9QYWdpbmF0ZSwgJ3NGaXJzdCcgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZS5vUGFnaW5hdGUsIG9MYW5ndWFnZS5vUGFnaW5hdGUsICdzUHJldmlvdXMnICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLCBvTGFuZ3VhZ2Uub1BhZ2luYXRlLCAnc05leHQnICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlLCBvTGFuZ3VhZ2Uub1BhZ2luYXRlLCAnc0xhc3QnICk7CgkJCX0KCQkJCgkJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IC0gaWYgdGhlcmUgaXMgbm8gc0VtcHR5VGFibGUgZ2l2ZW4sIHRoZW4gdXNlIHRoZSBzYW1lIGFzCgkJCSAqIHNaZXJvUmVjb3JkcyAtIGFzc3VtaW5nIHRoYXQgaXMgZ2l2ZW4uCgkJCSAqLwoJCQlpZiAoIHR5cGVvZiBvTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPT0gJ3VuZGVmaW5lZCcgJiYgCgkJCSAgICAgdHlwZW9mIG9MYW5ndWFnZS5zWmVyb1JlY29yZHMgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9MYW5ndWFnZSwgJ3NaZXJvUmVjb3JkcycsICdzRW1wdHlUYWJsZScgKTsKCQkJfQoKCQkJLyogTGlrZXdpc2Ugd2l0aCBsb2FkaW5nIHJlY29yZHMgKi8KCQkJaWYgKCB0eXBlb2Ygb0xhbmd1YWdlLnNMb2FkaW5nUmVjb3JkcyA9PSAndW5kZWZpbmVkJyAmJiAKCQkJICAgICB0eXBlb2Ygb0xhbmd1YWdlLnNaZXJvUmVjb3JkcyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9MYW5ndWFnZSwgb0xhbmd1YWdlLCAnc1plcm9SZWNvcmRzJywgJ3NMb2FkaW5nUmVjb3JkcycgKTsKCQkJfQoJCQkKCQkJaWYgKCBiSW5pdCApCgkJCXsKCQkJCV9mbkluaXRhbGlzZSggb1NldHRpbmdzICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQWRkQ29sdW1uCgkJICogUHVycG9zZTogIEFkZCBhIGNvbHVtbiB0byB0aGUgbGlzdCB1c2VkIGZvciB0aGUgdGFibGUgd2l0aCBkZWZhdWx0IHZhbHVlcwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBub2RlOm5UaCAtIHRoZSB0aCBlbGVtZW50IGZvciB0aGlzIGNvbHVtbgoJCSAqLwoJCWZ1bmN0aW9uIF9mbkFkZENvbHVtbiggb1NldHRpbmdzLCBuVGggKQoJCXsKCQkJdmFyIGlDb2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aDsKCQkJdmFyIG9Db2wgPSB7CgkJCQkic1R5cGUiOiBudWxsLAoJCQkJIl9iQXV0b1R5cGUiOiB0cnVlLAoJCQkJImJWaXNpYmxlIjogdHJ1ZSwKCQkJCSJiU2VhcmNoYWJsZSI6IHRydWUsCgkJCQkiYlNvcnRhYmxlIjogdHJ1ZSwKCQkJCSJhc1NvcnRpbmciOiBbICdhc2MnLCAnZGVzYycgXSwKCQkJCSJzU29ydGluZ0NsYXNzIjogb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0YWJsZSwKCQkJCSJzU29ydGluZ0NsYXNzSlVJIjogb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0SlVJLAoJCQkJInNUaXRsZSI6IG5UaCA/IG5UaC5pbm5lckhUTUwgOiAnJywKCQkJCSJzTmFtZSI6ICcnLAoJCQkJInNXaWR0aCI6IG51bGwsCgkJCQkic1dpZHRoT3JpZyI6IG51bGwsCgkJCQkic0NsYXNzIjogbnVsbCwKCQkJCSJmblJlbmRlciI6IG51bGwsCgkJCQkiYlVzZVJlbmRlcmVkIjogdHJ1ZSwKCQkJCSJpRGF0YVNvcnQiOiBpQ29sLAoJCQkJIm1EYXRhUHJvcCI6IGlDb2wsCgkJCQkiZm5HZXREYXRhIjogbnVsbCwKCQkJCSJmblNldERhdGEiOiBudWxsLAoJCQkJInNTb3J0RGF0YVR5cGUiOiAnc3RkJywKCQkJCSJzRGVmYXVsdENvbnRlbnQiOiBudWxsLAoJCQkJInNDb250ZW50UGFkZGluZyI6ICIiLAoJCQkJIm5UaCI6IG5UaCA/IG5UaCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyksCgkJCQkiblRmIjogbnVsbAoJCQl9OwoJCQlvU2V0dGluZ3MuYW9Db2x1bW5zLnB1c2goIG9Db2wgKTsKCQkJCgkJCS8qIEFkZCBhIGNvbHVtbiBzcGVjaWZpYyBmaWx0ZXIgKi8KCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbCBdID09ICd1bmRlZmluZWQnIHx8CgkJCSAgICAgb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbCBdID09PSBudWxsICkKCQkJewoJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbCBdID0gewoJCQkJCSJzU2VhcmNoIjogIiIsCgkJCQkJImJSZWdleCI6IGZhbHNlLAoJCQkJCSJiU21hcnQiOiB0cnVlCgkJCQl9OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogRG9uJ3QgcmVxdWlyZSB0aGF0IHRoZSB1c2VyIG11c3Qgc3BlY2lmeSBiUmVnZXggYW5kIC8gb3IgYlNtYXJ0ICovCgkJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0uYlJlZ2V4ID09ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzWyBpQ29sIF0uYlJlZ2V4ID0gdHJ1ZTsKCQkJCX0KCQkJCQoJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbCBdLmJTbWFydCA9PSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1sgaUNvbCBdLmJTbWFydCA9IHRydWU7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIFVzZSB0aGUgY29sdW1uIG9wdGlvbnMgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBjbGFzc2VzIGV0YyAqLwoJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGlDb2wsIG51bGwgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ29sdW1uT3B0aW9ucwoJCSAqIFB1cnBvc2U6ICBBcHBseSBvcHRpb25zIGZvciBhIGNvbHVtbgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aUNvbCAtIGNvbHVtbiBpbmRleCB0byBjb25zaWRlcgoJCSAqICAgICAgICAgICBvYmplY3Q6b09wdGlvbnMgLSBvYmplY3Qgd2l0aCBzVHlwZSwgYlZpc2libGUgYW5kIGJTZWFyY2hhYmxlCgkJICovCgkJZnVuY3Rpb24gX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpQ29sLCBvT3B0aW9ucyApCgkJewoJCQl2YXIgb0NvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbIGlDb2wgXTsKCQkJCgkJCS8qIFVzZXIgc3BlY2lmaWVkIGNvbHVtbiBvcHRpb25zICovCgkJCWlmICggdHlwZW9mIG9PcHRpb25zICE9ICd1bmRlZmluZWQnICYmIG9PcHRpb25zICE9PSBudWxsICkKCQkJewoJCQkJaWYgKCB0eXBlb2Ygb09wdGlvbnMuc1R5cGUgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9Db2wuc1R5cGUgPSBvT3B0aW9ucy5zVHlwZTsKCQkJCQlvQ29sLl9iQXV0b1R5cGUgPSBmYWxzZTsKCQkJCX0KCQkJCQoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImJWaXNpYmxlIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImJTZWFyY2hhYmxlIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgImJTb3J0YWJsZSIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzVGl0bGUiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic05hbWUiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic1dpZHRoIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgInNXaWR0aCIsICJzV2lkdGhPcmlnIiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgInNDbGFzcyIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJmblJlbmRlciIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJiVXNlUmVuZGVyZWQiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAiaURhdGFTb3J0IiApOwoJCQkJX2ZuTWFwKCBvQ29sLCBvT3B0aW9ucywgIm1EYXRhUHJvcCIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJhc1NvcnRpbmciICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic1NvcnREYXRhVHlwZSIgKTsKCQkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzRGVmYXVsdENvbnRlbnQiICk7CgkJCQlfZm5NYXAoIG9Db2wsIG9PcHRpb25zLCAic0NvbnRlbnRQYWRkaW5nIiApOwoJCQl9CgoJCQkvKiBDYWNoZSB0aGUgZGF0YSBnZXQgYW5kIHNldCBmdW5jdGlvbnMgZm9yIHNwZWVkICovCgkJCW9Db2wuZm5HZXREYXRhID0gX2ZuR2V0T2JqZWN0RGF0YUZuKCBvQ29sLm1EYXRhUHJvcCApOwoJCQlvQ29sLmZuU2V0RGF0YSA9IF9mblNldE9iamVjdERhdGFGbiggb0NvbC5tRGF0YVByb3AgKTsKCQkJCgkJCS8qIEZlYXR1cmUgc29ydGluZyBvdmVycmlkZXMgY29sdW1uIHNwZWNpZmljIHdoZW4gb2ZmICovCgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgKQoJCQl7CgkJCQlvQ29sLmJTb3J0YWJsZSA9IGZhbHNlOwoJCQl9CgkJCQoJCQkvKiBDaGVjayB0aGF0IHRoZSBjbGFzcyBhc3NpZ25tZW50IGlzIGNvcnJlY3QgZm9yIHNvcnRpbmcgKi8KCQkJaWYgKCAhb0NvbC5iU29ydGFibGUgfHwKCQkJCQkgKCQuaW5BcnJheSgnYXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xICYmICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSA9PSAtMSkgKQoJCQl7CgkJCQlvQ29sLnNTb3J0aW5nQ2xhc3MgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRhYmxlTm9uZTsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9ICIiOwoJCQl9CgkJCWVsc2UgaWYgKCBvQ29sLmJTb3J0YWJsZSB8fAogICAgICAgICAgICAgICAgKCQuaW5BcnJheSgnYXNjJywgb0NvbC5hc1NvcnRpbmcpID09IC0xICYmICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSA9PSAtMSkgKQogICAgICB7CiAgICAgICAgb0NvbC5zU29ydGluZ0NsYXNzID0gb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0YWJsZTsKICAgICAgICBvQ29sLnNTb3J0aW5nQ2xhc3NKVUkgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRKVUk7CiAgICAgIH0KCQkJZWxzZSBpZiAoICQuaW5BcnJheSgnYXNjJywgb0NvbC5hc1NvcnRpbmcpICE9IC0xICYmICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSA9PSAtMSApCgkJCXsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydGFibGVBc2M7CgkJCQlvQ29sLnNTb3J0aW5nQ2xhc3NKVUkgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRKVUlBc2NBbGxvd2VkOwoJCQl9CgkJCWVsc2UgaWYgKCAkLmluQXJyYXkoJ2FzYycsIG9Db2wuYXNTb3J0aW5nKSA9PSAtMSAmJiAkLmluQXJyYXkoJ2Rlc2MnLCBvQ29sLmFzU29ydGluZykgIT0gLTEgKQoJCQl7CgkJCQlvQ29sLnNTb3J0aW5nQ2xhc3MgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRhYmxlRGVzYzsKCQkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU29ydEpVSURlc2NBbGxvd2VkOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkFkZERhdGEKCQkgKiBQdXJwb3NlOiAgQWRkIGEgZGF0YSBhcnJheSB0byB0aGUgdGFibGUsIGNyZWF0aW5nIERPTSBub2RlIGV0YwoJCSAqIFJldHVybnM6ICBpbnQ6IC0gPj0wIGlmIHN1Y2Nlc3NmdWwgKGluZGV4IG9mIG5ldyBhb0RhdGEgZW50cnkpLCAtMSBpZiBmYWlsZWQKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGFycmF5OmFEYXRhIC0gZGF0YSBhcnJheSB0byBiZSBhZGRlZAoJCSAqIE5vdGVzOiAgICBUaGVyZSBhcmUgdHdvIGJhc2ljIG1ldGhvZHMgZm9yIERhdGFUYWJsZXMgdG8gZ2V0IGRhdGEgdG8gZGlzcGxheSAtIGEgSlMgYXJyYXkKCQkgKiAgICh3aGljaCBpcyBkZWFsdCB3aXRoIGJ5IHRoaXMgZnVuY3Rpb24pLCBhbmQgdGhlIERPTSwgd2hpY2ggaGFzIGl0J3Mgb3duIG9wdGltaXNlZAoJCSAqICAgZnVuY3Rpb24gKF9mbkdhdGhlckRhdGEpLiBCZSBjYXJlZnVsIHRvIG1ha2UgdGhlIHNhbWUgY2hhbmdlcyBoZXJlIGFzIHRoZXJlIGFuZCB2aWNlLXZlcnNhCgkJICovCgkJZnVuY3Rpb24gX2ZuQWRkRGF0YSAoIG9TZXR0aW5ncywgYURhdGFTdXBwbGllZCApCgkJewoJCQl2YXIgb0NvbDsKCQkJCgkJCS8qIFRha2UgYW4gaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgZGF0YSBzb3VyY2Ugc28gd2UgY2FuIGJhc2ggaXQgYWJvdXQgYXMgd2Ugd2lzaCAqLwoJCQl2YXIgYURhdGFJbiA9ICh0eXBlb2YgYURhdGFTdXBwbGllZC5sZW5ndGggPT0gJ251bWJlcicpID8KCQkJCWFEYXRhU3VwcGxpZWQuc2xpY2UoKSA6CgkJCQkkLmV4dGVuZCggdHJ1ZSwge30sIGFEYXRhU3VwcGxpZWQgKTsKCQkJCgkJCS8qIENyZWF0ZSB0aGUgb2JqZWN0IGZvciBzdG9yaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmV3IHJvdyAqLwoJCQl2YXIgaVJvdyA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCQl2YXIgb0RhdGEgPSB7CgkJCQkiblRyIjogbnVsbCwKCQkJCSJfaUlkIjogb1NldHRpbmdzLmlOZXh0SWQrKywKCQkJCSJfYURhdGEiOiBhRGF0YUluLAoJCQkJIl9hbkhpZGRlbiI6IFtdLAoJCQkJIl9zUm93U3RyaXBlIjogIiIKCQkJfTsKCQkJb1NldHRpbmdzLmFvRGF0YS5wdXNoKCBvRGF0YSApOwoKCQkJLyogQ3JlYXRlIHRoZSBjZWxscyAqLwoJCQl2YXIgblRkLCBzVGhpc1R5cGU7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXTsKCgkJCQkvKiBVc2UgcmVuZGVyZWQgZGF0YSBmb3IgZmlsdGVyaW5nL3NvcnRpbmcgKi8KCQkJCWlmICggdHlwZW9mIG9Db2wuZm5SZW5kZXIgPT0gJ2Z1bmN0aW9uJyAmJiBvQ29sLmJVc2VSZW5kZXJlZCAmJiBvQ29sLm1EYXRhUHJvcCAhPT0gbnVsbCApCgkJCQl7CgkJCQkJX2ZuU2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSwgb0NvbC5mblJlbmRlciggewoJCQkJCQkiaURhdGFSb3ciOiBpUm93LAoJCQkJCQkiaURhdGFDb2x1bW4iOiBpLAoJCQkJCQkiYURhdGEiOiBvRGF0YS5fYURhdGEsCgkJCQkJCSJvU2V0dGluZ3MiOiBvU2V0dGluZ3MKCQkJCQl9ICkgKTsKCQkJCX0KCQkJCQoJCQkJLyogU2VlIGlmIHdlIHNob3VsZCBhdXRvLWRldGVjdCB0aGUgY29sdW1uIHR5cGUgKi8KCQkJCWlmICggb0NvbC5fYkF1dG9UeXBlICYmIG9Db2wuc1R5cGUgIT0gJ3N0cmluZycgKQoJCQkJewoJCQkJCS8qIEF0dGVtcHQgdG8gYXV0byBkZXRlY3QgdGhlIHR5cGUgLSBzYW1lIGFzIF9mbkdhdGhlckRhdGEoKSAqLwoJCQkJCXZhciBzVmFyVHlwZSA9IF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGksICd0eXBlJyApOwoJCQkJCWlmICggc1ZhclR5cGUgIT09IG51bGwgJiYgc1ZhclR5cGUgIT09ICcnICkKCQkJCQl7CgkJCQkJCXNUaGlzVHlwZSA9IF9mbkRldGVjdFR5cGUoIHNWYXJUeXBlICk7CgkJCQkJCWlmICggb0NvbC5zVHlwZSA9PT0gbnVsbCApCgkJCQkJCXsKCQkJCQkJCW9Db2wuc1R5cGUgPSBzVGhpc1R5cGU7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoIG9Db2wuc1R5cGUgIT0gc1RoaXNUeXBlICkKCQkJCQkJewoJCQkJCQkJLyogU3RyaW5nIGlzIGFsd2F5cyB0aGUgJ2ZhbGxiYWNrJyBvcHRpb24gKi8KCQkJCQkJCW9Db2wuc1R5cGUgPSAnc3RyaW5nJzsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJLyogQWRkIHRvIHRoZSBkaXNwbGF5IGFycmF5ICovCgkJCW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIucHVzaCggaVJvdyApOwoKCQkJLyogQ3JlYXRlIHRoZSBET00gaW1mb3JtYXRpb24gKi8KCQkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iRGVmZXJSZW5kZXIgKQoJCQl7CgkJCQlfZm5DcmVhdGVUciggb1NldHRpbmdzLCBpUm93ICk7CgkJCX0KCgkJCXJldHVybiBpUm93OwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5DcmVhdGVUcgoJCSAqIFB1cnBvc2U6ICBDcmVhdGUgYSBuZXcgVFIgZWxlbWVudCAoYW5kIGl0J3MgVEQgY2hpbGRyZW4pIGZvciBhIHJvdwoJCSAqIFJldHVybnM6ICB2b2lkCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aVJvdyAtIFJvdyB0byBjb25zaWRlcgoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNyZWF0ZVRyICggb1NldHRpbmdzLCBpUm93ICkKCQl7CgkJCXZhciBvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbaVJvd107CgkJCXZhciBuVGQ7CgoJCQlpZiAoIG9EYXRhLm5UciA9PT0gbnVsbCApCgkJCXsKCQkJCW9EYXRhLm5UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgoJCQkJLyogU3BlY2lhbCBwYXJhbWV0ZXJzIGNhbiBiZSBnaXZlbiBieSB0aGUgZGF0YSBzb3VyY2UgdG8gYmUgdXNlZCBvbiB0aGUgcm93ICovCgkJCQlpZiAoIHR5cGVvZiBvRGF0YS5fYURhdGEuRFRfUm93SWQgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9EYXRhLm5Uci5zZXRBdHRyaWJ1dGUoICdpZCcsIG9EYXRhLl9hRGF0YS5EVF9Sb3dJZCApOwoJCQkJfQoKCQkJCWlmICggdHlwZW9mIG9EYXRhLl9hRGF0YS5EVF9Sb3dDbGFzcyAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJJChvRGF0YS5uVHIpLmFkZENsYXNzKCBvRGF0YS5fYURhdGEuRFRfUm93Q2xhc3MgKTsKCQkJCX0KCgkJCQkvKiBQcm9jZXNzIGVhY2ggY29sdW1uICovCgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQl2YXIgb0NvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV07CgkJCQkJblRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCgkJCQkJLyogUmVuZGVyIGlmIG5lZWRlZCAtIGlmIGJVc2VSZW5kZXJlZCBpcyB0cnVlIHRoZW4gd2UgYWxyZWFkeSBoYXZlIHRoZSByZW5kZXJlZAoJCQkJCSAqIHZhbHVlIGluIHRoZSBkYXRhIHNvdXJjZSAtIHNvIGNhbiBqdXN0IHVzZSB0aGF0CgkJCQkJICovCgkJCQkJaWYgKCB0eXBlb2Ygb0NvbC5mblJlbmRlciA9PSAnZnVuY3Rpb24nICYmICghb0NvbC5iVXNlUmVuZGVyZWQgfHwgb0NvbC5tRGF0YVByb3AgPT09IG51bGwpICkKCQkJCQl7CgkJCQkJCW5UZC5pbm5lckhUTUwgPSBvQ29sLmZuUmVuZGVyKCB7CgkJCQkJCQkiaURhdGFSb3ciOiBpUm93LAoJCQkJCQkJImlEYXRhQ29sdW1uIjogaSwKCQkJCQkJCSJhRGF0YSI6IG9EYXRhLl9hRGF0YSwKCQkJCQkJCSJvU2V0dGluZ3MiOiBvU2V0dGluZ3MKCQkJCQkJfSApOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQluVGQuaW5uZXJIVE1MID0gX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSwgJ2Rpc3BsYXknICk7CgkJCQkJfQoJCQkJCgkJCQkJLyogQWRkIHVzZXIgZGVmaW5lZCBjbGFzcyAqLwoJCQkJCWlmICggb0NvbC5zQ2xhc3MgIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJblRkLmNsYXNzTmFtZSA9IG9Db2wuc0NsYXNzOwoJCQkJCX0KCQkJCQkKCQkJCQlpZiAoIG9Db2wuYlZpc2libGUgKQoJCQkJCXsKCQkJCQkJb0RhdGEublRyLmFwcGVuZENoaWxkKCBuVGQgKTsKCQkJCQkJb0RhdGEuX2FuSGlkZGVuW2ldID0gbnVsbDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJb0RhdGEuX2FuSGlkZGVuW2ldID0gblRkOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HYXRoZXJEYXRhCgkJICogUHVycG9zZTogIFJlYWQgaW4gdGhlIGRhdGEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGZyb20gdGhlIERPTQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqIE5vdGVzOiAgICBUaGlzIGlzIGEgb3B0aW1pc2VkIHZlcnNpb24gb2YgX2ZuQWRkRGF0YSAobW9yZSBvciBsZXNzKSBmb3IgcmVhZGluZyBpbmZvcm1hdGlvbgoJCSAqICAgZnJvbSB0aGUgRE9NLiBUaGUgYmFzaWMgYWN0aW9ucyBtdXN0IGJlIGlkZW50aWNhbCBpbiB0aGUgdHdvIGZ1bmN0aW9ucy4KCQkgKi8KCQlmdW5jdGlvbiBfZm5HYXRoZXJEYXRhKCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIGlMb29wLCBpLCBpTGVuLCBqLCBqTGVuLCBqSW5uZXIsCgkJCSAJblRkcywgblRycywgblRkLCBhTG9jYWxEYXRhLCBpVGhpc0luZGV4LAoJCQkJaVJvdywgaVJvd3MsIGlDb2x1bW4sIGlDb2x1bW5zLCBzTm9kZU5hbWU7CgkJCQoJCQkvKgoJCQkgKiBQcm9jZXNzIGJ5IHJvdyBmaXJzdAoJCQkgKiBBZGQgdGhlIGRhdGEgb2JqZWN0IGZvciB0aGUgd2hvbGUgdGFibGUgLSBzdG9yaW5nIHRoZSB0ciBub2RlLiBOb3RlIC0gbm8gcG9pbnQgaW4gZ2V0dGluZwoJCQkgKiBET00gYmFzZWQgZGF0YSBpZiB3ZSBhcmUgZ29pbmcgdG8gZ28gYW5kIHJlcGxhY2UgaXQgd2l0aCBBamF4IHNvdXJjZSBkYXRhLgoJCQkgKi8KCQkJaWYgKCBvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyB8fCBvU2V0dGluZ3Muc0FqYXhTb3VyY2UgPT09IG51bGwgKQoJCQl7CgkJCQluVHJzID0gb1NldHRpbmdzLm5UQm9keS5jaGlsZE5vZGVzOwoJCQkJZm9yICggaT0wLCBpTGVuPW5UcnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG5UcnNbaV0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSAiVFIiICkKCQkJCQl7CgkJCQkJCWlUaGlzSW5kZXggPSBvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aDsKCQkJCQkJb1NldHRpbmdzLmFvRGF0YS5wdXNoKCB7CgkJCQkJCQkiblRyIjogblRyc1tpXSwKCQkJCQkJCSJfaUlkIjogb1NldHRpbmdzLmlOZXh0SWQrKywKCQkJCQkJCSJfYURhdGEiOiBbXSwKCQkJCQkJCSJfYW5IaWRkZW4iOiBbXSwKCQkJCQkJCSJfc1Jvd1N0cmlwZSI6ICcnCgkJCQkJCX0gKTsKCQkJCQkJCgkJCQkJCW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIucHVzaCggaVRoaXNJbmRleCApOwoJCQkJCQluVGRzID0gblRyc1tpXS5jaGlsZE5vZGVzOwoJCQkJCQlqSW5uZXIgPSAwOwoJCQkJCQkKCQkJCQkJZm9yICggaj0wLCBqTGVuPW5UZHMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCQkJewoJCQkJCQkJc05vZGVOYW1lID0gblRkc1tqXS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQkJCQkJaWYgKCBzTm9kZU5hbWUgPT0gIlREIiB8fCBzTm9kZU5hbWUgPT0gIlRIIiApCgkJCQkJCQl7CgkJCQkJCQkJX2ZuU2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVRoaXNJbmRleCwgaklubmVyLCAkLnRyaW0oblRkc1tqXS5pbm5lckhUTUwpICk7CgkJCQkJCQkJaklubmVyKys7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEdhdGhlciBpbiB0aGUgVEQgZWxlbWVudHMgb2YgdGhlIFRhYmxlIC0gbm90ZSB0aGF0IHRoaXMgaXMgYmFzaWNhbGx5IHRoZSBzYW1lIGFzCgkJCSAqIGZuR2V0VGROb2RlcywgYnV0IHRoYXQgZnVuY3Rpb24gdGFrZXMgYWNjb3VudCBvZiBoaWRkZW4gY29sdW1ucywgd2hpY2ggd2UgaGF2ZW4ndCB5ZXQKCQkJICogc2V0dXAhCgkJCSAqLwoJCQluVHJzID0gX2ZuR2V0VHJOb2Rlcyggb1NldHRpbmdzICk7CgkJCW5UZHMgPSBbXTsKCQkJZm9yICggaT0wLCBpTGVuPW5UcnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJZm9yICggaj0wLCBqTGVuPW5UcnNbaV0uY2hpbGROb2Rlcy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCW5UZCA9IG5UcnNbaV0uY2hpbGROb2Rlc1tqXTsKCQkJCQlzTm9kZU5hbWUgPSBuVGQubm9kZU5hbWUudG9VcHBlckNhc2UoKTsKCQkJCQlpZiAoIHNOb2RlTmFtZSA9PSAiVEQiIHx8IHNOb2RlTmFtZSA9PSAiVEgiICkKCQkJCQl7CgkJCQkJCW5UZHMucHVzaCggblRkICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkvKiBTYW5pdHkgY2hlY2sgKi8KCQkJaWYgKCBuVGRzLmxlbmd0aCAhPSBuVHJzLmxlbmd0aCAqIG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoICkKCQkJewoJCQkJX2ZuTG9nKCBvU2V0dGluZ3MsIDEsICJVbmV4cGVjdGVkIG51bWJlciBvZiBURCBlbGVtZW50cy4gRXhwZWN0ZWQgIisKCQkJCQkoblRycy5sZW5ndGggKiBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCkrIiBhbmQgZ290ICIrblRkcy5sZW5ndGgrIi4gRGF0YVRhYmxlcyBkb2VzICIrCgkJCQkJIm5vdCBzdXBwb3J0IHJvd3NwYW4gLyBjb2xzcGFuIGluIHRoZSB0YWJsZSBib2R5LCBhbmQgdGhlcmUgbXVzdCBiZSBvbmUgY2VsbCBmb3IgZWFjaCAiKwoJCQkJCSJyb3cvY29sdW1uIGNvbWJpbmF0aW9uLiIgKTsKCQkJfQoJCQkKCQkJLyogTm93IHByb2Nlc3MgYnkgY29sdW1uICovCgkJCWZvciAoIGlDb2x1bW49MCwgaUNvbHVtbnM9b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpQ29sdW1uPGlDb2x1bW5zIDsgaUNvbHVtbisrICkKCQkJewoJCQkJLyogR2V0IHRoZSB0aXRsZSBvZiB0aGUgY29sdW1uIC0gdW5sZXNzIHRoZXJlIGlzIGEgdXNlciBzZXQgb25lICovCgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1RpdGxlID09PSBudWxsICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUaXRsZSA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0ublRoLmlubmVySFRNTDsKCQkJCX0KCQkJCQoJCQkJdmFyCgkJCQkJYkF1dG9UeXBlID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5fYkF1dG9UeXBlLAoJCQkJCWJSZW5kZXIgPSB0eXBlb2Ygb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5mblJlbmRlciA9PSAnZnVuY3Rpb24nLAoJCQkJCWJDbGFzcyA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc0NsYXNzICE9PSBudWxsLAoJCQkJCWJWaXNpYmxlID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5iVmlzaWJsZSwKCQkJCQluQ2VsbCwgc1RoaXNUeXBlLCBzUmVuZGVyZWQsIHNWYWxUeXBlOwoJCQkJCgkJCQkvKiBBIHNpbmdsZSBsb29wIHRvIHJ1bGUgdGhlbSBhbGwgKGFuZCBiZSBtb3JlIGVmZmljaWVudCkgKi8KCQkJCWlmICggYkF1dG9UeXBlIHx8IGJSZW5kZXIgfHwgYkNsYXNzIHx8ICFiVmlzaWJsZSApCgkJCQl7CgkJCQkJZm9yICggaVJvdz0wLCBpUm93cz1vU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGlSb3c8aVJvd3MgOyBpUm93KysgKQoJCQkJCXsKCQkJCQkJbkNlbGwgPSBuVGRzWyAoaVJvdyppQ29sdW1ucykgKyBpQ29sdW1uIF07CgkJCQkJCQoJCQkJCQkvKiBUeXBlIGRldGVjdGlvbiAqLwoJCQkJCQlpZiAoIGJBdXRvVHlwZSAmJiBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUeXBlICE9ICdzdHJpbmcnICkKCQkJCQkJewoJCQkJCQkJc1ZhbFR5cGUgPSBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpQ29sdW1uLCAndHlwZScgKTsKCQkJCQkJCWlmICggc1ZhbFR5cGUgIT09ICcnICkKCQkJCQkJCXsKCQkJCQkJCQlzVGhpc1R5cGUgPSBfZm5EZXRlY3RUeXBlKCBzVmFsVHlwZSApOwoJCQkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zVHlwZSA9PT0gbnVsbCApCgkJCQkJCQkJewoJCQkJCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLnNUeXBlID0gc1RoaXNUeXBlOwoJCQkJCQkJCX0KCQkJCQkJCQllbHNlIGlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zVHlwZSAhPSBzVGhpc1R5cGUgKQoJCQkJCQkJCXsKCQkJCQkJCQkJLyogU3RyaW5nIGlzIGFsd2F5cyB0aGUgJ2ZhbGxiYWNrJyBvcHRpb24gKi8KCQkJCQkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5zVHlwZSA9ICdzdHJpbmcnOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkKCQkJCQkJLyogUmVuZGVyaW5nICovCgkJCQkJCWlmICggYlJlbmRlciApCgkJCQkJCXsKCQkJCQkJCXNSZW5kZXJlZCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uZm5SZW5kZXIoIHsKCQkJCQkJCQkJImlEYXRhUm93IjogaVJvdywKCQkJCQkJCQkJImlEYXRhQ29sdW1uIjogaUNvbHVtbiwKCQkJCQkJCQkJImFEYXRhIjogb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYURhdGEsCgkJCQkJCQkJCSJvU2V0dGluZ3MiOiBvU2V0dGluZ3MKCQkJCQkJCQl9ICk7CgkJCQkJCQluQ2VsbC5pbm5lckhUTUwgPSBzUmVuZGVyZWQ7CgkJCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uYlVzZVJlbmRlcmVkICkKCQkJCQkJCXsKCQkJCQkJCQkvKiBVc2UgdGhlIHJlbmRlcmVkIGRhdGEgZm9yIGZpbHRlcmluZy9zb3J0aW5nICovCgkJCQkJCQkJX2ZuU2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaUNvbHVtbiwgc1JlbmRlcmVkICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJCgkJCQkJCS8qIENsYXNzZXMgKi8KCQkJCQkJaWYgKCBiQ2xhc3MgKQoJCQkJCQl7CgkJCQkJCQluQ2VsbC5jbGFzc05hbWUgKz0gJyAnK29TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc0NsYXNzOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQkvKiBDb2x1bW4gdmlzYWJpbGl0eSAqLwoJCQkJCQlpZiAoICFiVmlzaWJsZSApCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FuSGlkZGVuW2lDb2x1bW5dID0gbkNlbGw7CgkJCQkJCQluQ2VsbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBuQ2VsbCApOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYW5IaWRkZW5baUNvbHVtbl0gPSBudWxsOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkJ1aWxkSGVhZAoJCSAqIFB1cnBvc2U6ICBDcmVhdGUgdGhlIEhUTUwgaGVhZGVyIGZvciB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5CdWlsZEhlYWQoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaSwgblRoLCBpTGVuLCBqLCBqTGVuOwoJCQl2YXIgYW5UciA9IG9TZXR0aW5ncy5uVEhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7CgkJCXZhciBpVGhzID0gb1NldHRpbmdzLm5USGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGgnKS5sZW5ndGg7CgkJCXZhciBpQ29ycmVjdG9yID0gMDsKCQkJdmFyIGpxQ2hpbGRyZW47CgkJCQoJCQkvKiBJZiB0aGVyZSBpcyBhIGhlYWRlciBpbiBwbGFjZSAtIHRoZW4gdXNlIGl0IC0gb3RoZXJ3aXNlIGl0J3MgZ29pbmcgdG8gZ2V0IG51a2VkLi4uICovCgkJCWlmICggaVRocyAhPT0gMCApCgkJCXsKCQkJCS8qIFdlJ3ZlIGdvdCBhIHRoZWFkIGZyb20gdGhlIERPTSwgc28gcmVtb3ZlIGhpZGRlbiBjb2x1bW5zIGFuZCBhcHBseSB3aWR0aCB0byB2aXMgY29scyAqLwoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQluVGggPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaDsKCQkJCQkKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc0NsYXNzICE9PSBudWxsICkKCQkJCQl7CgkJCQkJCSQoblRoKS5hZGRDbGFzcyggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zQ2xhc3MgKTsKCQkJCQl9CgkJCQkJCgkJCQkJLyogU2V0IHRoZSB0aXRsZSBvZiB0aGUgY29sdW1uIGlmIGl0IGlzIHVzZXIgZGVmaW5lZCAobm90IHdoYXQgd2FzIGF1dG8gZGV0ZWN0ZWQpICovCgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNUaXRsZSAhPSBuVGguaW5uZXJIVE1MICkKCQkJCQl7CgkJCQkJCW5UaC5pbm5lckhUTUwgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNUaXRsZTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBXZSBkb24ndCBoYXZlIGEgaGVhZGVyIGluIHRoZSBET00gLSBzbyB3ZSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBjcmVhdGUgb25lICovCgkJCQl2YXIgblRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInRyIiApOwoJCQkJCgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCW5UaCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoOwoJCQkJCW5UaC5pbm5lckhUTUwgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNUaXRsZTsKCQkJCQkKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc0NsYXNzICE9PSBudWxsICkKCQkJCQl7CgkJCQkJCSQoblRoKS5hZGRDbGFzcyggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zQ2xhc3MgKTsKCQkJCQl9CgkJCQkJCgkJCQkJblRyLmFwcGVuZENoaWxkKCBuVGggKTsKCQkJCX0KCQkJCSQob1NldHRpbmdzLm5USGVhZCkuaHRtbCggJycgKVswXS5hcHBlbmRDaGlsZCggblRyICk7CgkJCQlfZm5EZXRlY3RIZWFkZXIoIG9TZXR0aW5ncy5hb0hlYWRlciwgb1NldHRpbmdzLm5USGVhZCApOwoJCQl9CgkJCQoJCQkvKiBBZGQgdGhlIGV4dHJhIG1hcmt1cCBuZWVkZWQgYnkgalF1ZXJ5IFVJJ3MgdGhlbWVzICovCgkJCWlmICggb1NldHRpbmdzLmJKVUkgKQoJCQl7CgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCW5UaCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoOwoJCQkJCQoJCQkJCXZhciBuRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQkJbkRpdi5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRKVUlXcmFwcGVyOwoJCQkJCSQoblRoKS5jb250ZW50cygpLmFwcGVuZFRvKG5EaXYpOwoJCQkJCQoJCQkJCXZhciBuU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKCQkJCQluU3Bhbi5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRJY29uOwoJCQkJCW5EaXYuYXBwZW5kQ2hpbGQoIG5TcGFuICk7CgkJCQkJblRoLmFwcGVuZENoaWxkKCBuRGl2ICk7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEFkZCBzb3J0IGxpc3RlbmVyICovCgkJCXZhciBmbk5vU2VsZWN0ID0gZnVuY3Rpb24gKGUpIHsKCQkJCXRoaXMub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH07CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX07CgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgKQoJCQl7CgkJCQlmb3IgKCBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlNvcnRhYmxlICE9PSBmYWxzZSApCgkJCQkJewoJCQkJCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXIoIG9TZXR0aW5ncywgb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgsIGkgKTsKCQkJCQkJCgkJCQkJCS8qIFRha2UgdGhlIGJydXRhbCBhcHByb2FjaCB0byBjYW5jZWxsaW5nIHRleHQgc2VsZWN0aW9uIGluIGhlYWRlciAqLwoJCQkJCQkkKG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoKS5iaW5kKCAnbW91c2Vkb3duLkRUJywgZm5Ob1NlbGVjdCApOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkKG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoKS5hZGRDbGFzcyggb1NldHRpbmdzLm9DbGFzc2VzLnNTb3J0YWJsZU5vbmUgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCS8qIERlYWwgd2l0aCB0aGUgZm9vdGVyIC0gYWRkIGNsYXNzZXMgaWYgcmVxdWlyZWQgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub0NsYXNzZXMuc0Zvb3RlclRIICE9PSAiIiApCgkJCXsKCQkJCSQoJz50cj50aCcsIG9TZXR0aW5ncy5uVEZvb3QpLmFkZENsYXNzKCBvU2V0dGluZ3Mub0NsYXNzZXMuc0Zvb3RlclRIICk7CgkJCX0KCQkJCgkJCS8qIENhY2hlIHRoZSBmb290ZXIgZWxlbWVudHMgKi8KCQkJaWYgKCBvU2V0dGluZ3MublRGb290ICE9PSBudWxsICkKCQkJewoJCQkJdmFyIGFuQ2VsbHMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncywgbnVsbCwgb1NldHRpbmdzLmFvRm9vdGVyICk7CgkJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIGFuQ2VsbHNbaV0gIT0gJ3VuZGVmaW5lZCcgKQoJCQkJCXsKCQkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGYgPSBhbkNlbGxzW2ldOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gRHJhd2luZyBmdW5jdGlvbnMKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5EcmF3SGVhZAoJCSAqIFB1cnBvc2U6ICBEcmF3IHRoZSBoZWFkZXIgKG9yIGZvb3RlcikgZWxlbWVudCBiYXNlZCBvbiB0aGUgY29sdW1uIHZpc2liaWxpdHkgc3RhdGVzLiBUaGUKCQkgKiAgICAgICAgICAgbWV0aG9kb2xvZ3kgaGVyZSBpcyB0byB1c2UgdGhlIGxheW91dCBhcnJheSBmcm9tIF9mbkRldGVjdEhlYWRlciwgbW9kaWZpZWQgZm9yCgkJICogICAgICAgICAgIHRoZSBpbnN0YW50YW5lb3VzIGNvbHVtbiB2aXNpYmlsaXR5LCB0byBjb25zdHJ1Y3QgdGhlIG5ldyBsYXlvdXQuIFRoZSBncmlkIGlzCgkJICogICAgICAgICAgIHRyYXZlcnNlZCBvdmVyIGNlbGwgYXQgYSB0aW1lIGluIGEgcm93cyB4IGNvbHVtbnMgZ3JpZCBmYXNoaW9uLCBhbHRob3VnaCBlYWNoIAoJCSAqICAgICAgICAgICBjZWxsIGluc2VydCBjYW4gY292ZXIgbXVsdGlwbGUgZWxlbWVudHMgaW4gdGhlIGdyaWQgLSB3aGljaCBpcyB0cmFja3MgdXNpbmcgdGhlCgkJICogICAgICAgICAgIGFBcHBsaWVkIGFycmF5LiBDZWxsIGluc2VydHMgaW4gdGhlIGdyaWQgd2lsbCBvbmx5IG9jY3VyIHdoZXJlIHRoZXJlIGlzbid0CgkJICogICAgICAgICAgIGFscmVhZHkgYSBjZWxsIGluIHRoYXQgcG9zaXRpb24uCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGFycmF5IG9iamVjdHM6YW9Tb3VyY2UgLSBMYXlvdXQgYXJyYXkgZnJvbSBfZm5EZXRlY3RIZWFkZXIKCQkgKiAgICAgICAgICAgYm9vbGVhbjpiSW5jbHVkZUhpZGRlbiAtIElmIHRydWUgdGhlbiBpbmNsdWRlIHRoZSBoaWRkZW4gY29sdW1ucyBpbiB0aGUgY2FsYywgCgkJICogICAgICAgICAgICAgLSBvcHRpb25hbDogZGVmYXVsdCBmYWxzZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRyYXdIZWFkKCBvU2V0dGluZ3MsIGFvU291cmNlLCBiSW5jbHVkZUhpZGRlbiApCgkJewoJCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaywga0xlbjsKCQkJdmFyIGFvTG9jYWwgPSBbXTsKCQkJdmFyIGFBcHBsaWVkID0gW107CgkJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgaVJvd3NwYW4sIGlDb2xzcGFuOwoKCQkJaWYgKCB0eXBlb2YgYkluY2x1ZGVIaWRkZW4gPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQliSW5jbHVkZUhpZGRlbiA9IGZhbHNlOwoJCQl9CgoJCQkvKiBNYWtlIGEgY29weSBvZiB0aGUgbWFzdGVyIGxheW91dCBhcnJheSwgYnV0IHdpdGhvdXQgdGhlIHZpc2libGUgY29sdW1ucyBpbiBpdCAqLwoJCQlmb3IgKCBpPTAsIGlMZW49YW9Tb3VyY2UubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJYW9Mb2NhbFtpXSA9IGFvU291cmNlW2ldLnNsaWNlKCk7CgkJCQlhb0xvY2FsW2ldLm5UciA9IGFvU291cmNlW2ldLm5UcjsKCgkJCQkvKiBSZW1vdmUgYW55IGNvbHVtbnMgd2hpY2ggYXJlIGN1cnJlbnRseSBoaWRkZW4gKi8KCQkJCWZvciAoIGo9aUNvbHVtbnMtMSA7IGo+PTAgOyBqLS0gKQoJCQkJewoJCQkJCWlmICggIW9TZXR0aW5ncy5hb0NvbHVtbnNbal0uYlZpc2libGUgJiYgIWJJbmNsdWRlSGlkZGVuICkKCQkJCQl7CgkJCQkJCWFvTG9jYWxbaV0uc3BsaWNlKCBqLCAxICk7CgkJCQkJfQoJCQkJfQoKCQkJCS8qIFByZXAgdGhlIGFwcGxpZWQgYXJyYXkgLSBpdCBuZWVkcyBhbiBlbGVtZW50IGZvciBlYWNoIHJvdyAqLwoJCQkJYUFwcGxpZWQucHVzaCggW10gKTsKCQkJfQoKCQkJZm9yICggaT0wLCBpTGVuPWFvTG9jYWwubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJLyogQWxsIGNlbGxzIGFyZSBnb2luZyB0byBiZSByZXBsYWNlZCwgc28gZW1wdHkgb3V0IHRoZSByb3cgKi8KCQkJCWlmICggYW9Mb2NhbFtpXS5uVHIgKQoJCQkJewoJCQkJCWZvciAoIGs9MCwga0xlbj1hb0xvY2FsW2ldLm5Uci5jaGlsZE5vZGVzLmxlbmd0aCA7IGs8a0xlbiA7IGsrKyApCgkJCQkJewoJCQkJCQlhb0xvY2FsW2ldLm5Uci5yZW1vdmVDaGlsZCggYW9Mb2NhbFtpXS5uVHIuY2hpbGROb2Rlc1swXSApOwoJCQkJCX0KCQkJCX0KCgkJCQlmb3IgKCBqPTAsIGpMZW49YW9Mb2NhbFtpXS5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCWlSb3dzcGFuID0gMTsKCQkJCQlpQ29sc3BhbiA9IDE7CgoJCQkJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgY2VsbCAocm93L2NvbHNwYW4pIGNvdmVyaW5nIG91ciB0YXJnZXQKCQkJCQkgKiBpbnNlcnQgcG9pbnQuIElmIHRoZXJlIGlzLCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCgkJCQkJICovCgkJCQkJaWYgKCB0eXBlb2YgYUFwcGxpZWRbaV1bal0gPT0gJ3VuZGVmaW5lZCcgKQoJCQkJCXsKCQkJCQkJYW9Mb2NhbFtpXS5uVHIuYXBwZW5kQ2hpbGQoIGFvTG9jYWxbaV1bal0uY2VsbCApOwoJCQkJCQlhQXBwbGllZFtpXVtqXSA9IDE7CgoJCQkJCQkvKiBFeHBhbmQgdGhlIGNlbGwgdG8gY292ZXIgYXMgbWFueSByb3dzIGFzIG5lZWRlZCAqLwoJCQkJCQl3aGlsZSAoIHR5cGVvZiBhb0xvY2FsW2kraVJvd3NwYW5dICE9ICd1bmRlZmluZWQnICYmCgkJCQkJCSAgICAgICAgYW9Mb2NhbFtpXVtqXS5jZWxsID09IGFvTG9jYWxbaStpUm93c3Bhbl1bal0uY2VsbCApCgkJCQkJCXsKCQkJCQkJCWFBcHBsaWVkW2kraVJvd3NwYW5dW2pdID0gMTsKCQkJCQkJCWlSb3dzcGFuKys7CgkJCQkJCX0KCgkJCQkJCS8qIEV4cGFuZCB0aGUgY2VsbCB0byBjb3ZlciBhcyBtYW55IGNvbHVtbnMgYXMgbmVlZGVkICovCgkJCQkJCXdoaWxlICggdHlwZW9mIGFvTG9jYWxbaV1baitpQ29sc3Bhbl0gIT0gJ3VuZGVmaW5lZCcgJiYKCQkJCQkJICAgICAgICBhb0xvY2FsW2ldW2pdLmNlbGwgPT0gYW9Mb2NhbFtpXVtqK2lDb2xzcGFuXS5jZWxsICkKCQkJCQkJewoJCQkJCQkJLyogTXVzdCB1cGRhdGUgdGhlIGFwcGxpZWQgYXJyYXkgb3ZlciB0aGUgcm93cyBmb3IgdGhlIGNvbHVtbnMgKi8KCQkJCQkJCWZvciAoIGs9MCA7IGs8aVJvd3NwYW4gOyBrKysgKQoJCQkJCQkJewoJCQkJCQkJCWFBcHBsaWVkW2kra11baitpQ29sc3Bhbl0gPSAxOwoJCQkJCQkJfQoJCQkJCQkJaUNvbHNwYW4rKzsKCQkJCQkJfQoKCQkJCQkJLyogRG8gdGhlIGFjdHVhbCBleHBhbnNpb24gaW4gdGhlIERPTSAqLwoJCQkJCQlhb0xvY2FsW2ldW2pdLmNlbGwuc2V0QXR0cmlidXRlKCdyb3dzcGFuJywgaVJvd3NwYW4pOwoJCQkJCQlhb0xvY2FsW2ldW2pdLmNlbGwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgaUNvbHNwYW4pOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5EcmF3CgkJICogUHVycG9zZTogIEluc2VydCB0aGUgcmVxdWlyZWQgVFIgbm9kZXMgaW50byB0aGUgdGFibGUgZm9yIGRpc3BsYXkKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5EcmF3KCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIGksIGlMZW47CgkJCXZhciBhblJvd3MgPSBbXTsKCQkJdmFyIGlSb3dDb3VudCA9IDA7CgkJCXZhciBiUm93RXJyb3IgPSBmYWxzZTsKCQkJdmFyIGlTdHJpcHMgPSBvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXMubGVuZ3RoOwoJCQl2YXIgaU9wZW5Sb3dzID0gb1NldHRpbmdzLmFvT3BlblJvd3MubGVuZ3RoOwoJCQkKCQkJLyogUHJvdmlkZSBhIHByZS1jYWxsYmFjayBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGRyYXcgaXMgZmFsc2UgaXMgcmV0dXJuZWQgKi8KCQkJaWYgKCBvU2V0dGluZ3MuZm5QcmVEcmF3Q2FsbGJhY2sgIT09IG51bGwgJiYKCQkJICAgICBvU2V0dGluZ3MuZm5QcmVEcmF3Q2FsbGJhY2suY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgb1NldHRpbmdzICkgPT09IGZhbHNlICkKCQkJewoJCQkgICAgIHJldHVybjsKCQkJfQoJCQkKCQkJb1NldHRpbmdzLmJEcmF3aW5nID0gdHJ1ZTsKCQkJCgkJCS8qIENoZWNrIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbiBpbml0aWFsIGRyYXcgcG9zaXRpb24gZnJvbSBzdGF0ZSBzYXZpbmcgKi8KCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ICE9ICd1bmRlZmluZWQnICYmIG9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydCAhPSAtMSApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0OwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IChvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPj0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSkgPwoJCQkJCQkwIDogb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0OwoJCQkJfQoJCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gLTE7CgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBTZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGRyYXcgaW50ZXJjZXB0ICovCgkJCWlmICggb1NldHRpbmdzLmJEZWZlckxvYWRpbmcgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyA9IGZhbHNlOwoJCQkJb1NldHRpbmdzLmlEcmF3Kys7CgkJCX0KCQkJZWxzZSBpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkKCQkJewoJCQkJb1NldHRpbmdzLmlEcmF3Kys7CgkJCX0KCQkJZWxzZSBpZiAoICFvU2V0dGluZ3MuYkRlc3Ryb3lpbmcgJiYgIV9mbkFqYXhVcGRhdGUoIG9TZXR0aW5ncyApICkKCQkJewoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJdmFyIGlTdGFydCA9IG9TZXR0aW5ncy5faURpc3BsYXlTdGFydDsKCQkJCXZhciBpRW5kID0gb1NldHRpbmdzLl9pRGlzcGxheUVuZDsKCQkJCQoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkKCQkJCXsKCQkJCQlpU3RhcnQgPSAwOwoJCQkJCWlFbmQgPSBvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aDsKCQkJCX0KCQkJCQoJCQkJZm9yICggdmFyIGo9aVN0YXJ0IDsgajxpRW5kIDsgaisrICkKCQkJCXsKCQkJCQl2YXIgYW9EYXRhID0gb1NldHRpbmdzLmFvRGF0YVsgb1NldHRpbmdzLmFpRGlzcGxheVtqXSBdOwoJCQkJCWlmICggYW9EYXRhLm5UciA9PT0gbnVsbCApCgkJCQkJewoJCQkJCQlfZm5DcmVhdGVUciggb1NldHRpbmdzLCBvU2V0dGluZ3MuYWlEaXNwbGF5W2pdICk7CgkJCQkJfQoKCQkJCQl2YXIgblJvdyA9IGFvRGF0YS5uVHI7CgkJCQkJCgkJCQkJLyogUmVtb3ZlIHRoZSBvbGQgc3RyaXBwaW5nIGNsYXNzZXMgYW5kIHRoZW4gYWRkIHRoZSBuZXcgb25lICovCgkJCQkJaWYgKCBpU3RyaXBzICE9PSAwICkKCQkJCQl7CgkJCQkJCXZhciBzU3RyaXAgPSBvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXNbIGlSb3dDb3VudCAlIGlTdHJpcHMgXTsKCQkJCQkJaWYgKCBhb0RhdGEuX3NSb3dTdHJpcGUgIT0gc1N0cmlwICkKCQkJCQkJewoJCQkJCQkJJChuUm93KS5yZW1vdmVDbGFzcyggYW9EYXRhLl9zUm93U3RyaXBlICkuYWRkQ2xhc3MoIHNTdHJpcCApOwoJCQkJCQkJYW9EYXRhLl9zUm93U3RyaXBlID0gc1N0cmlwOwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCS8qIEN1c3RvbSByb3cgY2FsbGJhY2sgZnVuY3Rpb24gLSBtaWdodCB3YW50IHRvIG1hbmlwdWxlIHRoZSByb3cgKi8KCQkJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuZm5Sb3dDYWxsYmFjayA9PSAiZnVuY3Rpb24iICkKCQkJCQl7CgkJCQkJCW5Sb3cgPSBvU2V0dGluZ3MuZm5Sb3dDYWxsYmFjay5jYWxsKCBvU2V0dGluZ3Mub0luc3RhbmNlLCBuUm93LCAKCQkJCQkJCW9TZXR0aW5ncy5hb0RhdGFbIG9TZXR0aW5ncy5haURpc3BsYXlbal0gXS5fYURhdGEsIGlSb3dDb3VudCwgaiApOwoJCQkJCQlpZiAoICFuUm93ICYmICFiUm93RXJyb3IgKQoJCQkJCQl7CgkJCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgIkEgbm9kZSB3YXMgbm90IHJldHVybmVkIGJ5IGZuUm93Q2FsbGJhY2siICk7CgkJCQkJCQliUm93RXJyb3IgPSB0cnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCWFuUm93cy5wdXNoKCBuUm93ICk7CgkJCQkJaVJvd0NvdW50Kys7CgkJCQkJCgkJCQkJLyogSWYgdGhlcmUgaXMgYW4gb3BlbiByb3cgLSBhbmQgaXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBwYXJlbnQgLSBhdHRhY2ggaXQgb24gcmVkcmF3ICovCgkJCQkJaWYgKCBpT3BlblJvd3MgIT09IDAgKQoJCQkJCXsKCQkJCQkJZm9yICggdmFyIGs9MCA7IGs8aU9wZW5Sb3dzIDsgaysrICkKCQkJCQkJewoJCQkJCQkJaWYgKCBuUm93ID09IG9TZXR0aW5ncy5hb09wZW5Sb3dzW2tdLm5QYXJlbnQgKQoJCQkJCQkJewoJCQkJCQkJCWFuUm93cy5wdXNoKCBvU2V0dGluZ3MuYW9PcGVuUm93c1trXS5uVHIgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qIFRhYmxlIGlzIGVtcHR5IC0gY3JlYXRlIGEgcm93IHdpdGggYW4gZW1wdHkgbWVzc2FnZSBpbiBpdCAqLwoJCQkJYW5Sb3dzWyAwIF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndHInICk7CgkJCQkKCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlc1swXSAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJYW5Sb3dzWyAwIF0uY2xhc3NOYW1lID0gb1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzWzBdOwoJCQkJfQoKCQkJCXZhciBzWmVybyA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzLnJlcGxhY2UoCgkJCQkJJ19NQVhfJywgb1NldHRpbmdzLmZuRm9ybWF0TnVtYmVyKG9TZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpKSApOwoJCQkJaWYgKCBvU2V0dGluZ3MuaURyYXcgPT0gMSAmJiBvU2V0dGluZ3Muc0FqYXhTb3VyY2UgIT09IG51bGwgJiYgIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKQoJCQkJewoJCQkJCXNaZXJvID0gb1NldHRpbmdzLm9MYW5ndWFnZS5zTG9hZGluZ1JlY29yZHM7CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZW9mIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgIT0gJ3VuZGVmaW5lZCcgJiYKCQkJCSAgICAgb1NldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCkgPT09IDAgKQoJCQkJewoJCQkJCXNaZXJvID0gb1NldHRpbmdzLm9MYW5ndWFnZS5zRW1wdHlUYWJsZTsKCQkJCX0KCgkJCQl2YXIgblRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RkJyApOwoJCQkJblRkLnNldEF0dHJpYnV0ZSggJ3ZhbGlnbicsICJ0b3AiICk7CgkJCQluVGQuY29sU3BhbiA9IF9mblZpc2JsZUNvbHVtbnMoIG9TZXR0aW5ncyApOwoJCQkJblRkLmNsYXNzTmFtZSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zUm93RW1wdHk7CgkJCQluVGQuaW5uZXJIVE1MID0gc1plcm87CgkJCQkKCQkJCWFuUm93c1sgaVJvd0NvdW50IF0uYXBwZW5kQ2hpbGQoIG5UZCApOwoJCQl9CgkJCQoJCQkvKiBDYWxsYmFjayB0aGUgaGVhZGVyIGFuZCBmb290ZXIgY3VzdG9tIGZ1bmNhdGlvbiBpZiB0aGVyZSBpcyBvbmUgKi8KCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmZuSGVhZGVyQ2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyApCgkJCXsKCQkJCW9TZXR0aW5ncy5mbkhlYWRlckNhbGxiYWNrLmNhbGwoIG9TZXR0aW5ncy5vSW5zdGFuY2UsICQoJz50cicsIG9TZXR0aW5ncy5uVEhlYWQpWzBdLCAKCQkJCQlfZm5HZXREYXRhTWFzdGVyKCBvU2V0dGluZ3MgKSwgb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0LCBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCksCgkJCQkJb1NldHRpbmdzLmFpRGlzcGxheSApOwoJCQl9CgkJCQoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuZm5Gb290ZXJDYWxsYmFjayA9PSAnZnVuY3Rpb24nICkKCQkJewoJCQkJb1NldHRpbmdzLmZuRm9vdGVyQ2FsbGJhY2suY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgJCgnPnRyJywgb1NldHRpbmdzLm5URm9vdClbMF0sIAoJCQkJCV9mbkdldERhdGFNYXN0ZXIoIG9TZXR0aW5ncyApLCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQsIG9TZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5ICk7CgkJCX0KCQkJCgkJCS8qIAoJCQkgKiBOZWVkIHRvIHJlbW92ZSBhbnkgb2xkIHJvdyBmcm9tIHRoZSBkaXNwbGF5IC0gbm90ZSB3ZSBjYW4ndCBqdXN0IGVtcHR5IHRoZSB0Ym9keSB1c2luZwoJCQkgKiAkKCkuaHRtbCgnJykgc2luY2UgdGhpcyB3aWxsIHVuYmluZCB0aGUgalF1ZXJ5IGV2ZW50IGhhbmRsZXJzIChldmVuIGFsdGhvdWdoIHRoZSBub2RlIAoJCQkgKiBzdGlsbCBleGlzdHMhKSAtIGVxdWFsbHkgd2UgY2FuJ3QgdXNlIGlubmVySFRNTCwgc2luY2UgSUUgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KCQkJICovCgkJCXZhcgoJCQkJbkFkZEZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCgkJCQluUmVtb3ZlRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKCQkJCW5Cb2R5UGFyLCBuVHJzOwoJCQkKCQkJaWYgKCBvU2V0dGluZ3MublRCb2R5ICkKCQkJewoJCQkJbkJvZHlQYXIgPSBvU2V0dGluZ3MublRCb2R5LnBhcmVudE5vZGU7CgkJCQluUmVtb3ZlRnJhZy5hcHBlbmRDaGlsZCggb1NldHRpbmdzLm5UQm9keSApOwoJCQkJCgkJCQkvKiBXaGVuIGRvaW5nIGluZmluaXRlIHNjcm9sbGluZywgb25seSByZW1vdmUgY2hpbGQgcm93cyB3aGVuIHNvcnRpbmcsIGZpbHRlcmluZyBvciBzdGFydAoJCQkJICogdXAuIFdoZW4gbm90IGluZmluaXRlIHNjcm9sbCwgYWx3YXlzIGRvIGl0LgoJCQkJICovCgkJCQlpZiAoICFvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgfHwgIW9TZXR0aW5ncy5fYkluaXRDb21wbGV0ZSB8fAoJCQkJIAlvU2V0dGluZ3MuYlNvcnRlZCB8fCBvU2V0dGluZ3MuYkZpbHRlcmVkICkKCQkJCXsKCQkJCQluVHJzID0gb1NldHRpbmdzLm5UQm9keS5jaGlsZE5vZGVzOwoJCQkJCWZvciAoIGk9blRycy5sZW5ndGgtMSA7IGk+PTAgOyBpLS0gKQoJCQkJCXsKCQkJCQkJblRyc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBuVHJzW2ldICk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBQdXQgdGhlIGRyYXcgdGFibGUgaW50byB0aGUgZG9tICovCgkJCQlmb3IgKCBpPTAsIGlMZW49YW5Sb3dzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJbkFkZEZyYWcuYXBwZW5kQ2hpbGQoIGFuUm93c1tpXSApOwoJCQkJfQoJCQkJCgkJCQlvU2V0dGluZ3MublRCb2R5LmFwcGVuZENoaWxkKCBuQWRkRnJhZyApOwoJCQkJaWYgKCBuQm9keVBhciAhPT0gbnVsbCApCgkJCQl7CgkJCQkJbkJvZHlQYXIuYXBwZW5kQ2hpbGQoIG9TZXR0aW5ncy5uVEJvZHkgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogQ2FsbCBhbGwgcmVxdWlyZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgZW5kIG9mIGEgZHJhdyAqLwoJCQlmb3IgKCBpPW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5sZW5ndGgtMSA7IGk+PTAgOyBpLS0gKQoJCQl7CgkJCQlvU2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2tbaV0uZm4uY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgb1NldHRpbmdzICk7CgkJCX0KCQkJCgkJCS8qIERyYXcgaXMgY29tcGxldGUsIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBtdXN0IGJlIGFzIHdlbGwgKi8KCQkJb1NldHRpbmdzLmJTb3J0ZWQgPSBmYWxzZTsKCQkJb1NldHRpbmdzLmJGaWx0ZXJlZCA9IGZhbHNlOwoJCQlvU2V0dGluZ3MuYkRyYXdpbmcgPSBmYWxzZTsKCQkJCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCXsKCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIGZhbHNlICk7CgkJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuX2JJbml0Q29tcGxldGUgPT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCV9mbkluaXRDb21wbGV0ZSggb1NldHRpbmdzICk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuUmVEcmF3CgkJICogUHVycG9zZTogIFJlZHJhdyB0aGUgdGFibGUgLSB0YWtpbmcgYWNjb3VudCBvZiB0aGUgdmFyaW91cyBmZWF0dXJlcyB3aGljaCBhcmUgZW5hYmxlZAoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mblJlRHJhdyggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJCXsKCQkJCS8qIFNvcnRpbmcgd2lsbCByZWZpbHRlciBhbmQgZHJhdyBmb3IgdXMgKi8KCQkJCV9mblNvcnQoIG9TZXR0aW5ncywgb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaCApOwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgKQoJCQl7CgkJCQkvKiBGaWx0ZXJpbmcgd2lsbCByZWRyYXcgZm9yIHVzICovCgkJCQlfZm5GaWx0ZXJDb21wbGV0ZSggb1NldHRpbmdzLCBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoICk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQWpheFVwZGF0ZQoJCSAqIFB1cnBvc2U6ICBVcGRhdGUgdGhlIHRhYmxlIHVzaW5nIGFuIEFqYXggY2FsbAoJCSAqIFJldHVybnM6ICBib29sOiBibG9jayB0aGUgdGFibGUgZHJhd2luZyBvciBub3QKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuQWpheFVwZGF0ZSggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLmJBamF4RGF0YUdldCApCgkJCXsKCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIHRydWUgKTsKCQkJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQkJdmFyIGFvRGF0YSA9IFtdLCBtRGF0YVByb3A7CgkJCQl2YXIgaTsKCQkJCQoJCQkJLyogUGFnaW5nIGFuZCBnZW5lcmFsICovCgkJCQlvU2V0dGluZ3MuaURyYXcrKzsKCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogInNFY2hvIiwgICAgICAgICAgInZhbHVlIjogb1NldHRpbmdzLmlEcmF3IH0gKTsKCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImlDb2x1bW5zIiwgICAgICAgInZhbHVlIjogaUNvbHVtbnMgfSApOwoJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAic0NvbHVtbnMiLCAgICAgICAidmFsdWUiOiBfZm5Db2x1bW5PcmRlcmluZyhvU2V0dGluZ3MpIH0gKTsKCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImlEaXNwbGF5U3RhcnQiLCAgInZhbHVlIjogb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0IH0gKTsKCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogImlEaXNwbGF5TGVuZ3RoIiwgInZhbHVlIjogb1NldHRpbmdzLm9GZWF0dXJlcy5iUGFnaW5hdGUgIT09IGZhbHNlID8KCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoIDogLTEgfSApOwoJCQkJCQoJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1ucyA7IGkrKyApCgkJCQl7CgkJCQkgIG1EYXRhUHJvcCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ubURhdGFQcm9wOwoJCQkJCWFvRGF0YS5wdXNoKCB7ICJuYW1lIjogIm1EYXRhUHJvcF8iK2ksICJ2YWx1ZSI6IHR5cGVvZihtRGF0YVByb3ApPT0iZnVuY3Rpb24iID8gJ2Z1bmN0aW9uJyA6IG1EYXRhUHJvcCB9ICk7CgkJCQl9CgkJCQkKCQkJCS8qIEZpbHRlcmluZyAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgIT09IGZhbHNlICkKCQkJCXsKCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJzU2VhcmNoIiwgInZhbHVlIjogb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoIH0gKTsKCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJiUmVnZXgiLCAgInZhbHVlIjogb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5iUmVnZXggfSApOwoJCQkJCWZvciAoIGk9MCA7IGk8aUNvbHVtbnMgOyBpKysgKQoJCQkJCXsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAic1NlYXJjaF8iK2ksICAgICAidmFsdWUiOiBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzW2ldLnNTZWFyY2ggfSApOwoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJiUmVnZXhfIitpLCAgICAgICJ2YWx1ZSI6IG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uYlJlZ2V4IH0gKTsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiYlNlYXJjaGFibGVfIitpLCAidmFsdWUiOiBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJTZWFyY2hhYmxlIH0gKTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIFNvcnRpbmcgKi8KCQkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCAhPT0gZmFsc2UgKQoJCQkJewoJCQkJCXZhciBpRml4ZWQgPSBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQgIT09IG51bGwgPyBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQubGVuZ3RoIDogMDsKCQkJCQl2YXIgaVVzZXIgPSBvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aDsKCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJpU29ydGluZ0NvbHMiLCAgICJ2YWx1ZSI6IGlGaXhlZCtpVXNlciB9ICk7CgkJCQkJZm9yICggaT0wIDsgaTxpRml4ZWQgOyBpKysgKQoJCQkJCXsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiaVNvcnRDb2xfIitpLCAgInZhbHVlIjogb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkW2ldWzBdIH0gKTsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAic1NvcnREaXJfIitpLCAgInZhbHVlIjogb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkW2ldWzFdIH0gKTsKCQkJCQl9CgkJCQkJCgkJCQkJZm9yICggaT0wIDsgaTxpVXNlciA7IGkrKyApCgkJCQkJewoJCQkJCQlhb0RhdGEucHVzaCggeyAibmFtZSI6ICJpU29ydENvbF8iKyhpK2lGaXhlZCksICAidmFsdWUiOiBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdIH0gKTsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAic1NvcnREaXJfIisoaStpRml4ZWQpLCAgInZhbHVlIjogb1NldHRpbmdzLmFhU29ydGluZ1tpXVsxXSB9ICk7CgkJCQkJfQoJCQkJCQoJCQkJCWZvciAoIGk9MCA7IGk8aUNvbHVtbnMgOyBpKysgKQoJCQkJCXsKCQkJCQkJYW9EYXRhLnB1c2goIHsgIm5hbWUiOiAiYlNvcnRhYmxlXyIraSwgICJ2YWx1ZSI6IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlNvcnRhYmxlIH0gKTsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCW9TZXR0aW5ncy5mblNlcnZlckRhdGEuY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwgb1NldHRpbmdzLnNBamF4U291cmNlLCBhb0RhdGEsCgkJCQkJZnVuY3Rpb24oanNvbikgewoJCQkJCQlfZm5BamF4VXBkYXRlRHJhdyggb1NldHRpbmdzLCBqc29uICk7CgkJCQkJfSwgb1NldHRpbmdzICk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BamF4VXBkYXRlRHJhdwoJCSAqIFB1cnBvc2U6ICBEYXRhIHRoZSBkYXRhIGZyb20gdGhlIHNlcnZlciAobnVraW5nIHRoZSBvbGQpIGFuZCByZWRyYXcgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG9iamVjdDpqc29uIC0ganNvbiBkYXRhIHJldHVybiBmcm9tIHRoZSBzZXJ2ZXIuCgkJICogICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlZmluZWQ6CgkJICogICAgICAgICAgICAgICBpVG90YWxSZWNvcmRzLCBpVG90YWxEaXNwbGF5UmVjb3JkcywgYWFEYXRhCgkJICogICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBtYXkgYmUgZGVmaW5lZDoKCQkgKiAgICAgICAgICAgICAgIHNDb2x1bW5zCgkJICovCgkJZnVuY3Rpb24gX2ZuQWpheFVwZGF0ZURyYXcgKCBvU2V0dGluZ3MsIGpzb24gKQoJCXsKCQkJaWYgKCB0eXBlb2YganNvbi5zRWNobyAhPSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCS8qIFByb3RlY3QgYWdhaW5zdCBvbGQgcmV0dXJucyBvdmVyLXdyaXRpbmcgYSBuZXcgb25lLiBQb3NzaWJsZSB3aGVuIHlvdSBnZXQKCQkJCSAqIHZlcnkgZmFzdCBpbnRlcmFjdGlvbiwgYW5kIGxhdGVyIHF1ZWlyZXMgYXJlIGNvbXBsZXRlZCBtdWNoIGZhc3RlcgoJCQkJICovCgkJCQlpZiAoIGpzb24uc0VjaG8qMSA8IG9TZXR0aW5ncy5pRHJhdyApCgkJCQl7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW9TZXR0aW5ncy5pRHJhdyA9IGpzb24uc0VjaG8gKiAxOwoJCQkJfQoJCQl9CgkJCQoJCQlpZiAoICFvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgfHwKCQkJCSAgIChvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgJiYgKG9TZXR0aW5ncy5iU29ydGVkIHx8IG9TZXR0aW5ncy5iRmlsdGVyZWQpKSApCgkJCXsKCQkJCV9mbkNsZWFyVGFibGUoIG9TZXR0aW5ncyApOwoJCQl9CgkJCW9TZXR0aW5ncy5faVJlY29yZHNUb3RhbCA9IGpzb24uaVRvdGFsUmVjb3JkczsKCQkJb1NldHRpbmdzLl9pUmVjb3Jkc0Rpc3BsYXkgPSBqc29uLmlUb3RhbERpc3BsYXlSZWNvcmRzOwoJCQkKCQkJLyogRGV0ZXJtaW5lIGlmIHJlb3JkZXJpbmcgaXMgcmVxdWlyZWQgKi8KCQkJdmFyIHNPcmRlcmluZyA9IF9mbkNvbHVtbk9yZGVyaW5nKG9TZXR0aW5ncyk7CgkJCXZhciBiUmVPcmRlciA9ICh0eXBlb2YganNvbi5zQ29sdW1ucyAhPSAndW5kZWZpbmVkJyAmJiBzT3JkZXJpbmcgIT09ICIiICYmIGpzb24uc0NvbHVtbnMgIT0gc09yZGVyaW5nICk7CgkJCWlmICggYlJlT3JkZXIgKQoJCQl7CgkJCQl2YXIgYWlJbmRleCA9IF9mblJlT3JkZXJJbmRleCggb1NldHRpbmdzLCBqc29uLnNDb2x1bW5zICk7CgkJCX0KCgkJCXZhciBmbkRhdGFTcmMgPSBfZm5HZXRPYmplY3REYXRhRm4oIG9TZXR0aW5ncy5zQWpheERhdGFQcm9wICk7CgkJCXZhciBhRGF0YSA9IGZuRGF0YVNyYygganNvbiApOwoJCQkKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hRGF0YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpZiAoIGJSZU9yZGVyICkKCQkJCXsKCQkJCQkvKiBJZiB3ZSBuZWVkIHRvIHJlLW9yZGVyLCB0aGVuIGNyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSBjb3JyZWN0IG9yZGVyIGFuZCBhZGQgaXQgKi8KCQkJCQl2YXIgYURhdGFTb3J0ZWQgPSBbXTsKCQkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCQl7CgkJCQkJCWFEYXRhU29ydGVkLnB1c2goIGFEYXRhW2ldWyBhaUluZGV4W2pdIF0gKTsKCQkJCQl9CgkJCQkJX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBhRGF0YVNvcnRlZCApOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8qIE5vIHJlLW9yZGVyIHJlcXVpcmVkLCBzZXZlciBnb3QgaXQgInJpZ2h0IiAtIGp1c3Qgc3RyYWlnaHQgYWRkICovCgkJCQkJX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBhRGF0YVtpXSApOwoJCQkJfQoJCQl9CgkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQoJCQlvU2V0dGluZ3MuYkFqYXhEYXRhR2V0ID0gZmFsc2U7CgkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQlvU2V0dGluZ3MuYkFqYXhEYXRhR2V0ID0gdHJ1ZTsKCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgZmFsc2UgKTsKCQl9CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gT3B0aW9ucyAoZmVhdHVyZXMpIEhUTUwKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5BZGRPcHRpb25zSHRtbAoJCSAqIFB1cnBvc2U6ICBBZGQgdGhlIG9wdGlvbnMgdG8gdGhlIHBhZ2UgSFRNTCBmb3IgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuQWRkT3B0aW9uc0h0bWwgKCBvU2V0dGluZ3MgKQoJCXsKCQkJLyoKCQkJICogQ3JlYXRlIGEgdGVtcG9yYXJ5LCBlbXB0eSwgZGl2IHdoaWNoIHdlIGNhbiBsYXRlciBvbiByZXBsYWNlIHdpdGggd2hhdCB3ZSBoYXZlIGdlbmVyYXRlZAoJCQkgKiB3ZSBkbyBpdCB0aGlzIHdheSB0byByZW5kZXJpbmcgdGhlICdvcHRpb25zJyBodG1sIG9mZmxpbmUgLSBzcGVlZCA6LSkKCQkJICovCgkJCXZhciBuSG9sZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7CgkJCW9TZXR0aW5ncy5uVGFibGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5Ib2xkaW5nLCBvU2V0dGluZ3MublRhYmxlICk7CgkJCQoJCQkvKiAKCQkJICogQWxsIERhdGFUYWJsZXMgYXJlIHdyYXBwZWQgaW4gYSBkaXYKCQkJICovCgkJCW9TZXR0aW5ncy5uVGFibGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQkJb1NldHRpbmdzLm5UYWJsZVdyYXBwZXIuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNXcmFwcGVyOwoJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgKQoJCQl7CgkJCQlvU2V0dGluZ3MublRhYmxlV3JhcHBlci5zZXRBdHRyaWJ1dGUoICdpZCcsIG9TZXR0aW5ncy5zVGFibGVJZCsnX3dyYXBwZXInICk7CgkJCX0KCgkJCW9TZXR0aW5ncy5uVGFibGVSZWluc2VydEJlZm9yZSA9IG9TZXR0aW5ncy5uVGFibGUubmV4dFNpYmxpbmc7CgoJCQkvKiBUcmFjayB3aGVyZSB3ZSB3YW50IHRvIGluc2VydCB0aGUgb3B0aW9uICovCgkJCXZhciBuSW5zZXJ0Tm9kZSA9IG9TZXR0aW5ncy5uVGFibGVXcmFwcGVyOwoJCQkKCQkJLyogTG9vcCBvdmVyIHRoZSB1c2VyIHNldCBwb3NpdGlvbmluZyBhbmQgcGxhY2UgdGhlIGVsZW1lbnRzIGFzIG5lZWRlZCAqLwoJCQl2YXIgYURvbSA9IG9TZXR0aW5ncy5zRG9tLnNwbGl0KCcnKTsKCQkJdmFyIG5UbXAsIGlQdXNoRmVhdHVyZSwgY09wdGlvbiwgbk5ld05vZGUsIGNOZXh0LCBzQXR0ciwgajsKCQkJZm9yICggdmFyIGk9MCA7IGk8YURvbS5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpUHVzaEZlYXR1cmUgPSAwOwoJCQkJY09wdGlvbiA9IGFEb21baV07CgkJCQkKCQkJCWlmICggY09wdGlvbiA9PSAnPCcgKQoJCQkJewoJCQkJCS8qIE5ldyBjb250YWluZXIgZGl2ICovCgkJCQkJbk5ld05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQkJCQoJCQkJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgYXBwZW5kIGFuIGlkIGFuZC9vciBhIGNsYXNzIG5hbWUgdG8gdGhlIGNvbnRhaW5lciAqLwoJCQkJCWNOZXh0ID0gYURvbVtpKzFdOwoJCQkJCWlmICggY05leHQgPT0gIiciIHx8IGNOZXh0ID09ICciJyApCgkJCQkJewoJCQkJCQlzQXR0ciA9ICIiOwoJCQkJCQlqID0gMjsKCQkJCQkJd2hpbGUgKCBhRG9tW2kral0gIT0gY05leHQgKQoJCQkJCQl7CgkJCQkJCQlzQXR0ciArPSBhRG9tW2kral07CgkJCQkJCQlqKys7CgkJCQkJCX0KCQkJCQkJCgkJCQkJCS8qIFJlcGxhY2UgalF1ZXJ5IFVJIGNvbnN0YW50cyAqLwoJCQkJCQlpZiAoIHNBdHRyID09ICJIIiApCgkJCQkJCXsKCQkJCQkJCXNBdHRyID0gImZnLXRvb2xiYXIgdWktdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci10bCB1aS1jb3JuZXItdHIgdWktaGVscGVyLWNsZWFyZml4IjsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICggc0F0dHIgPT0gIkYiICkKCQkJCQkJewoJCQkJCQkJc0F0dHIgPSAiZmctdG9vbGJhciB1aS10b29sYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWJsIHVpLWNvcm5lci1iciB1aS1oZWxwZXItY2xlYXJmaXgiOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQkvKiBUaGUgYXR0cmlidXRlIGNhbiBiZSBpbiB0aGUgZm9ybWF0IG9mICIjaWQuY2xhc3MiLCAiI2lkIiBvciAiY2xhc3MiIFRoaXMgbG9naWMKCQkJCQkJICogYnJlYWtzIHRoZSBzdHJpbmcgaW50byBwYXJ0cyBhbmQgYXBwbGllcyB0aGVtIGFzIG5lZWRlZAoJCQkJCQkgKi8KCQkJCQkJaWYgKCBzQXR0ci5pbmRleE9mKCcuJykgIT0gLTEgKQoJCQkJCQl7CgkJCQkJCQl2YXIgYVNwbGl0ID0gc0F0dHIuc3BsaXQoJy4nKTsKCQkJCQkJCW5OZXdOb2RlLnNldEF0dHJpYnV0ZSgnaWQnLCBhU3BsaXRbMF0uc3Vic3RyKDEsIGFTcGxpdFswXS5sZW5ndGgtMSkgKTsKCQkJCQkJCW5OZXdOb2RlLmNsYXNzTmFtZSA9IGFTcGxpdFsxXTsKCQkJCQkJfQoJCQkJCQllbHNlIGlmICggc0F0dHIuY2hhckF0KDApID09ICIjIiApCgkJCQkJCXsKCQkJCQkJCW5OZXdOb2RlLnNldEF0dHJpYnV0ZSgnaWQnLCBzQXR0ci5zdWJzdHIoMSwgc0F0dHIubGVuZ3RoLTEpICk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQluTmV3Tm9kZS5jbGFzc05hbWUgPSBzQXR0cjsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaSArPSBqOyAvKiBNb3ZlIGFsb25nIHRoZSBwb3NpdGlvbiBhcnJheSAqLwoJCQkJCX0KCQkJCQkKCQkJCQluSW5zZXJ0Tm9kZS5hcHBlbmRDaGlsZCggbk5ld05vZGUgKTsKCQkJCQluSW5zZXJ0Tm9kZSA9IG5OZXdOb2RlOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJz4nICkKCQkJCXsKCQkJCQkvKiBFbmQgY29udGFpbmVyIGRpdiAqLwoJCQkJCW5JbnNlcnROb2RlID0gbkluc2VydE5vZGUucGFyZW50Tm9kZTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdsJyAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQYWdpbmF0ZSAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJMZW5ndGhDaGFuZ2UgKQoJCQkJewoJCQkJCS8qIExlbmd0aCAqLwoJCQkJCW5UbXAgPSBfZm5GZWF0dXJlSHRtbExlbmd0aCggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdmJyAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgKQoJCQkJewoJCQkJCS8qIEZpbHRlciAqLwoJCQkJCW5UbXAgPSBfZm5GZWF0dXJlSHRtbEZpbHRlciggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdyJyAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkKCQkJCXsKCQkJCQkvKiBwUm9jZXNzaW5nICovCgkJCQkJblRtcCA9IF9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZyggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICd0JyApCgkJCQl7CgkJCQkJLyogVGFibGUgKi8KCQkJCQluVG1wID0gX2ZuRmVhdHVyZUh0bWxUYWJsZSggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICAnaScgJiYgb1NldHRpbmdzLm9GZWF0dXJlcy5iSW5mbyApCgkJCQl7CgkJCQkJLyogSW5mbyAqLwoJCQkJCW5UbXAgPSBfZm5GZWF0dXJlSHRtbEluZm8oIG9TZXR0aW5ncyApOwoJCQkJCWlQdXNoRmVhdHVyZSA9IDE7CgkJCQl9CgkJCQllbHNlIGlmICggY09wdGlvbiA9PSAncCcgJiYgb1NldHRpbmdzLm9GZWF0dXJlcy5iUGFnaW5hdGUgKQoJCQkJewoJCQkJCS8qIFBhZ2luYXRpb24gKi8KCQkJCQluVG1wID0gX2ZuRmVhdHVyZUh0bWxQYWdpbmF0ZSggb1NldHRpbmdzICk7CgkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBfb0V4dC5hb0ZlYXR1cmVzLmxlbmd0aCAhPT0gMCApCgkJCQl7CgkJCQkJLyogUGx1Zy1pbiBmZWF0dXJlcyAqLwoJCQkJCXZhciBhb0ZlYXR1cmVzID0gX29FeHQuYW9GZWF0dXJlczsKCQkJCQlmb3IgKCB2YXIgaz0wLCBrTGVuPWFvRmVhdHVyZXMubGVuZ3RoIDsgazxrTGVuIDsgaysrICkKCQkJCQl7CgkJCQkJCWlmICggY09wdGlvbiA9PSBhb0ZlYXR1cmVzW2tdLmNGZWF0dXJlICkKCQkJCQkJewoJCQkJCQkJblRtcCA9IGFvRmVhdHVyZXNba10uZm5Jbml0KCBvU2V0dGluZ3MgKTsKCQkJCQkJCWlmICggblRtcCApCgkJCQkJCQl7CgkJCQkJCQkJaVB1c2hGZWF0dXJlID0gMTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBBZGQgdG8gdGhlIDJEIGZlYXR1cmVzIGFycmF5ICovCgkJCQlpZiAoIGlQdXNoRmVhdHVyZSA9PSAxICYmIG5UbXAgIT09IG51bGwgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlc1tjT3B0aW9uXSAhPSAnb2JqZWN0JyApCgkJCQkJewoJCQkJCQlvU2V0dGluZ3MuYWFuRmVhdHVyZXNbY09wdGlvbl0gPSBbXTsKCQkJCQl9CgkJCQkJb1NldHRpbmdzLmFhbkZlYXR1cmVzW2NPcHRpb25dLnB1c2goIG5UbXAgKTsKCQkJCQluSW5zZXJ0Tm9kZS5hcHBlbmRDaGlsZCggblRtcCApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBCdWlsdCBvdXIgRE9NIHN0cnVjdHVyZSAtIHJlcGxhY2UgdGhlIGhvbGRpbmcgZGl2IHdpdGggd2hhdCB3ZSB3YW50ICovCgkJCW5Ib2xkaW5nLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKCBvU2V0dGluZ3MublRhYmxlV3JhcHBlciwgbkhvbGRpbmcgKTsKCQl9CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gRmVhdHVyZTogRmlsdGVyaW5nCgkJICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmVhdHVyZUh0bWxUYWJsZQoJCSAqIFB1cnBvc2U6ICBBZGQgYW55IGNvbnRyb2wgZWxlbWVudHMgZm9yIHRoZSB0YWJsZSAtIHNwZWNpZmljYWxseSBzY3JvbGxpbmcKCQkgKiBSZXR1cm5zOiAgbm9kZTogLSBOb2RlIHRvIGFkZCB0byB0aGUgRE9NCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sVGFibGUgKCBvU2V0dGluZ3MgKQoJCXsKCQkJLyogQ2hhY2sgaWYgc2Nyb2xsaW5nIGlzIGVuYWJsZWQgb3Igbm90IC0gaWYgbm90IHRoZW4gbGVhdmUgdGhlIERPTSB1bmFsdGVyZWQgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCA9PT0gIiIgJiYgb1NldHRpbmdzLm9TY3JvbGwuc1kgPT09ICIiICkKCQkJewoJCQkJcmV0dXJuIG9TZXR0aW5ncy5uVGFibGU7CgkJCX0KCQkJCgkJCS8qCgkJCSAqIFRoZSBIVE1MIHN0cnVjdHVyZSB0aGF0IHdlIHdhbnQgdG8gZ2VuZXJhdGUgaW4gdGhpcyBmdW5jdGlvbiBpczoKCQkJICogIGRpdiAtIG5TY3JvbGxlcgoJCQkgKiAgICBkaXYgLSBuU2Nyb2xsSGVhZAoJCQkgKiAgICAgIGRpdiAtIG5TY3JvbGxIZWFkSW5uZXIKCQkJICogICAgICAgIHRhYmxlIC0gblNjcm9sbEhlYWRUYWJsZQoJCQkgKiAgICAgICAgICB0aGVhZCAtIG5UaGVhZAoJCQkgKiAgICBkaXYgLSBuU2Nyb2xsQm9keQoJCQkgKiAgICAgIHRhYmxlIC0gb1NldHRpbmdzLm5UYWJsZQoJCQkgKiAgICAgICAgdGhlYWQgLSBuVGhlYWRTaXplCgkJCSAqICAgICAgICB0Ym9keSAtIG5UYm9keQoJCQkgKiAgICBkaXYgLSBuU2Nyb2xsRm9vdAoJCQkgKiAgICAgIGRpdiAtIG5TY3JvbGxGb290SW5uZXIKCQkJICogICAgICAgIHRhYmxlIC0gblNjcm9sbEZvb3RUYWJsZQoJCQkgKiAgICAgICAgICB0Zm9vdCAtIG5UZm9vdAoJCQkgKi8KCQkJdmFyCgkJCSAJblNjcm9sbGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCgkJCSAJblNjcm9sbEhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKCQkJIAluU2Nyb2xsSGVhZElubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCgkJCSAJblNjcm9sbEJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKCQkJIAluU2Nyb2xsRm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLAoJCQkgCW5TY3JvbGxGb290SW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwKCQkJIAluU2Nyb2xsSGVhZFRhYmxlID0gb1NldHRpbmdzLm5UYWJsZS5jbG9uZU5vZGUoZmFsc2UpLAoJCQkgCW5TY3JvbGxGb290VGFibGUgPSBvU2V0dGluZ3MublRhYmxlLmNsb25lTm9kZShmYWxzZSksCgkJCQluVGhlYWQgPSBvU2V0dGluZ3MublRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aGVhZCcpWzBdLAoJCQkgCW5UZm9vdCA9IG9TZXR0aW5ncy5uVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Rmb290JykubGVuZ3RoID09PSAwID8gbnVsbCA6IAoJCQkJCW9TZXR0aW5ncy5uVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Rmb290JylbMF0sCgkJCQlvQ2xhc3NlcyA9ICh0eXBlb2Ygb0luaXQuYkpRdWVyeVVJICE9ICd1bmRlZmluZWQnICYmIG9Jbml0LmJKUXVlcnlVSSkgPwoJCQkJCV9vRXh0Lm9KVUlDbGFzc2VzIDogX29FeHQub1N0ZENsYXNzZXM7CgkJCQoJCQluU2Nyb2xsSGVhZC5hcHBlbmRDaGlsZCggblNjcm9sbEhlYWRJbm5lciApOwoJCQluU2Nyb2xsRm9vdC5hcHBlbmRDaGlsZCggblNjcm9sbEZvb3RJbm5lciApOwoJCQluU2Nyb2xsQm9keS5hcHBlbmRDaGlsZCggb1NldHRpbmdzLm5UYWJsZSApOwoJCQluU2Nyb2xsZXIuYXBwZW5kQ2hpbGQoIG5TY3JvbGxIZWFkICk7CgkJCW5TY3JvbGxlci5hcHBlbmRDaGlsZCggblNjcm9sbEJvZHkgKTsKCQkJblNjcm9sbEhlYWRJbm5lci5hcHBlbmRDaGlsZCggblNjcm9sbEhlYWRUYWJsZSApOwoJCQluU2Nyb2xsSGVhZFRhYmxlLmFwcGVuZENoaWxkKCBuVGhlYWQgKTsKCQkJaWYgKCBuVGZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQluU2Nyb2xsZXIuYXBwZW5kQ2hpbGQoIG5TY3JvbGxGb290ICk7CgkJCQluU2Nyb2xsRm9vdElubmVyLmFwcGVuZENoaWxkKCBuU2Nyb2xsRm9vdFRhYmxlICk7CgkJCQluU2Nyb2xsRm9vdFRhYmxlLmFwcGVuZENoaWxkKCBuVGZvb3QgKTsKCQkJfQoJCQkKCQkJblNjcm9sbGVyLmNsYXNzTmFtZSA9IG9DbGFzc2VzLnNTY3JvbGxXcmFwcGVyOwoJCQluU2Nyb2xsSGVhZC5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zU2Nyb2xsSGVhZDsKCQkJblNjcm9sbEhlYWRJbm5lci5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zU2Nyb2xsSGVhZElubmVyOwoJCQluU2Nyb2xsQm9keS5jbGFzc05hbWUgPSBvQ2xhc3Nlcy5zU2Nyb2xsQm9keTsKCQkJblNjcm9sbEZvb3QuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1Njcm9sbEZvb3Q7CgkJCW5TY3JvbGxGb290SW5uZXIuY2xhc3NOYW1lID0gb0NsYXNzZXMuc1Njcm9sbEZvb3RJbm5lcjsKCQkJCgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkF1dG9Dc3MgKQoJCQl7CgkJCQluU2Nyb2xsSGVhZC5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwoJCQkJblNjcm9sbEhlYWQuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwoJCQkJblNjcm9sbEZvb3Quc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLm92ZXJmbG93ID0gImF1dG8iOwoJCQl9CgkJCQoJCQluU2Nyb2xsSGVhZC5zdHlsZS5ib3JkZXIgPSAiMCI7CgkJCW5TY3JvbGxIZWFkLnN0eWxlLndpZHRoID0gIjEwMCUiOwoJCQluU2Nyb2xsRm9vdC5zdHlsZS5ib3JkZXIgPSAiMCI7CgkJCW5TY3JvbGxIZWFkSW5uZXIuc3R5bGUud2lkdGggPSAiMTUwJSI7IC8qIHdpbGwgYmUgb3ZlcndyaXR0ZW4gKi8KCQkJCgkJCS8qIE1vZGlmeSBhdHRyaWJ1dGVzIHRvIHJlc3BlY3QgdGhlIGNsb25lcyAqLwoJCQluU2Nyb2xsSGVhZFRhYmxlLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKCQkJblNjcm9sbEhlYWRUYWJsZS5zdHlsZS5tYXJnaW5MZWZ0ID0gIjAiOwoJCQlvU2V0dGluZ3MublRhYmxlLnN0eWxlLm1hcmdpbkxlZnQgPSAiMCI7CgkJCWlmICggblRmb290ICE9PSBudWxsICkKCQkJewoJCQkJblNjcm9sbEZvb3RUYWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7CgkJCQluU2Nyb2xsRm9vdFRhYmxlLnN0eWxlLm1hcmdpbkxlZnQgPSAiMCI7CgkJCX0KCQkJCgkJCS8qIE1vdmUgYW55IGNhcHRpb24gZWxlbWVudHMgZnJvbSB0aGUgYm9keSB0byB0aGUgaGVhZGVyICovCgkJCXZhciBuQ2FwdGlvbnMgPSAkKCc+Y2FwdGlvbicsIG9TZXR0aW5ncy5uVGFibGUpOwoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW5DYXB0aW9ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQluU2Nyb2xsSGVhZFRhYmxlLmFwcGVuZENoaWxkKCBuQ2FwdGlvbnNbaV0gKTsKCQkJfQoJCQkKCQkJLyoKCQkJICogU2l6aW5nCgkJCSAqLwoJCQkvKiBXaGVuIHhzY3JvbGxpbmcgYWRkIHRoZSB3aWR0aCBhbmQgYSBzY3JvbGxlciB0byBtb3ZlIHRoZSBoZWFkZXIgd2l0aCB0aGUgYm9keSAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICE9PSAiIiApCgkJCXsKCQkJCW5TY3JvbGxIZWFkLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICk7CgkJCQluU2Nyb2xsQm9keS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCApOwoJCQkJCgkJCQlpZiAoIG5UZm9vdCAhPT0gbnVsbCApCgkJCQl7CgkJCQkJblNjcm9sbEZvb3Quc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0Nzcyggb1NldHRpbmdzLm9TY3JvbGwuc1ggKTsJCgkJCQl9CgkJCQkKCQkJCS8qIFdoZW4gdGhlIGJvZHkgaXMgc2Nyb2xsZWQsIHRoZW4gd2UgYWxzbyB3YW50IHRvIHNjcm9sbCB0aGUgaGVhZGVycyAqLwoJCQkJJChuU2Nyb2xsQm9keSkuc2Nyb2xsKCBmdW5jdGlvbiAoZSkgewoJCQkJCW5TY3JvbGxIZWFkLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7CgkJCQkJCgkJCQkJaWYgKCBuVGZvb3QgIT09IG51bGwgKQoJCQkJCXsKCQkJCQkJblNjcm9sbEZvb3Quc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKCQkJCQl9CgkJCQl9ICk7CgkJCX0KCQkJCgkJCS8qIFdoZW4geXNjcm9sbGluZywgYWRkIHRoZSBoZWlnaHQgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWSAhPT0gIiIgKQoJCQl7CgkJCQluU2Nyb2xsQm9keS5zdHlsZS5oZWlnaHQgPSBfZm5TdHJpbmdUb0Nzcyggb1NldHRpbmdzLm9TY3JvbGwuc1kgKTsKCQkJfQoJCQkKCQkJLyogUmVkcmF3IC0gYWxpZ24gY29sdW1ucyBhY3Jvc3MgdGhlIHRhYmxlcyAqLwoJCQlvU2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2sucHVzaCggewoJCQkJImZuIjogX2ZuU2Nyb2xsRHJhdywKCQkJCSJzTmFtZSI6ICJzY3JvbGxpbmciCgkJCX0gKTsKCQkJCgkJCS8qIEluZmluaXRlIHNjcm9sbGluZyBldmVudCBoYW5kbGVycyAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSApCgkJCXsKCQkJCSQoblNjcm9sbEJvZHkpLnNjcm9sbCggZnVuY3Rpb24oKSB7CgkJCQkJLyogVXNlIGEgYmxvY2tlciB0byBzdG9wIHNjcm9sbGluZyBmcm9tIGxvYWRpbmcgbW9yZSBkYXRhIHdoaWxlIG90aGVyIGRhdGEgaXMgc3RpbGwgbG9hZGluZyAqLwoJCQkJCWlmICggIW9TZXR0aW5ncy5iRHJhd2luZyApCgkJCQkJewoJCQkJCQkvKiBDaGVjayBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgbmV4dCBkYXRhIHNldCAqLwoJCQkJCQlpZiAoICQodGhpcykuc2Nyb2xsVG9wKCkgKyAkKHRoaXMpLmhlaWdodCgpID4gCgkJCQkJCQkkKG9TZXR0aW5ncy5uVGFibGUpLmhlaWdodCgpIC0gb1NldHRpbmdzLm9TY3JvbGwuaUxvYWRHYXAgKQoJCQkJCQl7CgkJCQkJCQkvKiBPbmx5IGRvIHRoZSByZWRyYXcgaWYgd2UgaGF2ZSB0byAtIHdlIG1pZ2h0IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEgKi8KCQkJCQkJCWlmICggb1NldHRpbmdzLmZuRGlzcGxheUVuZCgpIDwgb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSApCgkJCQkJCQl7CgkJCQkJCQkJX2ZuUGFnZUNoYW5nZSggb1NldHRpbmdzLCAnbmV4dCcgKTsKCQkJCQkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfSApOwoJCQl9CgkJCQoJCQlvU2V0dGluZ3MublNjcm9sbEhlYWQgPSBuU2Nyb2xsSGVhZDsKCQkJb1NldHRpbmdzLm5TY3JvbGxGb290ID0gblNjcm9sbEZvb3Q7CgkJCQoJCQlyZXR1cm4gblNjcm9sbGVyOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TY3JvbGxEcmF3CgkJICogUHVycG9zZTogIFVwZGF0ZSB0aGUgdmFyaW91cyB0YWJsZXMgZm9yIHJlc2l6aW5nCgkJICogUmV0dXJuczogIG5vZGU6IC0gTm9kZSB0byBhZGQgdG8gdGhlIERPTQoJCSAqIElucHV0czogICBvYmplY3Q6byAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogTm90ZXM6ICAgIEl0J3MgYSBiaXQgb2YgYSBwaWcgdGhpcyBmdW5jdGlvbiwgYnV0IGJhc2ljYWxseSB0aGUgaWRlYSB0bzoKCQkgKiAgIDEuIFJlLWNyZWF0ZSB0aGUgdGFibGUgaW5zaWRlIHRoZSBzY3JvbGxpbmcgZGl2CgkJICogICAyLiBUYWtlIGxpdmUgbWVhc3VyZW1lbnRzIGZyb20gdGhlIERPTQoJCSAqICAgMy4gQXBwbHkgdGhlIG1lYXN1cmVtZW50cwoJCSAqICAgNC4gQ2xlYW4gdXAKCQkgKi8KCQlmdW5jdGlvbiBfZm5TY3JvbGxEcmF3ICggbyApCgkJewoJCQl2YXIKCQkJCW5TY3JvbGxIZWFkSW5uZXIgPSBvLm5TY3JvbGxIZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXSwKCQkJCW5TY3JvbGxIZWFkVGFibGUgPSBuU2Nyb2xsSGVhZElubmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpWzBdLAoJCQkJblNjcm9sbEJvZHkgPSBvLm5UYWJsZS5wYXJlbnROb2RlLAoJCQkJaSwgaUxlbiwgaiwgakxlbiwgYW5IZWFkVG9TaXplLCBhbkhlYWRTaXplcnMsIGFuRm9vdFNpemVycywgYW5Gb290VG9TaXplLCBvU3R5bGUsIGlWaXMsCgkJCQlpV2lkdGgsIGFBcHBsaWVkPVtdLCBpU2FuaXR5V2lkdGg7CgkJCQoJCQkvKgoJCQkgKiAxLiBSZS1jcmVhdGUgdGhlIHRhYmxlIGluc2lkZSB0aGUgc2Nyb2xsaW5nIGRpdgoJCQkgKi8KCQkJCgkJCS8qIFJlbW92ZSB0aGUgb2xkIG1pbmltaXNlZCB0aGVhZCBhbmQgdGZvb3QgZWxlbWVudHMgaW4gdGhlIGlubmVyIHRhYmxlICovCgkJCXZhciBuVGhlYWRTaXplID0gby5uVGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJyk7CgkJCWlmICggblRoZWFkU2l6ZS5sZW5ndGggPiAwICkKCQkJewoJCQkJby5uVGFibGUucmVtb3ZlQ2hpbGQoIG5UaGVhZFNpemVbMF0gKTsKCQkJfQoJCQkKCQkJaWYgKCBvLm5URm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCS8qIFJlbW92ZSB0aGUgb2xkIG1pbmltaXNlZCBmb290ZXIgZWxlbWVudCBpbiB0aGUgY2xvbmVkIGhlYWRlciAqLwoJCQkJdmFyIG5UZm9vdFNpemUgPSBvLm5UYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGZvb3QnKTsKCQkJCWlmICggblRmb290U2l6ZS5sZW5ndGggPiAwICkKCQkJCXsKCQkJCQlvLm5UYWJsZS5yZW1vdmVDaGlsZCggblRmb290U2l6ZVswXSApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBDbG9uZSB0aGUgY3VycmVudCBoZWFkZXIgYW5kIGZvb3RlciBlbGVtZW50cyBhbmQgdGhlbiBwbGFjZSBpdCBpbnRvIHRoZSBpbm5lciB0YWJsZSAqLwoJCQluVGhlYWRTaXplID0gby5uVEhlYWQuY2xvbmVOb2RlKHRydWUpOwoJCQlvLm5UYWJsZS5pbnNlcnRCZWZvcmUoIG5UaGVhZFNpemUsIG8ublRhYmxlLmNoaWxkTm9kZXNbMF0gKTsKCQkJCgkJCWlmICggby5uVEZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQluVGZvb3RTaXplID0gby5uVEZvb3QuY2xvbmVOb2RlKHRydWUpOwoJCQkJby5uVGFibGUuaW5zZXJ0QmVmb3JlKCBuVGZvb3RTaXplLCBvLm5UYWJsZS5jaGlsZE5vZGVzWzFdICk7CgkJCX0KCQkJCgkJCS8qCgkJCSAqIDIuIFRha2UgbGl2ZSBtZWFzdXJlbWVudHMgZnJvbSB0aGUgRE9NIC0gZG8gbm90IGFsdGVyIHRoZSBET00gaXRzZWxmIQoJCQkgKi8KCQkJCgkJCS8qIFJlbW92ZSBvbGQgc2l6aW5nIGFuZCBhcHBseSB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gd2lkdGhzCgkJCSAqIEdldCB0aGUgdW5pcXVlIGNvbHVtbiBoZWFkZXJzIGluIHRoZSBuZXdseSBjcmVhdGVkIChjbG9uZWQpIGhlYWRlci4gV2Ugd2FudCB0byBhcHBseSB0aGUKCQkJICogY2FsY2xhdGVkIHNpemVzIHRvIHRoaXMgaGVhZGVyCgkJCSAqLwoJCQlpZiAoIG8ub1Njcm9sbC5zWCA9PT0gIiIgKQoJCQl7CgkJCQluU2Nyb2xsQm9keS5zdHlsZS53aWR0aCA9ICcxMDAlJzsKCQkJCW5TY3JvbGxIZWFkSW5uZXIucGFyZW50Tm9kZS5zdHlsZS53aWR0aCA9ICcxMDAlJzsKCQkJfQoJCQkKCQkJdmFyIG5UaHMgPSBfZm5HZXRVbmlxdWVUaHMoIG8sIG5UaGVhZFNpemUgKTsKCQkJZm9yICggaT0wLCBpTGVuPW5UaHMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaVZpcyA9IF9mblZpc2libGVUb0NvbHVtbkluZGV4KCBvLCBpICk7CgkJCQluVGhzW2ldLnN0eWxlLndpZHRoID0gby5hb0NvbHVtbnNbaVZpc10uc1dpZHRoOwoJCQl9CgkJCQoJCQlpZiAoIG8ublRGb290ICE9PSBudWxsICkKCQkJewoJCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuKSB7CgkJCQkJbi5zdHlsZS53aWR0aCA9ICIiOwoJCQkJfSwgblRmb290U2l6ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKSApOwoJCQl9CgkJCQoJCQkvKiBTaXplIHRoZSB0YWJsZSBhcyBhIHdob2xlICovCgkJCWlTYW5pdHlXaWR0aCA9ICQoby5uVGFibGUpLm91dGVyV2lkdGgoKTsKCQkJaWYgKCBvLm9TY3JvbGwuc1ggPT09ICIiICkKCQkJewoJCQkJLyogTm8geCBzY3JvbGxpbmcgKi8KCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gIjEwMCUiOwoJCQkJCgkJCQkvKiBJIGtub3cgdGhpcyBpcyBydWJiaXNoIC0gYnV0IElFNyB3aWxsIG1ha2UgdGhlIHdpZHRoIG9mIHRoZSB0YWJsZSB3aGVuIDEwMCUgaW5jbHVkZQoJCQkJICogdGhlIHNjcm9sbGJhciAtIHdoaWNoIGlzIHNob3VsZG4ndC4gVGhpcyBuZWVkcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBmdXR1cmUgLSB0byBkbwoJCQkJICovCgkJCQlpZiAoICQuYnJvd3Nlci5tc2llICYmICQuYnJvd3Nlci52ZXJzaW9uIDw9IDcgKQoJCQkJewoJCQkJCW8ublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoICQoby5uVGFibGUpLm91dGVyV2lkdGgoKS1vLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoIG8ub1Njcm9sbC5zWElubmVyICE9PSAiIiApCgkJCQl7CgkJCQkJLyogeCBzY3JvbGwgaW5uZXIgaGFzIGJlZW4gZ2l2ZW4gLSB1c2UgaXQgKi8KCQkJCQlvLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKG8ub1Njcm9sbC5zWElubmVyKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBpU2FuaXR5V2lkdGggPT0gJChuU2Nyb2xsQm9keSkud2lkdGgoKSAmJgoJCQkJICAgJChuU2Nyb2xsQm9keSkuaGVpZ2h0KCkgPCAkKG8ublRhYmxlKS5oZWlnaHQoKSApCgkJCQl7CgkJCQkJLyogVGhlcmUgaXMgeS1zY3JvbGxpbmcgLSB0cnkgdG8gdGFrZSBhY2NvdW50IG9mIHRoZSB5IHNjcm9sbCBiYXIgKi8KCQkJCQlvLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpU2FuaXR5V2lkdGgtby5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQkJCWlmICggJChvLm5UYWJsZSkub3V0ZXJXaWR0aCgpID4gaVNhbml0eVdpZHRoLW8ub1Njcm9sbC5pQmFyV2lkdGggKQoJCQkJCXsKCQkJCQkJLyogTm90IHBvc3NpYmxlIHRvIHRha2UgYWNjb3VudCBvZiBpdCAqLwoJCQkJCQlvLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpU2FuaXR5V2lkdGggKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJLyogQWxsIGVsc2UgZmFpbHMgKi8KCQkJCQlvLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpU2FuaXR5V2lkdGggKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogUmVjYWxjdWxhdGUgdGhlIHNhbml0eSB3aWR0aCAtIG5vdyB0aGF0IHdlJ3ZlIGFwcGxpZWQgdGhlIHJlcXVpcmVkIHdpZHRoLCBiZWZvcmUgaXQgd2FzCgkJCSAqIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGNvbHVtbiB3aWR0aCBjYWxjdWxhdGlvbiBpcyBkb25lCgkJCSAqIGJlZm9yZSB0aGlzIHRhYmxlIERPTSBpcyBjcmVhdGVkLgoJCQkgKi8KCQkJaVNhbml0eVdpZHRoID0gJChvLm5UYWJsZSkub3V0ZXJXaWR0aCgpOwoJCQkKCQkJLyogSWYgeC1zY3JvbGxpbmcgaXMgZGlzYWJsZWQsIHRoZW4gdGhlIHZpZXdwb3J0IGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIHNhbml0eSB3aWR0aCAqLwoJCQlpZiAoIG8ub1Njcm9sbC5zWCA9PT0gIiIgKQoJCQl7CgkJCQluU2Nyb2xsQm9keS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpU2FuaXR5V2lkdGgrby5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQkJblNjcm9sbEhlYWRJbm5lci5wYXJlbnROb2RlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlTYW5pdHlXaWR0aCtvLm9TY3JvbGwuaUJhcldpZHRoICk7CgkJCX0KCQkJCgkJCS8qIFdlIHdhbnQgdGhlIGhpZGRlbiBoZWFkZXIgdG8gaGF2ZSB6ZXJvIGhlaWdodCwgc28gcmVtb3ZlIHBhZGRpbmcgYW5kIGJvcmRlcnMuIFRoZW4KCQkJICogc2V0IHRoZSB3aWR0aCBiYXNlZCBvbiB0aGUgcmVhbCBoZWFkZXJzCgkJCSAqLwoJCQlhbkhlYWRUb1NpemUgPSBvLm5USGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQkJYW5IZWFkU2l6ZXJzID0gblRoZWFkU2l6ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQkJCgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyLCBuVG9TaXplKSB7CgkJCQlvU3R5bGUgPSBuU2l6ZXIuc3R5bGU7CgkJCQlvU3R5bGUucGFkZGluZ1RvcCA9ICIwIjsKCQkJCW9TdHlsZS5wYWRkaW5nQm90dG9tID0gIjAiOwoJCQkJb1N0eWxlLmJvcmRlclRvcFdpZHRoID0gIjAiOwoJCQkJb1N0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gIjAiOwoJCQkJb1N0eWxlLmhlaWdodCA9IDA7CgkJCQkKCQkJCWlXaWR0aCA9ICQoblNpemVyKS53aWR0aCgpOwoJCQkJblRvU2l6ZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpV2lkdGggKTsKCQkJCWFBcHBsaWVkLnB1c2goIGlXaWR0aCApOwoJCQl9LCBhbkhlYWRTaXplcnMsIGFuSGVhZFRvU2l6ZSApOwoJCQkkKGFuSGVhZFNpemVycykuaGVpZ2h0KDApOwoJCQkKCQkJaWYgKCBvLm5URm9vdCAhPT0gbnVsbCApCgkJCXsKCQkJCS8qIENsb25lIHRoZSBjdXJyZW50IGZvb3RlciBhbmQgdGhlbiBwbGFjZSBpdCBpbnRvIHRoZSBib2R5IHRhYmxlIGFzIGEgImhpZGRlbiBoZWFkZXIiICovCgkJCQlhbkZvb3RTaXplcnMgPSBuVGZvb3RTaXplLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpOwoJCQkJYW5Gb290VG9TaXplID0gby5uVEZvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7CgkJCQkKCQkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyLCBuVG9TaXplKSB7CgkJCQkJb1N0eWxlID0gblNpemVyLnN0eWxlOwoJCQkJCW9TdHlsZS5wYWRkaW5nVG9wID0gIjAiOwoJCQkJCW9TdHlsZS5wYWRkaW5nQm90dG9tID0gIjAiOwoJCQkJCW9TdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICIwIjsKCQkJCQlvU3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSAiMCI7CgkJCQkJb1N0eWxlLmhlaWdodCA9IDA7CgkJCQkJCgkJCQkJaVdpZHRoID0gJChuU2l6ZXIpLndpZHRoKCk7CgkJCQkJblRvU2l6ZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpV2lkdGggKTsKCQkJCQlhQXBwbGllZC5wdXNoKCBpV2lkdGggKTsKCQkJCX0sIGFuRm9vdFNpemVycywgYW5Gb290VG9TaXplICk7CgkJCQkkKGFuRm9vdFNpemVycykuaGVpZ2h0KDApOwoJCQl9CgkJCQoJCQkvKgoJCQkgKiAzLiBBcHBseSB0aGUgbWVhc3VyZW1lbnRzCgkJCSAqLwoJCQkKCQkJLyogIkhpZGUiIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0aGF0IHdlIHVzZWQgZm9yIHRoZSBzaXppbmcuIFdlIHdhbnQgdG8gYWxzbyBmaXggdGhlaXIgd2lkdGgKCQkJICogdG8gd2hhdCB0aGV5IGN1cnJlbnRseSBhcmUKCQkJICovCgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyKSB7CgkJCQluU2l6ZXIuaW5uZXJIVE1MID0gIiI7CgkJCQluU2l6ZXIuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggYUFwcGxpZWQuc2hpZnQoKSApOwoJCQl9LCBhbkhlYWRTaXplcnMgKTsKCQkJCgkJCWlmICggby5uVEZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQlfZm5BcHBseVRvQ2hpbGRyZW4oIGZ1bmN0aW9uKG5TaXplcikgewoJCQkJCW5TaXplci5pbm5lckhUTUwgPSAiIjsKCQkJCQluU2l6ZXIuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggYUFwcGxpZWQuc2hpZnQoKSApOwoJCQkJfSwgYW5Gb290U2l6ZXJzICk7CgkJCX0KCQkJCgkJCS8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSB0YWJsZSBpcyBvZiBhIHNlbnNpYmxlIHdpZHRoLiBJZiBub3QgdGhlbiB3ZSBhcmUgZ29pbmcgdG8gZ2V0CgkJCSAqIG1pc2FsaWdubWVudAoJCQkgKi8KCQkJaWYgKCAkKG8ublRhYmxlKS5vdXRlcldpZHRoKCkgPCBpU2FuaXR5V2lkdGggKQoJCQl7CgkJCQlpZiAoIG8ub1Njcm9sbC5zWCA9PT0gIiIgKQoJCQkJewoJCQkJCV9mbkxvZyggbywgMSwgIlRoZSB0YWJsZSBjYW5ub3QgZml0IGludG8gdGhlIGN1cnJlbnQgZWxlbWVudCB3aGljaCB3aWxsIGNhdXNlIGNvbHVtbiIrCgkJCQkJCSIgbWlzYWxpZ25tZW50LiBJdCBpcyBzdWdnZXN0ZWQgdGhhdCB5b3UgZW5hYmxlIHgtc2Nyb2xsaW5nIG9yIGluY3JlYXNlIHRoZSB3aWR0aCIrCgkJCQkJCSIgdGhlIHRhYmxlIGhhcyBpbiB3aGljaCB0byBiZSBkcmF3biIgKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBvLm9TY3JvbGwuc1hJbm5lciAhPT0gIiIgKQoJCQkJewoJCQkJCV9mbkxvZyggbywgMSwgIlRoZSB0YWJsZSBjYW5ub3QgZml0IGludG8gdGhlIGN1cnJlbnQgZWxlbWVudCB3aGljaCB3aWxsIGNhdXNlIGNvbHVtbiIrCgkJCQkJCSIgbWlzYWxpZ25tZW50LiBJdCBpcyBzdWdnZXN0ZWQgdGhhdCB5b3UgaW5jcmVhc2UgdGhlIHNTY3JvbGxYSW5uZXIgcHJvcGVydHkgdG8iKwoJCQkJCQkiIGFsbG93IGl0IHRvIGRyYXcgaW4gYSBsYXJnZXIgYXJlYSwgb3Igc2ltcGx5IHJlbW92ZSB0aGF0IHBhcmFtZXRlciB0byBhbGxvdyIrCgkJCQkJCSIgYXV0b21hdGljIGNhbGN1bGF0aW9uIiApOwoJCQkJfQoJCQl9CgkJCQoJCQkKCQkJLyoKCQkJICogNC4gQ2xlYW4gdXAKCQkJICovCgkJCQoJCQlpZiAoIG8ub1Njcm9sbC5zWSA9PT0gIiIgKQoJCQl7CgkJCQkvKiBJRTc8IHB1dHMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gcGxhY2UgKHdoZW4gaXQgc2hvdWxkbid0IGJlKSBkdWUgdG8gc3VidHJhY3RpbmcKCQkJCSAqIHRoZSBzY3JvbGxiYXIgaGVpZ2h0IGZyb20gdGhlIHZpc2libGUgZGlzcGxheSwgcmF0aGVyIHRoYW4gYWRkaW5nIGl0IG9uLiBXZSBuZWVkIHRvCgkJCQkgKiBzZXQgdGhlIGhlaWdodCBpbiBvcmRlciB0byBzb3J0IHRoaXMuIERvbid0IHdhbnQgdG8gZG8gaXQgaW4gYW55IG90aGVyIGJyb3dzZXJzLgoJCQkJICovCgkJCQlpZiAoICQuYnJvd3Nlci5tc2llICYmICQuYnJvd3Nlci52ZXJzaW9uIDw9IDcgKQoJCQkJewoJCQkJCW5TY3JvbGxCb2R5LnN0eWxlLmhlaWdodCA9IF9mblN0cmluZ1RvQ3NzKCBvLm5UYWJsZS5vZmZzZXRIZWlnaHQrby5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQkJfQoJCQl9CgkJCQoJCQlpZiAoIG8ub1Njcm9sbC5zWSAhPT0gIiIgJiYgby5vU2Nyb2xsLmJDb2xsYXBzZSApCgkJCXsKCQkJCW5TY3JvbGxCb2R5LnN0eWxlLmhlaWdodCA9IF9mblN0cmluZ1RvQ3NzKCBvLm9TY3JvbGwuc1kgKTsKCQkJCQoJCQkJdmFyIGlFeHRyYSA9IChvLm9TY3JvbGwuc1ggIT09ICIiICYmIG8ublRhYmxlLm9mZnNldFdpZHRoID4gblNjcm9sbEJvZHkub2Zmc2V0V2lkdGgpID8KCQkJCSAJby5vU2Nyb2xsLmlCYXJXaWR0aCA6IDA7CgkJCQlpZiAoIG8ublRhYmxlLm9mZnNldEhlaWdodCA8IG5TY3JvbGxCb2R5Lm9mZnNldEhlaWdodCApCgkJCQl7CgkJCQkJblNjcm9sbEJvZHkuc3R5bGUuaGVpZ2h0ID0gX2ZuU3RyaW5nVG9Dc3MoICQoby5uVGFibGUpLmhlaWdodCgpK2lFeHRyYSApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBGaW5hbGx5IHNldCB0aGUgd2lkdGgncyBvZiB0aGUgaGVhZGVyIGFuZCBmb290ZXIgdGFibGVzICovCgkJCXZhciBpT3V0ZXJXaWR0aCA9ICQoby5uVGFibGUpLm91dGVyV2lkdGgoKTsKCQkJblNjcm9sbEhlYWRUYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpT3V0ZXJXaWR0aCApOwoJCQluU2Nyb2xsSGVhZElubmVyLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlPdXRlcldpZHRoK28ub1Njcm9sbC5pQmFyV2lkdGggKTsKCQkJCgkJCWlmICggby5uVEZvb3QgIT09IG51bGwgKQoJCQl7CgkJCQl2YXIKCQkJCQluU2Nyb2xsRm9vdElubmVyID0gby5uU2Nyb2xsRm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0sCgkJCQkJblNjcm9sbEZvb3RUYWJsZSA9IG5TY3JvbGxGb290SW5uZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF07CgkJCQkKCQkJCW5TY3JvbGxGb290SW5uZXIuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0Nzcyggby5uVGFibGUub2Zmc2V0V2lkdGgrby5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQkJblNjcm9sbEZvb3RUYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvLm5UYWJsZS5vZmZzZXRXaWR0aCApOwoJCQl9CgkJCQoJCQkvKiBJZiBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXMgb2NjdXJlZCwganVtcCB0aGUgc2Nyb2xsaW5nIGJhY2sgdG8gdGhlIHRvcCAqLwoJCQlpZiAoIG8uYlNvcnRlZCB8fCBvLmJGaWx0ZXJlZCApCgkJCXsKCQkJCW5TY3JvbGxCb2R5LnNjcm9sbFRvcCA9IDA7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQWp1c3RDb2x1bW5TaXppbmcKCQkgKiBQdXJwb3NlOiAgQWp1c3QgdGhlIHRhYmxlIGNvbHVtbiB3aWR0aHMgZm9yIG5ldyBkYXRhCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogTm90ZXM6ICAgIFlvdSB3b3VsZCBwcm9iYWJseSB3YW50IHRvIGRvIGEgcmVkcmF3IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKCQkgKi8KCQlmdW5jdGlvbiBfZm5BanVzdENvbHVtblNpemluZyAoIG9TZXR0aW5ncyApCgkJewoJCQkvKiBOb3QgaW50ZXJlc3RlZCBpbiBkb2luZyBjb2x1bW4gd2lkdGggY2FsY3VsYXRpb24gaWYgYXV0b3dpZHRoIGlzIGRpc2FibGVkICovCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iQXV0b1dpZHRoID09PSBmYWxzZSApCgkJCXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkKCQkJX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzKCBvU2V0dGluZ3MgKTsKCQkJZm9yICggdmFyIGk9MCAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaC5zdHlsZS53aWR0aCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoOwoJCQl9CgkJfQoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IEZpbHRlcmluZwoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZlYXR1cmVIdG1sRmlsdGVyCgkJICogUHVycG9zZTogIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciBmaWx0ZXJpbmcgdGV4dAoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sRmlsdGVyICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBzU2VhcmNoU3RyID0gb1NldHRpbmdzLm9MYW5ndWFnZS5zU2VhcmNoOwoJCQlzU2VhcmNoU3RyID0gKHNTZWFyY2hTdHIuaW5kZXhPZignX0lOUFVUXycpICE9PSAtMSkgPwoJCQkgIHNTZWFyY2hTdHIucmVwbGFjZSgnX0lOUFVUXycsICc8aW5wdXQgdHlwZT0idGV4dCIgLz4nKSA6CgkJCSAgc1NlYXJjaFN0cj09PSIiID8gJzxpbnB1dCB0eXBlPSJ0ZXh0IiAvPicgOiBzU2VhcmNoU3RyKycgPGlucHV0IHR5cGU9InRleHQiIC8+JzsKCQkJCgkJCXZhciBuRmlsdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTsKCQkJbkZpbHRlci5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc0ZpbHRlcjsKCQkJbkZpbHRlci5pbm5lckhUTUwgPSAnPGxhYmVsPicrc1NlYXJjaFN0cisnPC9sYWJlbD4nOwoJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5mID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJbkZpbHRlci5zZXRBdHRyaWJ1dGUoICdpZCcsIG9TZXR0aW5ncy5zVGFibGVJZCsnX2ZpbHRlcicgKTsKCQkJfQoJCQkKCQkJdmFyIGpxRmlsdGVyID0gJCgiaW5wdXQiLCBuRmlsdGVyKTsKCQkJanFGaWx0ZXIudmFsKCBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gucmVwbGFjZSgnIicsJyZxdW90OycpICk7CgkJCWpxRmlsdGVyLmJpbmQoICdrZXl1cC5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCS8qIFVwZGF0ZSBhbGwgb3RoZXIgZmlsdGVyIGlucHV0IGVsZW1lbnRzIGZvciB0aGUgbmV3IGRpc3BsYXkgKi8KCQkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmY7CgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW4ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG5baV0gIT0gdGhpcy5wYXJlbnROb2RlICkKCQkJCQl7CgkJCQkJCSQoJ2lucHV0JywgbltpXSkudmFsKCB0aGlzLnZhbHVlICk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBOb3cgZG8gdGhlIGZpbHRlciAqLwoJCQkJaWYgKCB0aGlzLnZhbHVlICE9IG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guc1NlYXJjaCApCgkJCQl7CgkJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIG9TZXR0aW5ncywgeyAKCQkJCQkJInNTZWFyY2giOiB0aGlzLnZhbHVlLCAKCQkJCQkJImJSZWdleCI6ICBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCwKCQkJCQkJImJTbWFydCI6ICBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJTbWFydCAKCQkJCQl9ICk7CgkJCQl9CgkJCX0gKTsKCQkJCgkJCWpxRmlsdGVyLmJpbmQoICdrZXlwcmVzcy5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCS8qIFByZXZlbnQgZGVmYXVsdCAqLwoJCQkJaWYgKCBlLmtleUNvZGUgPT0gMTMgKQoJCQkJewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfSApOwoJCQkKCQkJcmV0dXJuIG5GaWx0ZXI7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZpbHRlckNvbXBsZXRlCgkJICogUHVycG9zZTogIEZpbHRlciB0aGUgdGFibGUgdXNpbmcgYm90aCB0aGUgZ2xvYmFsIGZpbHRlciBhbmQgY29sdW1uIGJhc2VkIGZpbHRlcmluZwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBvYmplY3Q6b1NlYXJjaDogc2VhcmNoIGluZm9ybWF0aW9uCgkJICogICAgICAgICAgIGludDppRm9yY2UgLSBvcHRpb25hbCAtIGZvcmNlIGEgcmVzZWFyY2ggb2YgdGhlIG1hc3RlciBhcnJheSAoMSkgb3Igbm90ICh1bmRlZmluZWQgb3IgMCkKCQkgKi8KCQlmdW5jdGlvbiBfZm5GaWx0ZXJDb21wbGV0ZSAoIG9TZXR0aW5ncywgb0lucHV0LCBpRm9yY2UgKQoJCXsKCQkJLyogRmlsdGVyIG9uIGV2ZXJ5dGhpbmcgKi8KCQkJX2ZuRmlsdGVyKCBvU2V0dGluZ3MsIG9JbnB1dC5zU2VhcmNoLCBpRm9yY2UsIG9JbnB1dC5iUmVnZXgsIG9JbnB1dC5iU21hcnQgKTsKCQkJCgkJCS8qIE5vdyBkbyB0aGUgaW5kaXZpZHVhbCBjb2x1bW4gZmlsdGVyICovCgkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJX2ZuRmlsdGVyQ29sdW1uKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uc1NlYXJjaCwgaSwgCgkJCQkJb1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXS5iUmVnZXgsIG9TZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0uYlNtYXJ0ICk7CgkJCX0KCQkJCgkJCS8qIEN1c3RvbSBmaWx0ZXJpbmcgKi8KCQkJaWYgKCBfb0V4dC5hZm5GaWx0ZXJpbmcubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogVGVsbCB0aGUgZHJhdyBmdW5jdGlvbiB3ZSBoYXZlIGJlZW4gZmlsdGVyaW5nICovCgkJCW9TZXR0aW5ncy5iRmlsdGVyZWQgPSB0cnVlOwoJCQkKCQkJLyogUmVkcmF3IHRoZSB0YWJsZSAqLwoJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQlfZm5EcmF3KCBvU2V0dGluZ3MgKTsKCQkJCgkJCS8qIFJlYnVpbGQgc2VhcmNoIGFycmF5ICdvZmZsaW5lJyAqLwoJCQlfZm5CdWlsZFNlYXJjaEFycmF5KCBvU2V0dGluZ3MsIDAgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmlsdGVyQ3VzdG9tCgkJICogUHVycG9zZTogIEFwcGx5IGN1c3RvbSBmaWx0ZXJpbmcgZnVuY3Rpb25zCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIGFmbkZpbHRlcnMgPSBfb0V4dC5hZm5GaWx0ZXJpbmc7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49YWZuRmlsdGVycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQl2YXIgaUNvcnJlY3RvciA9IDA7CgkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPW9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCXsKCQkJCQl2YXIgaURpc0luZGV4ID0gb1NldHRpbmdzLmFpRGlzcGxheVtqLWlDb3JyZWN0b3JdOwoJCQkJCQoJCQkJCS8qIENoZWNrIGlmIHdlIHNob3VsZCB1c2UgdGhpcyByb3cgYmFzZWQgb24gdGhlIGZpbHRlcmluZyBmdW5jdGlvbiAqLwoJCQkJCWlmICggIWFmbkZpbHRlcnNbaV0oIG9TZXR0aW5ncywgX2ZuR2V0Um93RGF0YSggb1NldHRpbmdzLCBpRGlzSW5kZXgsICdmaWx0ZXInICksIGlEaXNJbmRleCApICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5haURpc3BsYXkuc3BsaWNlKCBqLWlDb3JyZWN0b3IsIDEgKTsKCQkJCQkJaUNvcnJlY3RvcisrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GaWx0ZXJDb2x1bW4KCQkgKiBQdXJwb3NlOiAgRmlsdGVyIHRoZSB0YWJsZSBvbiBhIHBlci1jb2x1bW4gYmFzaXMKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNJbnB1dCAtIHN0cmluZyB0byBmaWx0ZXIgb24KCQkgKiAgICAgICAgICAgaW50OmlDb2x1bW4gLSBjb2x1bW4gdG8gZmlsdGVyCgkJICogICAgICAgICAgIGJvb2w6YlJlZ2V4IC0gdHJlYXQgc2VhcmNoIHN0cmluZyBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBub3QKCQkgKiAgICAgICAgICAgYm9vbDpiU21hcnQgLSB1c2Ugc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZpbHRlckNvbHVtbiAoIG9TZXR0aW5ncywgc0lucHV0LCBpQ29sdW1uLCBiUmVnZXgsIGJTbWFydCApCgkJewoJCQlpZiAoIHNJbnB1dCA9PT0gIiIgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCXZhciBpSW5kZXhDb3JyZWN0b3IgPSAwOwoJCQl2YXIgcnBTZWFyY2ggPSBfZm5GaWx0ZXJDcmVhdGVTZWFyY2goIHNJbnB1dCwgYlJlZ2V4LCBiU21hcnQgKTsKCQkJCgkJCWZvciAoIHZhciBpPW9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkKCQkJewoJCQkJdmFyIHNEYXRhID0gX2ZuRGF0YVRvU2VhcmNoKCBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBvU2V0dGluZ3MuYWlEaXNwbGF5W2ldLCBpQ29sdW1uLCAnZmlsdGVyJyApLAoJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uc1R5cGUgKTsKCQkJCWlmICggISBycFNlYXJjaC50ZXN0KCBzRGF0YSApICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5LnNwbGljZSggaSwgMSApOwoJCQkJCWlJbmRleENvcnJlY3RvcisrOwoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZpbHRlcgoJCSAqIFB1cnBvc2U6ICBGaWx0ZXIgdGhlIGRhdGEgdGFibGUgYmFzZWQgb24gdXNlciBpbnB1dCBhbmQgZHJhdyB0aGUgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNJbnB1dCAtIHN0cmluZyB0byBmaWx0ZXIgb24KCQkgKiAgICAgICAgICAgaW50OmlGb3JjZSAtIG9wdGlvbmFsIC0gZm9yY2UgYSByZXNlYXJjaCBvZiB0aGUgbWFzdGVyIGFycmF5ICgxKSBvciBub3QgKHVuZGVmaW5lZCBvciAwKQoJCSAqICAgICAgICAgICBib29sOmJSZWdleCAtIHRyZWF0IGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJCSAqICAgICAgICAgICBib29sOmJTbWFydCAtIHBlcmZvcm0gc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZpbHRlciggb1NldHRpbmdzLCBzSW5wdXQsIGlGb3JjZSwgYlJlZ2V4LCBiU21hcnQgKQoJCXsKCQkJdmFyIGk7CgkJCXZhciBycFNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaCggc0lucHV0LCBiUmVnZXgsIGJTbWFydCApOwoJCQkKCQkJLyogQ2hlY2sgaWYgd2UgYXJlIGZvcmNpbmcgb3Igbm90IC0gb3B0aW9uYWwgcGFyYW1ldGVyICovCgkJCWlmICggdHlwZW9mIGlGb3JjZSA9PSAndW5kZWZpbmVkJyB8fCBpRm9yY2UgPT09IG51bGwgKQoJCQl7CgkJCQlpRm9yY2UgPSAwOwoJCQl9CgkJCQoJCQkvKiBOZWVkIHRvIHRha2UgYWNjb3VudCBvZiBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucyAtIGFsd2F5cyBmaWx0ZXIgKi8KCQkJaWYgKCBfb0V4dC5hZm5GaWx0ZXJpbmcubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJaUZvcmNlID0gMTsKCQkJfQoJCQkKCQkJLyoKCQkJICogSWYgdGhlIGlucHV0IGlzIGJsYW5rIC0gd2Ugd2FudCB0aGUgZnVsbCBkYXRhIHNldAoJCQkgKi8KCQkJaWYgKCBzSW5wdXQubGVuZ3RoIDw9IDAgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYWlEaXNwbGF5LnNwbGljZSggMCwgb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGgpOwoJCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8qCgkJCQkgKiBXZSBhcmUgc3RhcnRpbmcgYSBuZXcgc2VhcmNoIG9yIHRoZSBuZXcgc2VhcmNoIHN0cmluZyBpcyBzbWFsbGVyIAoJCQkJICogdGhlbiB0aGUgb2xkIG9uZSAoaS5lLiBkZWxldGUpLiBTZWFyY2ggZnJvbSB0aGUgbWFzdGVyIGFycmF5CgkJCSAJICovCgkJCQlpZiAoIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoID09IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoIHx8CgkJCQkJICAgb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoLmxlbmd0aCA+IHNJbnB1dC5sZW5ndGggfHwgaUZvcmNlID09IDEgfHwKCQkJCQkgICBzSW5wdXQuaW5kZXhPZihvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2gpICE9PSAwICkKCQkJCXsKCQkJCQkvKiBOdWtlIHRoZSBvbGQgZGlzcGxheSBhcnJheSAtIHdlIGFyZSBnb2luZyB0byByZWJ1aWxkIGl0ICovCgkJCQkJb1NldHRpbmdzLmFpRGlzcGxheS5zcGxpY2UoIDAsIG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoKTsKCQkJCQkKCQkJCQkvKiBGb3JjZSBhIHJlYnVpbGQgb2YgdGhlIHNlYXJjaCBhcnJheSAqLwoJCQkJCV9mbkJ1aWxkU2VhcmNoQXJyYXkoIG9TZXR0aW5ncywgMSApOwoJCQkJCQoJCQkJCS8qIFNlYXJjaCB0aHJvdWdoIGFsbCByZWNvcmRzIHRvIHBvcHVsYXRlIHRoZSBzZWFyY2ggYXJyYXkKCQkJCQkgKiBUaGUgdGhlIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIgYW5kIGFzRGF0YVNlYXJjaCBhcnJheXMgaGF2ZSAxIHRvIDEgCgkJCQkJICogbWFwcGluZwoJCQkJCSAqLwoJCQkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5sZW5ndGggOyBpKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBycFNlYXJjaC50ZXN0KG9TZXR0aW5ncy5hc0RhdGFTZWFyY2hbaV0pICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFpRGlzcGxheS5wdXNoKCBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyW2ldICk7CgkJCQkJCX0KCQkJCQl9CgkJCSAgfQoJCQkgIGVsc2UKCQkJCXsKCQkJICAJLyogVXNpbmcgb2xkIHNlYXJjaCBhcnJheSAtIHJlZmluZSBpdCAtIGRvIGl0IHRoaXMgd2F5IGZvciBzcGVlZAoJCQkgIAkgKiBEb24ndCBoYXZlIHRvIHNlYXJjaCB0aGUgd2hvbGUgbWFzdGVyIGFycmF5IGFnYWluCgkJCQkJICovCgkJCSAgCXZhciBpSW5kZXhDb3JyZWN0b3IgPSAwOwoJCQkgIAkKCQkJICAJLyogU2VhcmNoIHRoZSBjdXJyZW50IHJlc3VsdHMgKi8KCQkJICAJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYXNEYXRhU2VhcmNoLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkgIAkJaWYgKCAhIHJwU2VhcmNoLnRlc3Qob1NldHRpbmdzLmFzRGF0YVNlYXJjaFtpXSkgKQoJCQkJCQl7CgkJCSAgCQkJb1NldHRpbmdzLmFpRGlzcGxheS5zcGxpY2UoIGktaUluZGV4Q29ycmVjdG9yLCAxICk7CgkJCSAgCQkJaUluZGV4Q29ycmVjdG9yKys7CgkJCSAgCQl9CgkJCSAgCX0KCQkJICB9CgkJCX0KCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoID0gc0lucHV0OwoJCQlvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCA9IGJSZWdleDsKCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5iU21hcnQgPSBiU21hcnQ7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkJ1aWxkU2VhcmNoQXJyYXkKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGFuIGFycmF5IHdoaWNoIGNhbiBiZSBxdWlja2x5IHNlYXJjaCB0aHJvdWdoCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppTWFzdGVyIC0gdXNlIHRoZSBtYXN0ZXIgZGF0YSBhcnJheSAtIG9wdGlvbmFsCgkJICovCgkJZnVuY3Rpb24gX2ZuQnVpbGRTZWFyY2hBcnJheSAoIG9TZXR0aW5ncywgaU1hc3RlciApCgkJewoJCQkvKiBDbGVhciBvdXQgdGhlIG9sZCBkYXRhICovCgkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2guc3BsaWNlKCAwLCBvU2V0dGluZ3MuYXNEYXRhU2VhcmNoLmxlbmd0aCApOwoJCQkKCQkJdmFyIGFBcnJheSA9ICh0eXBlb2YgaU1hc3RlciAhPSAndW5kZWZpbmVkJyAmJiBpTWFzdGVyID09IDEpID8KCQkJIAlvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyIDogb1NldHRpbmdzLmFpRGlzcGxheTsKCQkJCgkJCWZvciAoIHZhciBpPTAsIGlMZW49YUFycmF5Lmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9TZXR0aW5ncy5hc0RhdGFTZWFyY2hbaV0gPSBfZm5CdWlsZFNlYXJjaFJvdyggb1NldHRpbmdzLAoJCQkJCV9mbkdldFJvd0RhdGEoIG9TZXR0aW5ncywgYUFycmF5W2ldLCAnZmlsdGVyJyApICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQnVpbGRTZWFyY2hSb3cKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGEgc2VhcmNoYWJsZSBzdHJpbmcgZnJvbSBhIHNpbmdsZSBkYXRhIHJvdwoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBhcnJheTphRGF0YSAtIFJvdyBkYXRhIGFycmF5IHRvIHVzZSBmb3IgdGhlIGRhdGEgdG8gc2VhcmNoCgkJICovCgkJZnVuY3Rpb24gX2ZuQnVpbGRTZWFyY2hSb3coIG9TZXR0aW5ncywgYURhdGEgKQoJCXsKCQkJdmFyIHNTZWFyY2ggPSAnJzsKCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLl9fblRtcEZpbHRlciA9PSAndW5kZWZpbmVkJyApIHsKCQkJCW9TZXR0aW5ncy5fX25UbXBGaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJfQoJCQl2YXIgblRtcCA9IG9TZXR0aW5ncy5fX25UbXBGaWx0ZXI7CgkJCQoJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2pdLmJTZWFyY2hhYmxlICkKCQkJCXsKCQkJCQl2YXIgc0RhdGEgPSBhRGF0YVtqXTsKCQkJCQlzU2VhcmNoICs9IF9mbkRhdGFUb1NlYXJjaCggc0RhdGEsIG9TZXR0aW5ncy5hb0NvbHVtbnNbal0uc1R5cGUgKSsnICAnOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBJZiBpdCBsb29rcyBsaWtlIHRoZXJlIGlzIGFuIEhUTUwgZW50aXR5IGluIHRoZSBzdHJpbmcsIGF0dGVtcHQgdG8gZGVjb2RlIGl0ICovCgkJCWlmICggc1NlYXJjaC5pbmRleE9mKCcmJykgIT09IC0xICkKCQkJewoJCQkJblRtcC5pbm5lckhUTUwgPSBzU2VhcmNoOwoJCQkJc1NlYXJjaCA9IG5UbXAudGV4dENvbnRlbnQgPyBuVG1wLnRleHRDb250ZW50IDogblRtcC5pbm5lclRleHQ7CgkJCQkKCQkJCS8qIElFIGFuZCBPcGVyYSBhcHBlYXIgdG8gcHV0IGFuIG5ld2xpbmUgd2hlcmUgdGhlcmUgaXMgYSA8YnI+IHRhZyAtIHJlbW92ZSBpdCAqLwoJCQkJc1NlYXJjaCA9IHNTZWFyY2gucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoL1xyL2csIiIpOwoJCQl9CgkJCQoJCQlyZXR1cm4gc1NlYXJjaDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoCgkJICogUHVycG9zZTogIEJ1aWxkIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBzdWl0YWJsZSBmb3Igc2VhcmNoaW5nIGEgdGFibGUKCQkgKiBSZXR1cm5zOiAgUmVnRXhwOiAtIGNvbnN0cnVjdGVkIG9iamVjdAoJCSAqIElucHV0czogICBzdHJpbmc6c1NlYXJjaCAtIHN0cmluZyB0byBzZWFyY2ggZm9yCgkJICogICAgICAgICAgIGJvb2w6YlJlZ2V4IC0gdHJlYXQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90CgkJICogICAgICAgICAgIGJvb2w6YlNtYXJ0IC0gcGVyZm9ybSBzbWFydCBmaWx0ZXJpbmcgb3Igbm90CgkJICovCgkJZnVuY3Rpb24gX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoKCBzU2VhcmNoLCBiUmVnZXgsIGJTbWFydCApCgkJewoJCQl2YXIgYXNTZWFyY2gsIHNSZWdFeHBTdHJpbmc7CgkJCQoJCQlpZiAoIGJTbWFydCApCgkJCXsKCQkJCS8qIEdlbmVyYXRlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlLiBTb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgoJCQkJICogXig/PS4qP1xib25lXGIpKD89Lio/XGJ0d29cYikoPz0uKj9cYnRocmVlXGIpLiokCgkJCQkgKi8KCQkJCWFzU2VhcmNoID0gYlJlZ2V4ID8gc1NlYXJjaC5zcGxpdCggJyAnICkgOiBfZm5Fc2NhcGVSZWdleCggc1NlYXJjaCApLnNwbGl0KCAnICcgKTsKCQkJCXNSZWdFeHBTdHJpbmcgPSAnXig/PS4qPycrYXNTZWFyY2guam9pbiggJykoPz0uKj8nICkrJykuKiQnOwoJCQkJcmV0dXJuIG5ldyBSZWdFeHAoIHNSZWdFeHBTdHJpbmcsICJpIiApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJc1NlYXJjaCA9IGJSZWdleCA/IHNTZWFyY2ggOiBfZm5Fc2NhcGVSZWdleCggc1NlYXJjaCApOwoJCQkJcmV0dXJuIG5ldyBSZWdFeHAoIHNTZWFyY2gsICJpIiApOwoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkRhdGFUb1NlYXJjaAoJCSAqIFB1cnBvc2U6ICBDb252ZXJ0IHJhdyBkYXRhIGludG8gc29tZXRoaW5nIHRoYXQgdGhlIHVzZXIgY2FuIHNlYXJjaCBvbgoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gc2VhcmNoIHN0cmluZwoJCSAqIElucHV0czogICBzdHJpbmc6c0RhdGEgLSBkYXRhIHRvIGJlIG1vZGlmaWVkCgkJICogICAgICAgICAgIHN0cmluZzpzVHlwZSAtIGRhdGEgdHlwZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkRhdGFUb1NlYXJjaCAoIHNEYXRhLCBzVHlwZSApCgkJewoJCQlpZiAoIHR5cGVvZiBfb0V4dC5vZm5TZWFyY2hbc1R5cGVdID09ICJmdW5jdGlvbiIgKQoJCQl7CgkJCQlyZXR1cm4gX29FeHQub2ZuU2VhcmNoW3NUeXBlXSggc0RhdGEgKTsKCQkJfQoJCQllbHNlIGlmICggc1R5cGUgPT0gImh0bWwiICkKCQkJewoJCQkJcmV0dXJuIHNEYXRhLnJlcGxhY2UoL1xuL2csIiAiKS5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIHNEYXRhID09ICJzdHJpbmciICkKCQkJewoJCQkJcmV0dXJuIHNEYXRhLnJlcGxhY2UoL1xuL2csIiAiKTsKCQkJfQoJCQllbHNlIGlmICggc0RhdGEgPT09IG51bGwgKQoJCQl7CgkJCQlyZXR1cm4gJyc7CgkJCX0KCQkJcmV0dXJuIHNEYXRhOwoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IFNvcnRpbmcKCQkgKi8KCQkKCQkvKgoJIAkgKiBGdW5jdGlvbjogX2ZuU29ydAoJCSAqIFB1cnBvc2U6ICBDaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBib29sOmJBcHBseUNsYXNzZXMgLSBvcHRpb25hbCAtIHNob3VsZCB3ZSBhcHBseSBjbGFzc2VzIG9yIG5vdAoJCSAqIE5vdGVzOiAgICBXZSBhbHdheXMgc29ydCB0aGUgbWFzdGVyIGFycmF5IGFuZCB0aGVuIGFwcGx5IGEgZmlsdGVyIGFnYWluCgkJICogICBpZiBpdCBpcyBuZWVkZWQuIFRoaXMgcHJvYmFibHkgaXNuJ3Qgb3B0aW1hbCAtIGJ1dCBhdG0gSSBjYW4ndCB0aGluawoJCSAqICAgb2YgYW55IG90aGVyIHdheSB3aGljaCBpcyAoZWFjaCBoYXMgZGlzYWR2YW50YWdlcykuIHdlIHdhbnQgdG8gc29ydCBhaURpc3BsYXlNYXN0ZXIgLSAKCQkgKiAgIGJ1dCBhY2NvcmRpbmcgdG8gYW9EYXRhW10uX2FEYXRhCgkJICovCgkJZnVuY3Rpb24gX2ZuU29ydCAoIG9TZXR0aW5ncywgYkFwcGx5Q2xhc3NlcyApCgkJewoJCQl2YXIKCQkJCWlEYXRhU29ydCwgaURhdGFUeXBlLAoJCQkJaSwgaUxlbiwgaiwgakxlbiwKCQkJCWFhU29ydCA9IFtdLAoJCQkgCWFpT3JpZyA9IFtdLAoJCQkJb1NvcnQgPSBfb0V4dC5vU29ydCwKCQkJCWFvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGEsCgkJCQlhb0NvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zOwoJCQkKCQkJLyogTm8gc29ydGluZyByZXF1aXJlZCBpZiBzZXJ2ZXItc2lkZSBvciBubyBzb3J0aW5nIGFycmF5ICovCgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgJiYgCgkJCQkob1NldHRpbmdzLmFhU29ydGluZy5sZW5ndGggIT09IDAgfHwgb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsKSApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsICkKCQkJCXsKCQkJCQlhYVNvcnQgPSBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQuY29uY2F0KCBvU2V0dGluZ3MuYWFTb3J0aW5nICk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZy5zbGljZSgpOwoJCQkJfQoJCQkJCgkJCQkvKiBJZiB0aGVyZSBpcyBhIHNvcnRpbmcgZGF0YSB0eXBlLCBhbmQgYSBmdWN0aW9uIGJlbG9uZ2luZyB0byBpdCwgdGhlbiB3ZSBuZWVkIHRvCgkJCQkgKiBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MgZnVuY3Rpb24gYW5kIGFwcGx5IGl0IGZvciB0aGlzIGNvbHVtbgoJCQkJICovCgkJCQlmb3IgKCBpPTAgOyBpPGFhU29ydC5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCXZhciBpQ29sdW1uID0gYWFTb3J0W2ldWzBdOwoJCQkJCXZhciBpVmlzQ29sdW1uID0gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaUNvbHVtbiApOwoJCQkJCXZhciBzRGF0YVR5cGUgPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBpQ29sdW1uIF0uc1NvcnREYXRhVHlwZTsKCQkJCQlpZiAoIHR5cGVvZiBfb0V4dC5hZm5Tb3J0RGF0YVtzRGF0YVR5cGVdICE9ICd1bmRlZmluZWQnICkKCQkJCQl7CgkJCQkJCXZhciBhRGF0YSA9IF9vRXh0LmFmblNvcnREYXRhW3NEYXRhVHlwZV0oIG9TZXR0aW5ncywgaUNvbHVtbiwgaVZpc0NvbHVtbiApOwoJCQkJCQlmb3IgKCBqPTAsIGpMZW49YW9EYXRhLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQkJCXsKCQkJCQkJCV9mblNldENlbGxEYXRhKCBvU2V0dGluZ3MsIGosIGlDb2x1bW4sIGFEYXRhW2pdICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIENyZWF0ZSBhIHZhbHVlIC0ga2V5IGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBwb3NpdGlvbnMgc3VjaCB0aGF0IHdlIGNhbiB1c2UgdGhlaXIKCQkJCSAqIGN1cnJlbnQgcG9zaXRpb24gZHVyaW5nIHRoZSBzb3J0LCBpZiB2YWx1ZXMgbWF0Y2gsIGluIG9yZGVyIHRvIHBlcmZvcm0gc3RhYmxlIHNvcnRpbmcKCQkJCSAqLwoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlhaU9yaWdbIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXJbaV0gXSA9IGk7CgkJCQl9CgkJCQkKCQkJCS8qIERvIHRoZSBzb3J0IC0gaGVyZSB3ZSB3YW50IG11bHRpLWNvbHVtbiBzb3J0aW5nIGJhc2VkIG9uIGEgZ2l2ZW4gZGF0YSBzb3VyY2UgKGNvbHVtbikKCQkJCSAqIGFuZCBzb3J0aW5nIGZ1bmN0aW9uIChmcm9tIG9Tb3J0KSBpbiBhIGNlcnRhaW4gZGlyZWN0aW9uLiBJdCdzIHJlYXNvbmFibHkgY29tcGxleCB0bwoJCQkJICogZm9sbG93IG9uIGl0J3Mgb3duLCBidXQgdGhpcyBpcyB3aGF0IHdlIHdhbnQgKGV4YW1wbGUgdHdvIGNvbHVtbiBzb3J0aW5nKToKCQkJCSAqICBmbkxvY2FsU29ydGluZyA9IGZ1bmN0aW9uKGEsYil7CgkJCQkgKiAgCXZhciBpVGVzdDsKCQkJCSAqICAJaVRlc3QgPSBvU29ydFsnc3RyaW5nLWFzYyddKCdkYXRhMTEnLCAnZGF0YTEyJyk7CgkJCQkgKiAgCWlmIChpVGVzdCAhPT0gMCkKCQkJCSAqICAJCXJldHVybiBpVGVzdDsKCQkJCSAqICAgIGlUZXN0ID0gb1NvcnRbJ251bWVyaWMtZGVzYyddKCdkYXRhMjEnLCAnZGF0YTIyJyk7CgkJCQkgKiAgICBpZiAoaVRlc3QgIT09IDApCgkJCQkgKiAgCQlyZXR1cm4gaVRlc3Q7CgkJCQkgKiAgCXJldHVybiBvU29ydFsnbnVtZXJpYy1hc2MnXSggYWlPcmlnW2FdLCBhaU9yaWdbYl0gKTsKCQkJCSAqICB9CgkJCQkgKiBCYXNpY2FsbHkgd2UgaGF2ZSBhIHRlc3QgZm9yIGVhY2ggc29ydGluZyBjb2x1bW4sIGlmIHRoZSBkYXRhIGluIHRoYXQgY29sdW1uIGlzIGVxdWFsLAoJCQkJICogdGVzdCB0aGUgbmV4dCBjb2x1bW4uIElmIGFsbCBjb2x1bW5zIG1hdGNoLCB0aGVuIHdlIHVzZSBhIG51bWVyaWMgc29ydCBvbiB0aGUgcm93IAoJCQkJICogcG9zaXRpb25zIGluIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5IHRvIHByb3ZpZGUgYSBzdGFibGUgc29ydC4KCQkJCSAqLwoJCQkJdmFyIGlTb3J0TGVuID0gYWFTb3J0Lmxlbmd0aDsKCQkJCW9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc29ydCggZnVuY3Rpb24gKCBhLCBiICkgewoJCQkJCXZhciBpVGVzdCwgaURhdGFTb3J0LCBzRGF0YVR5cGU7CgkJCQkJZm9yICggaT0wIDsgaTxpU29ydExlbiA7IGkrKyApCgkJCQkJewoJCQkJCQlpRGF0YVNvcnQgPSBhb0NvbHVtbnNbIGFhU29ydFtpXVswXSBdLmlEYXRhU29ydDsKCQkJCQkJc0RhdGFUeXBlID0gYW9Db2x1bW5zWyBpRGF0YVNvcnQgXS5zVHlwZTsKCQkJCQkJaVRlc3QgPSBvU29ydFsgKHNEYXRhVHlwZT9zRGF0YVR5cGU6J3N0cmluZycpKyItIithYVNvcnRbaV1bMV0gXSgKCQkJCQkJCV9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGEsIGlEYXRhU29ydCwgJ3NvcnQnICksCgkJCQkJCQlfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBiLCBpRGF0YVNvcnQsICdzb3J0JyApCgkJCQkJCSk7CgkJCQkJCQoJCQkJCQlpZiAoIGlUZXN0ICE9PSAwICkKCQkJCQkJewoJCQkJCQkJcmV0dXJuIGlUZXN0OwoJCQkJCQl9CgkJCQkJfQoJCQkJCQoJCQkJCXJldHVybiBvU29ydFsnbnVtZXJpYy1hc2MnXSggYWlPcmlnW2FdLCBhaU9yaWdbYl0gKTsKCQkJCX0gKTsKCQkJfQoJCQkKCQkJLyogQWx0ZXIgdGhlIHNvcnRpbmcgY2xhc3NlcyB0byB0YWtlIGFjY291bnQgb2YgdGhlIGNoYW5nZXMgKi8KCQkJaWYgKCAodHlwZW9mIGJBcHBseUNsYXNzZXMgPT0gJ3VuZGVmaW5lZCcgfHwgYkFwcGx5Q2xhc3NlcykgJiYgIW9TZXR0aW5ncy5vRmVhdHVyZXMuYkRlZmVyUmVuZGVyICkKCQkJewoJCQkJX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBUZWxsIHRoZSBkcmF3IGZ1bmN0aW9uIHRoYXQgd2UgaGF2ZSBzb3J0ZWQgdGhlIGRhdGEgKi8KCQkJb1NldHRpbmdzLmJTb3J0ZWQgPSB0cnVlOwoJCQkKCQkJLyogQ29weSB0aGUgbWFzdGVyIGRhdGEgaW50byB0aGUgZHJhdyBhcnJheSBhbmQgcmUtZHJhdyAqLwoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApCgkJCXsKCQkJCS8qIF9mbkZpbHRlcigpIHdpbGwgcmVkcmF3IHRoZSB0YWJsZSBmb3IgdXMgKi8KCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBvU2V0dGluZ3MsIG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2gsIDEgKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOyAvKiByZXNldCBkaXNwbGF5IGJhY2sgdG8gcGFnZSAwICovCgkJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU29ydEF0dGFjaExpc3RlbmVyCgkJICogUHVycG9zZTogIEF0dGFjaCBhIHNvcnQgaGFuZGxlciAoY2xpY2spIHRvIGEgbm9kZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBub2RlOm5Ob2RlIC0gbm9kZSB0byBhdHRhY2ggdGhlIGhhbmRsZXIgdG8KCQkgKiAgICAgICAgICAgaW50OmlEYXRhSW5kZXggLSBjb2x1bW4gc29ydGluZyBpbmRleAoJCSAqICAgICAgICAgICBmdW5jdGlvbjpmbkNhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gLSBvcHRpb25hbAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNvcnRBdHRhY2hMaXN0ZW5lciAoIG9TZXR0aW5ncywgbk5vZGUsIGlEYXRhSW5kZXgsIGZuQ2FsbGJhY2sgKQoJCXsKCQkJJChuTm9kZSkuYmluZCggJ2NsaWNrLkRUJywgZnVuY3Rpb24gKGUpIHsKCQkJCS8qIElmIHRoZSBjb2x1bW4gaXMgbm90IHNvcnRhYmxlIC0gZG9uJ3QgdG8gYW55dGhpbmcgKi8KCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpRGF0YUluZGV4XS5iU29ydGFibGUgPT09IGZhbHNlICkKCQkJCXsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkKCQkJCS8qCgkJCQkgKiBUaGlzIGlzIGEgbGl0dGxlIGJpdCBvZGQgSSBhZG1pdC4uLiBJIGRlY2xhcmUgYSB0ZW1wb3JhcnkgZnVuY3Rpb24gaW5zaWRlIHRoZSBzY29wZSBvZgoJCQkJICogX2ZuQnVpbGRIZWFkIGFuZCB0aGUgY2xpY2sgaGFuZGxlciBpbiBvcmRlciB0aGF0IHRoZSBjb2RlIHByZXNlbnRlZCBoZXJlIGNhbiBiZSB1c2VkIAoJCQkJICogdHdpY2UgLSBvbmNlIGZvciB3aGVuIGJQcm9jZXNzaW5nIGlzIGVuYWJsZWQsIGFuZCBhbm90aGVyIHRpbWUgZm9yIHdoZW4gaXQgaXMgCgkJCQkgKiBkaXNhYmxlZCwgYXMgd2UgbmVlZCB0byBwZXJmb3JtIHNsaWdodGx5IGRpZmZlcmVudCBhY3Rpb25zLgoJCQkJICogICBCYXNpY2FsbHkgdGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgSmF2YXNjcmlwdCBlbmdpbmUgaW4gbW9kZXJuIGJyb3dzZXJzIGRvbid0IAoJCQkJICogYXBwZWFyIHRvIGFsbG93IHRoZSByZW5kZXJpbmcgZW5naW5lIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSB3aGlsZSBpdCBpcyBzdGlsbCBleGN1dGluZwoJCQkJICogaXQncyB0aHJlYWQgKHdlbGwgLSBpdCBkb2VzIGJ1dCBvbmx5IGFmdGVyIGxvbmcgaW50ZXJ2YWxzKS4gVGhpcyBtZWFucyB0aGF0IHRoZSAKCQkJCSAqICdwcm9jZXNzaW5nJyBkaXNwbGF5IGRvZXNuJ3QgYXBwZWFyIGZvciBhIHRhYmxlIHNvcnQuIFRvIGJyZWFrIHRoZSBqcyB0aHJlYWQgdXAgYSBiaXQKCQkJCSAqIEkgZm9yY2UgYW4gZXhlY3V0aW9uIGJyZWFrIGJ5IHVzaW5nIHNldFRpbWVvdXQgLSBidXQgdGhpcyBicmVha3MgdGhlIGV4cGVjdGVkIAoJCQkJICogdGhyZWFkIGNvbnRpbnVhdGlvbiBmb3IgdGhlIGVuZC1kZXZlbG9wZXIncyBwb2ludCBvZiB2aWV3ICh0aGVpciBjb2RlIHdvdWxkIGV4ZWN1dGUKCQkJCSAqIHRvbyBlYXJseSksIHNvIHdlIG9uO3kgZG8gaXQgd2hlbiB3ZSBhYnNvbHV0ZWx5IGhhdmUgdG8uCgkJCQkgKi8KCQkJCXZhciBmbklubmVyU29ydGluZyA9IGZ1bmN0aW9uICgpIHsKCQkJCQl2YXIgaUNvbHVtbiwgaU5leHRTb3J0OwoJCQkJCQoJCQkJCS8qIElmIHRoZSBzaGlmdCBrZXkgaXMgcHJlc3NlZCB0aGVuIHdlIGFyZSBtdWx0aXBlIGNvbHVtbiBzb3J0aW5nICovCgkJCQkJaWYgKCBlLnNoaWZ0S2V5ICkKCQkJCQl7CgkJCQkJCS8qIEFyZSB3ZSBhbHJlYWR5IGRvaW5nIHNvbWUga2luZCBvZiBzb3J0IG9uIHRoaXMgY29sdW1uPyAqLwoJCQkJCQl2YXIgYkZvdW5kID0gZmFsc2U7CgkJCQkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hYVNvcnRpbmcubGVuZ3RoIDsgaSsrICkKCQkJCQkJewoJCQkJCQkJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdID09IGlEYXRhSW5kZXggKQoJCQkJCQkJewoJCQkJCQkJCWJGb3VuZCA9IHRydWU7CgkJCQkJCQkJaUNvbHVtbiA9IG9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF07CgkJCQkJCQkJaU5leHRTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ1tpXVsyXSsxOwoJCQkJCQkJCQoJCQkJCQkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbHVtbl0uYXNTb3J0aW5nW2lOZXh0U29ydF0gPT0gJ3VuZGVmaW5lZCcgKQoJCQkJCQkJCXsKCQkJCQkJCQkJLyogUmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzb3J0aW5nIG9wdGlvbnMsIHJlbW92ZSBmcm9tIG11bHRpLWNvbCBzb3J0ICovCgkJCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmcuc3BsaWNlKCBpLCAxICk7CgkJCQkJCQkJfQoJCQkJCQkJCWVsc2UKCQkJCQkJCQl7CgkJCQkJCQkJCS8qIE1vdmUgb250byBuZXh0IHNvcnRpbmcgZGlyZWN0aW9uICovCgkJCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMV0gPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmFzU29ydGluZ1tpTmV4dFNvcnRdOwoJCQkJCQkJCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzJdID0gaU5leHRTb3J0OwoJCQkJCQkJCX0KCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkKCQkJCQkJLyogTm8gc29ydCB5ZXQgLSBhZGQgaXQgaW4gKi8KCQkJCQkJaWYgKCBiRm91bmQgPT09IGZhbHNlICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZy5wdXNoKCBbIGlEYXRhSW5kZXgsIAoJCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaURhdGFJbmRleF0uYXNTb3J0aW5nWzBdLCAwIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkvKiBJZiBubyBzaGlmdCBrZXkgdGhlbiBzaW5nbGUgY29sdW1uIHNvcnQgKi8KCQkJCQkJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCA9PSAxICYmIG9TZXR0aW5ncy5hYVNvcnRpbmdbMF1bMF0gPT0gaURhdGFJbmRleCApCgkJCQkJCXsKCQkJCQkJCWlDb2x1bW4gPSBvU2V0dGluZ3MuYWFTb3J0aW5nWzBdWzBdOwoJCQkJCQkJaU5leHRTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ1swXVsyXSsxOwoJCQkJCQkJaWYgKCB0eXBlb2Ygb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sdW1uXS5hc1NvcnRpbmdbaU5leHRTb3J0XSA9PSAndW5kZWZpbmVkJyApCgkJCQkJCQl7CgkJCQkJCQkJaU5leHRTb3J0ID0gMDsKCQkJCQkJCX0KCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbMF1bMV0gPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmFzU29ydGluZ1tpTmV4dFNvcnRdOwoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZ1swXVsyXSA9IGlOZXh0U29ydDsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmcuc3BsaWNlKCAwLCBvU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCApOwoJCQkJCQkJb1NldHRpbmdzLmFhU29ydGluZy5wdXNoKCBbIGlEYXRhSW5kZXgsIAoJCQkJCQkJCW9TZXR0aW5ncy5hb0NvbHVtbnNbaURhdGFJbmRleF0uYXNTb3J0aW5nWzBdLCAwIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQkKCQkJCQkvKiBSdW4gdGhlIHNvcnQgKi8KCQkJCQlfZm5Tb3J0KCBvU2V0dGluZ3MgKTsKCQkJCX07IC8qIC9mbklubmVyU29ydGluZyAqLwoJCQkJCgkJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkKCQkJCXsKCQkJCQlmbklubmVyU29ydGluZygpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIHRydWUgKTsKCQkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKCQkJCQkJZm5Jbm5lclNvcnRpbmcoKTsKCQkJCQkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApCgkJCQkJCXsKCQkJCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIGZhbHNlICk7CgkJCQkJCX0KCQkJCQl9LCAwICk7CgkJCQl9CgkJCQkKCQkJCS8qIENhbGwgdGhlIHVzZXIgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIC0gdXNlZCBmb3IgYXN5bmMgdXNlciBpbnRlcmFjdGlvbiAqLwoJCQkJaWYgKCB0eXBlb2YgZm5DYWxsYmFjayA9PSAnZnVuY3Rpb24nICkKCQkJCXsKCQkJCQlmbkNhbGxiYWNrKCBvU2V0dGluZ3MgKTsKCQkJCX0KCQkJfSApOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Tb3J0aW5nQ2xhc3NlcwoJCSAqIFB1cnBvc2U6ICBTZXQgdGhlIHNvcnR0aW5nIGNsYXNzZXMgb24gdGhlIGhlYWRlcgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqIE5vdGVzOiAgICBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGJTb3J0IGFuZCBiU29ydENsYXNzZXMgYXJlIGZhbHNlCgkJICovCgkJZnVuY3Rpb24gX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaUZvdW5kOwoJCQl2YXIgYWFTb3J0LCBzQ2xhc3M7CgkJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQoJCQlmb3IgKCBpPTAgOyBpPGlDb2x1bW5zIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJTb3J0YWJsZSApCgkJCQl7CgkJCQkJJChvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCkucmVtb3ZlQ2xhc3MoIG9DbGFzc2VzLnNTb3J0QXNjICsiICIrIG9DbGFzc2VzLnNTb3J0RGVzYyArCgkJCQkJCSIgIisgb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zU29ydGluZ0NsYXNzICk7CgkJCQl9CgkJCX0KCQkJCgkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkICE9PSBudWxsICkKCQkJewoJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkLmNvbmNhdCggb1NldHRpbmdzLmFhU29ydGluZyApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYWFTb3J0ID0gb1NldHRpbmdzLmFhU29ydGluZy5zbGljZSgpOwoJCQl9CgkJCQoJCQkvKiBBcHBseSB0aGUgcmVxdWlyZWQgY2xhc3NlcyB0byB0aGUgaGVhZGVyICovCgkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlNvcnRhYmxlICkKCQkJCXsKCQkJCQlzQ2xhc3MgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3M7CgkJCQkJaUZvdW5kID0gLTE7CgkJCQkJZm9yICggaj0wIDsgajxhYVNvcnQubGVuZ3RoIDsgaisrICkKCQkJCQl7CgkJCQkJCWlmICggYWFTb3J0W2pdWzBdID09IGkgKQoJCQkJCQl7CgkJCQkJCQlzQ2xhc3MgPSAoIGFhU29ydFtqXVsxXSA9PSAiYXNjIiApID8KCQkJCQkJCQlvQ2xhc3Nlcy5zU29ydEFzYyA6IG9DbGFzc2VzLnNTb3J0RGVzYzsKCQkJCQkJCWlGb3VuZCA9IGo7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkKG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0ublRoKS5hZGRDbGFzcyggc0NsYXNzICk7CgkJCQkJCgkJCQkJaWYgKCBvU2V0dGluZ3MuYkpVSSApCgkJCQkJewoJCQkJCQkvKiBqUXVlcnkgVUkgdXNlcyBleHRyYSBtYXJrdXAgKi8KCQkJCQkJdmFyIGpxU3BhbiA9ICQoInNwYW4iLCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCk7CgkJCQkJCWpxU3Bhbi5yZW1vdmVDbGFzcyhvQ2xhc3Nlcy5zU29ydEpVSUFzYyArIiAiKyBvQ2xhc3Nlcy5zU29ydEpVSURlc2MgKyIgIisgCgkJCQkJCQlvQ2xhc3Nlcy5zU29ydEpVSSArIiAiKyBvQ2xhc3Nlcy5zU29ydEpVSUFzY0FsbG93ZWQgKyIgIisgb0NsYXNzZXMuc1NvcnRKVUlEZXNjQWxsb3dlZCApOwoJCQkJCQkKCQkJCQkJdmFyIHNTcGFuQ2xhc3M7CgkJCQkJCWlmICggaUZvdW5kID09IC0xICkKCQkJCQkJewoJCQkJCQkgCXNTcGFuQ2xhc3MgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3NKVUk7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoIGFhU29ydFtpRm91bmRdWzFdID09ICJhc2MiICkKCQkJCQkJewoJCQkJCQkJc1NwYW5DbGFzcyA9IG9DbGFzc2VzLnNTb3J0SlVJQXNjOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc1NwYW5DbGFzcyA9IG9DbGFzc2VzLnNTb3J0SlVJRGVzYzsKCQkJCQkJfQoJCQkJCQkKCQkJCQkJanFTcGFuLmFkZENsYXNzKCBzU3BhbkNsYXNzICk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8qIE5vIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4sIHNvIGFkZCB0aGUgYmFzZSBjbGFzcy4gVGhpcyB3aWxsIGhhdmUgYmVlbiBhc3NpZ25lZCBieQoJCQkJCSAqIF9mbkFkZENvbHVtbgoJCQkJCSAqLwoJCQkJCSQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgpLmFkZENsYXNzKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNTb3J0aW5nQ2xhc3MgKTsKCQkJCX0KCQkJfQoJCQkKCQkJLyogCgkJCSAqIEFwcGx5IHRoZSByZXF1aXJlZCBjbGFzc2VzIHRvIHRoZSB0YWJsZSBib2R5CgkJCSAqIE5vdGUgdGhhdCB0aGlzIGlzIGdpdmVuIGFzIGEgZmVhdHVyZSBzd2l0Y2ggc2luY2UgaXQgY2FuIHNpZ25pZmljYW50bHkgc2xvdyBkb3duIGEgc29ydAoJCQkgKiBvbiBsYXJnZSBkYXRhIHNldHMgKGFkZGluZyBhbmQgcmVtb3Zpbmcgb2YgY2xhc3NlcyBpcyBhbHdheXMgc2xvdyBhdCB0aGUgYmVzdCBvZiB0aW1lcy4uKQoJCQkgKiBGdXJ0aGVyIHRvIHRoaXMsIG5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgYWRtaXRhZGx5IGZhaXJseSB1Z2x5LiBJdCBjb3VsZCBiZSBtYWRlIGEgbG90IAoJCQkgKiBzaW1waWxlciB1c2luZyBqUXVlcnkgc2VsZWN0b3JzIGFuZCBhZGQvcmVtb3ZlQ2xhc3MsIGJ1dCB0aGF0IGlzIHNpZ25pZmljYW50bHkgc2xvd2VyCgkJCSAqIChvbiB0aGUgb3JkZXIgb2YgNSB0aW1lcyBzbG93ZXIpIC0gaGVuY2UgdGhlIGRpcmVjdCBET00gbWFuaXB1bGF0aW9uIGhlcmUuCgkJCSAqIE5vdGUgdGhhdCBmb3IgZGVmZXJlZCBkcmF3aW5nIHdlIGRvIHVzZSBqUXVlcnkgLSB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGFraW5nIHRoZSBmaXJzdAoJCQkgKiByb3cgZm91bmQgdG8gc2VlIGlmIHRoZSB3aG9sZSBjb2x1bW4gbmVlZHMgcHJvY2Vzc2VkIGNhbiBtaXNzIGNsYXNzZXMgc2luY2UgdGhlIGZpcnN0CgkJCSAqIGNvbHVtbiBtaWdodCBiZSBuZXcuCgkJCSAqLwoJCQlzQ2xhc3MgPSBvQ2xhc3Nlcy5zU29ydENvbHVtbjsKCQkJCgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCAmJiBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0Q2xhc3NlcyApCgkJCXsKCQkJCXZhciBuVGRzID0gX2ZuR2V0VGROb2Rlcyggb1NldHRpbmdzICk7CgoJCQkJLyogUmVtb3ZlIHRoZSBvbGQgY2xhc3NlcyAqLwoJCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJEZWZlclJlbmRlciApCgkJCQl7CgkJCQkJJChuVGRzKS5yZW1vdmVDbGFzcyhzQ2xhc3MrJzEgJytzQ2xhc3MrJzIgJytzQ2xhc3MrJzMnKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBuVGRzLmxlbmd0aCA+PSBpQ29sdW1ucyApCgkJCQl7CgkJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1ucyA7IGkrKyApCgkJCQkJewoJCQkJCQlpZiAoIG5UZHNbaV0uY2xhc3NOYW1lLmluZGV4T2Yoc0NsYXNzKyIxIikgIT0gLTEgKQoJCQkJCQl7CgkJCQkJCQlmb3IgKCBqPTAsIGpMZW49KG5UZHMubGVuZ3RoL2lDb2x1bW5zKSA7IGo8akxlbiA7IGorKyApCgkJCQkJCQl7CgkJCQkJCQkJblRkc1soaUNvbHVtbnMqaikraV0uY2xhc3NOYW1lID0gCgkJCQkJCQkJCSQudHJpbSggblRkc1soaUNvbHVtbnMqaikraV0uY2xhc3NOYW1lLnJlcGxhY2UoIHNDbGFzcysiMSIsICIiICkgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlIGlmICggblRkc1tpXS5jbGFzc05hbWUuaW5kZXhPZihzQ2xhc3MrIjIiKSAhPSAtMSApCgkJCQkJCXsKCQkJCQkJCWZvciAoIGo9MCwgakxlbj0oblRkcy5sZW5ndGgvaUNvbHVtbnMpIDsgajxqTGVuIDsgaisrICkKCQkJCQkJCXsKCQkJCQkJCQluVGRzWyhpQ29sdW1ucypqKStpXS5jbGFzc05hbWUgPSAKCQkJCQkJCQkJJC50cmltKCBuVGRzWyhpQ29sdW1ucypqKStpXS5jbGFzc05hbWUucmVwbGFjZSggc0NsYXNzKyIyIiwgIiIgKSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBuVGRzW2ldLmNsYXNzTmFtZS5pbmRleE9mKHNDbGFzcysiMyIpICE9IC0xICkKCQkJCQkJewoJCQkJCQkJZm9yICggaj0wLCBqTGVuPShuVGRzLmxlbmd0aC9pQ29sdW1ucykgOyBqPGpMZW4gOyBqKysgKQoJCQkJCQkJewoJCQkJCQkJCW5UZHNbKGlDb2x1bW5zKmopK2ldLmNsYXNzTmFtZSA9IAoJCQkJCQkJCQkkLnRyaW0oIG5UZHNbKGlDb2x1bW5zKmopK2ldLmNsYXNzTmFtZS5yZXBsYWNlKCAiICIrc0NsYXNzKyIzIiwgIiIgKSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBBZGQgdGhlIG5ldyBjbGFzc2VzIHRvIHRoZSB0YWJsZSAqLwoJCQkJdmFyIGlDbGFzcyA9IDEsIGlUYXJnZXRDb2w7CgkJCQlmb3IgKCBpPTAgOyBpPGFhU29ydC5sZW5ndGggOyBpKysgKQoJCQkJewoJCQkJCWlUYXJnZXRDb2wgPSBwYXJzZUludCggYWFTb3J0W2ldWzBdLCAxMCApOwoJCQkJCWZvciAoIGo9MCwgakxlbj0oblRkcy5sZW5ndGgvaUNvbHVtbnMpIDsgajxqTGVuIDsgaisrICkKCQkJCQl7CgkJCQkJCW5UZHNbKGlDb2x1bW5zKmopK2lUYXJnZXRDb2xdLmNsYXNzTmFtZSArPSAiICIrc0NsYXNzK2lDbGFzczsKCQkJCQl9CgkJCQkJCgkJCQkJaWYgKCBpQ2xhc3MgPCAzICkKCQkJCQl7CgkJCQkJCWlDbGFzcysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJCSAqIFNlY3Rpb24gLSBGZWF0dXJlOiBQYWdpbmF0aW9uLiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgcGFnaW5nIGxvZ2ljIGlzIGRvbmUgaW4gCgkJICogX29FeHQub1BhZ2luYXRpb24KCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlCgkJICogUHVycG9zZTogIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciBkZWZhdWx0IHBhZ2luYXRpb24KCQkgKiBSZXR1cm5zOiAgbm9kZQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlICggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkluZmluaXRlICkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCXZhciBuUGFnaW5hdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQluUGFnaW5hdGUuY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNQYWdpbmcrb1NldHRpbmdzLnNQYWdpbmF0aW9uVHlwZTsKCQkJCgkJCV9vRXh0Lm9QYWdpbmF0aW9uWyBvU2V0dGluZ3Muc1BhZ2luYXRpb25UeXBlIF0uZm5Jbml0KCBvU2V0dGluZ3MsIG5QYWdpbmF0ZSwgCgkJCQlmdW5jdGlvbiggb1NldHRpbmdzICkgewoJCQkJCV9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICk7CgkJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCQl9CgkJCSk7CgkJCQoJCQkvKiBBZGQgYSBkcmF3IGNhbGxiYWNrIGZvciB0aGUgcGFnaW5hdGlvbiBvbiBmaXJzdCBpbnN0YW5jZSwgdG8gdXBkYXRlIHRoZSBwYWdpbmcgZGlzcGxheSAqLwoJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYWFuRmVhdHVyZXMucCA9PSAidW5kZWZpbmVkIiApCgkJCXsKCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJImZuIjogZnVuY3Rpb24oIG9TZXR0aW5ncyApIHsKCQkJCQkJX29FeHQub1BhZ2luYXRpb25bIG9TZXR0aW5ncy5zUGFnaW5hdGlvblR5cGUgXS5mblVwZGF0ZSggb1NldHRpbmdzLCBmdW5jdGlvbiggb1NldHRpbmdzICkgewoJCQkJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCQkJCV9mbkRyYXcoIG9TZXR0aW5ncyApOwoJCQkJCQl9ICk7CgkJCQkJfSwKCQkJCQkic05hbWUiOiAicGFnaW5hdGlvbiIKCQkJCX0gKTsKCQkJfQoJCQlyZXR1cm4gblBhZ2luYXRlOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5QYWdlQ2hhbmdlCgkJICogUHVycG9zZTogIEFsdGVyIHRoZSBkaXNwbGF5IHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgcGFnZQoJCSAqIFJldHVybnM6ICBib29sOnRydWUgLSBwYWdlIGhhcyBjaGFuZ2VkLCBmYWxzZSAtIG5vIGNoYW5nZSAobm8gZWZmZWN0KSBlZyAnZmlyc3QnIG9uIHBhZ2UgMQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNBY3Rpb24gLSBwYWdpbmcgYWN0aW9uIHRvIHRha2U6ICJmaXJzdCIsICJwcmV2aW91cyIsICJuZXh0IiBvciAibGFzdCIKCQkgKi8KCQlmdW5jdGlvbiBfZm5QYWdlQ2hhbmdlICggb1NldHRpbmdzLCBzQWN0aW9uICkKCQl7CgkJCXZhciBpT2xkU3RhcnQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQ7CgkJCQoJCQlpZiAoIHNBY3Rpb24gPT0gImZpcnN0IiApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IDA7CgkJCX0KCQkJZWxzZSBpZiAoIHNBY3Rpb24gPT0gInByZXZpb3VzIiApCgkJCXsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg+PTAgPwoJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCAtIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOgoJCQkJCTA7CgkJCQkKCQkJCS8qIENvcnJlY3QgZm9yIHVuZGVycnVuICovCgkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA8IDAgKQoJCQkJewoJCQkJICBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCBzQWN0aW9uID09ICJuZXh0IiApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA+PSAwICkKCQkJCXsKCQkJCQkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBvdmVyIHJ1bm5pbmcgdGhlIGRpc3BsYXkgYXJyYXkgKi8KCQkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggPCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArPSBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCBzQWN0aW9uID09ICJsYXN0IiApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA+PSAwICkKCQkJCXsKCQkJCQl2YXIgaVBhZ2VzID0gcGFyc2VJbnQoIChvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLTEpIC8gb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCwgMTAgKSArIDE7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gKGlQYWdlcy0xKSAqIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCAiVW5rbm93biBwYWdpbmcgYWN0aW9uOiAiK3NBY3Rpb24gKTsKCQkJfQoJCQkKCQkJcmV0dXJuIGlPbGRTdGFydCAhPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQ7CgkJfQoJCQoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IEhUTUwgaW5mbwoJCSAqLwoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkZlYXR1cmVIdG1sSW5mbwoJCSAqIFB1cnBvc2U6ICBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdGhlIGluZm8gZGlzcGxheQoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sSW5mbyAoIG9TZXR0aW5ncyApCgkJewoJCQl2YXIgbkluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCQluSW5mby5jbGFzc05hbWUgPSBvU2V0dGluZ3Mub0NsYXNzZXMuc0luZm87CgkJCQoJCQkvKiBBY3Rpb25zIHRoYXQgYXJlIHRvIGJlIHRha2VuIG9uY2Ugb25seSBmb3IgdGhpcyBmZWF0dXJlICovCgkJCWlmICggdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5pID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJLyogQWRkIGRyYXcgY2FsbGJhY2sgKi8KCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJImZuIjogX2ZuVXBkYXRlSW5mbywKCQkJCQkic05hbWUiOiAiaW5mb3JtYXRpb24iCgkJCQl9ICk7CgkJCQkKCQkJCS8qIEFkZCBpZCAqLwoJCQkJaWYgKCBvU2V0dGluZ3Muc1RhYmxlSWQgIT09ICcnICkKCQkJCXsKCQkJCQluSW5mby5zZXRBdHRyaWJ1dGUoICdpZCcsIG9TZXR0aW5ncy5zVGFibGVJZCsnX2luZm8nICk7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBuSW5mbzsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuVXBkYXRlSW5mbwoJCSAqIFB1cnBvc2U6ICBVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGluIHRoZSBkaXNwbGF5CgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuVXBkYXRlSW5mbyAoIG9TZXR0aW5ncyApCgkJewoJCQkvKiBTaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZSAqLwoJCQlpZiAoICFvU2V0dGluZ3Mub0ZlYXR1cmVzLmJJbmZvIHx8IG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5pLmxlbmd0aCA9PT0gMCApCgkJCXsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJdmFyCgkJCQlpU3RhcnQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQrMSwgaUVuZCA9IG9TZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJCWlNYXggPSBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSwgaVRvdGFsID0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSwKCQkJCXNTdGFydCA9IG9TZXR0aW5ncy5mbkZvcm1hdE51bWJlciggaVN0YXJ0ICksIHNFbmQgPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIGlFbmQgKSwKCQkJCXNNYXggPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIGlNYXggKSwgc1RvdGFsID0gb1NldHRpbmdzLmZuRm9ybWF0TnVtYmVyKCBpVG90YWwgKSwKCQkJCXNPdXQ7CgkJCQoJCQkvKiBXaGVuIGluZmluaXRlIHNjcm9sbGluZywgd2UgYXJlIGFsd2F5cyBzdGFydGluZyBhdCAxLiBfaURpc3BsYXlTdGFydCBpcyB1c2VkIG9ubHkKCQkJICogaW50ZXJuYWxseQoJCQkgKi8KCQkJaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5iSW5maW5pdGUgKQoJCQl7CgkJCQlzU3RhcnQgPSBvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIoIDEgKTsKCQkJfQoJCQkKCQkJaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09PSAwICYmIAoJCQkJICAgb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSA9PSBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSApCgkJCXsKCQkJCS8qIEVtcHR5IHJlY29yZCBzZXQgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvRW1wdHkrIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09PSAwICkKCQkJewoJCQkJLyogUm1wdHkgcmVjb3JkIHNldCBhZnRlciBmaWx0ZXJpbmcgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvRW1wdHkgKycgJysgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb0ZpbHRlcmVkLnJlcGxhY2UoJ19NQVhfJywgc01heCkrCgkJCQkJCW9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID09IG9TZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpICkKCQkJewoJCQkJLyogTm9ybWFsIHJlY29yZCBzZXQgKi8KCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLnNJbmZvLgoJCQkJCQlyZXBsYWNlKCdfU1RBUlRfJywgc1N0YXJ0KS4KCQkJCQkJcmVwbGFjZSgnX0VORF8nLCAgIHNFbmQpLgoJCQkJCQlyZXBsYWNlKCdfVE9UQUxfJywgc1RvdGFsKSsgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb1Bvc3RGaXg7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBSZWNvcmQgc2V0IGFmdGVyIGZpbHRlcmluZyAqLwoJCQkJc091dCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm8uCgkJCQkJCXJlcGxhY2UoJ19TVEFSVF8nLCBzU3RhcnQpLgoJCQkJCQlyZXBsYWNlKCdfRU5EXycsICAgc0VuZCkuCgkJCQkJCXJlcGxhY2UoJ19UT1RBTF8nLCBzVG90YWwpICsnICcrIAoJCQkJCW9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0luZm9GaWx0ZXJlZC5yZXBsYWNlKCdfTUFYXycsIAoJCQkJCQlvU2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIob1NldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCkpKSsgCgkJCQkJb1NldHRpbmdzLm9MYW5ndWFnZS5zSW5mb1Bvc3RGaXg7CgkJCX0KCQkJCgkJCWlmICggb1NldHRpbmdzLm9MYW5ndWFnZS5mbkluZm9DYWxsYmFjayAhPT0gbnVsbCApCgkJCXsKCQkJCXNPdXQgPSBvU2V0dGluZ3Mub0xhbmd1YWdlLmZuSW5mb0NhbGxiYWNrKCBvU2V0dGluZ3MsIGlTdGFydCwgaUVuZCwgaU1heCwgaVRvdGFsLCBzT3V0ICk7CgkJCX0KCQkJCgkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmk7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49bi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkkKG5baV0pLmh0bWwoIHNPdXQgKTsKCQkJfQoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IExlbmd0aCBjaGFuZ2UKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5GZWF0dXJlSHRtbExlbmd0aAoJCSAqIFB1cnBvc2U6ICBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdXNlciBkaXNwbGF5IGxlbmd0aCBjaGFuZ2luZwoJCSAqIFJldHVybnM6ICBub2RlCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sTGVuZ3RoICggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuYkluZmluaXRlICkKCQkJewoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQkJCgkJCS8qIFRoaXMgY2FuIGJlIG92ZXJydWxlZCBieSBub3QgdXNpbmcgdGhlIF9NRU5VXyB2YXIvbWFjcm8gaW4gdGhlIGxhbmd1YWdlIHZhcmlhYmxlICovCgkJCXZhciBzTmFtZSA9IChvU2V0dGluZ3Muc1RhYmxlSWQgPT09ICIiKSA/ICIiIDogJ25hbWU9Iicrb1NldHRpbmdzLnNUYWJsZUlkKydfbGVuZ3RoIic7CgkJCXZhciBzU3RkTWVudSA9ICc8c2VsZWN0IHNpemU9IjEiICcrc05hbWUrJz4nOwoJCQl2YXIgaSwgaUxlbjsKCQkJCgkJCWlmICggb1NldHRpbmdzLmFMZW5ndGhNZW51Lmxlbmd0aCA9PSAyICYmIHR5cGVvZiBvU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF0gPT0gJ29iamVjdCcgJiYgCgkJCQkJdHlwZW9mIG9TZXR0aW5ncy5hTGVuZ3RoTWVudVsxXSA9PSAnb2JqZWN0JyApCgkJCXsKCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF0ubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlzU3RkTWVudSArPSAnPG9wdGlvbiB2YWx1ZT0iJytvU2V0dGluZ3MuYUxlbmd0aE1lbnVbMF1baV0rJyI+JysKCQkJCQkJb1NldHRpbmdzLmFMZW5ndGhNZW51WzFdW2ldKyc8L29wdGlvbj4nOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hTGVuZ3RoTWVudS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCXNTdGRNZW51ICs9ICc8b3B0aW9uIHZhbHVlPSInK29TZXR0aW5ncy5hTGVuZ3RoTWVudVtpXSsnIj4nKwoJCQkJCQlvU2V0dGluZ3MuYUxlbmd0aE1lbnVbaV0rJzwvb3B0aW9uPic7CgkJCQl9CgkJCX0KCQkJc1N0ZE1lbnUgKz0gJzwvc2VsZWN0Pic7CgkJCQoJCQl2YXIgbkxlbmd0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7CgkJCWlmICggb1NldHRpbmdzLnNUYWJsZUlkICE9PSAnJyAmJiB0eXBlb2Ygb1NldHRpbmdzLmFhbkZlYXR1cmVzLmwgPT0gInVuZGVmaW5lZCIgKQoJCQl7CgkJCQluTGVuZ3RoLnNldEF0dHJpYnV0ZSggJ2lkJywgb1NldHRpbmdzLnNUYWJsZUlkKydfbGVuZ3RoJyApOwoJCQl9CgkJCW5MZW5ndGguY2xhc3NOYW1lID0gb1NldHRpbmdzLm9DbGFzc2VzLnNMZW5ndGg7CgkJCW5MZW5ndGguaW5uZXJIVE1MID0gJzxsYWJlbD4nK29TZXR0aW5ncy5vTGFuZ3VhZ2Uuc0xlbmd0aE1lbnUucmVwbGFjZSggJ19NRU5VXycsIHNTdGRNZW51ICkrJzwvbGFiZWw+JzsKCQkJCgkJCS8qCgkJCSAqIFNldCB0aGUgbGVuZ3RoIHRvIHRoZSBjdXJyZW50IGRpc3BsYXkgbGVuZ3RoIC0gdGhhbmtzIHRvIEFuZHJlYSBQYXZsb3ZpYyBmb3IgdGhpcyBmaXgsCgkJCSAqIGFuZCBTdGVmYW4gU2tvcG5payBmb3IgZml4aW5nIHRoZSBmaXghCgkJCSAqLwoJCQkkKCdzZWxlY3Qgb3B0aW9uW3ZhbHVlPSInK29TZXR0aW5ncy5faURpc3BsYXlMZW5ndGgrJyJdJyxuTGVuZ3RoKS5hdHRyKCJzZWxlY3RlZCIsdHJ1ZSk7CgkJCQoJCQkkKCdzZWxlY3QnLCBuTGVuZ3RoKS5iaW5kKCAnY2hhbmdlLkRUJywgZnVuY3Rpb24oZSkgewoJCQkJdmFyIGlWYWwgPSAkKHRoaXMpLnZhbCgpOwoJCQkJCgkJCQkvKiBVcGRhdGUgYWxsIG90aGVyIGxlbmd0aCBvcHRpb25zIGZvciB0aGUgbmV3IGRpc3BsYXkgKi8KCQkJCXZhciBuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLmw7CgkJCQlmb3IgKCBpPTAsIGlMZW49bi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggbltpXSAhPSB0aGlzLnBhcmVudE5vZGUgKQoJCQkJCXsKCQkJCQkJJCgnc2VsZWN0JywgbltpXSkudmFsKCBpVmFsICk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBSZWRyYXcgdGhlIHRhYmxlICovCgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID0gcGFyc2VJbnQoaVZhbCwgMTApOwoJCQkJX2ZuQ2FsY3VsYXRlRW5kKCBvU2V0dGluZ3MgKTsKCQkJCQoJCQkJLyogSWYgd2UgaGF2ZSBzcGFjZSB0byBzaG93IGV4dHJhIHJvd3MgKGJhY2tpbmcgdXAgZnJvbSB0aGUgZW5kIHBvaW50IC0gdGhlbiBkbyBzbyAqLwoJCQkJaWYgKCBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCkgPT0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gb1NldHRpbmdzLmZuRGlzcGxheUVuZCgpIC0gb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aDsKCQkJCQlpZiAoIG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA8IDAgKQoJCQkJCXsKCQkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJCQl9CgkJCQl9CgkJCQkKCQkJCWlmICggb1NldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA9PSAtMSApCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gMDsKCQkJCX0KCQkJCQoJCQkJX2ZuRHJhdyggb1NldHRpbmdzICk7CgkJCX0gKTsKCQkJCgkJCXJldHVybiBuTGVuZ3RoOwoJCX0KCQkKCQkKCQkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEZlYXR1cmU6IFByb2Nlc3NpbmcgaW5jaWRhdG9yCgkJICovCgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nCgkJICogUHVycG9zZTogIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciB0aGUgcHJvY2Vzc2luZyBub2RlCgkJICogUmV0dXJuczogIG5vZGUKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBuUHJvY2Vzc2luZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnICk7CgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5zVGFibGVJZCAhPT0gJycgJiYgdHlwZW9mIG9TZXR0aW5ncy5hYW5GZWF0dXJlcy5yID09ICJ1bmRlZmluZWQiICkKCQkJewoJCQkJblByb2Nlc3Npbmcuc2V0QXR0cmlidXRlKCAnaWQnLCBvU2V0dGluZ3Muc1RhYmxlSWQrJ19wcm9jZXNzaW5nJyApOwoJCQl9CgkJCW5Qcm9jZXNzaW5nLmlubmVySFRNTCA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc1Byb2Nlc3Npbmc7CgkJCW5Qcm9jZXNzaW5nLmNsYXNzTmFtZSA9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zUHJvY2Vzc2luZzsKCQkJb1NldHRpbmdzLm5UYWJsZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggblByb2Nlc3NpbmcsIG9TZXR0aW5ncy5uVGFibGUgKTsKCQkJCgkJCXJldHVybiBuUHJvY2Vzc2luZzsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkKCQkgKiBQdXJwb3NlOiAgRGlzcGxheSBvciBoaWRlIHRoZSBwcm9jZXNzaW5nIGluZGljYXRvcgoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBib29sOgoJCSAqICAgdHJ1ZSAtIHNob3cgdGhlIHByb2Nlc3NpbmcgaW5kaWNhdG9yCgkJICogICBmYWxzZSAtIGRvbid0IHNob3cKCQkgKi8KCQlmdW5jdGlvbiBfZm5Qcm9jZXNzaW5nRGlzcGxheSAoIG9TZXR0aW5ncywgYlNob3cgKQoJCXsKCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkKCQkJewoJCQkJdmFyIGFuID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzLnI7CgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFuLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJYW5baV0uc3R5bGUudmlzaWJpbGl0eSA9IGJTaG93ID8gInZpc2libGUiIDogImhpZGRlbiI7CgkJCQl9CgkJCX0KCQl9CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gU3VwcG9ydCBmdW5jdGlvbnMKCQkgKi8KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleAoJCSAqIFB1cnBvc2U6ICBDb3ZlcnQgdGhlIGluZGV4IG9mIGEgdmlzaWJsZSBjb2x1bW4gdG8gdGhlIGluZGV4IGluIHRoZSBkYXRhIGFycmF5ICh0YWtlIGFjY291bnQKCQkgKiAgIG9mIGhpZGRlbiBjb2x1bW5zKQoJCSAqIFJldHVybnM6ICBpbnQ6aSAtIHRoZSBkYXRhIGluZGV4CgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mblZpc2libGVUb0NvbHVtbkluZGV4KCBvU2V0dGluZ3MsIGlNYXRjaCApCgkJewoJCQl2YXIgaUNvbHVtbiA9IC0xOwoJCQkKCQkJZm9yICggdmFyIGk9MCA7IGk8b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgPT09IHRydWUgKQoJCQkJewoJCQkJCWlDb2x1bW4rKzsKCQkJCX0KCQkJCQoJCQkJaWYgKCBpQ29sdW1uID09IGlNYXRjaCApCgkJCQl7CgkJCQkJcmV0dXJuIGk7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Db2x1bW5JbmRleFRvVmlzaWJsZQoJCSAqIFB1cnBvc2U6ICBDb3ZlcnQgdGhlIGluZGV4IG9mIGFuIGluZGV4IGluIHRoZSBkYXRhIGFycmF5IGFuZCBjb252ZXJ0IGl0IHRvIHRoZSB2aXNpYmxlCgkJICogICBjb2x1bW4gaW5kZXggKHRha2UgYWNjb3VudCBvZiBoaWRkZW4gY29sdW1ucykKCQkgKiBSZXR1cm5zOiAgaW50OmkgLSB0aGUgZGF0YSBpbmRleAoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5Db2x1bW5JbmRleFRvVmlzaWJsZSggb1NldHRpbmdzLCBpTWF0Y2ggKQoJCXsKCQkJdmFyIGlWaXNpYmxlID0gLTE7CgkJCWZvciAoIHZhciBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlID09PSB0cnVlICkKCQkJCXsKCQkJCQlpVmlzaWJsZSsrOwoJCQkJfQoJCQkJCgkJCQlpZiAoIGkgPT0gaU1hdGNoICkKCQkJCXsKCQkJCQlyZXR1cm4gb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSA9PT0gdHJ1ZSA/IGlWaXNpYmxlIDogbnVsbDsKCQkJCX0KCQkJfQoJCQkKCQkJcmV0dXJuIG51bGw7CgkJfQoJCQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbk5vZGVUb0RhdGFJbmRleAoJCSAqIFB1cnBvc2U6ICBUYWtlIGEgVFIgZWxlbWVudCBhbmQgY29udmVydCBpdCB0byBhbiBpbmRleCBpbiBhb0RhdGEKCQkgKiBSZXR1cm5zOiAgaW50OmkgLSBpbmRleCBpZiBmb3VuZCwgbnVsbCBpZiBub3QKCQkgKiBJbnB1dHM6ICAgb2JqZWN0OnMgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBub2RlOm4gLSB0aGUgVFIgZWxlbWVudCB0byBmaW5kCgkJICovCgkJZnVuY3Rpb24gX2ZuTm9kZVRvRGF0YUluZGV4KCBzLCBuICkKCQl7CgkJCXZhciBpLCBpTGVuOwoJCQkKCQkJLyogT3B0aW1pc2F0aW9uIC0gc2VlIGlmIHRoZSBub2RlcyB3aGljaCBhcmUgY3VycmVudGx5IHZpc2libGUgbWF0Y2gsIHNpbmNlIHRoYXQgaXMKCQkJICogdGhlIG1vc3QgbGlrZWx5IG5vZGUgdG8gYmUgYXNrZWQgZm9yIChhIHNlbGVjdG9yIG9yIGV2ZW50IGZvciBleGFtcGxlKQoJCQkgKi8KCQkJZm9yICggaT1zLl9pRGlzcGxheVN0YXJ0LCBpTGVuPXMuX2lEaXNwbGF5RW5kIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaWYgKCBzLmFvRGF0YVsgcy5haURpc3BsYXlbaV0gXS5uVHIgPT0gbiApCgkJCQl7CgkJCQkJcmV0dXJuIHMuYWlEaXNwbGF5W2ldOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBPdGhlcndpc2Ugd2UgYXJlIGluIGZvciBhIHNsb2cgdGhyb3VnaCB0aGUgd2hvbGUgZGF0YSBjYWNoZSAqLwoJCQlmb3IgKCBpPTAsIGlMZW49cy5hb0RhdGEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaWYgKCBzLmFvRGF0YVtpXS5uVHIgPT0gbiApCgkJCQl7CgkJCQkJcmV0dXJuIGk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblZpc2JsZUNvbHVtbnMKCQkgKiBQdXJwb3NlOiAgR2V0IHRoZSBudW1iZXIgb2YgdmlzaWJsZSBjb2x1bW5zCgkJICogUmV0dXJuczogIGludDppIC0gdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5WaXNibGVDb2x1bW5zKCBvUyApCgkJewoJCQl2YXIgaVZpcyA9IDA7CgkJCWZvciAoIHZhciBpPTAgOyBpPG9TLmFvQ29sdW1ucy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpZiAoIG9TLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSA9PT0gdHJ1ZSApCgkJCQl7CgkJCQkJaVZpcysrOwoJCQkJfQoJCQl9CgkJCXJldHVybiBpVmlzOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5DYWxjdWxhdGVFbmQKCQkgKiBQdXJwb3NlOiAgUmNhbGN1bGF0ZSB0aGUgZW5kIHBvaW50IGJhc2VkIG9uIHRoZSBzdGFydCBwb2ludAoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNhbGN1bGF0ZUVuZCggb1NldHRpbmdzICkKCQl7CgkJCWlmICggb1NldHRpbmdzLm9GZWF0dXJlcy5iUGFnaW5hdGUgPT09IGZhbHNlICkKCQkJewoJCQkJb1NldHRpbmdzLl9pRGlzcGxheUVuZCA9IG9TZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogU2V0IHRoZSBlbmQgcG9pbnQgb2YgdGhlIGRpc3BsYXkgLSBiYXNlZCBvbiBob3cgbWFueSBlbGVtZW50cyB0aGVyZSBhcmUKCQkJCSAqIHN0aWxsIHRvIGRpc3BsYXkKCQkJCSAqLwoJCQkJaWYgKCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgKyBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID4gb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggfHwKCQkJCQkgICBvU2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID09IC0xICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5RW5kID0gb1NldHRpbmdzLmFpRGlzcGxheS5sZW5ndGg7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJb1NldHRpbmdzLl9pRGlzcGxheUVuZCA9IG9TZXR0aW5ncy5faURpc3BsYXlTdGFydCArIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGg7CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ29udmVydFRvV2lkdGgKCQkgKiBQdXJwb3NlOiAgQ29udmVydCBhIENTUyB1bml0IHdpZHRoIHRvIHBpeGVscyAoZS5nLiAyZW0pCgkJICogUmV0dXJuczogIGludDppV2lkdGggLSB3aWR0aCBpbiBwaXhlbHMKCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNXaWR0aCAtIHdpZHRoIHRvIGJlIGNvbnZlcnRlZAoJCSAqICAgICAgICAgICBub2RlOm5QYXJlbnQgLSBwYXJlbnQgdG8gZ2V0IHRoZSB3aXRoIGZvciAocmVxdWlyZWQgZm9yCgkJICogICAgICAgICAgICAgcmVsYXRpdmUgd2lkdGhzKSAtIG9wdGlvbmFsCgkJICovCgkJZnVuY3Rpb24gX2ZuQ29udmVydFRvV2lkdGggKCBzV2lkdGgsIG5QYXJlbnQgKQoJCXsKCQkJaWYgKCAhc1dpZHRoIHx8IHNXaWR0aCA9PT0gbnVsbCB8fCBzV2lkdGggPT09ICcnICkKCQkJewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJCgkJCWlmICggdHlwZW9mIG5QYXJlbnQgPT0gInVuZGVmaW5lZCIgKQoJCQl7CgkJCQluUGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTsKCQkJfQoJCQkKCQkJdmFyIGlXaWR0aDsKCQkJdmFyIG5UbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwoJCQluVG1wLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIHNXaWR0aCApOwoJCQkKCQkJblBhcmVudC5hcHBlbmRDaGlsZCggblRtcCApOwoJCQlpV2lkdGggPSBuVG1wLm9mZnNldFdpZHRoOwoJCQluUGFyZW50LnJlbW92ZUNoaWxkKCBuVG1wICk7CgkJCQoJCQlyZXR1cm4gKCBpV2lkdGggKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzCgkJICogUHVycG9zZTogIENhbGN1bGF0ZSB0aGUgd2lkdGggb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBpVGFibGVXaWR0aCA9IG9TZXR0aW5ncy5uVGFibGUub2Zmc2V0V2lkdGg7CgkJCXZhciBpVXNlcklucHV0cyA9IDA7CgkJCXZhciBpVG1wV2lkdGg7CgkJCXZhciBpVmlzaWJsZUNvbHVtbnMgPSAwOwoJCQl2YXIgaUNvbHVtcyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCQl2YXIgaSwgaUluZGV4LCBpQ29ycmVjdG9yLCBpV2lkdGg7CgkJCXZhciBvSGVhZGVycyA9ICQoJ3RoJywgb1NldHRpbmdzLm5USGVhZCk7CgkJCQoJCQkvKiBDb252ZXJ0IGFueSB1c2VyIGlucHV0IHNpemVzIGludG8gcGl4ZWwgc2l6ZXMgKi8KCQkJZm9yICggaT0wIDsgaTxpQ29sdW1zIDsgaSsrICkKCQkJewoJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkKCQkJCXsKCQkJCQlpVmlzaWJsZUNvbHVtbnMrKzsKCQkJCQkKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc1dpZHRoICE9PSBudWxsICkKCQkJCQl7CgkJCQkJCWlUbXBXaWR0aCA9IF9mbkNvbnZlcnRUb1dpZHRoKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNXaWR0aE9yaWcsIAoJCQkJCQkJb1NldHRpbmdzLm5UYWJsZS5wYXJlbnROb2RlICk7CgkJCQkJCWlmICggaVRtcFdpZHRoICE9PSBudWxsICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaVRtcFdpZHRoICk7CgkJCQkJCX0KCQkJCQkJCQoJCQkJCQlpVXNlcklucHV0cysrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJLyogSWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBET00gZXF1YWxzIHRoZSBudW1iZXIgdGhhdCB3ZSBoYXZlIHRvIHByb2Nlc3MgaW4gCgkJCSAqIERhdGFUYWJsZXMsIHRoZW4gd2UgY2FuIHVzZSB0aGUgb2Zmc2V0cyB0aGF0IGFyZSBjcmVhdGVkIGJ5IHRoZSB3ZWItYnJvd3Nlci4gTm8gY3VzdG9tIAoJCQkgKiBzaXplcyBjYW4gYmUgc2V0IGluIG9yZGVyIGZvciB0aGlzIHRvIGhhcHBlbiwgbm9yIHNjcm9sbGluZyB1c2VkCgkJCSAqLwoJCQlpZiAoIGlDb2x1bXMgPT0gb0hlYWRlcnMubGVuZ3RoICYmIGlVc2VySW5wdXRzID09PSAwICYmIGlWaXNpYmxlQ29sdW1ucyA9PSBpQ29sdW1zICYmCgkJCQlvU2V0dGluZ3Mub1Njcm9sbC5zWCA9PT0gIiIgJiYgb1NldHRpbmdzLm9TY3JvbGwuc1kgPT09ICIiICkKCQkJewoJCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCQl7CgkJCQkJaVRtcFdpZHRoID0gJChvSGVhZGVyc1tpXSkud2lkdGgoKTsKCQkJCQlpZiAoIGlUbXBXaWR0aCAhPT0gbnVsbCApCgkJCQkJewoJCQkJCQlvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNXaWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpVG1wV2lkdGggKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBPdGhlcndpc2Ugd2UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBjYWxjdWxhdGlvbnMgdG8gZ2V0IHRoZSB3aWR0aCBvZiBlYWNoIGNvbHVtbi4KCQkJCSAqIENvbnN0cnVjdCBhIDEgcm93IHRhYmxlIHdpdGggdGhlIHdpZGVzdCBub2RlIGluIHRoZSBkYXRhLCBhbmQgYW55IHVzZXIgZGVmaW5lZCB3aWR0aHMsCgkJCQkgKiB0aGVuIGluc2VydCBpdCBpbnRvIHRoZSBET00gYW5kIGFsbG93IHRoZSBicm93c2VyIHRvIGRvIGFsbCB0aGUgaGFyZCB3b3JrIG9mCgkJCQkgKiBjYWxjdWxhdGluZyB0YWJsZSB3aWR0aHMuCgkJCQkgKi8KCQkJCXZhcgoJCQkJCW5DYWxjVG1wID0gb1NldHRpbmdzLm5UYWJsZS5jbG9uZU5vZGUoIGZhbHNlICksCgkJCQkJblRoZWFkQ2xvbmUgPSBvU2V0dGluZ3MublRIZWFkLmNsb25lTm9kZSh0cnVlKSwKCQkJCQluQm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICd0Ym9keScgKSwKCQkJCQluVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndHInICksCgkJCQkJbkRpdlNpemluZzsKCQkJCQoJCQkJbkNhbGNUbXAucmVtb3ZlQXR0cmlidXRlKCAiaWQiICk7CgkJCQluQ2FsY1RtcC5hcHBlbmRDaGlsZCggblRoZWFkQ2xvbmUgKTsKCQkJCWlmICggb1NldHRpbmdzLm5URm9vdCAhPT0gbnVsbCApCgkJCQl7CgkJCQkJbkNhbGNUbXAuYXBwZW5kQ2hpbGQoIG9TZXR0aW5ncy5uVEZvb3QuY2xvbmVOb2RlKHRydWUpICk7CgkJCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuKSB7CgkJCQkJCW4uc3R5bGUud2lkdGggPSAiIjsKCQkJCQl9LCBuQ2FsY1RtcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKSApOwoJCQkJfQoJCQkJCgkJCQluQ2FsY1RtcC5hcHBlbmRDaGlsZCggbkJvZHkgKTsKCQkJCW5Cb2R5LmFwcGVuZENoaWxkKCBuVHIgKTsKCQkJCQoJCQkJLyogUmVtb3ZlIGFueSBzaXppbmcgdGhhdCB3YXMgcHJldmlvdXNseSBhcHBsaWVkIGJ5IHRoZSBzdHlsZXMgKi8KCQkJCXZhciBqcUNvbFNpemluZyA9ICQoJ3RoZWFkIHRoJywgbkNhbGNUbXApOwoJCQkJaWYgKCBqcUNvbFNpemluZy5sZW5ndGggPT09IDAgKQoJCQkJewoJCQkJCWpxQ29sU2l6aW5nID0gJCgndGJvZHkgdHI6ZXEoMCk+dGQnLCBuQ2FsY1RtcCk7CgkJCQl9CgoJCQkJLyogQXBwbHkgY3VzdG9tIHNpemluZyB0byB0aGUgY2xvbmVkIGhlYWRlciAqLwoJCQkJdmFyIG5UaHMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncywgblRoZWFkQ2xvbmUgKTsKCQkJCWlDb3JyZWN0b3IgPSAwOwoJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1zIDsgaSsrICkKCQkJCXsKCQkJCQl2YXIgb0NvbHVtbiA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV07CgkJCQkJaWYgKCBvQ29sdW1uLmJWaXNpYmxlICYmIG9Db2x1bW4uc1dpZHRoT3JpZyAhPT0gbnVsbCAmJiBvQ29sdW1uLnNXaWR0aE9yaWcgIT09ICIiICkKCQkJCQl7CgkJCQkJCW5UaHNbaS1pQ29ycmVjdG9yXS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBvQ29sdW1uLnNXaWR0aE9yaWcgKTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIG9Db2x1bW4uYlZpc2libGUgKQoJCQkJCXsKCQkJCQkJblRoc1tpLWlDb3JyZWN0b3JdLnN0eWxlLndpZHRoID0gIiI7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWlDb3JyZWN0b3IrKzsKCQkJCQl9CgkJCQl9CgoJCQkJLyogRmluZCB0aGUgYmlnZ2VzdCB0ZCBmb3IgZWFjaCBjb2x1bW4gYW5kIHB1dCBpdCBpbnRvIHRoZSB0YWJsZSAqLwoJCQkJZm9yICggaT0wIDsgaTxpQ29sdW1zIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uYlZpc2libGUgKQoJCQkJCXsKCQkJCQkJdmFyIG5UZCA9IF9mbkdldFdpZGVzdE5vZGUoIG9TZXR0aW5ncywgaSApOwoJCQkJCQlpZiAoIG5UZCAhPT0gbnVsbCApCgkJCQkJCXsKCQkJCQkJCW5UZCA9IG5UZC5jbG9uZU5vZGUodHJ1ZSk7CgkJCQkJCQlpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc0NvbnRlbnRQYWRkaW5nICE9PSAiIiApCgkJCQkJCQl7CgkJCQkJCQkJblRkLmlubmVySFRNTCArPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLnNDb250ZW50UGFkZGluZzsKCQkJCQkJCX0KCQkJCQkJCW5Uci5hcHBlbmRDaGlsZCggblRkICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkKCQkJCS8qIEJ1aWxkIHRoZSB0YWJsZSBhbmQgJ2Rpc3BsYXknIGl0ICovCgkJCQl2YXIgbldyYXBwZXIgPSBvU2V0dGluZ3MublRhYmxlLnBhcmVudE5vZGU7CgkJCQluV3JhcHBlci5hcHBlbmRDaGlsZCggbkNhbGNUbXAgKTsKCQkJCQoJCQkJLyogV2hlbiBzY3JvbGxpbmcgKFggb3IgWSkgd2Ugd2FudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSB0YWJsZSBhcyBhcHByb3ByaWF0ZS4gSG93ZXZlciwKCQkJCSAqIHdoZW4gbm90IHNjcm9sbGluZyBsZWF2ZSB0aGUgdGFibGUgd2lkdGggYXMgaXQgaXMuIFRoaXMgcmVzdWx0cyBpbiBzbGlnaHRseSBkaWZmZXJlbnQsCgkJCQkgKiBidXQgSSB0aGluayBjb3JyZWN0IGJlaGF2aW91cgoJCQkJICovCgkJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICE9PSAiIiAmJiBvU2V0dGluZ3Mub1Njcm9sbC5zWElubmVyICE9PSAiIiApCgkJCQl7CgkJCQkJbkNhbGNUbXAuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyhvU2V0dGluZ3Mub1Njcm9sbC5zWElubmVyKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgKQoJCQkJewoJCQkJCW5DYWxjVG1wLnN0eWxlLndpZHRoID0gIiI7CgkJCQkJaWYgKCAkKG5DYWxjVG1wKS53aWR0aCgpIDwgbldyYXBwZXIub2Zmc2V0V2lkdGggKQoJCQkJCXsKCQkJCQkJbkNhbGNUbXAuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggbldyYXBwZXIub2Zmc2V0V2lkdGggKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggb1NldHRpbmdzLm9TY3JvbGwuc1kgIT09ICIiICkKCQkJCXsKCQkJCQluQ2FsY1RtcC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBuV3JhcHBlci5vZmZzZXRXaWR0aCApOwoJCQkJfQoJCQkJbkNhbGNUbXAuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwoJCQkJCgkJCQkvKiBTY3JvbGxpbmcgY29uc2lkZXJhdGlvbnMgKi8KCQkJCV9mblNjcm9sbGluZ1dpZHRoQWRqdXN0KCBvU2V0dGluZ3MsIG5DYWxjVG1wICk7CgkJCQkKCQkJCS8qIFJlYWQgdGhlIHdpZHRoJ3MgY2FsY3VsYXRlZCBieSB0aGUgYnJvd3NlciBhbmQgc3RvcmUgdGhlbSBmb3IgdXNlIGJ5IHRoZSBjYWxsZXIuIFdlCgkJCQkgKiBmaXJzdCBvZiBhbGwgdHJ5IHRvIHVzZSB0aGUgZWxlbWVudHMgaW4gdGhlIGJvZHksIGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZQoJCQkJICogbm8gZWxlbWVudHMgdGhlcmUsIHVuZGVyIHdoaWNoIGNpcmN1bXN0YW5jZXMgd2UgdXNlIHRoZSBoZWFkZXIgZWxlbWVudHMKCQkJCSAqLwoJCQkJdmFyIG9Ob2RlcyA9ICQoInRib2R5IHRyOmVxKDApIiwgbkNhbGNUbXApLmNoaWxkcmVuKCk7CgkJCQlpZiAoIG9Ob2Rlcy5sZW5ndGggPT09IDAgKQoJCQkJewoJCQkJCW9Ob2RlcyA9IF9mbkdldFVuaXF1ZVRocyggb1NldHRpbmdzLCAkKCd0aGVhZCcsIG5DYWxjVG1wKVswXSApOwoJCQkJfQoKCQkJCS8qIEJyb3dzZXJzIG5lZWQgYSBiaXQgb2YgYSBoYW5kIHdoZW4gYSB3aWR0aCBpcyBhc3NpZ25lZCB0byBhbnkgY29sdW1ucyB3aGVuIAoJCQkJICogeC1zY3JvbGxpbmcgYXMgdGhleSB0ZW5kIHRvIGNvbGxhcHNlIHRoZSB0YWJsZSB0byB0aGUgbWluLXdpZHRoLCBldmVuIGlmCgkJCQkgKiB3ZSBzZW50IHRoZSBjb2x1bW4gd2lkdGhzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCB0aGUgdGFibGUgd2lkdGgKCQkJCSAqIHNob3VsZCBiZSBieSBzdW1taW5nIHRoZSB1c2VyIGdpdmVuIHZhbHVlcywgYW5kIHRoZSBhdXRvbWF0aWMgdmFsdWVzCgkJCQkgKi8KCQkJCWlmICggb1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiICkKCQkJCXsKCQkJCQl2YXIgaVRvdGFsID0gMDsKCQkJCQlpQ29ycmVjdG9yID0gMDsKCQkJCQlmb3IgKCBpPTAgOyBpPG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaSsrICkKCQkJCQl7CgkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5iVmlzaWJsZSApCgkJCQkJCXsKCQkJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGhPcmlnID09PSBudWxsICkKCQkJCQkJCXsKCQkJCQkJCQlpVG90YWwgKz0gJChvTm9kZXNbaUNvcnJlY3Rvcl0pLm91dGVyV2lkdGgoKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQlpVG90YWwgKz0gcGFyc2VJbnQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGgucmVwbGFjZSgncHgnLCcnKSwgMTApICsKCQkJCQkJCQkJKCQob05vZGVzW2lDb3JyZWN0b3JdKS5vdXRlcldpZHRoKCkgLSAkKG9Ob2Rlc1tpQ29ycmVjdG9yXSkud2lkdGgoKSk7CgkJCQkJCQl9CgkJCQkJCQlpQ29ycmVjdG9yKys7CgkJCQkJCX0KCQkJCQl9CgkJCQkKCQkJCQluQ2FsY1RtcC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpVG90YWwgKTsKCQkJCQlvU2V0dGluZ3MublRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlUb3RhbCApOwoJCQkJfQoKCQkJCWlDb3JyZWN0b3IgPSAwOwoJCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCQl7CgkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkKCQkJCQl7CgkJCQkJCWlXaWR0aCA9ICQob05vZGVzW2lDb3JyZWN0b3JdKS53aWR0aCgpOwoJCQkJCQlpZiAoIGlXaWR0aCAhPT0gbnVsbCAmJiBpV2lkdGggPiAwICkKCQkJCQkJewoJCQkJCQkJb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zV2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaVdpZHRoICk7CgkJCQkJCX0KCQkJCQkJaUNvcnJlY3RvcisrOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJb1NldHRpbmdzLm5UYWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCAkKG5DYWxjVG1wKS5vdXRlcldpZHRoKCkgKTsKCQkJCW5DYWxjVG1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5DYWxjVG1wICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU2Nyb2xsaW5nV2lkdGhBZGp1c3QKCQkgKiBQdXJwb3NlOiAgQWRqdXN0IGEgdGFibGUncyB3aWR0aCB0byB0YWtlIGFjY291bnQgb2Ygc2Nyb2xsaW5nCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIG5vZGU6biAtIHRhYmxlIG5vZGUKCQkgKi8KCQlmdW5jdGlvbiBfZm5TY3JvbGxpbmdXaWR0aEFkanVzdCAoIG9TZXR0aW5ncywgbiApCgkJewoJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYID09PSAiIiAmJiBvU2V0dGluZ3Mub1Njcm9sbC5zWSAhPT0gIiIgKQoJCQl7CgkJCQkvKiBXaGVuIHktc2Nyb2xsaW5nIG9ubHksIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsIGJhciBzbyB0aGUgdGFibGUKCQkJCSAqICsgc2Nyb2xsIGJhciB3aWxsIGZpdCBpbnRvIHRoZSBhcmVhIGF2YWlhbGJsZS4KCQkJCSAqLwoJCQkJdmFyIGlPcmlnV2lkdGggPSAkKG4pLndpZHRoKCk7CgkJCQluLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoICQobikub3V0ZXJXaWR0aCgpLW9TZXR0aW5ncy5vU2Nyb2xsLmlCYXJXaWR0aCApOwoJCQl9CgkJCWVsc2UgaWYgKCBvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgKQoJCQl7CgkJCQkvKiBXaGVuIHgtc2Nyb2xsaW5nIGJvdGggd2F5cywgZml4IHRoZSB0YWJsZSBhdCBpdCdzIGN1cnJlbnQgc2l6ZSwgd2l0aG91dCBhZGp1c3RpbmcgKi8KCQkJCW4uc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggJChuKS5vdXRlcldpZHRoKCkgKTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXRXaWRlc3ROb2RlCgkJICogUHVycG9zZTogIEdldCB0aGUgd2lkZXN0IG5vZGUKCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIG1heCBzdHJsZW5zIGZvciBlYWNoIGNvbHVtbgoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgaW50OmlDb2wgLSBjb2x1bW4gb2YgaW50ZXJlc3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRXaWRlc3ROb2RlKCBvU2V0dGluZ3MsIGlDb2wgKQoJCXsKCQkJdmFyIGlNYXhJbmRleCA9IF9mbkdldE1heExlblN0cmluZyggb1NldHRpbmdzLCBpQ29sICk7CgkJCWlmICggaU1heEluZGV4IDwgMCApCgkJCXsKCQkJCXJldHVybiBudWxsOwoJCQl9CgoJCQlpZiAoIG9TZXR0aW5ncy5hb0RhdGFbaU1heEluZGV4XS5uVHIgPT09IG51bGwgKQoJCQl7CgkJCQl2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQluLmlubmVySFRNTCA9IF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlNYXhJbmRleCwgaUNvbCwgJycgKTsKCQkJCXJldHVybiBuOwoJCQl9CgkJCXJldHVybiBfZm5HZXRUZE5vZGVzKG9TZXR0aW5ncywgaU1heEluZGV4KVtpQ29sXTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0TWF4TGVuU3RyaW5nCgkJICogUHVycG9zZTogIEdldCB0aGUgbWF4aW11bSBzdHJsZW4gZm9yIGVhY2ggZGF0YSBjb2x1bW4KCQkgKiBSZXR1cm5zOiAgc3RyaW5nOiAtIG1heCBzdHJsZW5zIGZvciBlYWNoIGNvbHVtbgoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgaW50OmlDb2wgLSBjb2x1bW4gb2YgaW50ZXJlc3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRNYXhMZW5TdHJpbmcoIG9TZXR0aW5ncywgaUNvbCApCgkJewoJCQl2YXIgaU1heCA9IC0xOwoJCQl2YXIgaU1heEluZGV4ID0gLTE7CgkJCQoJCQlmb3IgKCB2YXIgaT0wIDsgaTxvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCXZhciBzID0gX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaSwgaUNvbCwgJ2Rpc3BsYXknICkrIiI7CgkJCQlzID0gcy5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKTsKCQkJCWlmICggcy5sZW5ndGggPiBpTWF4ICkKCQkJCXsKCQkJCQlpTWF4ID0gcy5sZW5ndGg7CgkJCQkJaU1heEluZGV4ID0gaTsKCQkJCX0KCQkJfQoJCQkKCQkJcmV0dXJuIGlNYXhJbmRleDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuU3RyaW5nVG9Dc3MKCQkgKiBQdXJwb3NlOiAgQXBwZW5kIGEgQ1NTIHVuaXQgKG9ubHkgaWYgcmVxdWlyZWQpIHRvIGEgc3RyaW5nCgkJICogUmV0dXJuczogIDAgaWYgbWF0Y2gsIDEgaWYgbGVuZ3RoIGlzIGRpZmZlcmVudCwgMiBpZiBubyBtYXRjaAoJCSAqIElucHV0czogICBhcnJheTphQXJyYXkxIC0gZmlyc3QgYXJyYXkKCQkgKiAgICAgICAgICAgYXJyYXk6YUFycmF5MiAtIHNlY29uZCBhcnJheQoJCSAqLwoJCWZ1bmN0aW9uIF9mblN0cmluZ1RvQ3NzKCBzICkKCQl7CgkJCWlmICggcyA9PT0gbnVsbCApCgkJCXsKCQkJCXJldHVybiAiMHB4IjsKCQkJfQoJCQkKCQkJaWYgKCB0eXBlb2YgcyA9PSAnbnVtYmVyJyApCgkJCXsKCQkJCWlmICggcyA8IDAgKQoJCQkJewoJCQkJCXJldHVybiAiMHB4IjsKCQkJCX0KCQkJCXJldHVybiBzKyJweCI7CgkJCX0KCQkJCgkJCS8qIENoZWNrIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBub3QgMC05ICovCgkJCXZhciBjID0gcy5jaGFyQ29kZUF0KCBzLmxlbmd0aC0xICk7CgkJCWlmIChjIDwgMHgzMCB8fCBjID4gMHgzOSkKCQkJewoJCQkJcmV0dXJuIHM7CgkJCX0KCQkJcmV0dXJuIHMrInB4IjsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQXJyYXlDbXAKCQkgKiBQdXJwb3NlOiAgQ29tcGFyZSB0d28gYXJyYXlzCgkJICogUmV0dXJuczogIDAgaWYgbWF0Y2gsIDEgaWYgbGVuZ3RoIGlzIGRpZmZlcmVudCwgMiBpZiBubyBtYXRjaAoJCSAqIElucHV0czogICBhcnJheTphQXJyYXkxIC0gZmlyc3QgYXJyYXkKCQkgKiAgICAgICAgICAgYXJyYXk6YUFycmF5MiAtIHNlY29uZCBhcnJheQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkFycmF5Q21wKCBhQXJyYXkxLCBhQXJyYXkyICkKCQl7CgkJCWlmICggYUFycmF5MS5sZW5ndGggIT0gYUFycmF5Mi5sZW5ndGggKQoJCQl7CgkJCQlyZXR1cm4gMTsKCQkJfQoJCQkKCQkJZm9yICggdmFyIGk9MCA7IGk8YUFycmF5MS5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlpZiAoIGFBcnJheTFbaV0gIT0gYUFycmF5MltpXSApCgkJCQl7CgkJCQkJcmV0dXJuIDI7CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiAwOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5EZXRlY3RUeXBlCgkJICogUHVycG9zZTogIEdldCB0aGUgc29ydCB0eXBlIGJhc2VkIG9uIGFuIGlucHV0IHN0cmluZwoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gdHlwZSAoZGVmYXVsdHMgdG8gJ3N0cmluZycgaWYgbm8gdHlwZSBjYW4gYmUgZGV0ZWN0ZWQpCgkJICogSW5wdXRzOiAgIHN0cmluZzpzRGF0YSAtIGRhdGEgd2Ugd2lzaCB0byBrbm93IHRoZSB0eXBlIG9mCgkJICogTm90ZXM6ICAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgdXNlIG9mIHRoZSBEYXRhVGFibGVzIHBsdWdpbiBvYmpjdCBfb0V4dCAKCQkgKiAgICguYVR5cGVzKSBzdWNoIHRoYXQgbmV3IHR5cGVzIGNhbiBlYXNpbHkgYmUgYWRkZWQuCgkJICovCgkJZnVuY3Rpb24gX2ZuRGV0ZWN0VHlwZSggc0RhdGEgKQoJCXsKCQkJdmFyIGFUeXBlcyA9IF9vRXh0LmFUeXBlczsKCQkJdmFyIGlMZW4gPSBhVHlwZXMubGVuZ3RoOwoJCQkKCQkJZm9yICggdmFyIGk9MCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCXZhciBzVHlwZSA9IGFUeXBlc1tpXSggc0RhdGEgKTsKCQkJCWlmICggc1R5cGUgIT09IG51bGwgKQoJCQkJewoJCQkJCXJldHVybiBzVHlwZTsKCQkJCX0KCQkJfQoJCQkKCQkJcmV0dXJuICdzdHJpbmcnOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TZXR0aW5nc0Zyb21Ob2RlCgkJICogUHVycG9zZTogIFJldHVybiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZvciBhIHBhcnRpY3VsYXIgdGFibGUKCQkgKiBSZXR1cm5zOiAgb2JqZWN0OiBTZXR0aW5ncyBvYmplY3QgLSBvciBudWxsIGlmIG5vdCBmb3VuZAoJCSAqIElucHV0czogICBub2RlOm5UYWJsZSAtIHRhYmxlIHdlIGFyZSB1c2luZyBhcyBhIGRhdGFUYWJsZQoJCSAqLwoJCWZ1bmN0aW9uIF9mblNldHRpbmdzRnJvbU5vZGUgKCBuVGFibGUgKQoJCXsKCQkJZm9yICggdmFyIGk9MCA7IGk8X2FvU2V0dGluZ3MubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJaWYgKCBfYW9TZXR0aW5nc1tpXS5uVGFibGUgPT0gblRhYmxlICkKCQkJCXsKCQkJCQlyZXR1cm4gX2FvU2V0dGluZ3NbaV07CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBudWxsOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXREYXRhTWFzdGVyCgkJICogUHVycG9zZTogIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBmdWxsIHRhYmxlIGRhdGEKCQkgKiBSZXR1cm5zOiAgYXJyYXkgYXJyYXk6YURhdGEgLSBNYXN0ZXIgZGF0YSBhcnJheQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXREYXRhTWFzdGVyICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBhRGF0YSA9IFtdOwoJCQl2YXIgaUxlbiA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxpTGVuOyBpKysgKQoJCQl7CgkJCQlhRGF0YS5wdXNoKCBvU2V0dGluZ3MuYW9EYXRhW2ldLl9hRGF0YSApOwoJCQl9CgkJCXJldHVybiBhRGF0YTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0VHJOb2RlcwoJCSAqIFB1cnBvc2U6ICBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgVFIgbm9kZXMgZm9yIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICBhcnJheTogLSBUUiBhcnJheQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRUck5vZGVzICggb1NldHRpbmdzICkKCQl7CgkJCXZhciBhTm9kZXMgPSBbXTsKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFvRGF0YVtpXS5uVHIgIT09IG51bGwgKQoJCQkJewoJCQkJCWFOb2Rlcy5wdXNoKCBvU2V0dGluZ3MuYW9EYXRhW2ldLm5UciApOwoJCQkJfQoJCQl9CgkJCXJldHVybiBhTm9kZXM7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdldFRkTm9kZXMKCQkgKiBQdXJwb3NlOiAgUmV0dXJuIGFuIGZsYXQgYXJyYXkgd2l0aCBhbGwgVEQgbm9kZXMgZm9yIHRoZSB0YWJsZSwgb3Igcm93CgkJICogUmV0dXJuczogIGFycmF5OiAtIFREIGFycmF5CgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICAgICAgICAgICBpbnQ6aUluZGl2aWR1YWxSb3cgLSBhb0RhdGEgaW5kZXggdG8gZ2V0IHRoZSBub2RlcyBmb3IgLSBvcHRpb25hbCBpZiBub3QKCQkgKiAgICAgICAgICAgICBnaXZlbiB0aGVuIHRoZSByZXR1cm4gYXJyYXkgd2lsbCBjb250YWluIGFsbCBub2RlcyBmb3IgdGhlIHRhYmxlCgkJICovCgkJZnVuY3Rpb24gX2ZuR2V0VGROb2RlcyAoIG9TZXR0aW5ncywgaUluZGl2aWR1YWxSb3cgKQoJCXsKCQkJdmFyIGFuUmV0dXJuID0gW107CgkJCXZhciBpQ29ycmVjdG9yOwoJCQl2YXIgYW5UZHM7CgkJCXZhciBpUm93LCBpUm93cz1vU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCwKCQkJCWlDb2x1bW4sIGlDb2x1bW5zLCBvRGF0YSwgc05vZGVOYW1lLCBpU3RhcnQ9MCwgaUVuZD1pUm93czsKCQkJCgkJCS8qIEFsbG93IHRoZSBjb2xsZWN0aW9uIHRvIGJlIGxpbWl0ZWQgdG8ganVzdCBvbmUgcm93ICovCgkJCWlmICggdHlwZW9mIGlJbmRpdmlkdWFsUm93ICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJaVN0YXJ0ID0gaUluZGl2aWR1YWxSb3c7CgkJCQlpRW5kID0gaUluZGl2aWR1YWxSb3crMTsKCQkJfQoKCQkJZm9yICggaVJvdz1pU3RhcnQgOyBpUm93PGlFbmQgOyBpUm93KysgKQoJCQl7CgkJCQlvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbaVJvd107CgkJCQlpZiAoIG9EYXRhLm5UciAhPT0gbnVsbCApCgkJCQl7CgkJCQkJLyogZ2V0IHRoZSBURCBjaGlsZCBub2RlcyAtIHRha2luZyBpbnRvIGFjY291bnQgdGV4dCBldGMgbm9kZXMgKi8KCQkJCQlhblRkcyA9IFtdOwoJCQkJCWZvciAoIGlDb2x1bW49MCwgaUNvbHVtbnM9b0RhdGEublRyLmNoaWxkTm9kZXMubGVuZ3RoIDsgaUNvbHVtbjxpQ29sdW1ucyA7IGlDb2x1bW4rKyApCgkJCQkJewoJCQkJCQlzTm9kZU5hbWUgPSBvRGF0YS5uVHIuY2hpbGROb2Rlc1tpQ29sdW1uXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoJCQkJCQlpZiAoIHNOb2RlTmFtZSA9PSAndGQnIHx8IHNOb2RlTmFtZSA9PSAndGgnICkKCQkJCQkJewoJCQkJCQkJYW5UZHMucHVzaCggb0RhdGEublRyLmNoaWxkTm9kZXNbaUNvbHVtbl0gKTsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJaUNvcnJlY3RvciA9IDA7CgkJCQkJZm9yICggaUNvbHVtbj0wLCBpQ29sdW1ucz1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGlDb2x1bW48aUNvbHVtbnMgOyBpQ29sdW1uKysgKQoJCQkJCXsKCQkJCQkJaWYgKCBvU2V0dGluZ3MuYW9Db2x1bW5zW2lDb2x1bW5dLmJWaXNpYmxlICkKCQkJCQkJewoJCQkJCQkJYW5SZXR1cm4ucHVzaCggYW5UZHNbaUNvbHVtbi1pQ29ycmVjdG9yXSApOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJYW5SZXR1cm4ucHVzaCggb0RhdGEuX2FuSGlkZGVuW2lDb2x1bW5dICk7CgkJCQkJCQlpQ29ycmVjdG9yKys7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCgkJCXJldHVybiBhblJldHVybjsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRXNjYXBlUmVnZXgKCQkgKiBQdXJwb3NlOiAgc2NhcGUgYSBzdHJpbmcgc3R1Y2ggdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbgoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gZXNjYXBlZCBzdHJpbmcKCQkgKiBJbnB1dHM6ICAgc3RyaW5nOnNWYWwgLSBzdHJpbmcgdG8gZXNjYXBlCgkJICovCgkJZnVuY3Rpb24gX2ZuRXNjYXBlUmVnZXggKCBzVmFsICkKCQl7CgkJCXZhciBhY0VzY2FwZSA9IFsgJy8nLCAnLicsICcqJywgJysnLCAnPycsICd8JywgJygnLCAnKScsICdbJywgJ10nLCAneycsICd9JywgJ1xcJywgJyQnLCAnXicgXTsKCQkgIHZhciByZVJlcGxhY2UgPSBuZXcgUmVnRXhwKCAnKFxcJyArIGFjRXNjYXBlLmpvaW4oJ3xcXCcpICsgJyknLCAnZycgKTsKCQkgIHJldHVybiBzVmFsLnJlcGxhY2UocmVSZXBsYWNlLCAnXFwkMScpOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5EZWxldGVJbmRleAoJCSAqIFB1cnBvc2U6ICBUYWtlIGFuIGFycmF5IG9mIGludGVnZXJzIChpbmRleCBhcnJheSkgYW5kIHJlbW92ZSBhIHRhcmdldCBpbnRlZ2VyICh2YWx1ZSAtIG5vdCAKCQkgKiAgICAgICAgICAgICB0aGUga2V5ISkKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBhOmFycmF5IGludCAtIEluZGV4IGFycmF5IHRvIHRhcmdldAoJCSAqICAgICAgICAgICBpbnQ6aVRhcmdldCAtIHZhbHVlIHRvIGZpbmQKCQkgKi8KCQlmdW5jdGlvbiBfZm5EZWxldGVJbmRleCggYSwgaVRhcmdldCApCgkJewoJCQl2YXIgaVRhcmdldEluZGV4ID0gLTE7CgkJCQoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJaWYgKCBhW2ldID09IGlUYXJnZXQgKQoJCQkJewoJCQkJCWlUYXJnZXRJbmRleCA9IGk7CgkJCQl9CgkJCQllbHNlIGlmICggYVtpXSA+IGlUYXJnZXQgKQoJCQkJewoJCQkJCWFbaV0tLTsKCQkJCX0KCQkJfQoJCQkKCQkJaWYgKCBpVGFyZ2V0SW5kZXggIT0gLTEgKQoJCQl7CgkJCQlhLnNwbGljZSggaVRhcmdldEluZGV4LCAxICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuUmVPcmRlckluZGV4CgkJICogUHVycG9zZTogIEZpZ3VyZSBvdXQgaG93IHRvIHJlb3JkZXIgYSBkaXNwbGF5IGxpc3QKCQkgKiBSZXR1cm5zOiAgYXJyYXkgaW50OmFpUmV0dXJuIC0gaW5kZXggbGlzdCBmb3IgcmVvcmRlcmluZwoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKi8KCQlmdW5jdGlvbiBfZm5SZU9yZGVySW5kZXggKCBvU2V0dGluZ3MsIHNDb2x1bW5zICkKCQl7CgkJCXZhciBhQ29sdW1ucyA9IHNDb2x1bW5zLnNwbGl0KCcsJyk7CgkJCXZhciBhaVJldHVybiA9IFtdOwoJCQkKCQkJZm9yICggdmFyIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWZvciAoIHZhciBqPTAgOyBqPGlMZW4gOyBqKysgKQoJCQkJewoJCQkJCWlmICggb1NldHRpbmdzLmFvQ29sdW1uc1tpXS5zTmFtZSA9PSBhQ29sdW1uc1tqXSApCgkJCQkJewoJCQkJCQlhaVJldHVybi5wdXNoKCBqICk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkKCQkJcmV0dXJuIGFpUmV0dXJuOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Db2x1bW5PcmRlcmluZwoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIGNvbHVtbiBvcmRlcmluZyB0aGF0IERhdGFUYWJsZXMgZXhwZWN0cwoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbmFtZXMKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuQ29sdW1uT3JkZXJpbmcgKCBvU2V0dGluZ3MgKQoJCXsKCQkJdmFyIHNOYW1lcyA9ICcnOwoJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJc05hbWVzICs9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV0uc05hbWUrJywnOwoJCQl9CgkJCWlmICggc05hbWVzLmxlbmd0aCA9PSBpTGVuICkKCQkJewoJCQkJcmV0dXJuICIiOwoJCQl9CgkJCXJldHVybiBzTmFtZXMuc2xpY2UoMCwgLTEpOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5Mb2cKCQkgKiBQdXJwb3NlOiAgTG9nIGFuIGVycm9yIG1lc3NhZ2UKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBpbnQ6aUxldmVsIC0gbG9nIGVycm9yIG1lc3NhZ2VzLCBvciBkaXNwbGF5IHRoZW0gdG8gdGhlIHVzZXIKCQkgKiAgICAgICAgICAgc3RyaW5nOnNNZXNnIC0gZXJyb3IgbWVzc2FnZQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkxvZyggb1NldHRpbmdzLCBpTGV2ZWwsIHNNZXNnICkKCQl7CgkJCXZhciBzQWxlcnQgPSBvU2V0dGluZ3Muc1RhYmxlSWQgPT09ICIiID8KCQkJIAkiRGF0YVRhYmxlcyB3YXJuaW5nOiAiICtzTWVzZyA6CgkJCSAJIkRhdGFUYWJsZXMgd2FybmluZyAodGFibGUgaWQgPSAnIitvU2V0dGluZ3Muc1RhYmxlSWQrIicpOiAiICtzTWVzZzsKCQkJCgkJCWlmICggaUxldmVsID09PSAwICkKCQkJewoJCQkJaWYgKCBfb0V4dC5zRXJyTW9kZSA9PSAnYWxlcnQnICkKCQkJCXsKCQkJCQlhbGVydCggc0FsZXJ0ICk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGhyb3cgc0FsZXJ0OwoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgY29uc29sZSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5sb2cgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQljb25zb2xlLmxvZyggc0FsZXJ0ICk7CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuQ2xlYXJUYWJsZQoJCSAqIFB1cnBvc2U6ICBOdWtlIHRoZSB0YWJsZQoJCSAqIFJldHVybnM6ICAtCgkJICogSW5wdXRzOiAgIG9iamVjdDpvU2V0dGluZ3MgLSBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkNsZWFyVGFibGUoIG9TZXR0aW5ncyApCgkJewoJCQlvU2V0dGluZ3MuYW9EYXRhLnNwbGljZSggMCwgb1NldHRpbmdzLmFvRGF0YS5sZW5ndGggKTsKCQkJb1NldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5zcGxpY2UoIDAsIG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoICk7CgkJCW9TZXR0aW5ncy5haURpc3BsYXkuc3BsaWNlKCAwLCBvU2V0dGluZ3MuYWlEaXNwbGF5Lmxlbmd0aCApOwoJCQlfZm5DYWxjdWxhdGVFbmQoIG9TZXR0aW5ncyApOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TYXZlU3RhdGUKCQkgKiBQdXJwb3NlOiAgU2F2ZSB0aGUgc3RhdGUgb2YgYSB0YWJsZSBpbiBhIGNvb2tpZSBzdWNoIHRoYXQgdGhlIHBhZ2UgY2FuIGJlIHJlbG9hZGVkCgkJICogUmV0dXJuczogIC0KCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuU2F2ZVN0YXRlICggb1NldHRpbmdzICkKCQl7CgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlN0YXRlU2F2ZSB8fCB0eXBlb2Ygb1NldHRpbmdzLmJEZXN0cm95aW5nICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQkvKiBTdG9yZSB0aGUgaW50ZXJlc3RpbmcgdmFyaWFibGVzICovCgkJCXZhciBpLCBpTGVuLCBzVG1wOwoJCQl2YXIgc1ZhbHVlID0gInsiOwoJCQlzVmFsdWUgKz0gJyJpQ3JlYXRlIjonKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSsnLCc7CgkJCXNWYWx1ZSArPSAnImlTdGFydCI6JysgKG9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSA/IDAgOiBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQpKycsJzsKCQkJc1ZhbHVlICs9ICciaUVuZCI6JysgKG9TZXR0aW5ncy5vU2Nyb2xsLmJJbmZpbml0ZSA/IG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOiBvU2V0dGluZ3MuX2lEaXNwbGF5RW5kKSsnLCc7CgkJCXNWYWx1ZSArPSAnImlMZW5ndGgiOicrIG9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGgrJywnOwoJCQlzVmFsdWUgKz0gJyJzRmlsdGVyIjoiJysgZW5jb2RlVVJJQ29tcG9uZW50KG9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guc1NlYXJjaCkrJyIsJzsKCQkJc1ZhbHVlICs9ICcic0ZpbHRlckVzYyI6JysgIW9TZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guYlJlZ2V4KycsJzsKCQkJCgkJCXNWYWx1ZSArPSAnImFhU29ydGluZyI6WyAnOwoJCQlmb3IgKCBpPTAgOyBpPG9TZXR0aW5ncy5hYVNvcnRpbmcubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJc1ZhbHVlICs9ICdbJytvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdKycsIicrb1NldHRpbmdzLmFhU29ydGluZ1tpXVsxXSsnIl0sJzsKCQkJfQoJCQlzVmFsdWUgPSBzVmFsdWUuc3Vic3RyaW5nKDAsIHNWYWx1ZS5sZW5ndGgtMSk7CgkJCXNWYWx1ZSArPSAiXSwiOwoJCQkKCQkJc1ZhbHVlICs9ICciYWFTZWFyY2hDb2xzIjpbICc7CgkJCWZvciAoIGk9MCA7IGk8b1NldHRpbmdzLmFvUHJlU2VhcmNoQ29scy5sZW5ndGggOyBpKysgKQoJCQl7CgkJCQlzVmFsdWUgKz0gJ1siJytlbmNvZGVVUklDb21wb25lbnQob1NldHRpbmdzLmFvUHJlU2VhcmNoQ29sc1tpXS5zU2VhcmNoKSsKCQkJCQknIiwnKyFvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzW2ldLmJSZWdleCsnXSwnOwoJCQl9CgkJCXNWYWx1ZSA9IHNWYWx1ZS5zdWJzdHJpbmcoMCwgc1ZhbHVlLmxlbmd0aC0xKTsKCQkJc1ZhbHVlICs9ICJdLCI7CgkJCQoJCQlzVmFsdWUgKz0gJyJhYlZpc0NvbHMiOlsgJzsKCQkJZm9yICggaT0wIDsgaTxvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGkrKyApCgkJCXsKCQkJCXNWYWx1ZSArPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLmJWaXNpYmxlKyIsIjsKCQkJfQoJCQlzVmFsdWUgPSBzVmFsdWUuc3Vic3RyaW5nKDAsIHNWYWx1ZS5sZW5ndGgtMSk7CgkJCXNWYWx1ZSArPSAiXSI7CgkJCQoJCQkvKiBTYXZlIHN0YXRlIGZyb20gYW55IHBsdWctaW5zICovCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9TdGF0ZVNhdmUubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJc1RtcCA9IG9TZXR0aW5ncy5hb1N0YXRlU2F2ZVtpXS5mbiggb1NldHRpbmdzLCBzVmFsdWUgKTsKCQkJCWlmICggc1RtcCAhPT0gIiIgKQoJCQkJewoJCQkJCXNWYWx1ZSA9IHNUbXA7CgkJCQl9CgkJCX0KCQkJCgkJCXNWYWx1ZSArPSAifSI7CgkJCQoJCQlfZm5DcmVhdGVDb29raWUoIG9TZXR0aW5ncy5zQ29va2llUHJlZml4K29TZXR0aW5ncy5zSW5zdGFuY2UsIHNWYWx1ZSwgCgkJCQlvU2V0dGluZ3MuaUNvb2tpZUR1cmF0aW9uLCBvU2V0dGluZ3Muc0Nvb2tpZVByZWZpeCwgb1NldHRpbmdzLmZuQ29va2llQ2FsbGJhY2sgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuTG9hZFN0YXRlCgkJICogUHVycG9zZTogIEF0dGVtcHQgdG8gbG9hZCBhIHNhdmVkIHRhYmxlIHN0YXRlIGZyb20gYSBjb29raWUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgb2JqZWN0Om9Jbml0IC0gRGF0YVRhYmxlcyBpbml0IG9iamVjdCBzbyB3ZSBjYW4gb3ZlcnJpZGUgc2V0dGluZ3MKCQkgKi8KCQlmdW5jdGlvbiBfZm5Mb2FkU3RhdGUgKCBvU2V0dGluZ3MsIG9Jbml0ICkKCQl7CgkJCWlmICggIW9TZXR0aW5ncy5vRmVhdHVyZXMuYlN0YXRlU2F2ZSApCgkJCXsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJdmFyIG9EYXRhLCBpLCBpTGVuOwoJCQl2YXIgc0RhdGEgPSBfZm5SZWFkQ29va2llKCBvU2V0dGluZ3Muc0Nvb2tpZVByZWZpeCtvU2V0dGluZ3Muc0luc3RhbmNlICk7CgkJCWlmICggc0RhdGEgIT09IG51bGwgJiYgc0RhdGEgIT09ICcnICkKCQkJewoJCQkJLyogVHJ5L2NhdGNoIHRoZSBKU09OIGV2YWwgLSBpZiBpdCBpcyBiYWQgdGhlbiB3ZSBpZ25vcmUgaXQgLSBub3RlIHRoYXQgMS43LjAgYW5kIGJlZm9yZQoJCQkJICogaW5jb3JyZWN0bHkgdXNlZCBzaW5nbGUgcXVvdGVzIGZvciBzb21lIHN0cmluZ3MgLSBoZW5jZSB0aGUgcmVwbGFjZSBiZWxvdwoJCQkJICovCgkJCQl0cnkKCQkJCXsKCQkJCQlvRGF0YSA9ICh0eXBlb2YgJC5wYXJzZUpTT04gPT0gJ2Z1bmN0aW9uJykgPyAKCQkJCQkJJC5wYXJzZUpTT04oIHNEYXRhLnJlcGxhY2UoLycvZywgJyInKSApIDogZXZhbCggJygnK3NEYXRhKycpJyApOwoJCQkJfQoJCQkJY2F0Y2goIGUgKQoJCQkJewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCQoJCQkJLyogQWxsb3cgY3VzdG9tIGFuZCBwbHVnLWluIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgdG8gYWx0ZXIgdGhlIGRhdGEgc2V0IHdoaWNoIHdhcwoJCQkJICogc2F2ZWQsIGFuZCBhbHNvIHJlamVjdCBhbnkgc2F2ZWQgc3RhdGUgYnkgcmV0dXJuaW5nIGZhbHNlCgkJCQkgKi8KCQkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9TdGF0ZUxvYWQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlpZiAoICFvU2V0dGluZ3MuYW9TdGF0ZUxvYWRbaV0uZm4oIG9TZXR0aW5ncywgb0RhdGEgKSApCgkJCQkJewoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBTdG9yZSB0aGUgc2F2ZWQgc3RhdGUgc28gaXQgbWlnaHQgYmUgYWNjZXNzZWQgYXQgYW55IHRpbWUgKHBhcnRpY3VhbHJseSBhIHBsdWctaW4gKi8KCQkJCW9TZXR0aW5ncy5vTG9hZGVkU3RhdGUgPSAkLmV4dGVuZCggdHJ1ZSwge30sIG9EYXRhICk7CgkJCQkKCQkJCS8qIFJlc3RvcmUga2V5IGZlYXR1cmVzICovCgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBvRGF0YS5pU3RhcnQ7CgkJCQlvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSBvRGF0YS5pU3RhcnQ7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5RW5kID0gb0RhdGEuaUVuZDsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlMZW5ndGggPSBvRGF0YS5pTGVuZ3RoOwoJCQkJb1NldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoID0gZGVjb2RlVVJJQ29tcG9uZW50KG9EYXRhLnNGaWx0ZXIpOwoJCQkJb1NldHRpbmdzLmFhU29ydGluZyA9IG9EYXRhLmFhU29ydGluZy5zbGljZSgpOwoJCQkJb1NldHRpbmdzLnNhdmVkX2FhU29ydGluZyA9IG9EYXRhLmFhU29ydGluZy5zbGljZSgpOwoJCQkJCgkJCQkvKgoJCQkJICogU2VhcmNoIGZpbHRlcmluZyAtIGdsb2JhbCByZWZlcmVuY2UgYWRkZWQgaW4gMS40LjEKCQkJCSAqIE5vdGUgdGhhdCB3ZSB1c2UgYSAnbm90JyBmb3IgdGhlIHZhbHVlIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaW5kaWNhdG9yIHRvIG1haW50YWluCgkJCQkgKiBjb21wYXRpYmlsaXR5IHdpdGggcHJlIDEuNyB2ZXJzaW9ucywgd2hlcmUgdGhpcyB3YXMgYmFzaWNhbGx5IGludmVydGVkLiBBZGRlZCBpbiAxLjcuMAoJCQkJICovCgkJCQlpZiAoIHR5cGVvZiBvRGF0YS5zRmlsdGVyRXNjICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLmJSZWdleCA9ICFvRGF0YS5zRmlsdGVyRXNjOwoJCQkJfQoJCQkJCgkJCQkvKiBDb2x1bW4gZmlsdGVyaW5nIC0gYWRkZWQgaW4gMS41LjAgYmV0YSA2ICovCgkJCQlpZiAoIHR5cGVvZiBvRGF0YS5hYVNlYXJjaENvbHMgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCWZvciAoIGk9MCA7IGk8b0RhdGEuYWFTZWFyY2hDb2xzLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkJCQlvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzW2ldID0gewoJCQkJCQkJInNTZWFyY2giOiBkZWNvZGVVUklDb21wb25lbnQob0RhdGEuYWFTZWFyY2hDb2xzW2ldWzBdKSwKCQkJCQkJCSJiUmVnZXgiOiAhb0RhdGEuYWFTZWFyY2hDb2xzW2ldWzFdCgkJCQkJCX07CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQkvKiBDb2x1bW4gdmlzaWJpbGl0eSBzdGF0ZSAtIGFkZGVkIGluIDEuNS4wIGJldGEgMTAgKi8KCQkJCWlmICggdHlwZW9mIG9EYXRhLmFiVmlzQ29scyAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJLyogUGFzcyBiYWNrIHZpc2liaWxpeSBzZXR0aW5ncyB0byB0aGUgaW5pdCBoYW5kbGVyLCBidXQgdG8gZG8gbm90IGhlcmUgb3ZlcnJpZGUKCQkJCQkgKiB0aGUgaW5pdCBvYmplY3QgdGhhdCB0aGUgdXNlciBtaWdodCBoYXZlIHBhc3NlZCBpbgoJCQkJCSAqLwoJCQkJCW9Jbml0LnNhdmVkX2FvQ29sdW1ucyA9IFtdOwoJCQkJCWZvciAoIGk9MCA7IGk8b0RhdGEuYWJWaXNDb2xzLmxlbmd0aCA7IGkrKyApCgkJCQkJewoJCQkJCQlvSW5pdC5zYXZlZF9hb0NvbHVtbnNbaV0gPSB7fTsKCQkJCQkJb0luaXQuc2F2ZWRfYW9Db2x1bW5zW2ldLmJWaXNpYmxlID0gb0RhdGEuYWJWaXNDb2xzW2ldOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5DcmVhdGVDb29raWUKCQkgKiBQdXJwb3NlOiAgQ3JlYXRlIGEgbmV3IGNvb2tpZSB3aXRoIGEgdmFsdWUgdG8gc3RvcmUgdGhlIHN0YXRlIG9mIGEgdGFibGUKCQkgKiBSZXR1cm5zOiAgLQoJCSAqIElucHV0czogICBzdHJpbmc6c05hbWUgLSBuYW1lIG9mIHRoZSBjb29raWUgdG8gY3JlYXRlCgkJICogICAgICAgICAgIHN0cmluZzpzVmFsdWUgLSB0aGUgdmFsdWUgdGhlIGNvb2tpZSBzaG91bGQgdGFrZQoJCSAqICAgICAgICAgICBpbnQ6aVNlY3MgLSBkdXJhdGlvbiBvZiB0aGUgY29va2llCgkJICogICAgICAgICAgIHN0cmluZzpzQmFzZU5hbWUgLSBzTmFtZSBpcyBtYWRlIHVwIG9mIHRoZSBiYXNlICsgZmlsZSBuYW1lIC0gdGhpcyBpcyB0aGUgYmFzZQoJCSAqICAgICAgICAgICBmdW5jdGlvbjpmbkNhbGxiYWNrIC0gVXNlciBkZWZpbmFibGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBjb29raWUKCQkgKi8KCQlmdW5jdGlvbiBfZm5DcmVhdGVDb29raWUgKCBzTmFtZSwgc1ZhbHVlLCBpU2Vjcywgc0Jhc2VOYW1lLCBmbkNhbGxiYWNrICkKCQl7CgkJCXZhciBkYXRlID0gbmV3IERhdGUoKTsKCQkJZGF0ZS5zZXRUaW1lKCBkYXRlLmdldFRpbWUoKSsoaVNlY3MqMTAwMCkgKTsKCQkJCgkJCS8qIAoJCQkgKiBTaG9ja2luZyBidXQgdHJ1ZSAtIGl0IHdvdWxkIGFwcGVhciBJRSBoYXMgbWFqb3IgaXNzdWVzIHdpdGggaGF2aW5nIHRoZSBwYXRoIG5vdCBoYXZpbmcKCQkJICogYSB0cmFpbGluZyBzbGFzaCBvbiBpdC4gV2UgbmVlZCB0aGUgY29va2llIHRvIGJlIGF2YWlsYWJsZSBiYXNlZCBvbiB0aGUgcGF0aCwgc28gd2UKCQkJICogaGF2ZSB0byBhcHBlbmQgdGhlIGZpbGUgbmFtZSB0byB0aGUgY29va2llIG5hbWUuIEFwcGFsbGluZy4gVGhhbmtzIHRvIHZleCBmb3IgYWRkaW5nIHRoZQoJCQkgKiBwYXRjaCB0byB1c2UgYXQgbGVhc3Qgc29tZSBvZiB0aGUgcGF0aAoJCQkgKi8KCQkJdmFyIGFQYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpOwoJCQl2YXIgc05hbWVGaWxlID0gc05hbWUgKyAnXycgKyBhUGFydHMucG9wKCkucmVwbGFjZSgvW1wvOl0vZywiIikudG9Mb3dlckNhc2UoKTsKCQkJdmFyIHNGdWxsQ29va2llLCBvRGF0YTsKCQkJCgkJCWlmICggZm5DYWxsYmFjayAhPT0gbnVsbCApCgkJCXsKCQkJCW9EYXRhID0gKHR5cGVvZiAkLnBhcnNlSlNPTiA9PSAnZnVuY3Rpb24nKSA/IAoJCQkJCSQucGFyc2VKU09OKCBzVmFsdWUgKSA6IGV2YWwoICcoJytzVmFsdWUrJyknICk7CgkJCQlzRnVsbENvb2tpZSA9IGZuQ2FsbGJhY2soIHNOYW1lRmlsZSwgb0RhdGEsIGRhdGUudG9HTVRTdHJpbmcoKSwKCQkJCQlhUGFydHMuam9pbignLycpKyIvIiApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJc0Z1bGxDb29raWUgPSBzTmFtZUZpbGUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoc1ZhbHVlKSArCgkJCQkJIjsgZXhwaXJlcz0iICsgZGF0ZS50b0dNVFN0cmluZygpICsiOyBwYXRoPSIgKyBhUGFydHMuam9pbignLycpKyIvIjsKCQkJfQoJCQkKCQkJLyogQXJlIHdlIGdvaW5nIHRvIGdvIG92ZXIgdGhlIGNvb2tpZSBsaW1pdCBvZiA0S2lCPyBJZiBzbywgdHJ5IHRvIGRlbGV0ZSBhIGNvb2tpZXMKCQkJICogYmVsb25naW5nIHRvIERhdGFUYWJsZXMuIFRoaXMgaXMgRkFSIGZyb20gYnVsbGV0IHByb29mCgkJCSAqLwoJCQl2YXIgc09sZE5hbWU9IiIsIGlPbGRUaW1lPTk5OTk5OTk5OTk5OTk7CgkJCXZhciBpTGVuZ3RoID0gX2ZuUmVhZENvb2tpZSggc05hbWVGaWxlICkhPT1udWxsID8gZG9jdW1lbnQuY29va2llLmxlbmd0aCA6IAoJCQkJc0Z1bGxDb29raWUubGVuZ3RoICsgZG9jdW1lbnQuY29va2llLmxlbmd0aDsKCQkJCgkJCWlmICggaUxlbmd0aCsxMCA+IDQwOTYgKSAvKiBNYWdpYyAxMCBmb3IgcGFkZGluZyAqLwoJCQl7CgkJCQl2YXIgYUNvb2tpZXMgPWRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOwoJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hQ29va2llcy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWlmICggYUNvb2tpZXNbaV0uaW5kZXhPZiggc0Jhc2VOYW1lICkgIT0gLTEgKQoJCQkJCXsKCQkJCQkJLyogSXQncyBhIERhdGFUYWJsZXMgY29va2llLCBzbyBldmFsIGl0IGFuZCBjaGVjayB0aGUgdGltZSBzdGFtcCAqLwoJCQkJCQl2YXIgYVNwbGl0Q29va2llID0gYUNvb2tpZXNbaV0uc3BsaXQoJz0nKTsKCQkJCQkJdHJ5IHsgb0RhdGEgPSBldmFsKCAnKCcrZGVjb2RlVVJJQ29tcG9uZW50KGFTcGxpdENvb2tpZVsxXSkrJyknICk7IH0KCQkJCQkJY2F0Y2goIGUgKSB7IGNvbnRpbnVlOyB9CgkJCQkJCQoJCQkJCQlpZiAoIHR5cGVvZiBvRGF0YS5pQ3JlYXRlICE9ICd1bmRlZmluZWQnICYmIG9EYXRhLmlDcmVhdGUgPCBpT2xkVGltZSApCgkJCQkJCXsKCQkJCQkJCXNPbGROYW1lID0gYVNwbGl0Q29va2llWzBdOwoJCQkJCQkJaU9sZFRpbWUgPSBvRGF0YS5pQ3JlYXRlOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpZiAoIHNPbGROYW1lICE9PSAiIiApCgkJCQl7CgkJCQkJZG9jdW1lbnQuY29va2llID0gc09sZE5hbWUrIj07IGV4cGlyZXM9VGh1LCAwMS1KYW4tMTk3MCAwMDowMDowMSBHTVQ7IHBhdGg9IisKCQkJCQkJYVBhcnRzLmpvaW4oJy8nKSArICIvIjsKCQkJCX0KCQkJfQoJCQkKCQkJZG9jdW1lbnQuY29va2llID0gc0Z1bGxDb29raWU7CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mblJlYWRDb29raWUKCQkgKiBQdXJwb3NlOiAgUmVhZCBhbiBvbGQgY29va2llIHRvIGdldCBhIGNvb2tpZSB3aXRoIGFuIG9sZCB0YWJsZSBzdGF0ZQoJCSAqIFJldHVybnM6ICBzdHJpbmc6IC0gY29udGVudHMgb2YgdGhlIGNvb2tpZSAtIG9yIG51bGwgaWYgbm8gY29va2llIHdpdGggdGhhdCBuYW1lIGZvdW5kCgkJICogSW5wdXRzOiAgIHN0cmluZzpzTmFtZSAtIG5hbWUgb2YgdGhlIGNvb2tpZSB0byByZWFkCgkJICovCgkJZnVuY3Rpb24gX2ZuUmVhZENvb2tpZSAoIHNOYW1lICkKCQl7CgkJCXZhcgoJCQkJYVBhcnRzID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJyksCgkJCQlzTmFtZUVRID0gc05hbWUgKyAnXycgKyBhUGFydHNbYVBhcnRzLmxlbmd0aC0xXS5yZXBsYWNlKC9bXC86XS9nLCIiKS50b0xvd2VyQ2FzZSgpICsgJz0nLAoJCQkgCXNDb29raWVDb250ZW50cyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOwoJCQkKCQkJZm9yKCB2YXIgaT0wIDsgaTxzQ29va2llQ29udGVudHMubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJdmFyIGMgPSBzQ29va2llQ29udGVudHNbaV07CgkJCQkKCQkJCXdoaWxlIChjLmNoYXJBdCgwKT09JyAnKQoJCQkJewoJCQkJCWMgPSBjLnN1YnN0cmluZygxLGMubGVuZ3RoKTsKCQkJCX0KCQkJCQoJCQkJaWYgKGMuaW5kZXhPZihzTmFtZUVRKSA9PT0gMCkKCQkJCXsKCQkJCQlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KCBjLnN1YnN0cmluZyhzTmFtZUVRLmxlbmd0aCxjLmxlbmd0aCkgKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuRGV0ZWN0SGVhZGVyCgkJICogUHVycG9zZTogIFVzZSB0aGUgRE9NIHNvdXJjZSB0byBjcmVhdGUgdXAgYW4gYXJyYXkgb2YgaGVhZGVyIGNlbGxzLiBUaGUgaWRlYSBoZXJlIGlzIHRvCgkJICogICAgICAgICAgIGNyZWF0ZSBhIGxheW91dCBncmlkIChhcnJheSkgb2Ygcm93cyB4IGNvbHVtbnMsIHdoaWNoIGNvbnRhaW5zIGEgcmVmZXJlbmNlCgkJICogICAgICAgICAgIHRvIHRoZSBjZWxsIHRoYXQgdGhhdCBwb2ludCBpbiB0aGUgZ3JpZCAocmVnYXJkbGVzcyBvZiBjb2wvcm93c3BhbiksIHN1Y2ggdGhhdAoJCSAqICAgICAgICAgICBhbnkgY29sdW1uIC8gcm93IGNvdWxkIGJlIHJlbW92ZWQgYW5kIHRoZSBuZXcgZ3JpZCBjb25zdHJ1Y3RlZAoJCSAqIFJldHVybnM6ICB2b2lkCgkJICogT3V0cHV0czogIGFycmF5IG9iamVjdDphTGF5b3V0IC0gQXJyYXkgdG8gc3RvcmUgdGhlIGNhbGN1bGF0ZWQgbGF5b3V0IGluCgkJICogSW5wdXRzOiAgIG5vZGU6blRoZWFkIC0gVGhlIGhlYWRlci9mb290ZXIgZWxlbWVudCBmb3IgdGhlIHRhYmxlCgkJICovCgkJZnVuY3Rpb24gX2ZuRGV0ZWN0SGVhZGVyICggYUxheW91dCwgblRoZWFkICkKCQl7CgkJCXZhciBuVHJzID0gblRoZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpOwoJCQl2YXIgbkNlbGw7CgkJCXZhciBpLCBqLCBrLCBsLCBpTGVuLCBqTGVuLCBpQ29sU2hpZnRlZDsKCQkJdmFyIGZuU2hpZnRDb2wgPSBmdW5jdGlvbiAoIGEsIGksIGogKSB7CgkJCQl3aGlsZSAoIHR5cGVvZiBhW2ldW2pdICE9ICd1bmRlZmluZWQnICkgewoJCQkJCWorKzsKCQkJCX0KCQkJCXJldHVybiBqOwoJCQl9OwoKCQkJYUxheW91dC5zcGxpY2UoIDAsIGFMYXlvdXQubGVuZ3RoICk7CgkJCQoJCQkvKiBXZSBrbm93IGhvdyBtYW55IHJvd3MgdGhlcmUgYXJlIGluIHRoZSBsYXlvdXQgLSBzbyBwcmVwIGl0ICovCgkJCWZvciAoIGk9MCwgaUxlbj1uVHJzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWFMYXlvdXQucHVzaCggW10gKTsKCQkJfQoJCQkKCQkJLyogQ2FsY3VsYXRlIGEgbGF5b3V0IGFycmF5ICovCgkJCWZvciAoIGk9MCwgaUxlbj1uVHJzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCXZhciBpQ29sdW1uID0gMDsKCQkJCQoJCQkJLyogRm9yIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdy4uLiAqLwoJCQkJZm9yICggaj0wLCBqTGVuPW5UcnNbaV0uY2hpbGROb2Rlcy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCW5DZWxsID0gblRyc1tpXS5jaGlsZE5vZGVzW2pdOwoKCQkJCQlpZiAoIG5DZWxsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gIlREIiB8fAoJCQkJCSAgICAgbkNlbGwubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSAiVEgiICkKCQkJCQl7CgkJCQkJCS8qIEdldCB0aGUgY29sIGFuZCByb3dzcGFuIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRE9NIGFuZCBzYW5pdGlzZSB0aGVtICovCgkJCQkJCXZhciBpQ29sc3BhbiA9IG5DZWxsLmdldEF0dHJpYnV0ZSgnY29sc3BhbicpICogMTsKCQkJCQkJdmFyIGlSb3dzcGFuID0gbkNlbGwuZ2V0QXR0cmlidXRlKCdyb3dzcGFuJykgKiAxOwoJCQkJCQlpQ29sc3BhbiA9ICghaUNvbHNwYW4gfHwgaUNvbHNwYW49PT0wIHx8IGlDb2xzcGFuPT09MSkgPyAxIDogaUNvbHNwYW47CgkJCQkJCWlSb3dzcGFuID0gKCFpUm93c3BhbiB8fCBpUm93c3Bhbj09PTAgfHwgaVJvd3NwYW49PT0xKSA/IDEgOiBpUm93c3BhbjsKCgkJCQkJCS8qIFRoZXJlIG1pZ2h0IGJlIGNvbHNwYW4gY2VsbHMgYWxyZWFkeSBpbiB0aGlzIHJvdywgc28gc2hpZnQgb3VyIHRhcmdldCAKCQkJCQkJICogYWNjb3JkaW5nbHkKCQkJCQkJICovCgkJCQkJCWlDb2xTaGlmdGVkID0gZm5TaGlmdENvbCggYUxheW91dCwgaSwgaUNvbHVtbiApOwoJCQkJCQkKCQkJCQkJLyogSWYgdGhlcmUgaXMgY29sIC8gcm93c3BhbiwgY29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgbGF5b3V0IGdyaWQgKi8KCQkJCQkJZm9yICggbD0wIDsgbDxpQ29sc3BhbiA7IGwrKyApCgkJCQkJCXsKCQkJCQkJCWZvciAoIGs9MCA7IGs8aVJvd3NwYW4gOyBrKysgKQoJCQkJCQkJewoJCQkJCQkJCWFMYXlvdXRbaStrXVtpQ29sU2hpZnRlZCtsXSA9IHsKCQkJCQkJCQkJImNlbGwiOiBuQ2VsbCwKCQkJCQkJCQkJInVuaXF1ZSI6IGlDb2xzcGFuID09IDEgPyB0cnVlIDogZmFsc2UKCQkJCQkJCQl9OwoJCQkJCQkJCWFMYXlvdXRbaStrXS5uVHIgPSBuVHJzW2ldOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkdldFVuaXF1ZVRocwoJCSAqIFB1cnBvc2U6ICBHZXQgYW4gYXJyYXkgb2YgdW5pcXVlIHRoIGVsZW1lbnRzLCBvbmUgZm9yIGVhY2ggY29sdW1uCgkJICogUmV0dXJuczogIGFycmF5IG5vZGU6YVJldHVybiAtIGxpc3Qgb2YgdW5pcXVlIHRocwoJCSAqIElucHV0czogICBvYmplY3Q6b1NldHRpbmdzIC0gZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgICAgICAgICAgbm9kZTpuSGVhZGVyIC0gYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIGxheW91dCBmcm9tIHRoaXMgbm9kZSAtIG9wdGlvbmFsCgkJICogICAgICAgICAgIGFycmF5IG9iamVjdDphTGF5b3V0IC0gdGhlYWQvdGZvb3QgbGF5b3V0IGZyb20gX2ZuRGV0ZWN0SGVhZGVyIC0gb3B0aW9uYWwKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRVbmlxdWVUaHMgKCBvU2V0dGluZ3MsIG5IZWFkZXIsIGFMYXlvdXQgKQoJCXsKCQkJdmFyIGFSZXR1cm4gPSBbXTsKCQkJaWYgKCB0eXBlb2YgYUxheW91dCA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWFMYXlvdXQgPSBvU2V0dGluZ3MuYW9IZWFkZXI7CgkJCQlpZiAoIHR5cGVvZiBuSGVhZGVyICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlhTGF5b3V0ID0gW107CgkJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBhTGF5b3V0LCBuSGVhZGVyICk7CgkJCQl9CgkJCX0KCgkJCWZvciAoIHZhciBpPTAsIGlMZW49YUxheW91dC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPWFMYXlvdXRbaV0ubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCXsKCQkJCQlpZiAoIGFMYXlvdXRbaV1bal0udW5pcXVlICYmIAoJCQkJCQkgKHR5cGVvZiBhUmV0dXJuW2pdID09ICd1bmRlZmluZWQnIHx8ICFvU2V0dGluZ3MuYlNvcnRDZWxsc1RvcCkgKQoJCQkJCXsKCQkJCQkJYVJldHVybltqXSA9IGFMYXlvdXRbaV1bal0uY2VsbDsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBhUmV0dXJuOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TY3JvbGxCYXJXaWR0aAoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIHdpZHRoIG9mIGEgc2Nyb2xsIGJhciBpbiB0aGlzIGJyb3dzZXIgYmVpbmcgdXNlZAoJCSAqIFJldHVybnM6ICBpbnQ6IC0gd2lkdGggaW4gcGl4ZWxzCgkJICogSW5wdXRzOiAgIC0KCQkgKiBOb3RlczogICAgQWxsIGNyZWRpdCBmb3IgdGhpcyBmdW5jdGlvbiBiZWxvbmdzIHRvIEFsZXhhbmRyZSBHb21lcy4gVGhhbmtzIGZvciBzaGFyaW5nIQoJCSAqICAgaHR0cDovL3d3dy5hbGV4YW5kcmUtZ29tZXMuY29tLz9wPTExNQoJCSAqLwoJCWZ1bmN0aW9uIF9mblNjcm9sbEJhcldpZHRoICgpCgkJeyAgCgkJCXZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgIAoJCQl2YXIgc3R5bGUgPSBpbm5lci5zdHlsZTsKCQkJc3R5bGUud2lkdGggPSAiMTAwJSI7ICAKCQkJc3R5bGUuaGVpZ2h0ID0gIjIwMHB4IjsgIAoJCQkKCQkJdmFyIG91dGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICAKCQkJc3R5bGUgPSBvdXRlci5zdHlsZTsKCQkJc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOyAgCgkJCXN0eWxlLnRvcCA9ICIwcHgiOyAgCgkJCXN0eWxlLmxlZnQgPSAiMHB4IjsgIAoJCQlzdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7ICAKCQkJc3R5bGUud2lkdGggPSAiMjAwcHgiOyAgCgkJCXN0eWxlLmhlaWdodCA9ICIxNTBweCI7ICAKCQkJc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsgIAoJCQlvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7ICAKCQkJCgkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXIpOyAgCgkJCXZhciB3MSA9IGlubmVyLm9mZnNldFdpZHRoOyAgCgkJCW91dGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7ICAKCQkJdmFyIHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7ICAKCQkJaWYgKCB3MSA9PSB3MiApCgkJCXsKCQkJCXcyID0gb3V0ZXIuY2xpZW50V2lkdGg7ICAKCQkJfQoJCQkKCQkJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlcik7IAoJCQlyZXR1cm4gKHcxIC0gdzIpOyAgCgkJfQoJCQoJCS8qCgkJICogRnVuY3Rpb246IF9mbkFwcGx5VG9DaGlsZHJlbgoJCSAqIFB1cnBvc2U6ICBBcHBseSBhIGdpdmVuIGZ1bmN0aW9uIHRvIHRoZSBkaXNwbGF5IGNoaWxkIG5vZGVzIG9mIGFuIGVsZW1lbnQgYXJyYXkgKHR5cGljYWxseQoJCSAqICAgVEQgY2hpbGRyZW4gb2YgVFIgcm93cwoJCSAqIFJldHVybnM6ICAtIChkb25lIGJ5IHJlZmVyZW5jZSkKCQkgKiBJbnB1dHM6ICAgZnVuY3Rpb246Zm4gLSBNZXRob2QgdG8gYXBwbHkgdG8gdGhlIG9iamVjdHMKCQkgKiAgICAgICAgICAgYXJyYXkgbm9kZXM6YW4xIC0gTGlzdCBvZiBlbGVtZW50cyB0byBsb29rIHRocm91Z2ggZm9yIGRpc3BsYXkgY2hpbGRyZW4KCQkgKiAgICAgICAgICAgYXJyYXkgbm9kZXM6YW4yIC0gQW5vdGhlciBsaXN0IChpZGVudGljYWwgc3RydWN0dXJlIHRvIHRoZSBmaXJzdCkgLSBvcHRpb25hbAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkFwcGx5VG9DaGlsZHJlbiggZm4sIGFuMSwgYW4yICkKCQl7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49YW4xLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWZvciAoIHZhciBqPTAsIGpMZW49YW4xW2ldLmNoaWxkTm9kZXMubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCXsKCQkJCQlpZiAoIGFuMVtpXS5jaGlsZE5vZGVzW2pdLm5vZGVUeXBlID09IDEgKQoJCQkJCXsKCQkJCQkJaWYgKCB0eXBlb2YgYW4yICE9ICd1bmRlZmluZWQnICkKCQkJCQkJewoJCQkJCQkJZm4oIGFuMVtpXS5jaGlsZE5vZGVzW2pdLCBhbjJbaV0uY2hpbGROb2Rlc1tqXSApOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJZm4oIGFuMVtpXS5jaGlsZE5vZGVzW2pdICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuTWFwCgkJICogUHVycG9zZTogIFNlZSBpZiBhIHByb3BlcnR5IGlzIGRlZmluZWQgb24gb25lIG9iamVjdCwgaWYgc28gYXNzaWduIGl0IHRvIHRoZSBvdGhlciBvYmplY3QKCQkgKiBSZXR1cm5zOiAgLSAoZG9uZSBieSByZWZlcmVuY2UpCgkJICogSW5wdXRzOiAgIG9iamVjdDpvUmV0IC0gdGFyZ2V0IG9iamVjdAoJCSAqICAgICAgICAgICBvYmplY3Q6b1NyYyAtIHNvdXJjZSBvYmplY3QKCQkgKiAgICAgICAgICAgc3RyaW5nOnNOYW1lIC0gcHJvcGVydHkKCQkgKiAgICAgICAgICAgc3RyaW5nOnNNYXBwZWROYW1lIC0gbmFtZSB0byBtYXAgdG9vIC0gb3B0aW9uYWwsIHNOYW1lIHVzZWQgaWYgbm90IGdpdmVuCgkJICovCgkJZnVuY3Rpb24gX2ZuTWFwKCBvUmV0LCBvU3JjLCBzTmFtZSwgc01hcHBlZE5hbWUgKQoJCXsKCQkJaWYgKCB0eXBlb2Ygc01hcHBlZE5hbWUgPT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlzTWFwcGVkTmFtZSA9IHNOYW1lOwoJCQl9CgkJCWlmICggdHlwZW9mIG9TcmNbc05hbWVdICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJb1JldFtzTWFwcGVkTmFtZV0gPSBvU3JjW3NOYW1lXTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXRSb3dEYXRhCgkJICogUHVycG9zZTogIEdldCBhbiBhcnJheSBvZiBkYXRhIGZvciBhIGdpdmVuIHJvdyBmcm9tIHRoZSBpbnRlcm5hbCBkYXRhIGNhY2hlCgkJICogUmV0dXJuczogIGFycmF5OiAtIERhdGEgYXJyYXkKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppUm93IC0gYW9EYXRhIHJvdyBpZAoJCSAqICAgICAgICAgICBzdHJpbmc6c1NwZWNpZmljIC0gZGF0YSBnZXQgdHlwZSAoJ3R5cGUnICdmaWx0ZXInICdzb3J0JykKCQkgKi8KCQlmdW5jdGlvbiBfZm5HZXRSb3dEYXRhKCBvU2V0dGluZ3MsIGlSb3csIHNTcGVjaWZpYyApCgkJewoJCQl2YXIgb3V0ID0gW107CgkJCWZvciAoIHZhciBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlvdXQucHVzaCggX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSwgc1NwZWNpZmljICkgKTsKCQkJfQoJCQlyZXR1cm4gb3V0OwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5HZXRDZWxsRGF0YQoJCSAqIFB1cnBvc2U6ICBHZXQgdGhlIGRhdGEgZm9yIGEgZ2l2ZW4gY2VsbCBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZSwgdGFraW5nIGludG8gYWNjb3VudCBkYXRhIG1hcHBpbmcKCQkgKiBSZXR1cm5zOiAgKjogLSBDZWxsIGRhdGEKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppUm93IC0gYW9EYXRhIHJvdyBpZAoJCSAqICAgICAgICAgICBpbnQ6aUNvbCAtIENvbHVtbiBpbmRleAoJCSAqICAgICAgICAgICBzdHJpbmc6c1NwZWNpZmljIC0gZGF0YSBnZXQgdHlwZSAoJ2Rpc3BsYXknLCAndHlwZScgJ2ZpbHRlcicgJ3NvcnQnKQoJCSAqLwoJCWZ1bmN0aW9uIF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGlDb2wsIHNTcGVjaWZpYyApCgkJewoJCQl2YXIgc0RhdGE7CgkJCXZhciBvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpQ29sXTsKCQkJdmFyIG9EYXRhID0gb1NldHRpbmdzLmFvRGF0YVtpUm93XS5fYURhdGE7CgoJCQlpZiAoIChzRGF0YT1vQ29sLmZuR2V0RGF0YSggb0RhdGEgKSkgPT09IHVuZGVmaW5lZCApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmlEcmF3RXJyb3IgIT0gb1NldHRpbmdzLmlEcmF3ICYmIG9Db2wuc0RlZmF1bHRDb250ZW50ID09PSBudWxsICkKCQkJCXsKCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgIlJlcXVlc3RlZCB1bmtub3duIHBhcmFtZXRlciAnIitvQ29sLm1EYXRhUHJvcCsKCQkJCQkJIicgZnJvbSB0aGUgZGF0YSBzb3VyY2UgZm9yIHJvdyAiK2lSb3cgKTsKCQkJCQlvU2V0dGluZ3MuaURyYXdFcnJvciA9IG9TZXR0aW5ncy5pRHJhdzsKCQkJCX0KCQkJCXJldHVybiBvQ29sLnNEZWZhdWx0Q29udGVudDsKCQkJfQoKCQkJLyogV2hlbiB0aGUgZGF0YSBzb3VyY2UgaXMgbnVsbCwgd2UgY2FuIHVzZSBkZWZhdWx0IGNvbHVtbiBkYXRhICovCgkJCWlmICggc0RhdGEgPT09IG51bGwgJiYgb0NvbC5zRGVmYXVsdENvbnRlbnQgIT09IG51bGwgKQoJCQl7CgkJCQlzRGF0YSA9IG9Db2wuc0RlZmF1bHRDb250ZW50OwoJCQl9CgoJCQlpZiAoIHNTcGVjaWZpYyA9PSAnZGlzcGxheScgJiYgc0RhdGEgPT09IG51bGwgKQoJCQl7CgkJCQlyZXR1cm4gJyc7CgkJCX0KCQkJcmV0dXJuIHNEYXRhOwoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TZXRDZWxsRGF0YQoJCSAqIFB1cnBvc2U6ICBTZXQgdGhlIHZhbHVlIGZvciBhIHNwZWNpZmljIGNlbGwsIGludG8gdGhlIGludGVybmFsIGRhdGEgY2FjaGUKCQkgKiBSZXR1cm5zOiAgKjogLSBDZWxsIGRhdGEKCQkgKiBJbnB1dHM6ICAgb2JqZWN0Om9TZXR0aW5ncyAtIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogICAgICAgICAgIGludDppUm93IC0gYW9EYXRhIHJvdyBpZAoJCSAqICAgICAgICAgICBpbnQ6aUNvbCAtIENvbHVtbiBpbmRleAoJCSAqICAgICAgICAgICAqOnZhbCAtIFZhbHVlIHRvIHNldAoJCSAqLwoJCWZ1bmN0aW9uIF9mblNldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGlDb2wsIHZhbCApCgkJewoJCQl2YXIgb0NvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaUNvbF07CgkJCXZhciBvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbaVJvd10uX2FEYXRhOwoKCQkJb0NvbC5mblNldERhdGEoIG9EYXRhLCB2YWwgKTsKCQl9CgkJCgkJLyoKCQkgKiBGdW5jdGlvbjogX2ZuR2V0T2JqZWN0RGF0YUZuCgkJICogUHVycG9zZTogIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSBhIHNvdXJjZSBvYmplY3QsIHRha2luZwoJCSAqICAgICAgICAgICBpbnRvIGFjY291bnQgdGhlIGFiaWxpdHkgdG8gdXNlIG5lc3RlZCBvYmplY3RzIGFzIGEgc291cmNlCgkJICogUmV0dXJuczogIGZ1bmN0aW9uOiAtIERhdGEgZ2V0IGZ1bmN0aW9uCgkJICogSW5wdXRzOiAgIHN0cmluZ3xpbnR8ZnVuY3Rpb246bVNvdXJjZSAtIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIG9iamVjdAoJCSAqLwoJCWZ1bmN0aW9uIF9mbkdldE9iamVjdERhdGFGbiggbVNvdXJjZSApCgkJewoJCQlpZiAoIG1Tb3VyY2UgPT09IG51bGwgKQoJCQl7CgkJCQkvKiBHaXZlIGFuIGVtcHR5IHN0cmluZyBmb3IgcmVuZGVyaW5nIC8gc29ydGluZyBldGMgKi8KCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCXJldHVybiBudWxsOwoJCQkJfTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT0gJ2Z1bmN0aW9uJyApCgkJCXsKCQkJICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkgICAgICAgIHJldHVybiBtU291cmNlKCBkYXRhICk7CgkJCSAgICB9OwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgbVNvdXJjZSA9PSAnc3RyaW5nJyAmJiBtU291cmNlLmluZGV4T2YoJy4nKSAhPSAtMSApCgkJCXsKCQkJCS8qIElmIHRoZXJlIGlzIGEgLiBpbiB0aGUgc291cmNlIHN0cmluZyB0aGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBpbiBhIG5lc3RlZCBvYmplY3QKCQkJCSAqIHdlIHByb3ZpZGUgdHdvICdxdWljaycgZnVuY3Rpb25zIGZvciB0aGUgbG9vayB1cCB0byBzcGVlZCB1cCB0aGUgbW9zdCBjb21tb24KCQkJCSAqIG9wZXJhdGlvbiwgYW5kIGEgZ2VuZXJhbGlzZWQgb25lIGZvciB3aGVuIGl0IGlzIG5lZWRlZAoJCQkJICovCgkJCQl2YXIgYSA9IG1Tb3VyY2Uuc3BsaXQoJy4nKTsKCQkJCWlmICggYS5sZW5ndGggPT0gMiApCgkJCQl7CgkJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7CgkJCQkJCXJldHVybiBkYXRhWyBhWzBdIF1bIGFbMV0gXTsKCQkJCQl9OwoJCQkJfQoJCQkJZWxzZSBpZiAoIGEubGVuZ3RoID09IDMgKQoJCQkJewoJCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCQlyZXR1cm4gZGF0YVsgYVswXSBdWyBhWzFdIF1bIGFbMl0gXTsKCQkJCQl9OwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSkgewoJCQkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCQkJewoJCQkJCQkJZGF0YSA9IGRhdGFbIGFbaV0gXTsKCQkJCQkJfQoJCQkJCQlyZXR1cm4gZGF0YTsKCQkJCQl9OwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogQXJyYXkgb3IgZmxhdCBvYmplY3QgbWFwcGluZyAqLwoJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7CgkJCQkJcmV0dXJuIGRhdGFbbVNvdXJjZV07CQoJCQkJfTsKCQkJfQoJCX0KCQkKCQkvKgoJCSAqIEZ1bmN0aW9uOiBfZm5TZXRPYmplY3REYXRhRm4KCQkgKiBQdXJwb3NlOiAgUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgZGF0YSBmcm9tIGEgc291cmNlIG9iamVjdCwgdGFraW5nCgkJICogICAgICAgICAgIGludG8gYWNjb3VudCB0aGUgYWJpbGl0eSB0byB1c2UgbmVzdGVkIG9iamVjdHMgYXMgYSBzb3VyY2UKCQkgKiBSZXR1cm5zOiAgZnVuY3Rpb246IC0gRGF0YSBzZXQgZnVuY3Rpb24KCQkgKiBJbnB1dHM6ICAgc3RyaW5nfGludHxmdW5jdGlvbjptU291cmNlIC0gVGhlIGRhdGEgc291cmNlIGZvciB0aGUgb2JqZWN0CgkJICovCgkJZnVuY3Rpb24gX2ZuU2V0T2JqZWN0RGF0YUZuKCBtU291cmNlICkKCQl7CgkJCWlmICggbVNvdXJjZSA9PT0gbnVsbCApCgkJCXsKCQkJCS8qIE5vdGhpbmcgdG8gZG8gd2hlbiB0aGUgZGF0YSBzb3VyY2UgaXMgbnVsbCAqLwoJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwpIHt9OwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgbVNvdXJjZSA9PSAnZnVuY3Rpb24nICkKCQkJewoJCQkgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwpIHsKCQkJICAgICAgICByZXR1cm4gbVNvdXJjZSggZGF0YSwgdmFsICk7CgkJCSAgICB9OwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgbVNvdXJjZSA9PSAnc3RyaW5nJyAmJiBtU291cmNlLmluZGV4T2YoJy4nKSAhPSAtMSApCgkJCXsKCQkJCS8qIExpa2UgdGhlIGdldCwgd2UgbmVlZCB0byBnZXQgZGF0YSBmcm9tIGEgbmVzdGVkIG9iamVjdC4gQWdhaW4gdHdvIGZhc3QgbG9va3VwCgkJCQkgKiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkLCBhbmQgYSBnZW5lcmFsaXNlZCBvbmUuCgkJCQkgKi8KCQkJCXZhciBhID0gbVNvdXJjZS5zcGxpdCgnLicpOwoJCQkJaWYgKCBhLmxlbmd0aCA9PSAyICkKCQkJCXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCkgewoJCQkJCQlkYXRhWyBhWzBdIF1bIGFbMV0gXSA9IHZhbDsKCQkJCQl9OwoJCQkJfQoJCQkJZWxzZSBpZiAoIGEubGVuZ3RoID09IDMgKQoJCQkJewoJCQkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7CgkJCQkJCWRhdGFbIGFbMF0gXVsgYVsxXSBdWyBhWzJdIF0gPSB2YWw7CgkJCQkJfTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCkgewoJCQkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoLTEgOyBpPGlMZW4gOyBpKysgKQoJCQkJCQl7CgkJCQkJCQlkYXRhID0gZGF0YVsgYVtpXSBdOwoJCQkJCQl9CgkJCQkJCWRhdGFbIGFbYS5sZW5ndGgtMV0gXSA9IHZhbDsKCQkJCQl9OwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogQXJyYXkgb3IgZmxhdCBvYmplY3QgbWFwcGluZyAqLwoJCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwpIHsKCQkJCQlkYXRhW21Tb3VyY2VdID0gdmFsOwkKCQkJCX07CgkJCX0KCQl9CgoJCQoJCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkJICogU2VjdGlvbiAtIEFQSQoJCSAqIEknbSBub3QgaGFwcHkgd2l0aCB0aGlzIHNvbHV0aW9uLi4uIC0gVG8gYmUgZml4ZWQgaW4gMi4wCgkJICovCgkJdGhpcy5vQXBpLl9mbkV4dGVybkFwaUZ1bmMgPSBfZm5FeHRlcm5BcGlGdW5jOwoJCXRoaXMub0FwaS5fZm5Jbml0YWxpc2UgPSBfZm5Jbml0YWxpc2U7CgkJdGhpcy5vQXBpLl9mbkluaXRDb21wbGV0ZSA9IF9mbkluaXRDb21wbGV0ZTsKCQl0aGlzLm9BcGkuX2ZuTGFuZ3VhZ2VQcm9jZXNzID0gX2ZuTGFuZ3VhZ2VQcm9jZXNzOwoJCXRoaXMub0FwaS5fZm5BZGRDb2x1bW4gPSBfZm5BZGRDb2x1bW47CgkJdGhpcy5vQXBpLl9mbkNvbHVtbk9wdGlvbnMgPSBfZm5Db2x1bW5PcHRpb25zOwoJCXRoaXMub0FwaS5fZm5BZGREYXRhID0gX2ZuQWRkRGF0YTsKCQl0aGlzLm9BcGkuX2ZuQ3JlYXRlVHIgPSBfZm5DcmVhdGVUcjsKCQl0aGlzLm9BcGkuX2ZuR2F0aGVyRGF0YSA9IF9mbkdhdGhlckRhdGE7CgkJdGhpcy5vQXBpLl9mbkJ1aWxkSGVhZCA9IF9mbkJ1aWxkSGVhZDsKCQl0aGlzLm9BcGkuX2ZuRHJhd0hlYWQgPSBfZm5EcmF3SGVhZDsKCQl0aGlzLm9BcGkuX2ZuRHJhdyA9IF9mbkRyYXc7CgkJdGhpcy5vQXBpLl9mblJlRHJhdyA9IF9mblJlRHJhdzsKCQl0aGlzLm9BcGkuX2ZuQWpheFVwZGF0ZSA9IF9mbkFqYXhVcGRhdGU7CgkJdGhpcy5vQXBpLl9mbkFqYXhVcGRhdGVEcmF3ID0gX2ZuQWpheFVwZGF0ZURyYXc7CgkJdGhpcy5vQXBpLl9mbkFkZE9wdGlvbnNIdG1sID0gX2ZuQWRkT3B0aW9uc0h0bWw7CgkJdGhpcy5vQXBpLl9mbkZlYXR1cmVIdG1sVGFibGUgPSBfZm5GZWF0dXJlSHRtbFRhYmxlOwoJCXRoaXMub0FwaS5fZm5TY3JvbGxEcmF3ID0gX2ZuU2Nyb2xsRHJhdzsKCQl0aGlzLm9BcGkuX2ZuQWp1c3RDb2x1bW5TaXppbmcgPSBfZm5BanVzdENvbHVtblNpemluZzsKCQl0aGlzLm9BcGkuX2ZuRmVhdHVyZUh0bWxGaWx0ZXIgPSBfZm5GZWF0dXJlSHRtbEZpbHRlcjsKCQl0aGlzLm9BcGkuX2ZuRmlsdGVyQ29tcGxldGUgPSBfZm5GaWx0ZXJDb21wbGV0ZTsKCQl0aGlzLm9BcGkuX2ZuRmlsdGVyQ3VzdG9tID0gX2ZuRmlsdGVyQ3VzdG9tOwoJCXRoaXMub0FwaS5fZm5GaWx0ZXJDb2x1bW4gPSBfZm5GaWx0ZXJDb2x1bW47CgkJdGhpcy5vQXBpLl9mbkZpbHRlciA9IF9mbkZpbHRlcjsKCQl0aGlzLm9BcGkuX2ZuQnVpbGRTZWFyY2hBcnJheSA9IF9mbkJ1aWxkU2VhcmNoQXJyYXk7CgkJdGhpcy5vQXBpLl9mbkJ1aWxkU2VhcmNoUm93ID0gX2ZuQnVpbGRTZWFyY2hSb3c7CgkJdGhpcy5vQXBpLl9mbkZpbHRlckNyZWF0ZVNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaDsKCQl0aGlzLm9BcGkuX2ZuRGF0YVRvU2VhcmNoID0gX2ZuRGF0YVRvU2VhcmNoOwoJCXRoaXMub0FwaS5fZm5Tb3J0ID0gX2ZuU29ydDsKCQl0aGlzLm9BcGkuX2ZuU29ydEF0dGFjaExpc3RlbmVyID0gX2ZuU29ydEF0dGFjaExpc3RlbmVyOwoJCXRoaXMub0FwaS5fZm5Tb3J0aW5nQ2xhc3NlcyA9IF9mblNvcnRpbmdDbGFzc2VzOwoJCXRoaXMub0FwaS5fZm5GZWF0dXJlSHRtbFBhZ2luYXRlID0gX2ZuRmVhdHVyZUh0bWxQYWdpbmF0ZTsKCQl0aGlzLm9BcGkuX2ZuUGFnZUNoYW5nZSA9IF9mblBhZ2VDaGFuZ2U7CgkJdGhpcy5vQXBpLl9mbkZlYXR1cmVIdG1sSW5mbyA9IF9mbkZlYXR1cmVIdG1sSW5mbzsKCQl0aGlzLm9BcGkuX2ZuVXBkYXRlSW5mbyA9IF9mblVwZGF0ZUluZm87CgkJdGhpcy5vQXBpLl9mbkZlYXR1cmVIdG1sTGVuZ3RoID0gX2ZuRmVhdHVyZUh0bWxMZW5ndGg7CgkJdGhpcy5vQXBpLl9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZyA9IF9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZzsKCQl0aGlzLm9BcGkuX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkgPSBfZm5Qcm9jZXNzaW5nRGlzcGxheTsKCQl0aGlzLm9BcGkuX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXggPSBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleDsKCQl0aGlzLm9BcGkuX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUgPSBfZm5Db2x1bW5JbmRleFRvVmlzaWJsZTsKCQl0aGlzLm9BcGkuX2ZuTm9kZVRvRGF0YUluZGV4ID0gX2ZuTm9kZVRvRGF0YUluZGV4OwoJCXRoaXMub0FwaS5fZm5WaXNibGVDb2x1bW5zID0gX2ZuVmlzYmxlQ29sdW1uczsKCQl0aGlzLm9BcGkuX2ZuQ2FsY3VsYXRlRW5kID0gX2ZuQ2FsY3VsYXRlRW5kOwoJCXRoaXMub0FwaS5fZm5Db252ZXJ0VG9XaWR0aCA9IF9mbkNvbnZlcnRUb1dpZHRoOwoJCXRoaXMub0FwaS5fZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMgPSBfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHM7CgkJdGhpcy5vQXBpLl9mblNjcm9sbGluZ1dpZHRoQWRqdXN0ID0gX2ZuU2Nyb2xsaW5nV2lkdGhBZGp1c3Q7CgkJdGhpcy5vQXBpLl9mbkdldFdpZGVzdE5vZGUgPSBfZm5HZXRXaWRlc3ROb2RlOwoJCXRoaXMub0FwaS5fZm5HZXRNYXhMZW5TdHJpbmcgPSBfZm5HZXRNYXhMZW5TdHJpbmc7CgkJdGhpcy5vQXBpLl9mblN0cmluZ1RvQ3NzID0gX2ZuU3RyaW5nVG9Dc3M7CgkJdGhpcy5vQXBpLl9mbkFycmF5Q21wID0gX2ZuQXJyYXlDbXA7CgkJdGhpcy5vQXBpLl9mbkRldGVjdFR5cGUgPSBfZm5EZXRlY3RUeXBlOwoJCXRoaXMub0FwaS5fZm5TZXR0aW5nc0Zyb21Ob2RlID0gX2ZuU2V0dGluZ3NGcm9tTm9kZTsKCQl0aGlzLm9BcGkuX2ZuR2V0RGF0YU1hc3RlciA9IF9mbkdldERhdGFNYXN0ZXI7CgkJdGhpcy5vQXBpLl9mbkdldFRyTm9kZXMgPSBfZm5HZXRUck5vZGVzOwoJCXRoaXMub0FwaS5fZm5HZXRUZE5vZGVzID0gX2ZuR2V0VGROb2RlczsKCQl0aGlzLm9BcGkuX2ZuRXNjYXBlUmVnZXggPSBfZm5Fc2NhcGVSZWdleDsKCQl0aGlzLm9BcGkuX2ZuRGVsZXRlSW5kZXggPSBfZm5EZWxldGVJbmRleDsKCQl0aGlzLm9BcGkuX2ZuUmVPcmRlckluZGV4ID0gX2ZuUmVPcmRlckluZGV4OwoJCXRoaXMub0FwaS5fZm5Db2x1bW5PcmRlcmluZyA9IF9mbkNvbHVtbk9yZGVyaW5nOwoJCXRoaXMub0FwaS5fZm5Mb2cgPSBfZm5Mb2c7CgkJdGhpcy5vQXBpLl9mbkNsZWFyVGFibGUgPSBfZm5DbGVhclRhYmxlOwoJCXRoaXMub0FwaS5fZm5TYXZlU3RhdGUgPSBfZm5TYXZlU3RhdGU7CgkJdGhpcy5vQXBpLl9mbkxvYWRTdGF0ZSA9IF9mbkxvYWRTdGF0ZTsKCQl0aGlzLm9BcGkuX2ZuQ3JlYXRlQ29va2llID0gX2ZuQ3JlYXRlQ29va2llOwoJCXRoaXMub0FwaS5fZm5SZWFkQ29va2llID0gX2ZuUmVhZENvb2tpZTsKCQl0aGlzLm9BcGkuX2ZuRGV0ZWN0SGVhZGVyID0gX2ZuRGV0ZWN0SGVhZGVyOwoJCXRoaXMub0FwaS5fZm5HZXRVbmlxdWVUaHMgPSBfZm5HZXRVbmlxdWVUaHM7CgkJdGhpcy5vQXBpLl9mblNjcm9sbEJhcldpZHRoID0gX2ZuU2Nyb2xsQmFyV2lkdGg7CgkJdGhpcy5vQXBpLl9mbkFwcGx5VG9DaGlsZHJlbiA9IF9mbkFwcGx5VG9DaGlsZHJlbjsKCQl0aGlzLm9BcGkuX2ZuTWFwID0gX2ZuTWFwOwoJCXRoaXMub0FwaS5fZm5HZXRSb3dEYXRhID0gX2ZuR2V0Um93RGF0YTsKCQl0aGlzLm9BcGkuX2ZuR2V0Q2VsbERhdGEgPSBfZm5HZXRDZWxsRGF0YTsKCQl0aGlzLm9BcGkuX2ZuU2V0Q2VsbERhdGEgPSBfZm5TZXRDZWxsRGF0YTsKCQl0aGlzLm9BcGkuX2ZuR2V0T2JqZWN0RGF0YUZuID0gX2ZuR2V0T2JqZWN0RGF0YUZuOwoJCXRoaXMub0FwaS5fZm5TZXRPYmplY3REYXRhRm4gPSBfZm5TZXRPYmplY3REYXRhRm47CgkJCgkJCgkJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCQkgKiBTZWN0aW9uIC0gQ29uc3RydWN0b3IKCQkgKi8KCQkKCQkvKiBXYW50IHRvIGJlIGFibGUgdG8gcmVmZXJlbmNlICJ0aGlzIiBpbnNpZGUgdGhlIHRoaXMuZWFjaCBmdW5jdGlvbiAqLwoJCXZhciBfdGhhdCA9IHRoaXM7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpCgkJewoJCQl2YXIgaT0wLCBpTGVuLCBqLCBqTGVuLCBrLCBrTGVuOwoJCQkKCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZS1pbml0YWxpc2luZyBhIHRhYmxlICovCgkJCWZvciAoIGk9MCwgaUxlbj1fYW9TZXR0aW5ncy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkvKiBCYXNlIGNoZWNrIG9uIHRhYmxlIG5vZGUgKi8KCQkJCWlmICggX2FvU2V0dGluZ3NbaV0ublRhYmxlID09IHRoaXMgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIG9Jbml0ID09ICd1bmRlZmluZWQnIHx8IAoJCQkJCSAgICggdHlwZW9mIG9Jbml0LmJSZXRyaWV2ZSAhPSAndW5kZWZpbmVkJyAmJiBvSW5pdC5iUmV0cmlldmUgPT09IHRydWUgKSApCgkJCQkJewoJCQkJCQlyZXR1cm4gX2FvU2V0dGluZ3NbaV0ub0luc3RhbmNlOwoJCQkJCX0KCQkJCQllbHNlIGlmICggdHlwZW9mIG9Jbml0LmJEZXN0cm95ICE9ICd1bmRlZmluZWQnICYmIG9Jbml0LmJEZXN0cm95ID09PSB0cnVlICkKCQkJCQl7CgkJCQkJCV9hb1NldHRpbmdzW2ldLm9JbnN0YW5jZS5mbkRlc3Ryb3koKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCV9mbkxvZyggX2FvU2V0dGluZ3NbaV0sIDAsICJDYW5ub3QgcmVpbml0aWFsaXNlIERhdGFUYWJsZS5cblxuIisKCQkJCQkJCSJUbyByZXRyaWV2ZSB0aGUgRGF0YVRhYmxlcyBvYmplY3QgZm9yIHRoaXMgdGFibGUsIHBsZWFzZSBwYXNzIGVpdGhlciBubyBhcmd1bWVudHMgIisKCQkJCQkJCSJ0byB0aGUgZGF0YVRhYmxlKCkgZnVuY3Rpb24sIG9yIHNldCBiUmV0cmlldmUgdG8gdHJ1ZS4gQWx0ZXJuYXRpdmVseSwgdG8gZGVzdG9yeSAiKwoJCQkJCQkJInRoZSBvbGQgdGFibGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUsIHNldCBiRGVzdHJveSB0byB0cnVlIChub3RlIHRoYXQgYSBsb3Qgb2YgIisKCQkJCQkJCSJjaGFuZ2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBtYWRlIHRocm91Z2ggdGhlIEFQSSB3aGljaCBpcyB1c3VhbGx5IG11Y2ggIisKCQkJCQkJCSJmYXN0ZXIpLiIgKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogSWYgdGhlIGVsZW1lbnQgd2UgYXJlIGluaXRpYWxpc2luZyBoYXMgdGhlIHNhbWUgSUQgYXMgYSB0YWJsZSB3aGljaCB3YXMgcHJldmlvdXNseQoJCQkJICogaW5pdGlhbGlzZWQsIGJ1dCB0aGUgdGFibGUgbm9kZXMgZG9uJ3QgbWF0Y2ggKGZyb20gYmVmb3JlKSB0aGVuIHdlIGRlc3RvcnkgdGhlIG9sZAoJCQkJICogaW5zdGFuY2UgYnkgc2ltcGx5IGRlbGV0aW5nIGl0LiBUaGlzIGlzIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHRhYmxlIGhhcyBiZWVuCgkJCQkgKiBkZXN0cm95ZWQgYnkgb3RoZXIgbWV0aG9kcy4gQW55b25lIHVzaW5nIG5vbi1pZCBzZWxlY3RvcnMgd2lsbCBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHkKCQkJCSAqLwoJCQkJaWYgKCBfYW9TZXR0aW5nc1tpXS5zVGFibGVJZCAhPT0gIiIgJiYgX2FvU2V0dGluZ3NbaV0uc1RhYmxlSWQgPT0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2lkJykgKQoJCQkJewoJCQkJCV9hb1NldHRpbmdzLnNwbGljZSggaSwgMSApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBNYWtlIGEgY29tcGxldGUgYW5kIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIHNldHRpbmdzIG9iamVjdCAqLwoJCQl2YXIgb1NldHRpbmdzID0gbmV3IGNsYXNzU2V0dGluZ3MoKTsKCQkJX2FvU2V0dGluZ3MucHVzaCggb1NldHRpbmdzICk7CgkJCQoJCQl2YXIgYkluaXRIYW5kZWRPZmYgPSBmYWxzZTsKCQkJdmFyIGJVc2VQYXNzZWREYXRhID0gZmFsc2U7CgkJCQoJCQkvKiBTZXQgdGhlIGlkICovCgkJCXZhciBzSWQgPSB0aGlzLmdldEF0dHJpYnV0ZSggJ2lkJyApOwoJCQlpZiAoIHNJZCAhPT0gbnVsbCApCgkJCXsKCQkJCW9TZXR0aW5ncy5zVGFibGVJZCA9IHNJZDsKCQkJCW9TZXR0aW5ncy5zSW5zdGFuY2UgPSBzSWQ7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlvU2V0dGluZ3Muc0luc3RhbmNlID0gX29FeHQuX29FeHRlcm5Db25maWcuaU5leHRVbmlxdWUgKys7CgkJCX0KCQkJCgkJCS8qIFNhbml0eSBjaGVjayAqLwoJCQlpZiAoIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAndGFibGUnICkKCQkJewoJCQkJX2ZuTG9nKCBvU2V0dGluZ3MsIDAsICJBdHRlbXB0ZWQgdG8gaW5pdGlhbGlzZSBEYXRhVGFibGVzIG9uIGEgbm9kZSB3aGljaCBpcyBub3QgYSAiKwoJCQkJCSJ0YWJsZTogIit0aGlzLm5vZGVOYW1lICk7CgkJCQlyZXR1cm47CgkJCX0KCQkJCgkJCS8qIFNldCB0aGUgdGFibGUgbm9kZSAqLwoJCQlvU2V0dGluZ3MublRhYmxlID0gdGhpczsKCQkJCgkJCS8qIEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlICd0aGlzJyBpbnN0YW5jZSBmb3IgdGhlIHRhYmxlLiBOb3RlIHRoYXQgaWYgdGhpcyB0YWJsZSBpcyBiZWluZwoJCQkgKiBjcmVhdGVkIHdpdGggb3RoZXJzLCB3ZSByZXRyaWV2ZSBhIHVuaXF1ZSBpbnN0YW5jZSB0byBlYXNlIEFQSSBhY2Nlc3MuCgkJCSAqLwoJCQlvU2V0dGluZ3Mub0luc3RhbmNlID0gX3RoYXQubGVuZ3RoID09IDEgPyBfdGhhdCA6ICQodGhpcykuZGF0YVRhYmxlKCk7CgkJCQoJCQkvKiBCaW5kIHRoZSBBUEkgZnVuY3Rpb25zIHRvIHRoZSBzZXR0aW5ncywgc28gd2UgY2FuIHBlcmZvcm0gYWN0aW9ucyB3aGVuZXZlciBvU2V0dGluZ3MgaXMKCQkJICogYXZhaWxhYmxlCgkJCSAqLwoJCQlvU2V0dGluZ3Mub0FwaSA9IF90aGF0Lm9BcGk7CgkJCQoJCQkvKiBTdGF0ZSB0aGUgdGFibGUncyB3aWR0aCBmb3IgaWYgYSBkZXN0cm95IGlzIGNhbGxlZCBhdCBhIGxhdGVyIHRpbWUgKi8KCQkJb1NldHRpbmdzLnNEZXN0cm95V2lkdGggPSAkKHRoaXMpLndpZHRoKCk7CgkJCQoJCQkvKiBTdG9yZSB0aGUgZmVhdHVyZXMgdGhhdCB3ZSBoYXZlIGF2YWlsYWJsZSAqLwoJCQlpZiAoIHR5cGVvZiBvSW5pdCAhPSAndW5kZWZpbmVkJyAmJiBvSW5pdCAhPT0gbnVsbCApCgkJCXsKCQkJCW9TZXR0aW5ncy5vSW5pdCA9IG9Jbml0OwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJQYWdpbmF0ZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9GZWF0dXJlcywgb0luaXQsICJiTGVuZ3RoQ2hhbmdlIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgImJGaWx0ZXIiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYlNvcnQiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYkluZm8iICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYlByb2Nlc3NpbmciICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYkF1dG9XaWR0aCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9GZWF0dXJlcywgb0luaXQsICJiU29ydENsYXNzZXMiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYlNlcnZlclNpZGUiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vRmVhdHVyZXMsIG9Jbml0LCAiYkRlZmVyUmVuZGVyIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub1Njcm9sbCwgb0luaXQsICJzU2Nyb2xsWCIsICJzWCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAic1Njcm9sbFhJbm5lciIsICJzWElubmVyIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub1Njcm9sbCwgb0luaXQsICJzU2Nyb2xsWSIsICJzWSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAiYlNjcm9sbENvbGxhcHNlIiwgImJDb2xsYXBzZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAiYlNjcm9sbEluZmluaXRlIiwgImJJbmZpbml0ZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLm9TY3JvbGwsIG9Jbml0LCAiaVNjcm9sbExvYWRHYXAiLCAiaUxvYWRHYXAiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgImJTY3JvbGxBdXRvQ3NzIiwgImJBdXRvQ3NzIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYXNTdHJpcENsYXNzZXMiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmblByZURyYXdDYWxsYmFjayIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImZuUm93Q2FsbGJhY2siICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmbkhlYWRlckNhbGxiYWNrIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiZm5Gb290ZXJDYWxsYmFjayIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImZuQ29va2llQ2FsbGJhY2siICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJmbkluaXRDb21wbGV0ZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImZuU2VydmVyRGF0YSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImZuRm9ybWF0TnVtYmVyIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYWFTb3J0aW5nIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYWFTb3J0aW5nRml4ZWQiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJhTGVuZ3RoTWVudSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgInNQYWdpbmF0aW9uVHlwZSIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgInNBamF4U291cmNlIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAic0FqYXhEYXRhUHJvcCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImlDb29raWVEdXJhdGlvbiIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgInNDb29raWVQcmVmaXgiICk7CgkJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsICJzRG9tIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYlNvcnRDZWxsc1RvcCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgIm9TZWFyY2giLCAib1ByZXZpb3VzU2VhcmNoIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3MsIG9Jbml0LCAiYW9TZWFyY2hDb2xzIiwgImFvUHJlU2VhcmNoQ29scyIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImlEaXNwbGF5TGVuZ3RoIiwgIl9pRGlzcGxheUxlbmd0aCIgKTsKCQkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgImJKUXVlcnlVSSIsICJiSlVJIiApOwoJCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvSW5pdCwgImZuSW5mb0NhbGxiYWNrIiApOwoJCQkJCgkJCQkvKiBDYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIGFycmF5IGRyaXZlbiAqLwoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuZm5EcmF3Q2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvRHJhd0NhbGxiYWNrLnB1c2goIHsKCQkJCQkJImZuIjogb0luaXQuZm5EcmF3Q2FsbGJhY2ssCgkJCQkJCSJzTmFtZSI6ICJ1c2VyIgoJCQkJCX0gKTsKCQkJCX0KCQkJCQoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuZm5TdGF0ZVNhdmVDYWxsYmFjayA9PSAnZnVuY3Rpb24nICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYW9TdGF0ZVNhdmUucHVzaCggewoJCQkJCQkiZm4iOiBvSW5pdC5mblN0YXRlU2F2ZUNhbGxiYWNrLAoJCQkJCQkic05hbWUiOiAidXNlciIKCQkJCQl9ICk7CgkJCQl9CgkJCQkKCQkJCWlmICggdHlwZW9mIG9Jbml0LmZuU3RhdGVMb2FkQ2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvU3RhdGVMb2FkLnB1c2goIHsKCQkJCQkJImZuIjogb0luaXQuZm5TdGF0ZUxvYWRDYWxsYmFjaywKCQkJCQkJInNOYW1lIjogInVzZXIiCgkJCQkJfSApOwoJCQkJfQoJCQkJCgkJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNlcnZlclNpZGUgJiYgb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCAmJgoJCQkJCSAgIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnRDbGFzc2VzICkKCQkJCXsKCQkJCQkvKiBFbmFibGUgc29ydCBjbGFzc2VzIGZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLiBTYWZlIHRvIGRvIGl0IGhlcmUsIHNpbmNlIHNlcnZlci1zaWRlCgkJCQkJICogcHJvY2Vzc2luZyBtdXN0IGJlIGVuYWJsZWQgYnkgdGhlIGRldmVsb3BlcgoJCQkJCSAqLwoJCQkJCW9TZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCQkJCSJmbiI6IF9mblNvcnRpbmdDbGFzc2VzLAoJCQkJCQkic05hbWUiOiAic2VydmVyX3NpZGVfc29ydF9jbGFzc2VzIgoJCQkJCX0gKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJEZWZlclJlbmRlciApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFvRHJhd0NhbGxiYWNrLnB1c2goIHsKCQkJCQkJImZuIjogX2ZuU29ydGluZ0NsYXNzZXMsCgkJCQkJCSJzTmFtZSI6ICJkZWZlcl9zb3J0X2NsYXNzZXMiCgkJCQkJfSApOwoJCQkJfQoJCQkJCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5iSlF1ZXJ5VUkgIT0gJ3VuZGVmaW5lZCcgJiYgb0luaXQuYkpRdWVyeVVJICkKCQkJCXsKCQkJCQkvKiBVc2UgdGhlIEpVSSBjbGFzc2VzIG9iamVjdCBmb3IgZGlzcGxheS4gWW91IGNvdWxkIGNsb25lIHRoZSBvU3RkQ2xhc3NlcyBvYmplY3QgaWYgCgkJCQkJICogeW91IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSB0YWJsZXMgd2l0aCBtdWx0aXBsZSBpbmRlcGVuZGVudCBjbGFzc2VzIAoJCQkJCSAqLwoJCQkJCW9TZXR0aW5ncy5vQ2xhc3NlcyA9IF9vRXh0Lm9KVUlDbGFzc2VzOwoJCQkJCQoJCQkJCWlmICggdHlwZW9mIG9Jbml0LnNEb20gPT0gJ3VuZGVmaW5lZCcgKQoJCQkJCXsKCQkJCQkJLyogU2V0IHRoZSBET00gdG8gdXNlIGEgbGF5b3V0IHN1aXRhYmxlIGZvciBqUXVlcnkgVUkncyB0aGVtaW5nICovCgkJCQkJCW9TZXR0aW5ncy5zRG9tID0gJzwiSCJsZnI+dDwiRiJpcD4nOwoJCQkJCX0KCQkJCX0KCQkJCQoJCQkJLyogQ2FsY3VsYXRlIHRoZSBzY3JvbGwgYmFyIHdpZHRoIGFuZCBjYWNoZSBpdCBmb3IgdXNlIGxhdGVyIG9uICovCgkJCQlpZiAoIG9TZXR0aW5ncy5vU2Nyb2xsLnNYICE9PSAiIiB8fCBvU2V0dGluZ3Mub1Njcm9sbC5zWSAhPT0gIiIgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5vU2Nyb2xsLmlCYXJXaWR0aCA9IF9mblNjcm9sbEJhcldpZHRoKCk7CgkJCQl9CgkJCQkKCQkJCWlmICggdHlwZW9mIG9Jbml0LmlEaXNwbGF5U3RhcnQgIT0gJ3VuZGVmaW5lZCcgJiYgCgkJCQkgICAgIHR5cGVvZiBvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCS8qIERpc3BsYXkgc3RhcnQgcG9pbnQsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHNhdmUgc2F2aW5nICovCgkJCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gb0luaXQuaURpc3BsYXlTdGFydDsKCQkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBvSW5pdC5pRGlzcGxheVN0YXJ0OwoJCQkJfQoJCQkJCgkJCQkvKiBNdXN0IGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIGNvb2tpZSEgKi8KCQkJCWlmICggdHlwZW9mIG9Jbml0LmJTdGF0ZVNhdmUgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5vRmVhdHVyZXMuYlN0YXRlU2F2ZSA9IG9Jbml0LmJTdGF0ZVNhdmU7CgkJCQkJX2ZuTG9hZFN0YXRlKCBvU2V0dGluZ3MsIG9Jbml0ICk7CgkJCQkJb1NldHRpbmdzLmFvRHJhd0NhbGxiYWNrLnB1c2goIHsKCQkJCQkJImZuIjogX2ZuU2F2ZVN0YXRlLAoJCQkJCQkic05hbWUiOiAic3RhdGVfc2F2ZSIKCQkJCQl9ICk7CgkJCQl9CgoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuaURlZmVyTG9hZGluZyAhPSAndW5kZWZpbmVkJyApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmJEZWZlckxvYWRpbmcgPSB0cnVlOwoJCQkJCW9TZXR0aW5ncy5faVJlY29yZHNUb3RhbCA9IG9Jbml0LmlEZWZlckxvYWRpbmc7CgkJCQkJb1NldHRpbmdzLl9pUmVjb3Jkc0Rpc3BsYXkgPSBvSW5pdC5pRGVmZXJMb2FkaW5nOwoJCQkJfQoJCQkJCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5hYURhdGEgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCWJVc2VQYXNzZWREYXRhID0gdHJ1ZTsKCQkJCX0KCQkJCQoJCQkJLyogQmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgKi8KCQkJCS8qIGFvQ29sdW1ucyAvIGFvRGF0YSAtIHJlbW92ZSBhdCBzb21lIHBvaW50Li4uICovCgkJCQlpZiAoIHR5cGVvZiBvSW5pdCAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb0luaXQuYW9EYXRhICE9ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvSW5pdC5hb0NvbHVtbnMgPSBvSW5pdC5hb0RhdGE7CgkJCQl9CgkJCQkKCQkJCS8qIExhbmd1YWdlIGRlZmluaXRpb25zICovCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5vTGFuZ3VhZ2UgIT0gJ3VuZGVmaW5lZCcgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIG9Jbml0Lm9MYW5ndWFnZS5zVXJsICE9ICd1bmRlZmluZWQnICYmIG9Jbml0Lm9MYW5ndWFnZS5zVXJsICE9PSAiIiApCgkJCQkJewoJCQkJCQkvKiBHZXQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb25zIGZyb20gYSBmaWxlICovCgkJCQkJCW9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc1VybCA9IG9Jbml0Lm9MYW5ndWFnZS5zVXJsOwoJCQkJCQkkLmdldEpTT04oIG9TZXR0aW5ncy5vTGFuZ3VhZ2Uuc1VybCwgbnVsbCwgZnVuY3Rpb24oIGpzb24gKSB7IAoJCQkJCQkJX2ZuTGFuZ3VhZ2VQcm9jZXNzKCBvU2V0dGluZ3MsIGpzb24sIHRydWUgKTsgfSApOwoJCQkJCQliSW5pdEhhbmRlZE9mZiA9IHRydWU7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCV9mbkxhbmd1YWdlUHJvY2Vzcyggb1NldHRpbmdzLCBvSW5pdC5vTGFuZ3VhZ2UsIGZhbHNlICk7CgkJCQkJfQoJCQkJfQoJCQkJLyogV2FybmluZzogVGhlIF9mbkxhbmd1YWdlUHJvY2VzcyBmdW5jdGlvbiBpcyBhc3luYyB0byB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZnVuY3Rpb24gZHVlCgkJCQkgKiB0byB0aGUgWEhSLiBXZSB1c2UgX2JJbml0aWFsaXNlZCBpbiBfZm5MYW5ndWFnZVByb2Nlc3MoKSB0byBjaGVjayB0aGlzIHRoZSBwcm9jZXNzaW5nIAoJCQkJICogYmVsb3cgaXMgY29tcGxldGUuIFRoZSByZWFzb24gZm9yIHNwbGl0aW5nIGl0IGxpa2UgdGhpcyBpcyBvcHRpbWlzYXRpb24gLSB3ZSBjYW4gZmlyZQoJCQkJICogb2ZmIHRoZSBYSFIgKGlmIG5lZWRlZCkgYW5kIHRoZW4gY29udGludWUgcHJvY2Vzc2luZyB0aGUgZGF0YS4KCQkJCSAqLwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJLyogQ3JlYXRlIGEgZHVtbXkgb2JqZWN0IGZvciBxdWljayBtYW5pcHVsYXRpb24gbGF0ZXIgb24uICovCgkJCQlvSW5pdCA9IHt9OwoJCQl9CgkJCQoJCQkvKgoJCQkgKiBTdHJpcGVzCgkJCSAqIEFkZCB0aGUgc3RyaXAgY2xhc3NlcyBub3cgdGhhdCB3ZSBrbm93IHdoaWNoIGNsYXNzZXMgdG8gYXBwbHkgLSB1bmxlc3Mgb3ZlcnJ1bGVkCgkJCSAqLwoJCQlpZiAoIHR5cGVvZiBvSW5pdC5hc1N0cmlwQ2xhc3NlcyA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCW9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlcy5wdXNoKCBvU2V0dGluZ3Mub0NsYXNzZXMuc1N0cmlwT2RkICk7CgkJCQlvU2V0dGluZ3MuYXNTdHJpcENsYXNzZXMucHVzaCggb1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcEV2ZW4gKTsKCQkJfQoJCQkKCQkJLyogUmVtb3ZlIHJvdyBzdHJpcGUgY2xhc3NlcyBpZiB0aGV5IGFyZSBhbHJlYWR5IG9uIHRoZSB0YWJsZSByb3cgKi8KCQkJdmFyIGJTdHJpcGVSZW1vdmUgPSBmYWxzZTsKCQkJdmFyIGFuUm93cyA9ICQoJz50Ym9keT50cicsIHRoaXMpOwoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggYW5Sb3dzLmZpbHRlcigiOmx0KDIpIikuaGFzQ2xhc3MoIG9TZXR0aW5ncy5hc1N0cmlwQ2xhc3Nlc1tpXSkgKQoJCQkJewoJCQkJCWJTdHJpcGVSZW1vdmUgPSB0cnVlOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCQkJCgkJCWlmICggYlN0cmlwZVJlbW92ZSApCgkJCXsKCQkJCS8qIFN0b3JlIHRoZSBjbGFzc2VzIHdoaWNoIHdlIGFyZSBhYm91dCB0byByZW1vdmUgc28gdGhleSBjYW4gYmUgcmVhZGRlZCBvbiBkZXN0b3J5ICovCgkJCQlvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzID0gWyAnJywgJycgXTsKCQkJCWlmICggJChhblJvd3NbMF0pLmhhc0NsYXNzKG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBPZGQpICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzBdICs9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBPZGQrIiAiOwoJCQkJfQoJCQkJaWYgKCAkKGFuUm93c1swXSkuaGFzQ2xhc3Mob1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcEV2ZW4pICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYXNEZXN0b3J5U3RyaXBzWzBdICs9IG9TZXR0aW5ncy5vQ2xhc3Nlcy5zU3RyaXBFdmVuOwoJCQkJfQoJCQkJaWYgKCAkKGFuUm93c1sxXSkuaGFzQ2xhc3Mob1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcE9kZCkgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hc0Rlc3RvcnlTdHJpcHNbMV0gKz0gb1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcE9kZCsiICI7CgkJCQl9CgkJCQlpZiAoICQoYW5Sb3dzWzFdKS5oYXNDbGFzcyhvU2V0dGluZ3Mub0NsYXNzZXMuc1N0cmlwRXZlbikgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hc0Rlc3RvcnlTdHJpcHNbMV0gKz0gb1NldHRpbmdzLm9DbGFzc2VzLnNTdHJpcEV2ZW47CgkJCQl9CgkJCQkKCQkJCWFuUm93cy5yZW1vdmVDbGFzcyggb1NldHRpbmdzLmFzU3RyaXBDbGFzc2VzLmpvaW4oJyAnKSApOwoJCQl9CgkJCQoJCQkvKgoJCQkgKiBDb2x1bW5zCgkJCSAqIFNlZSBpZiB3ZSBzaG91bGQgbG9hZCBjb2x1bW5zIGF1dG9tYXRpY2FsbHkgb3IgdXNlIGRlZmluZWQgb25lcwoJCQkgKi8KCQkJdmFyIGFuVGhzID0gW107CgkJCXZhciBhb0NvbHVtbnNJbml0OwoJCQl2YXIgblRoZWFkID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKTsKCQkJaWYgKCBuVGhlYWQubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBvU2V0dGluZ3MuYW9IZWFkZXIsIG5UaGVhZFswXSApOwoJCQkJYW5UaHMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBJZiBub3QgZ2l2ZW4gYSBjb2x1bW4gYXJyYXksIGdlbmVyYXRlIG9uZSB3aXRoIG51bGxzICovCgkJCWlmICggdHlwZW9mIG9Jbml0LmFvQ29sdW1ucyA9PSAndW5kZWZpbmVkJyApCgkJCXsKCQkJCWFvQ29sdW1uc0luaXQgPSBbXTsKCQkJCWZvciAoIGk9MCwgaUxlbj1hblRocy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWFvQ29sdW1uc0luaXQucHVzaCggbnVsbCApOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYW9Db2x1bW5zSW5pdCA9IG9Jbml0LmFvQ29sdW1uczsKCQkJfQoJCQkKCQkJLyogQWRkIHRoZSBjb2x1bW5zICovCgkJCWZvciAoIGk9MCwgaUxlbj1hb0NvbHVtbnNJbml0Lmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCS8qIENoZWNrIGlmIHdlIGhhdmUgY29sdW1uIHZpc2liaWx0eSBzdGF0ZSB0byByZXN0b3JlICovCgkJCQlpZiAoIHR5cGVvZiBvSW5pdC5zYXZlZF9hb0NvbHVtbnMgIT0gJ3VuZGVmaW5lZCcgJiYgb0luaXQuc2F2ZWRfYW9Db2x1bW5zLmxlbmd0aCA9PSBpTGVuICkKCQkJCXsKCQkJCQlpZiAoIGFvQ29sdW1uc0luaXRbaV0gPT09IG51bGwgKQoJCQkJCXsKCQkJCQkJYW9Db2x1bW5zSW5pdFtpXSA9IHt9OwoJCQkJCX0KCQkJCQlhb0NvbHVtbnNJbml0W2ldLmJWaXNpYmxlID0gb0luaXQuc2F2ZWRfYW9Db2x1bW5zW2ldLmJWaXNpYmxlOwoJCQkJfQoJCQkJCgkJCQlfZm5BZGRDb2x1bW4oIG9TZXR0aW5ncywgYW5UaHMgPyBhblRoc1tpXSA6IG51bGwgKTsKCQkJfQoJCQkKCQkJLyogQWRkIG9wdGlvbnMgZnJvbSBjb2x1bW4gZGVmaW5hdGlvbnMgKi8KCQkJaWYgKCB0eXBlb2Ygb0luaXQuYW9Db2x1bW5EZWZzICE9ICd1bmRlZmluZWQnICkKCQkJewoJCQkJLyogTG9vcCBvdmVyIHRoZSBjb2x1bW4gZGVmcyBhcnJheSAtIGxvb3AgaW4gcmV2ZXJzZSBzbyBmaXJzdCBpbnN0YWNlIGhhcyBwcmlvcml0eSAqLwoJCQkJZm9yICggaT1vSW5pdC5hb0NvbHVtbkRlZnMubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkKCQkJCXsKCQkJCQkvKiBFYWNoIGNvbHVtbiBkZWYgY2FuIHRhcmdldCBtdWx0aXBsZSBjb2x1bW5zLCBhcyBpdCBpcyBhbiBhcnJheSAqLwoJCQkJCXZhciBhVGFyZ2V0cyA9IG9Jbml0LmFvQ29sdW1uRGVmc1tpXS5hVGFyZ2V0czsKCQkJCQlpZiAoICEkLmlzQXJyYXkoIGFUYXJnZXRzICkgKQoJCQkJCXsKCQkJCQkJX2ZuTG9nKCBvU2V0dGluZ3MsIDEsICdhVGFyZ2V0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHRhcmdldHMsIG5vdCBhICcrKHR5cGVvZiBhVGFyZ2V0cykgKTsKCQkJCQl9CgkJCQkJZm9yICggaj0wLCBqTGVuPWFUYXJnZXRzLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQkJewoJCQkJCQlpZiAoIHR5cGVvZiBhVGFyZ2V0c1tqXSA9PSAnbnVtYmVyJyAmJiBhVGFyZ2V0c1tqXSA+PSAwICkKCQkJCQkJewoJCQkJCQkJLyogMCsgaW50ZWdlciwgbGVmdCB0byByaWdodCBjb2x1bW4gY291bnRpbmcuIFdlIGFkZCBjb2x1bW5zIHdoaWNoIGFyZSB1bmtub3duCgkJCQkJCQkgKiBhdXRvbWF0aWNhbGx5LiBJcyB0aGlzIHRoZSByaWdodCBiZWhhdmlvdXIgZm9yIHRoaXM/IFdlIHNob3VsZCBhdCBsZWFzdAoJCQkJCQkJICogbG9nIGl0IGluIGZ1dHVyZS4gV2UgY2Fubm90IGRvIHRoaXMgZm9yIHRoZSBuZWdhdGl2ZSBvciBjbGFzcyB0YXJnZXRzLCBvbmx5IGhlcmUuCgkJCQkJCQkgKi8KCQkJCQkJCXdoaWxlKCBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA8PSBhVGFyZ2V0c1tqXSApCgkJCQkJCQl7CgkJCQkJCQkJX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MgKTsKCQkJCQkJCX0KCQkJCQkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgYVRhcmdldHNbal0sIG9Jbml0LmFvQ29sdW1uRGVmc1tpXSApOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCB0eXBlb2YgYVRhcmdldHNbal0gPT0gJ251bWJlcicgJiYgYVRhcmdldHNbal0gPCAwICkKCQkJCQkJewoJCQkJCQkJLyogTmVnYXRpdmUgaW50ZWdlciwgcmlnaHQgdG8gbGVmdCBjb2x1bW4gY291bnRpbmcgKi8KCQkJCQkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgb1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGgrYVRhcmdldHNbal0sIAoJCQkJCQkJCW9Jbml0LmFvQ29sdW1uRGVmc1tpXSApOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCB0eXBlb2YgYVRhcmdldHNbal0gPT0gJ3N0cmluZycgKQoJCQkJCQl7CgkJCQkJCQkvKiBDbGFzcyBuYW1lIG1hdGNoaW5nIG9uIFRIIGVsZW1lbnQgKi8KCQkJCQkJCWZvciAoIGs9MCwga0xlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGs8a0xlbiA7IGsrKyApCgkJCQkJCQl7CgkJCQkJCQkJaWYgKCBhVGFyZ2V0c1tqXSA9PSAiX2FsbCIgfHwKCQkJCQkJCQkgICAgICQob1NldHRpbmdzLmFvQ29sdW1uc1trXS5uVGgpLmhhc0NsYXNzKCBhVGFyZ2V0c1tqXSApICkKCQkJCQkJCQl7CgkJCQkJCQkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgaywgb0luaXQuYW9Db2x1bW5EZWZzW2ldICk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCQoJCQkvKiBBZGQgb3B0aW9ucyBmcm9tIGNvbHVtbiBhcnJheSAtIGFmdGVyIHRoZSBkZWZzIGFycmF5IHNvIHRoaXMgaGFzIHByaW9yaXR5ICovCgkJCWlmICggdHlwZW9mIGFvQ29sdW1uc0luaXQgIT0gJ3VuZGVmaW5lZCcgKQoJCQl7CgkJCQlmb3IgKCBpPTAsIGlMZW49YW9Db2x1bW5zSW5pdC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgaSwgYW9Db2x1bW5zSW5pdFtpXSApOwoJCQkJfQoJCQl9CgkJCQoJCQkvKgoJCQkgKiBTb3J0aW5nCgkJCSAqIENoZWNrIHRoZSBhYVNvcnRpbmcgYXJyYXkKCQkJICovCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYWFTb3J0aW5nLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlmICggb1NldHRpbmdzLmFhU29ydGluZ1tpXVswXSA+PSBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCApCgkJCQl7CgkJCQkJb1NldHRpbmdzLmFhU29ydGluZ1tpXVswXSA9IDA7CgkJCQl9CgkJCQl2YXIgb0NvbHVtbiA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbIG9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMF0gXTsKCQkJCQoJCQkJLyogQWRkIGEgZGVmYXVsdCBzb3J0aW5nIGluZGV4ICovCgkJCQlpZiAoIHR5cGVvZiBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzJdID09ICd1bmRlZmluZWQnICkKCQkJCXsKCQkJCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzJdID0gMDsKCQkJCX0KCQkJCQoJCQkJLyogSWYgYWFTb3J0aW5nIGlzIG5vdCBkZWZpbmVkLCB0aGVuIHdlIHVzZSB0aGUgZmlyc3QgaW5kaWNhdG9yIGluIGFzU29ydGluZyAqLwoJCQkJaWYgKCB0eXBlb2Ygb0luaXQuYWFTb3J0aW5nID09ICJ1bmRlZmluZWQiICYmIAoJCQkJCQkgdHlwZW9mIG9TZXR0aW5ncy5zYXZlZF9hYVNvcnRpbmcgPT0gInVuZGVmaW5lZCIgKQoJCQkJewoJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMV0gPSBvQ29sdW1uLmFzU29ydGluZ1swXTsKCQkJCX0KCQkJCQoJCQkJLyogU2V0IHRoZSBjdXJyZW50IHNvcnRpbmcgaW5kZXggYmFzZWQgb24gYW9Db2x1bW5zLmFzU29ydGluZyAqLwoJCQkJZm9yICggaj0wLCBqTGVuPW9Db2x1bW4uYXNTb3J0aW5nLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQl7CgkJCQkJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzFdID09IG9Db2x1bW4uYXNTb3J0aW5nW2pdICkKCQkJCQl7CgkJCQkJCW9TZXR0aW5ncy5hYVNvcnRpbmdbaV1bMl0gPSBqOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCQoJCQkvKiBEbyBhIGZpcnN0IHBhc3Mgb24gdGhlIHNvcnRpbmcgY2xhc3NlcyAoYWxsb3dzIGFueSBzaXplIGNoYW5nZXMgdG8gYmUgdGFrZW4gaW50bwoJCQkgKiBhY2NvdW50LCBhbmQgYWxzbyB3aWxsIGFwcGx5IHNvcnRpbmcgZGlzYWJsZWQgY2xhc3NlcyBpZiBkaXNhYmxlZAoJCQkgKi8KCQkJX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApOwoJCQkKCQkJLyoKCQkJICogRmluYWwgaW5pdAoJCQkgKiBDYWNoZSB0aGUgaGVhZGVyLCBib2R5IGFuZCBmb290ZXIgYXMgcmVxdWlyZWQsIGNyZWF0aW5nIHRoZW0gaWYgbmVlZGVkCgkJCSAqLwoJCQl2YXIgdGhlYWQgPSAkKCc+dGhlYWQnLCB0aGlzKTsKCQkJaWYgKCB0aGVhZC5sZW5ndGggPT09IDAgKQoJCQl7CgkJCQl0aGVhZCA9IFsgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RoZWFkJyApIF07CgkJCQl0aGlzLmFwcGVuZENoaWxkKCB0aGVhZFswXSApOwoJCQl9CgkJCW9TZXR0aW5ncy5uVEhlYWQgPSB0aGVhZFswXTsKCQkJCgkJCXZhciB0Ym9keSA9ICQoJz50Ym9keScsIHRoaXMpOwoJCQlpZiAoIHRib2R5Lmxlbmd0aCA9PT0gMCApCgkJCXsKCQkJCXRib2R5ID0gWyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAndGJvZHknICkgXTsKCQkJCXRoaXMuYXBwZW5kQ2hpbGQoIHRib2R5WzBdICk7CgkJCX0KCQkJb1NldHRpbmdzLm5UQm9keSA9IHRib2R5WzBdOwoJCQkKCQkJdmFyIHRmb290ID0gJCgnPnRmb290JywgdGhpcyk7CgkJCWlmICggdGZvb3QubGVuZ3RoID4gMCApCgkJCXsKCQkJCW9TZXR0aW5ncy5uVEZvb3QgPSB0Zm9vdFswXTsKCQkJCV9mbkRldGVjdEhlYWRlciggb1NldHRpbmdzLmFvRm9vdGVyLCBvU2V0dGluZ3MublRGb290ICk7CgkJCX0KCQkJCgkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIGRhdGEgcGFzc2luZyBpbnRvIHRoZSBjb25zdHJ1Y3RvciAqLwoJCQlpZiAoIGJVc2VQYXNzZWREYXRhICkKCQkJewoJCQkJZm9yICggaT0wIDsgaTxvSW5pdC5hYURhdGEubGVuZ3RoIDsgaSsrICkKCQkJCXsKCQkJCQlfZm5BZGREYXRhKCBvU2V0dGluZ3MsIG9Jbml0LmFhRGF0YVsgaSBdICk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvKiBHcmFiIHRoZSBkYXRhIGZyb20gdGhlIHBhZ2UgKi8KCQkJCV9mbkdhdGhlckRhdGEoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBDb3B5IHRoZSBkYXRhIGluZGV4IGFycmF5ICovCgkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQoJCQkvKiBJbml0aWFsaXNhdGlvbiBjb21wbGV0ZSAtIHRhYmxlIGNhbiBiZSBkcmF3biAqLwoJCQlvU2V0dGluZ3MuYkluaXRpYWxpc2VkID0gdHJ1ZTsKCQkJCgkJCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgdGFibGUgKGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gaGFuZGVkIG9mZiB0byB0aGUKCQkJICogbGFuZ3VhZ2UgcHJvY2Vzc29yKQoJCQkgKi8KCQkJaWYgKCBiSW5pdEhhbmRlZE9mZiA9PT0gZmFsc2UgKQoJCQl7CgkJCQlfZm5Jbml0YWxpc2UoIG9TZXR0aW5ncyApOwoJCQl9CgkJfSk7Cgl9Owp9KShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpOwoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qISBqUXVlcnkgVGltZXBpY2tlciBBZGRvbiAtIHYxLjQuNSAtIDIwMTQtMDUtMjYNCiogaHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vZXhhbXBsZXMvdGltZXBpY2tlcg0KKiBDb3B5cmlnaHQgKGMpIDIwMTQgVHJlbnQgUmljaGFyZHNvbjsgTGljZW5zZWQgTUlUICovDQooZnVuY3Rpb24gKCQpIHsNCg0KICAgIC8qDQoJKiBMZXRzIG5vdCByZWRlZmluZSB0aW1lcGlja2VyLCBQcmV2ZW50ICJVbmNhdWdodCBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZCINCgkqLw0KICAgICQudWkudGltZXBpY2tlciA9ICQudWkudGltZXBpY2tlciB8fCB7fTsNCiAgICBpZiAoJC51aS50aW1lcGlja2VyLnZlcnNpb24pIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8qDQoJKiBFeHRlbmQgalF1ZXJ5VUksIGdldCBpdCBzdGFydGVkIHdpdGggb3VyIHZlcnNpb24gbnVtYmVyDQoJKi8NCiAgICAkLmV4dGVuZCgkLnVpLCB7DQogICAgICAgIHRpbWVwaWNrZXI6IHsNCiAgICAgICAgICAgIHZlcnNpb246ICIxLjQuNSINCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgLyogDQoJKiBUaW1lcGlja2VyIG1hbmFnZXIuDQoJKiBVc2UgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLCAkLnRpbWVwaWNrZXIsIHRvIGludGVyYWN0IHdpdGggdGhlIHRpbWUgcGlja2VyLg0KCSogU2V0dGluZ3MgZm9yIChncm91cHMgb2YpIHRpbWUgcGlja2VycyBhcmUgbWFpbnRhaW5lZCBpbiBhbiBpbnN0YW5jZSBvYmplY3QsDQoJKiBhbGxvd2luZyBtdWx0aXBsZSBkaWZmZXJlbnQgc2V0dGluZ3Mgb24gdGhlIHNhbWUgcGFnZS4NCgkqLw0KICAgIHZhciBUaW1lcGlja2VyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnJlZ2lvbmFsID0gW107IC8vIEF2YWlsYWJsZSByZWdpb25hbCBzZXR0aW5ncywgaW5kZXhlZCBieSBsYW5ndWFnZSBjb2RlDQogICAgICAgIHRoaXMucmVnaW9uYWxbJyddID0geyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzDQogICAgICAgICAgICBjdXJyZW50VGV4dDogJ05vdycsDQogICAgICAgICAgICBjbG9zZVRleHQ6ICdEb25lJywNCiAgICAgICAgICAgIGFtTmFtZXM6IFsnQU0nLCAnQSddLA0KICAgICAgICAgICAgcG1OYW1lczogWydQTScsICdQJ10sDQogICAgICAgICAgICB0aW1lRm9ybWF0OiAnSEg6bW0nLA0KICAgICAgICAgICAgdGltZVN1ZmZpeDogJycsDQogICAgICAgICAgICB0aW1lT25seVRpdGxlOiAnQ2hvb3NlIFRpbWUnLA0KICAgICAgICAgICAgdGltZVRleHQ6ICdUaW1lJywNCiAgICAgICAgICAgIGhvdXJUZXh0OiAnSG91cicsDQogICAgICAgICAgICBtaW51dGVUZXh0OiAnTWludXRlJywNCiAgICAgICAgICAgIHNlY29uZFRleHQ6ICdTZWNvbmQnLA0KICAgICAgICAgICAgbWlsbGlzZWNUZXh0OiAnTWlsbGlzZWNvbmQnLA0KICAgICAgICAgICAgbWljcm9zZWNUZXh0OiAnTWljcm9zZWNvbmQnLA0KICAgICAgICAgICAgdGltZXpvbmVUZXh0OiAnVGltZSBab25lJywNCiAgICAgICAgICAgIGlzUlRMOiBmYWxzZQ0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLl9kZWZhdWx0cyA9IHsgLy8gR2xvYmFsIGRlZmF1bHRzIGZvciBhbGwgdGhlIGRhdGV0aW1lIHBpY2tlciBpbnN0YW5jZXMNCiAgICAgICAgICAgIHNob3dCdXR0b25QYW5lbDogdHJ1ZSwNCiAgICAgICAgICAgIHRpbWVPbmx5OiBmYWxzZSwNCiAgICAgICAgICAgIHRpbWVPbmx5U2hvd0RhdGU6IGZhbHNlLA0KICAgICAgICAgICAgc2hvd0hvdXI6IG51bGwsDQogICAgICAgICAgICBzaG93TWludXRlOiBudWxsLA0KICAgICAgICAgICAgc2hvd1NlY29uZDogbnVsbCwNCiAgICAgICAgICAgIHNob3dNaWxsaXNlYzogbnVsbCwNCiAgICAgICAgICAgIHNob3dNaWNyb3NlYzogbnVsbCwNCiAgICAgICAgICAgIHNob3dUaW1lem9uZTogbnVsbCwNCiAgICAgICAgICAgIHNob3dUaW1lOiB0cnVlLA0KICAgICAgICAgICAgc3RlcEhvdXI6IDEsDQogICAgICAgICAgICBzdGVwTWludXRlOiAxLA0KICAgICAgICAgICAgc3RlcFNlY29uZDogMSwNCiAgICAgICAgICAgIHN0ZXBNaWxsaXNlYzogMSwNCiAgICAgICAgICAgIHN0ZXBNaWNyb3NlYzogMSwNCiAgICAgICAgICAgIGhvdXI6IDAsDQogICAgICAgICAgICBtaW51dGU6IDAsDQogICAgICAgICAgICBzZWNvbmQ6IDAsDQogICAgICAgICAgICBtaWxsaXNlYzogMCwNCiAgICAgICAgICAgIG1pY3Jvc2VjOiAwLA0KICAgICAgICAgICAgdGltZXpvbmU6IG51bGwsDQogICAgICAgICAgICBob3VyTWluOiAwLA0KICAgICAgICAgICAgbWludXRlTWluOiAwLA0KICAgICAgICAgICAgc2Vjb25kTWluOiAwLA0KICAgICAgICAgICAgbWlsbGlzZWNNaW46IDAsDQogICAgICAgICAgICBtaWNyb3NlY01pbjogMCwNCiAgICAgICAgICAgIGhvdXJNYXg6IDIzLA0KICAgICAgICAgICAgbWludXRlTWF4OiA1OSwNCiAgICAgICAgICAgIHNlY29uZE1heDogNTksDQogICAgICAgICAgICBtaWxsaXNlY01heDogOTk5LA0KICAgICAgICAgICAgbWljcm9zZWNNYXg6IDk5OSwNCiAgICAgICAgICAgIG1pbkRhdGVUaW1lOiBudWxsLA0KICAgICAgICAgICAgbWF4RGF0ZVRpbWU6IG51bGwsDQogICAgICAgICAgICBtYXhUaW1lOiBudWxsLA0KICAgICAgICAgICAgbWluVGltZTogbnVsbCwNCiAgICAgICAgICAgIG9uU2VsZWN0OiBudWxsLA0KICAgICAgICAgICAgaG91ckdyaWQ6IDAsDQogICAgICAgICAgICBtaW51dGVHcmlkOiAwLA0KICAgICAgICAgICAgc2Vjb25kR3JpZDogMCwNCiAgICAgICAgICAgIG1pbGxpc2VjR3JpZDogMCwNCiAgICAgICAgICAgIG1pY3Jvc2VjR3JpZDogMCwNCiAgICAgICAgICAgIGFsd2F5c1NldFRpbWU6IHRydWUsDQogICAgICAgICAgICBzZXBhcmF0b3I6ICcgJywNCiAgICAgICAgICAgIGFsdEZpZWxkVGltZU9ubHk6IHRydWUsDQogICAgICAgICAgICBhbHRUaW1lRm9ybWF0OiBudWxsLA0KICAgICAgICAgICAgYWx0U2VwYXJhdG9yOiBudWxsLA0KICAgICAgICAgICAgYWx0VGltZVN1ZmZpeDogbnVsbCwNCiAgICAgICAgICAgIGFsdFJlZGlyZWN0Rm9jdXM6IHRydWUsDQogICAgICAgICAgICBwaWNrZXJUaW1lRm9ybWF0OiBudWxsLA0KICAgICAgICAgICAgcGlja2VyVGltZVN1ZmZpeDogbnVsbCwNCiAgICAgICAgICAgIHNob3dUaW1lcGlja2VyOiB0cnVlLA0KICAgICAgICAgICAgdGltZXpvbmVMaXN0OiBudWxsLA0KICAgICAgICAgICAgYWRkU2xpZGVyQWNjZXNzOiBmYWxzZSwNCiAgICAgICAgICAgIHNsaWRlckFjY2Vzc0FyZ3M6IG51bGwsDQogICAgICAgICAgICBjb250cm9sVHlwZTogJ3NsaWRlcicsDQogICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG51bGwsDQogICAgICAgICAgICBwYXJzZTogJ3N0cmljdCcNCiAgICAgICAgfTsNCiAgICAgICAgJC5leHRlbmQodGhpcy5fZGVmYXVsdHMsIHRoaXMucmVnaW9uYWxbJyddKTsNCiAgICB9Ow0KDQogICAgJC5leHRlbmQoVGltZXBpY2tlci5wcm90b3R5cGUsIHsNCiAgICAgICAgJGlucHV0OiBudWxsLA0KICAgICAgICAkYWx0SW5wdXQ6IG51bGwsDQogICAgICAgICR0aW1lT2JqOiBudWxsLA0KICAgICAgICBpbnN0OiBudWxsLA0KICAgICAgICBob3VyX3NsaWRlcjogbnVsbCwNCiAgICAgICAgbWludXRlX3NsaWRlcjogbnVsbCwNCiAgICAgICAgc2Vjb25kX3NsaWRlcjogbnVsbCwNCiAgICAgICAgbWlsbGlzZWNfc2xpZGVyOiBudWxsLA0KICAgICAgICBtaWNyb3NlY19zbGlkZXI6IG51bGwsDQogICAgICAgIHRpbWV6b25lX3NlbGVjdDogbnVsbCwNCiAgICAgICAgbWF4VGltZTogbnVsbCwNCiAgICAgICAgbWluVGltZTogbnVsbCwNCiAgICAgICAgaG91cjogMCwNCiAgICAgICAgbWludXRlOiAwLA0KICAgICAgICBzZWNvbmQ6IDAsDQogICAgICAgIG1pbGxpc2VjOiAwLA0KICAgICAgICBtaWNyb3NlYzogMCwNCiAgICAgICAgdGltZXpvbmU6IG51bGwsDQogICAgICAgIGhvdXJNaW5PcmlnaW5hbDogbnVsbCwNCiAgICAgICAgbWludXRlTWluT3JpZ2luYWw6IG51bGwsDQogICAgICAgIHNlY29uZE1pbk9yaWdpbmFsOiBudWxsLA0KICAgICAgICBtaWxsaXNlY01pbk9yaWdpbmFsOiBudWxsLA0KICAgICAgICBtaWNyb3NlY01pbk9yaWdpbmFsOiBudWxsLA0KICAgICAgICBob3VyTWF4T3JpZ2luYWw6IG51bGwsDQogICAgICAgIG1pbnV0ZU1heE9yaWdpbmFsOiBudWxsLA0KICAgICAgICBzZWNvbmRNYXhPcmlnaW5hbDogbnVsbCwNCiAgICAgICAgbWlsbGlzZWNNYXhPcmlnaW5hbDogbnVsbCwNCiAgICAgICAgbWljcm9zZWNNYXhPcmlnaW5hbDogbnVsbCwNCiAgICAgICAgYW1wbTogJycsDQogICAgICAgIGZvcm1hdHRlZERhdGU6ICcnLA0KICAgICAgICBmb3JtYXR0ZWRUaW1lOiAnJywNCiAgICAgICAgZm9ybWF0dGVkRGF0ZVRpbWU6ICcnLA0KICAgICAgICB0aW1lem9uZUxpc3Q6IG51bGwsDQogICAgICAgIHVuaXRzOiBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlYycsICdtaWNyb3NlYyddLA0KICAgICAgICBzdXBwb3J0OiB7fSwNCiAgICAgICAgY29udHJvbDogbnVsbCwNCg0KICAgICAgICAvKiANCgkJKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGUgdGltZSBwaWNrZXIuDQoJCSogQHBhcmFtICB7T2JqZWN0fSBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgYXMgZGVmYXVsdHMgKGFub255bW91cyBvYmplY3QpDQoJCSogQHJldHVybiB7T2JqZWN0fSB0aGUgbWFuYWdlciBvYmplY3QNCgkJKi8NCiAgICAgICAgc2V0RGVmYXVsdHM6IGZ1bmN0aW9uIChzZXR0aW5ncykgew0KICAgICAgICAgICAgZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLCBzZXR0aW5ncyB8fCB7fSk7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIENyZWF0ZSBhIG5ldyBUaW1lcGlja2VyIGluc3RhbmNlDQoJCSovDQogICAgICAgIF9uZXdJbnN0OiBmdW5jdGlvbiAoJGlucHV0LCBvcHRzKSB7DQogICAgICAgICAgICB2YXIgdHBfaW5zdCA9IG5ldyBUaW1lcGlja2VyKCksDQoJCQkJaW5saW5lU2V0dGluZ3MgPSB7fSwNCgkJCQlmbnMgPSB7fSwNCgkJCQlvdmVycmlkZXMsIGk7DQoNCiAgICAgICAgICAgIGZvciAodmFyIGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRzLmhhc093blByb3BlcnR5KGF0dHJOYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgYXR0clZhbHVlID0gJGlucHV0LmF0dHIoJ3RpbWU6JyArIGF0dHJOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJWYWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV0gPSBldmFsKGF0dHJWYWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV0gPSBhdHRyVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIG92ZXJyaWRlcyA9IHsNCiAgICAgICAgICAgICAgICBiZWZvcmVTaG93OiBmdW5jdGlvbiAoaW5wdXQsIGRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5iZWZvcmVTaG93KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLmJlZm9yZVNob3cuY2FsbCgkaW5wdXRbMF0sIGlucHV0LCBkcF9pbnN0LCB0cF9pbnN0KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgb25DaGFuZ2VNb250aFllYXI6IGZ1bmN0aW9uICh5ZWFyLCBtb250aCwgZHBfaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWUgYXMgd2VsbCA6IHRoaXMgcHJldmVudHMgdGhlIHRpbWUgZnJvbSBkaXNhcHBlYXJpbmcgZnJvbSB0aGUgJGlucHV0IGZpZWxkLg0KICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShkcF9pbnN0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNoYW5nZU1vbnRoWWVhcikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2hhbmdlTW9udGhZZWFyLmNhbGwoJGlucHV0WzBdLCB5ZWFyLCBtb250aCwgZHBfaW5zdCwgdHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgZHBfaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC50aW1lRGVmaW5lZCA9PT0gdHJ1ZSAmJiAkaW5wdXQudmFsKCkgIT09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShkcF9pbnN0KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2xvc2UpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNsb3NlLmNhbGwoJGlucHV0WzBdLCBkYXRlVGV4dCwgZHBfaW5zdCwgdHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgZm9yIChpIGluIG92ZXJyaWRlcykgew0KICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkoaSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZm5zW2ldID0gb3B0c1tpXSB8fCBudWxsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgdGhpcy5fZGVmYXVsdHMsIGlubGluZVNldHRpbmdzLCBvcHRzLCBvdmVycmlkZXMsIHsNCiAgICAgICAgICAgICAgICBldm50czogZm5zLA0KICAgICAgICAgICAgICAgIHRpbWVwaWNrZXI6IHRwX2luc3QgLy8gYWRkIHRpbWVwaWNrZXIgYXMgYSBwcm9wZXJ0eSBvZiBkYXRlcGlja2VyOiAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0cF9pbnN0LmFtTmFtZXMgPSAkLm1hcCh0cF9pbnN0Ll9kZWZhdWx0cy5hbU5hbWVzLCBmdW5jdGlvbiAodmFsKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbC50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB0cF9pbnN0LnBtTmFtZXMgPSAkLm1hcCh0cF9pbnN0Ll9kZWZhdWx0cy5wbU5hbWVzLCBmdW5jdGlvbiAodmFsKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbC50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIC8vIGRldGVjdCB3aGljaCB1bml0cyBhcmUgc3VwcG9ydGVkDQogICAgICAgICAgICB0cF9pbnN0LnN1cHBvcnQgPSBkZXRlY3RTdXBwb3J0KA0KCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy50aW1lRm9ybWF0ICsNCgkJCQkJKHRwX2luc3QuX2RlZmF1bHRzLnBpY2tlclRpbWVGb3JtYXQgPyB0cF9pbnN0Ll9kZWZhdWx0cy5waWNrZXJUaW1lRm9ybWF0IDogJycpICsNCgkJCQkJKHRwX2luc3QuX2RlZmF1bHRzLmFsdFRpbWVGb3JtYXQgPyB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0IDogJycpKTsNCg0KICAgICAgICAgICAgLy8gY29udHJvbFR5cGUgaXMgc3RyaW5nIC0ga2V5IHRvIG91ciB0aGlzLl9jb250cm9scw0KICAgICAgICAgICAgaWYgKHR5cGVvZiAodHBfaW5zdC5fZGVmYXVsdHMuY29udHJvbFR5cGUpID09PSAnc3RyaW5nJykgew0KICAgICAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZSA9PT0gJ3NsaWRlcicgJiYgdHlwZW9mICgkLnVpLnNsaWRlcikgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlID0gJ3NlbGVjdCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRwX2luc3QuY29udHJvbCA9IHRwX2luc3QuX2NvbnRyb2xzW3RwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBjb250cm9sVHlwZSBpcyBhbiBvYmplY3QgYW5kIG11c3QgaW1wbGVtZW50IGNyZWF0ZSwgb3B0aW9ucywgdmFsdWUgbWV0aG9kcw0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5jb250cm9sID0gdHBfaW5zdC5fZGVmYXVsdHMuY29udHJvbFR5cGU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIHByZXAgdGhlIHRpbWV6b25lIG9wdGlvbnMNCiAgICAgICAgICAgIHZhciB0aW1lem9uZUxpc3QgPSBbLTcyMCwgLTY2MCwgLTYwMCwgLTU3MCwgLTU0MCwgLTQ4MCwgLTQyMCwgLTM2MCwgLTMwMCwgLTI3MCwgLTI0MCwgLTIxMCwgLTE4MCwgLTEyMCwgLTYwLA0KCQkJCQkwLCA2MCwgMTIwLCAxODAsIDIxMCwgMjQwLCAyNzAsIDMwMCwgMzMwLCAzNDUsIDM2MCwgMzkwLCA0MjAsIDQ4MCwgNTI1LCA1NDAsIDU3MCwgNjAwLCA2MzAsIDY2MCwgNjkwLCA3MjAsIDc2NSwgNzgwLCA4NDBdOw0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lTGlzdCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIHRpbWV6b25lTGlzdCA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lTGlzdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciB0emwgPSB0aW1lem9uZUxpc3QubGVuZ3RoLCB0emkgPSAwLCB0enYgPSBudWxsOw0KICAgICAgICAgICAgaWYgKHR6bCA+IDAgJiYgdHlwZW9mIHRpbWV6b25lTGlzdFswXSAhPT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBmb3IgKDsgdHppIDwgdHpsOyB0emkrKykgew0KICAgICAgICAgICAgICAgICAgICB0enYgPSB0aW1lem9uZUxpc3RbdHppXTsNCiAgICAgICAgICAgICAgICAgICAgdGltZXpvbmVMaXN0W3R6aV0gPSB7IHZhbHVlOiB0enYsIGxhYmVsOiAkLnRpbWVwaWNrZXIudGltZXpvbmVPZmZzZXRTdHJpbmcodHp2LCB0cF9pbnN0LnN1cHBvcnQuaXNvODYwMSkgfTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUxpc3QgPSB0aW1lem9uZUxpc3Q7DQoNCiAgICAgICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCB1bml0cw0KICAgICAgICAgICAgdHBfaW5zdC50aW1lem9uZSA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lICE9PSBudWxsID8gJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0TnVtYmVyKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lKSA6DQoJCQkJCQkJKChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTEpOw0KICAgICAgICAgICAgdHBfaW5zdC5ob3VyID0gdHBfaW5zdC5fZGVmYXVsdHMuaG91ciA8IHRwX2luc3QuX2RlZmF1bHRzLmhvdXJNaW4gPyB0cF9pbnN0Ll9kZWZhdWx0cy5ob3VyTWluIDoNCgkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5ob3VyID4gdHBfaW5zdC5fZGVmYXVsdHMuaG91ck1heCA/IHRwX2luc3QuX2RlZmF1bHRzLmhvdXJNYXggOiB0cF9pbnN0Ll9kZWZhdWx0cy5ob3VyOw0KICAgICAgICAgICAgdHBfaW5zdC5taW51dGUgPSB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGUgPCB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGVNaW4gPyB0cF9pbnN0Ll9kZWZhdWx0cy5taW51dGVNaW4gOg0KCQkJCQkJCXRwX2luc3QuX2RlZmF1bHRzLm1pbnV0ZSA+IHRwX2luc3QuX2RlZmF1bHRzLm1pbnV0ZU1heCA/IHRwX2luc3QuX2RlZmF1bHRzLm1pbnV0ZU1heCA6IHRwX2luc3QuX2RlZmF1bHRzLm1pbnV0ZTsNCiAgICAgICAgICAgIHRwX2luc3Quc2Vjb25kID0gdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kIDwgdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kTWluID8gdHBfaW5zdC5fZGVmYXVsdHMuc2Vjb25kTWluIDoNCgkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5zZWNvbmQgPiB0cF9pbnN0Ll9kZWZhdWx0cy5zZWNvbmRNYXggPyB0cF9pbnN0Ll9kZWZhdWx0cy5zZWNvbmRNYXggOiB0cF9pbnN0Ll9kZWZhdWx0cy5zZWNvbmQ7DQogICAgICAgICAgICB0cF9pbnN0Lm1pbGxpc2VjID0gdHBfaW5zdC5fZGVmYXVsdHMubWlsbGlzZWMgPCB0cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlY01pbiA/IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjTWluIDoNCgkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlYyA+IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID8gdHBfaW5zdC5fZGVmYXVsdHMubWlsbGlzZWNNYXggOiB0cF9pbnN0Ll9kZWZhdWx0cy5taWxsaXNlYzsNCiAgICAgICAgICAgIHRwX2luc3QubWljcm9zZWMgPSB0cF9pbnN0Ll9kZWZhdWx0cy5taWNyb3NlYyA8IHRwX2luc3QuX2RlZmF1bHRzLm1pY3Jvc2VjTWluID8gdHBfaW5zdC5fZGVmYXVsdHMubWljcm9zZWNNaW4gOg0KCQkJCQkJCXRwX2luc3QuX2RlZmF1bHRzLm1pY3Jvc2VjID4gdHBfaW5zdC5fZGVmYXVsdHMubWljcm9zZWNNYXggPyB0cF9pbnN0Ll9kZWZhdWx0cy5taWNyb3NlY01heCA6IHRwX2luc3QuX2RlZmF1bHRzLm1pY3Jvc2VjOw0KICAgICAgICAgICAgdHBfaW5zdC5hbXBtID0gJyc7DQogICAgICAgICAgICB0cF9pbnN0LiRpbnB1dCA9ICRpbnB1dDsNCg0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZpZWxkKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC4kYWx0SW5wdXQgPSAkKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZpZWxkKTsNCiAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMuYWx0UmVkaXJlY3RGb2N1cyA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICB0cF9pbnN0LiRhbHRJbnB1dC5jc3Moew0KICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicNCiAgICAgICAgICAgICAgICAgICAgfSkuZm9jdXMoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LnRyaWdnZXIoImZvY3VzIik7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgPT09IDAgfHwgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgPT09IDApIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlID09PSAwIHx8IHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lID09PSAwKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIGRhdGVwaWNrZXIgbmVlZHMgbWluRGF0ZS9tYXhEYXRlLCB0aW1lcGlja2VyIG5lZWRzIG1pbkRhdGVUaW1lL21heERhdGVUaW1lLi4NCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlICE9PSB1bmRlZmluZWQgJiYgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSBpbnN0YW5jZW9mIERhdGUpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZSA9IG5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZSAhPT0gdW5kZWZpbmVkICYmIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lIGluc3RhbmNlb2YgRGF0ZSkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZS5nZXRUaW1lKCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlIGluc3RhbmNlb2YgRGF0ZSkgew0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lID0gbmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZS5nZXRUaW1lKCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lICE9PSB1bmRlZmluZWQgJiYgdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9IG5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGVUaW1lLmdldFRpbWUoKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0cF9pbnN0LiRpbnB1dC5iaW5kKCdmb2N1cycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9vbkZvY3VzKCk7DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgcmV0dXJuIHRwX2luc3Q7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiBhZGQgb3VyIHNsaWRlcnMgdG8gdGhlIGNhbGVuZGFyDQoJCSovDQogICAgICAgIF9hZGRUaW1lUGlja2VyOiBmdW5jdGlvbiAoZHBfaW5zdCkgew0KICAgICAgICAgICAgdmFyIGN1cnJEVCA9ICh0aGlzLiRhbHRJbnB1dCAmJiB0aGlzLl9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5KSA/IHRoaXMuJGlucHV0LnZhbCgpICsgJyAnICsgdGhpcy4kYWx0SW5wdXQudmFsKCkgOiB0aGlzLiRpbnB1dC52YWwoKTsNCg0KICAgICAgICAgICAgdGhpcy50aW1lRGVmaW5lZCA9IHRoaXMuX3BhcnNlVGltZShjdXJyRFQpOw0KICAgICAgICAgICAgdGhpcy5fbGltaXRNaW5NYXhEYXRlVGltZShkcF9pbnN0LCBmYWxzZSk7DQogICAgICAgICAgICB0aGlzLl9pbmplY3RUaW1lUGlja2VyKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiBwYXJzZSB0aGUgdGltZSBzdHJpbmcgZnJvbSBpbnB1dCB2YWx1ZSBvciBfc2V0VGltZQ0KCQkqLw0KICAgICAgICBfcGFyc2VUaW1lOiBmdW5jdGlvbiAodGltZVN0cmluZywgd2l0aERhdGUpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy5pbnN0KSB7DQogICAgICAgICAgICAgICAgdGhpcy5pbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0WzBdKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHdpdGhEYXRlIHx8ICF0aGlzLl9kZWZhdWx0cy50aW1lT25seSkgew0KICAgICAgICAgICAgICAgIHZhciBkcF9kYXRlRm9ybWF0ID0gJC5kYXRlcGlja2VyLl9nZXQodGhpcy5pbnN0LCAnZGF0ZUZvcm1hdCcpOw0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJlcyA9IHBhcnNlRGF0ZVRpbWVJbnRlcm5hbChkcF9kYXRlRm9ybWF0LCB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0aGlzLmluc3QpLCB0aGlzLl9kZWZhdWx0cyk7DQogICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VSZXMudGltZU9iaikgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRoaXMsIHBhcnNlUmVzLnRpbWVPYmopOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgICAgICAgICAkLnRpbWVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlL3RpbWUgc3RyaW5nOiAiICsgZXJyICsNCgkJCQkJCQkJCSJcbmRhdGUvdGltZSBzdHJpbmcgPSAiICsgdGltZVN0cmluZyArDQoJCQkJCQkJCQkiXG50aW1lRm9ybWF0ID0gIiArIHRoaXMuX2RlZmF1bHRzLnRpbWVGb3JtYXQgKw0KCQkJCQkJCQkJIlxuZGF0ZUZvcm1hdCA9ICIgKyBkcF9kYXRlRm9ybWF0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHRpbWVPYmogPSAkLmRhdGVwaWNrZXIucGFyc2VUaW1lKHRoaXMuX2RlZmF1bHRzLnRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIHRoaXMuX2RlZmF1bHRzKTsNCiAgICAgICAgICAgICAgICBpZiAoIXRpbWVPYmopIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkLmV4dGVuZCh0aGlzLCB0aW1lT2JqKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIGdlbmVyYXRlIGFuZCBpbmplY3QgaHRtbCBmb3IgdGltZXBpY2tlciBpbnRvIHVpIGRhdGVwaWNrZXINCgkJKi8NCiAgICAgICAgX2luamVjdFRpbWVQaWNrZXI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciAkZHAgPSB0aGlzLmluc3QuZHBEaXYsDQoJCQkJbyA9IHRoaXMuaW5zdC5zZXR0aW5ncywNCgkJCQl0cF9pbnN0ID0gdGhpcywNCgkJCQlsaXRlbSA9ICcnLA0KCQkJCXVpdGVtID0gJycsDQoJCQkJc2hvdyA9IG51bGwsDQoJCQkJbWF4ID0ge30sDQoJCQkJZ3JpZFNpemUgPSB7fSwNCgkJCQlzaXplID0gbnVsbCwNCgkJCQlpID0gMCwNCgkJCQlsID0gMDsNCg0KICAgICAgICAgICAgLy8gUHJldmVudCBkaXNwbGF5aW5nIHR3aWNlDQogICAgICAgICAgICBpZiAoJGRwLmZpbmQoImRpdi51aS10aW1lcGlja2VyLWRpdiIpLmxlbmd0aCA9PT0gMCAmJiBvLnNob3dUaW1lcGlja2VyKSB7DQogICAgICAgICAgICAgICAgdmFyIG5vRGlzcGxheSA9ICcgc3R5bGU9ImRpc3BsYXk6bm9uZTsiJywNCgkJCQkJaHRtbCA9ICc8ZGl2IGNsYXNzPSJ1aS10aW1lcGlja2VyLWRpdicgKyAoby5pc1JUTCA/ICcgdWktdGltZXBpY2tlci1ydGwnIDogJycpICsgJyI+PGRsPicgKyAnPGR0IGNsYXNzPSJ1aV90cGlja2VyX3RpbWVfbGFiZWwiJyArICgoby5zaG93VGltZSkgPyAnJyA6IG5vRGlzcGxheSkgKyAnPicgKyBvLnRpbWVUZXh0ICsgJzwvZHQ+JyArDQoJCQkJCQkJCSc8ZGQgY2xhc3M9InVpX3RwaWNrZXJfdGltZSInICsgKChvLnNob3dUaW1lKSA/ICcnIDogbm9EaXNwbGF5KSArICc+PC9kZD4nOw0KDQogICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBtYXJrdXANCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy51bml0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgbGl0ZW0gPSB0aGlzLnVuaXRzW2ldOw0KICAgICAgICAgICAgICAgICAgICB1aXRlbSA9IGxpdGVtLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbGl0ZW0uc3Vic3RyKDEpOw0KICAgICAgICAgICAgICAgICAgICBzaG93ID0gb1snc2hvdycgKyB1aXRlbV0gIT09IG51bGwgPyBvWydzaG93JyArIHVpdGVtXSA6IHRoaXMuc3VwcG9ydFtsaXRlbV07DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gQWRkZWQgYnkgUGV0ZXIgTWVkZWlyb3M6DQogICAgICAgICAgICAgICAgICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRoZSBob3VyL21pbnV0ZS9zZWNvbmQgbWF4IHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgc3RlcCB2YWx1ZXMuDQogICAgICAgICAgICAgICAgICAgIC8vIC0gRXhhbXBsZTogaWYgc3RlcE1pbnV0ZSBpcyAxNSwgdGhlbiBtaW5NYXggaXMgNDUuDQogICAgICAgICAgICAgICAgICAgIG1heFtsaXRlbV0gPSBwYXJzZUludCgob1tsaXRlbSArICdNYXgnXSAtICgob1tsaXRlbSArICdNYXgnXSAtIG9bbGl0ZW0gKyAnTWluJ10pICUgb1snc3RlcCcgKyB1aXRlbV0pKSwgMTApOw0KICAgICAgICAgICAgICAgICAgICBncmlkU2l6ZVtsaXRlbV0gPSAwOw0KDQogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkdCBjbGFzcz0idWlfdHBpY2tlcl8nICsgbGl0ZW0gKyAnX2xhYmVsIicgKyAoc2hvdyA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG9bbGl0ZW0gKyAnVGV4dCddICsgJzwvZHQ+JyArDQoJCQkJCQkJCSc8ZGQgY2xhc3M9InVpX3RwaWNrZXJfJyArIGxpdGVtICsgJyI+PGRpdiBjbGFzcz0idWlfdHBpY2tlcl8nICsgbGl0ZW0gKyAnX3NsaWRlciInICsgKHNob3cgPyAnJyA6IG5vRGlzcGxheSkgKyAnPjwvZGl2Pic7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3cgJiYgb1tsaXRlbSArICdHcmlkJ10gPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+PHRhYmxlIGNsYXNzPSJ1aS10cGlja2VyLWdyaWQtbGFiZWwiPjx0cj4nOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGl0ZW0gPT09ICdob3VyJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGggPSBvW2xpdGVtICsgJ01pbiddOyBoIDw9IG1heFtsaXRlbV07IGggKz0gcGFyc2VJbnQob1tsaXRlbSArICdHcmlkJ10sIDEwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkU2l6ZVtsaXRlbV0rKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcGggPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh0aGlzLnN1cHBvcnQuYW1wbSA/ICdoaHQnIDogJ0hIJywgeyBob3VyOiBoIH0sIG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgZGF0YS1mb3I9IicgKyBsaXRlbSArICciPicgKyB0bXBoICsgJzwvdGQ+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gb1tsaXRlbSArICdNaW4nXTsgbSA8PSBtYXhbbGl0ZW1dOyBtICs9IHBhcnNlSW50KG9bbGl0ZW0gKyAnR3JpZCddLCAxMCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFNpemVbbGl0ZW1dKys7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBkYXRhLWZvcj0iJyArIGxpdGVtICsgJyI+JyArICgobSA8IDEwKSA/ICcwJyA6ICcnKSArIG0gKyAnPC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPC90cj48L3RhYmxlPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPC9kZD4nOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIFRpbWV6b25lDQogICAgICAgICAgICAgICAgdmFyIHNob3dUeiA9IG8uc2hvd1RpbWV6b25lICE9PSBudWxsID8gby5zaG93VGltZXpvbmUgOiB0aGlzLnN1cHBvcnQudGltZXpvbmU7DQogICAgICAgICAgICAgICAgaHRtbCArPSAnPGR0IGNsYXNzPSJ1aV90cGlja2VyX3RpbWV6b25lX2xhYmVsIicgKyAoc2hvd1R6ID8gJycgOiBub0Rpc3BsYXkpICsgJz4nICsgby50aW1lem9uZVRleHQgKyAnPC9kdD4nOw0KICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lem9uZSIgJyArIChzaG93VHogPyAnJyA6IG5vRGlzcGxheSkgKyAnPjwvZGQ+JzsNCg0KICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZWxlbWVudHMgZnJvbSBzdHJpbmcNCiAgICAgICAgICAgICAgICBodG1sICs9ICc8L2RsPjwvZGl2Pic7DQogICAgICAgICAgICAgICAgdmFyICR0cCA9ICQoaHRtbCk7DQoNCiAgICAgICAgICAgICAgICAvLyBpZiB3ZSBvbmx5IHdhbnQgdGltZSBwaWNrZXIuLi4NCiAgICAgICAgICAgICAgICBpZiAoby50aW1lT25seSA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgICAgICAkdHAucHJlcGVuZCgnPGRpdiBjbGFzcz0idWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+JyArICc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nICsgby50aW1lT25seVRpdGxlICsgJzwvZGl2PicgKyAnPC9kaXY+Jyk7DQogICAgICAgICAgICAgICAgICAgICRkcC5maW5kKCcudWktZGF0ZXBpY2tlci1oZWFkZXIsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyJykuaGlkZSgpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIGFkZCBzbGlkZXJzLCBhZGp1c3QgZ3JpZHMsIGFkZCBldmVudHMNCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdHBfaW5zdC51bml0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgbGl0ZW0gPSB0cF9pbnN0LnVuaXRzW2ldOw0KICAgICAgICAgICAgICAgICAgICB1aXRlbSA9IGxpdGVtLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgbGl0ZW0uc3Vic3RyKDEpOw0KICAgICAgICAgICAgICAgICAgICBzaG93ID0gb1snc2hvdycgKyB1aXRlbV0gIT09IG51bGwgPyBvWydzaG93JyArIHVpdGVtXSA6IHRoaXMuc3VwcG9ydFtsaXRlbV07DQoNCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBzbGlkZXINCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdFtsaXRlbSArICdfc2xpZGVyJ10gPSB0cF9pbnN0LmNvbnRyb2wuY3JlYXRlKHRwX2luc3QsICR0cC5maW5kKCcudWlfdHBpY2tlcl8nICsgbGl0ZW0gKyAnX3NsaWRlcicpLCBsaXRlbSwgdHBfaW5zdFtsaXRlbV0sIG9bbGl0ZW0gKyAnTWluJ10sIG1heFtsaXRlbV0sIG9bJ3N0ZXAnICsgdWl0ZW1dKTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBhZGp1c3QgdGhlIGdyaWQgYW5kIGFkZCBjbGljayBldmVudA0KICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyAmJiBvW2xpdGVtICsgJ0dyaWQnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxMDAgKiBncmlkU2l6ZVtsaXRlbV0gKiBvW2xpdGVtICsgJ0dyaWQnXSAvIChtYXhbbGl0ZW1dIC0gb1tsaXRlbSArICdNaW4nXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkdHAuZmluZCgnLnVpX3RwaWNrZXJfJyArIGxpdGVtICsgJyB0YWJsZScpLmNzcyh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHNpemUgKyAiJSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogby5pc1JUTCA/ICcwJyA6ICgoc2l6ZSAvICgtMiAqIGdyaWRTaXplW2xpdGVtXSkpICsgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogby5pc1JUTCA/ICgoc2l6ZSAvICgtMiAqIGdyaWRTaXplW2xpdGVtXSkpICsgIiUiKSA6ICcwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xsYXBzZTogJ2NvbGxhcHNlJw0KICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmluZCgidGQiKS5jbGljayhmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkdCA9ICQodGhpcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSAkdC5odG1sKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBwYXJzZUludChoLnJlcGxhY2UoL1teMC05XS9nKSwgMTApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcCA9IGgucmVwbGFjZSgvW15hcG1dL2lnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9ICR0LmRhdGEoJ2ZvcicpOyAvLyBsb3NlcyBzY29wZSwgc28gd2UgdXNlIGRhdGEtZm9yDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ2hvdXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcC5pbmRleE9mKCdwJykgIT09IC0xICYmIG4gPCAxMikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiArPSAxMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcC5pbmRleE9mKCdhJykgIT09IC0xICYmIG4gPT09IDEyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cF9pbnN0LmNvbnRyb2wudmFsdWUodHBfaW5zdCwgdHBfaW5zdFtmICsgJ19zbGlkZXInXSwgbGl0ZW0sIG4pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KS5jc3Moew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoMTAwIC8gZ3JpZFNpemVbbGl0ZW1dKSArICclJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmIGdyaWQgPiAwDQogICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yIGxvb3ANCg0KICAgICAgICAgICAgICAgIC8vIEFkZCB0aW1lem9uZSBvcHRpb25zDQogICAgICAgICAgICAgICAgdGhpcy50aW1lem9uZV9zZWxlY3QgPSAkdHAuZmluZCgnLnVpX3RwaWNrZXJfdGltZXpvbmUnKS5hcHBlbmQoJzxzZWxlY3Q+PC9zZWxlY3Q+JykuZmluZCgic2VsZWN0Iik7DQogICAgICAgICAgICAgICAgJC5mbi5hcHBlbmQuYXBwbHkodGhpcy50aW1lem9uZV9zZWxlY3QsDQoJCQkJJC5tYXAoby50aW1lem9uZUxpc3QsIGZ1bmN0aW9uICh2YWwsIGlkeCkgew0KCQkJCSAgICByZXR1cm4gJCgiPG9wdGlvbiAvPiIpLnZhbCh0eXBlb2YgdmFsID09PSAib2JqZWN0IiA/IHZhbC52YWx1ZSA6IHZhbCkudGV4dCh0eXBlb2YgdmFsID09PSAib2JqZWN0IiA/IHZhbC5sYWJlbCA6IHZhbCk7DQoJCQkJfSkpOw0KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHRoaXMudGltZXpvbmUpICE9PSAidW5kZWZpbmVkIiAmJiB0aGlzLnRpbWV6b25lICE9PSBudWxsICYmIHRoaXMudGltZXpvbmUgIT09ICIiKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbF90aW1lem9uZSA9IChuZXcgRGF0ZSh0aGlzLmluc3Quc2VsZWN0ZWRZZWFyLCB0aGlzLmluc3Quc2VsZWN0ZWRNb250aCwgdGhpcy5pbnN0LnNlbGVjdGVkRGF5LCAxMikpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsX3RpbWV6b25lID09PSB0aGlzLnRpbWV6b25lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RMb2NhbFRpbWV6b25lKHRwX2luc3QpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lem9uZV9zZWxlY3QudmFsKHRoaXMudGltZXpvbmUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5ob3VyKSAhPT0gInVuZGVmaW5lZCIgJiYgdGhpcy5ob3VyICE9PSBudWxsICYmIHRoaXMuaG91ciAhPT0gIiIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXpvbmVfc2VsZWN0LnZhbChvLnRpbWV6b25lKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdExvY2FsVGltZXpvbmUodHBfaW5zdCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy50aW1lem9uZV9zZWxlY3QuY2hhbmdlKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX29uU2VsZWN0SGFuZGxlcigpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lem9uZSBvcHRpb25zDQoNCiAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGltZXBpY2tlciBpbnRvIGRhdGVwaWNrZXINCiAgICAgICAgICAgICAgICB2YXIgJGJ1dHRvblBhbmVsID0gJGRwLmZpbmQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKTsNCiAgICAgICAgICAgICAgICBpZiAoJGJ1dHRvblBhbmVsLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAkYnV0dG9uUGFuZWwuYmVmb3JlKCR0cCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGRwLmFwcGVuZCgkdHApOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmogPSAkdHAuZmluZCgnLnVpX3RwaWNrZXJfdGltZScpOw0KDQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZURlZmluZWQgPSB0aGlzLnRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRpbWVDaGFuZ2UoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lRGVmaW5lZCA9IHRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIHNsaWRlQWNjZXNzIGludGVncmF0aW9uOiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS8yMDExLzExLzExL2pxdWVyeS11aS1zbGlkZXJzLWFuZC10b3VjaC1hY2Nlc3NpYmlsaXR5Lw0KICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0cy5hZGRTbGlkZXJBY2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlckFjY2Vzc0FyZ3MgPSB0aGlzLl9kZWZhdWx0cy5zbGlkZXJBY2Nlc3NBcmdzLA0KCQkJCQkJcnRsID0gdGhpcy5fZGVmYXVsdHMuaXNSVEw7DQogICAgICAgICAgICAgICAgICAgIHNsaWRlckFjY2Vzc0FyZ3MuaXNSVEwgPSBydGw7DQoNCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IC8vIGZpeCBmb3IgaW5saW5lIG1vZGUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHAuZmluZCgnLnVpLXNsaWRlci1hY2Nlc3MnKS5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHAuZmluZCgnLnVpLXNsaWRlcjp2aXNpYmxlJykuc2xpZGVyQWNjZXNzKHNsaWRlckFjY2Vzc0FyZ3MpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZml4IGFueSBncmlkcyBzaW5jZSBzbGlkZXJzIGFyZSBzaG9ydGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlckFjY2Vzc1dpZHRoID0gJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzOmVxKDApJykub3V0ZXJXaWR0aCh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xpZGVyQWNjZXNzV2lkdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRwLmZpbmQoJ3RhYmxlOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkZyA9ICQodGhpcyksDQoJCQkJCQkJCQkJb2xkV2lkdGggPSAkZy5vdXRlcldpZHRoKCksDQoJCQkJCQkJCQkJb2xkTWFyZ2luTGVmdCA9ICRnLmNzcyhydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnKS50b1N0cmluZygpLnJlcGxhY2UoJyUnLCAnJyksDQoJCQkJCQkJCQkJbmV3V2lkdGggPSBvbGRXaWR0aCAtIHNsaWRlckFjY2Vzc1dpZHRoLA0KCQkJCQkJCQkJCW5ld01hcmdpbkxlZnQgPSAoKG9sZE1hcmdpbkxlZnQgKiBuZXdXaWR0aCkgLyBvbGRXaWR0aCkgKyAnJScsDQoJCQkJCQkJCQkJY3NzID0geyB3aWR0aDogbmV3V2lkdGgsIG1hcmdpblJpZ2h0OiAwLCBtYXJnaW5MZWZ0OiAwIH07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NbcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gPSBuZXdNYXJnaW5MZWZ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGcuY3NzKGNzcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSwgMTApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBlbmQgc2xpZGVBY2Nlc3MgaW50ZWdyYXRpb24NCg0KICAgICAgICAgICAgICAgIHRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbGltaXQgdGhlIGFiaWxpdHkgdG8gZ28gb3V0c2lkZSB0aGUNCgkJKiBtaW4vbWF4IGRhdGUgcmFuZ2UNCgkJKi8NCiAgICAgICAgX2xpbWl0TWluTWF4RGF0ZVRpbWU6IGZ1bmN0aW9uIChkcF9pbnN0LCBhZGp1c3RTbGlkZXJzKSB7DQogICAgICAgICAgICB2YXIgbyA9IHRoaXMuX2RlZmF1bHRzLA0KCQkJCWRwX2RhdGUgPSBuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KTsNCg0KICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0gLy8gTm8gdGltZSBzbyBub3RoaW5nIHRvIGNoZWNrIGhlcmUNCg0KICAgICAgICAgICAgaWYgKCQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSBudWxsICYmICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSB1bmRlZmluZWQgJiYgZHBfZGF0ZSkgew0KICAgICAgICAgICAgICAgIHZhciBtaW5EYXRlVGltZSA9ICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpLA0KCQkJCQltaW5EYXRlVGltZURhdGUgPSBuZXcgRGF0ZShtaW5EYXRlVGltZS5nZXRGdWxsWWVhcigpLCBtaW5EYXRlVGltZS5nZXRNb250aCgpLCBtaW5EYXRlVGltZS5nZXREYXRlKCksIDAsIDAsIDAsIDApOw0KDQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ck1pbk9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMubWludXRlTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5zZWNvbmRNaW5PcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taWNyb3NlY01pbk9yaWdpbmFsID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ck1pbk9yaWdpbmFsID0gby5ob3VyTWluOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZU1pbk9yaWdpbmFsID0gby5taW51dGVNaW47DQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kTWluT3JpZ2luYWwgPSBvLnNlY29uZE1pbjsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsID0gby5taWxsaXNlY01pbjsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlY01pbk9yaWdpbmFsID0gby5taWNyb3NlY01pbjsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtaW5EYXRlVGltZURhdGUuZ2V0VGltZSgpID09PSBkcF9kYXRlLmdldFRpbWUoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gbWluRGF0ZVRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA8PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gbWluRGF0ZVRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlIDw9IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IG1pbkRhdGVUaW1lLmdldFNlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmQgPD0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbiA9IG1pbkRhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlYyA8PSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlYyA9IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSBtaW5EYXRlVGltZS5nZXRNaWNyb3NlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjIDwgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pY3Jvc2VjID0gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW47DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IHRoaXMuc2Vjb25kTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSB0aGlzLm1pY3Jvc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0aGlzLm1pbnV0ZU1pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNaW4gPSB0aGlzLm1pY3Jvc2VjTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGhpcy5ob3VyTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IHRoaXMubWludXRlTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1pbiA9IHRoaXMuc2Vjb25kTWluT3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01pbiA9IHRoaXMubWljcm9zZWNNaW5PcmlnaW5hbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSAhPT0gbnVsbCAmJiAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSAhPT0gdW5kZWZpbmVkICYmIGRwX2RhdGUpIHsNCiAgICAgICAgICAgICAgICB2YXIgbWF4RGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSwNCgkJCQkJbWF4RGF0ZVRpbWVEYXRlID0gbmV3IERhdGUobWF4RGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSwgbWF4RGF0ZVRpbWUuZ2V0TW9udGgoKSwgbWF4RGF0ZVRpbWUuZ2V0RGF0ZSgpLCAwLCAwLCAwLCAwKTsNCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvdXJNYXhPcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taWxsaXNlY01heE9yaWdpbmFsID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ck1heE9yaWdpbmFsID0gby5ob3VyTWF4Ow0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID0gby5taW51dGVNYXg7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPSBvLnNlY29uZE1heDsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY01heE9yaWdpbmFsID0gby5taWxsaXNlY01heDsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlY01heE9yaWdpbmFsID0gby5taWNyb3NlY01heDsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtYXhEYXRlVGltZURhdGUuZ2V0VGltZSgpID09PSBkcF9kYXRlLmdldFRpbWUoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA+PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlID49IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IG1heERhdGVUaW1lLmdldFNlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmQgPj0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCA9IG1heERhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlYyA+PSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlYyA9IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSBtYXhEYXRlVGltZS5nZXRNaWNyb3NlY29uZHMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjID4gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pY3Jvc2VjID0gdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXg7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXggPSB0aGlzLm1pbGxpc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSB0aGlzLm1pY3Jvc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gdGhpcy5zZWNvbmRNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWljcm9zZWNNYXggPSB0aGlzLm1pY3Jvc2VjTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gdGhpcy5ob3VyTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCA9IHRoaXMubWludXRlTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCA9IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWw7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCA9IHRoaXMubWljcm9zZWNNYXhPcmlnaW5hbDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChkcF9pbnN0LnNldHRpbmdzLm1pblRpbWUgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGVtcE1pblRpbWUgPSBuZXcgRGF0ZSgiMDEvMDEvMTk3MCAiICsgZHBfaW5zdC5zZXR0aW5ncy5taW5UaW1lKTsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3VyIDwgdGVtcE1pblRpbWUuZ2V0SG91cnMoKSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGVtcE1pblRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdXIgPT09IHRlbXBNaW5UaW1lLmdldEhvdXJzKCkgJiYgdGhpcy5taW51dGUgPCB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRzLmhvdXJNaW4gPCB0ZW1wTWluVGltZS5nZXRIb3VycygpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGVtcE1pblRpbWUuZ2V0SG91cnMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IHRlbXBNaW5UaW1lLmdldE1pbnV0ZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWZhdWx0cy5ob3VyTWluID09PSB0ZW1wTWluVGltZS5nZXRIb3VycygpID09PSB0aGlzLmhvdXIgJiYgdGhpcy5fZGVmYXVsdHMubWludXRlTWluIDwgdGVtcE1pblRpbWUuZ2V0TWludXRlcygpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSB0ZW1wTWluVGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4gPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoZHBfaW5zdC5zZXR0aW5ncy5tYXhUaW1lICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgdmFyIHRlbXBNYXhUaW1lID0gbmV3IERhdGUoIjAxLzAxLzE5NzAgIiArIGRwX2luc3Quc2V0dGluZ3MubWF4VGltZSk7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuaG91ciA+IHRlbXBNYXhUaW1lLmdldEhvdXJzKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyID0gdGhpcy5fZGVmYXVsdHMuaG91ck1heCA9IHRlbXBNYXhUaW1lLmdldEhvdXJzKCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ob3VyID09PSB0ZW1wTWF4VGltZS5nZXRIb3VycygpICYmIHRoaXMubWludXRlID4gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID4gdGVtcE1heFRpbWUuZ2V0SG91cnMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMuaG91ck1heCA9IHRlbXBNYXhUaW1lLmdldEhvdXJzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSB0ZW1wTWF4VGltZS5nZXRNaW51dGVzKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdHMuaG91ck1heCA9PT0gdGVtcE1heFRpbWUuZ2V0SG91cnMoKSA9PT0gdGhpcy5ob3VyICYmIHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCA+IHRlbXBNYXhUaW1lLmdldE1pbnV0ZXMoKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGVtcE1heFRpbWUuZ2V0TWludXRlcygpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gNTk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChhZGp1c3RTbGlkZXJzICE9PSB1bmRlZmluZWQgJiYgYWRqdXN0U2xpZGVycyA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIHZhciBob3VyTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSAoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyKSksIDEwKSwNCgkJCQkJbWluTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1heCAtICgodGhpcy5fZGVmYXVsdHMubWludXRlTWF4IC0gdGhpcy5fZGVmYXVsdHMubWludXRlTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaW51dGUpKSwgMTApLA0KCQkJCQlzZWNNYXggPSBwYXJzZUludCgodGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXggLSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4pICUgdGhpcy5fZGVmYXVsdHMuc3RlcFNlY29uZCkpLCAxMCksDQoJCQkJCW1pbGxpc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWxsaXNlYykpLCAxMCksDQoJCQkJCW1pY3Jvc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWNyb3NlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWNyb3NlYykpLCAxMCk7DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob3VyX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLmhvdXJfc2xpZGVyLCAnaG91cicsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5ob3VyTWluLCBtYXg6IGhvdXJNYXgsIHN0ZXA6IHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5ob3VyX3NsaWRlciwgJ2hvdXInLCB0aGlzLmhvdXIgLSAodGhpcy5ob3VyICUgdGhpcy5fZGVmYXVsdHMuc3RlcEhvdXIpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHRoaXMubWludXRlX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnLCB7IG1pbjogdGhpcy5fZGVmYXVsdHMubWludXRlTWluLCBtYXg6IG1pbk1heCwgc3RlcDogdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMubWludXRlX3NsaWRlciwgJ21pbnV0ZScsIHRoaXMubWludXRlIC0gKHRoaXMubWludXRlICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWNvbmRfc2xpZGVyKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4sIG1heDogc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwU2Vjb25kIH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5zZWNvbmRfc2xpZGVyLCAnc2Vjb25kJywgdGhpcy5zZWNvbmQgLSAodGhpcy5zZWNvbmQgJSB0aGlzLl9kZWZhdWx0cy5zdGVwU2Vjb25kKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbGxpc2VjX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluLCBtYXg6IG1pbGxpc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwTWlsbGlzZWMgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgdGhpcy5taWxsaXNlYyAtICh0aGlzLm1pbGxpc2VjICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbGxpc2VjKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pY3Jvc2VjX3NsaWRlcikgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pY3Jvc2VjTWluLCBtYXg6IG1pY3Jvc2VjTWF4LCBzdGVwOiB0aGlzLl9kZWZhdWx0cy5zdGVwTWljcm9zZWMgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJywgdGhpcy5taWNyb3NlYyAtICh0aGlzLm1pY3Jvc2VjICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pY3Jvc2VjKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiB3aGVuIGEgc2xpZGVyIG1vdmVzLCBzZXQgdGhlIGludGVybmFsIHRpbWUuLi4NCgkJKiBvbiB0aW1lIGNoYW5nZSBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB0aW1lIGlzIHVwZGF0ZWQgaW4gdGhlIHRleHQgZmllbGQNCgkJKi8NCiAgICAgICAgX29uVGltZUNoYW5nZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy5zaG93VGltZXBpY2tlcikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBob3VyID0gKHRoaXMuaG91cl9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuaG91cl9zbGlkZXIsICdob3VyJykgOiBmYWxzZSwNCgkJCQltaW51dGUgPSAodGhpcy5taW51dGVfc2xpZGVyKSA/IHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnKSA6IGZhbHNlLA0KCQkJCXNlY29uZCA9ICh0aGlzLnNlY29uZF9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcpIDogZmFsc2UsDQoJCQkJbWlsbGlzZWMgPSAodGhpcy5taWxsaXNlY19zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMubWlsbGlzZWNfc2xpZGVyLCAnbWlsbGlzZWMnKSA6IGZhbHNlLA0KCQkJCW1pY3Jvc2VjID0gKHRoaXMubWljcm9zZWNfc2xpZGVyKSA/IHRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pY3Jvc2VjX3NsaWRlciwgJ21pY3Jvc2VjJykgOiBmYWxzZSwNCgkJCQl0aW1lem9uZSA9ICh0aGlzLnRpbWV6b25lX3NlbGVjdCkgPyB0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoKSA6IGZhbHNlLA0KCQkJCW8gPSB0aGlzLl9kZWZhdWx0cywNCgkJCQlwaWNrZXJUaW1lRm9ybWF0ID0gby5waWNrZXJUaW1lRm9ybWF0IHx8IG8udGltZUZvcm1hdCwNCgkJCQlwaWNrZXJUaW1lU3VmZml4ID0gby5waWNrZXJUaW1lU3VmZml4IHx8IG8udGltZVN1ZmZpeDsNCg0KICAgICAgICAgICAgaWYgKHR5cGVvZiAoaG91cikgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgaG91ciA9IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGVvZiAobWludXRlKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBtaW51dGUgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgKHNlY29uZCkgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgc2Vjb25kID0gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodHlwZW9mIChtaWxsaXNlYykgPT09ICdvYmplY3QnKSB7DQogICAgICAgICAgICAgICAgbWlsbGlzZWMgPSBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0eXBlb2YgKG1pY3Jvc2VjKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBtaWNyb3NlYyA9IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHR5cGVvZiAodGltZXpvbmUpID09PSAnb2JqZWN0Jykgew0KICAgICAgICAgICAgICAgIHRpbWV6b25lID0gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChob3VyICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludChob3VyLCAxMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobWludXRlICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1pbnV0ZSwgMTApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHNlY29uZCAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBzZWNvbmQgPSBwYXJzZUludChzZWNvbmQsIDEwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChtaWxsaXNlYyAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBtaWxsaXNlYyA9IHBhcnNlSW50KG1pbGxpc2VjLCAxMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAobWljcm9zZWMgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgbWljcm9zZWMgPSBwYXJzZUludChtaWNyb3NlYywgMTApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHRpbWV6b25lICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHRpbWV6b25lID0gdGltZXpvbmUudG9TdHJpbmcoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGFtcG0gPSBvW2hvdXIgPCAxMiA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07DQoNCiAgICAgICAgICAgIC8vIElmIHRoZSB1cGRhdGUgd2FzIGRvbmUgaW4gdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgc2hvdWxkIG5vdCBiZSB1cGRhdGVkLg0KICAgICAgICAgICAgLy8gSWYgdGhlIHVwZGF0ZSB3YXMgZG9uZSB1c2luZyB0aGUgc2xpZGVycywgdXBkYXRlIHRoZSBpbnB1dCBmaWVsZC4NCiAgICAgICAgICAgIHZhciBoYXNDaGFuZ2VkID0gKA0KCQkJCQkJaG91ciAhPT0gcGFyc2VJbnQodGhpcy5ob3VyLCAxMCkgfHwgLy8gc2xpZGVycyBzaG91bGQgYWxsIGJlIG51bWVyaWMNCgkJCQkJCW1pbnV0ZSAhPT0gcGFyc2VJbnQodGhpcy5taW51dGUsIDEwKSB8fA0KCQkJCQkJc2Vjb25kICE9PSBwYXJzZUludCh0aGlzLnNlY29uZCwgMTApIHx8DQoJCQkJCQltaWxsaXNlYyAhPT0gcGFyc2VJbnQodGhpcy5taWxsaXNlYywgMTApIHx8DQoJCQkJCQltaWNyb3NlYyAhPT0gcGFyc2VJbnQodGhpcy5taWNyb3NlYywgMTApIHx8DQoJCQkJCQkodGhpcy5hbXBtLmxlbmd0aCA+IDAgJiYgKGhvdXIgPCAxMikgIT09ICgkLmluQXJyYXkodGhpcy5hbXBtLnRvVXBwZXJDYXNlKCksIHRoaXMuYW1OYW1lcykgIT09IC0xKSkgfHwNCgkJCQkJCSh0aGlzLnRpbWV6b25lICE9PSBudWxsICYmIHRpbWV6b25lICE9PSB0aGlzLnRpbWV6b25lLnRvU3RyaW5nKCkpIC8vIGNvdWxkIGJlIG51bWVyaWMgb3IgIkVTVCIgZm9ybWF0LCBzbyB1c2UgdG9TdHJpbmcoKQ0KCQkJCQkpOw0KDQogICAgICAgICAgICBpZiAoaGFzQ2hhbmdlZCkgew0KDQogICAgICAgICAgICAgICAgaWYgKGhvdXIgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuaG91ciA9IGhvdXI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChtaW51dGUgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubWludXRlID0gbWludXRlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHNlY29uZDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG1pbGxpc2VjICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2VjID0gbWlsbGlzZWM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChtaWNyb3NlYyAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3NlYyA9IG1pY3Jvc2VjOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGltZXpvbmUgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXpvbmUgPSB0aW1lem9uZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXRbMF0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnQuYW1wbSkgew0KICAgICAgICAgICAgICAgIHRoaXMuYW1wbSA9IGFtcG07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIFVwZGF0ZXMgdGhlIHRpbWUgd2l0aGluIHRoZSB0aW1lcGlja2VyDQogICAgICAgICAgICB0aGlzLmZvcm1hdHRlZFRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShvLnRpbWVGb3JtYXQsIHRoaXMsIG8pOw0KICAgICAgICAgICAgaWYgKHRoaXMuJHRpbWVPYmopIHsNCiAgICAgICAgICAgICAgICBpZiAocGlja2VyVGltZUZvcm1hdCA9PT0gby50aW1lRm9ybWF0KSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmoudGV4dCh0aGlzLmZvcm1hdHRlZFRpbWUgKyBwaWNrZXJUaW1lU3VmZml4KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVPYmoudGV4dCgkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShwaWNrZXJUaW1lRm9ybWF0LCB0aGlzLCBvKSArIHBpY2tlclRpbWVTdWZmaXgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy50aW1lRGVmaW5lZCA9IHRydWU7DQogICAgICAgICAgICBpZiAoaGFzQ2hhbmdlZCkgew0KICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7DQogICAgICAgICAgICAgICAgLy90aGlzLiRpbnB1dC5mb2N1cygpOyAvLyBtYXkgYXV0b21hdGljYWxseSBvcGVuIHRoZSBwaWNrZXIgb24gc2V0RGF0ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQoJCSogY2FsbCBjdXN0b20gb25TZWxlY3QuDQoJCSogYmluZCB0byBzbGlkZXJzIHNsaWRlc3RvcCwgYW5kIGdyaWQgY2xpY2suDQoJCSovDQogICAgICAgIF9vblNlbGVjdEhhbmRsZXI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBvblNlbGVjdCA9IHRoaXMuX2RlZmF1bHRzLm9uU2VsZWN0IHx8IHRoaXMuaW5zdC5zZXR0aW5ncy5vblNlbGVjdDsNCiAgICAgICAgICAgIHZhciBpbnB1dEVsID0gdGhpcy4kaW5wdXQgPyB0aGlzLiRpbnB1dFswXSA6IG51bGw7DQogICAgICAgICAgICBpZiAob25TZWxlY3QgJiYgaW5wdXRFbCkgew0KICAgICAgICAgICAgICAgIG9uU2VsZWN0LmFwcGx5KGlucHV0RWwsIFt0aGlzLmZvcm1hdHRlZERhdGVUaW1lLCB0aGlzXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoNCgkJKiB1cGRhdGUgb3VyIGlucHV0IHdpdGggdGhlIG5ldyBkYXRlIHRpbWUuLg0KCQkqLw0KICAgICAgICBfdXBkYXRlRGF0ZVRpbWU6IGZ1bmN0aW9uIChkcF9pbnN0KSB7DQogICAgICAgICAgICBkcF9pbnN0ID0gdGhpcy5pbnN0IHx8IGRwX2luc3Q7DQogICAgICAgICAgICB2YXIgZHRUbXAgPSAoZHBfaW5zdC5jdXJyZW50WWVhciA+IDAgPw0KCQkJCQkJCW5ldyBEYXRlKGRwX2luc3QuY3VycmVudFllYXIsIGRwX2luc3QuY3VycmVudE1vbnRoLCBkcF9pbnN0LmN1cnJlbnREYXkpIDoNCgkJCQkJCQluZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KSksDQoJCQkJZHQgPSAkLmRhdGVwaWNrZXIuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGR0VG1wKSwNCgkJCQkvL2R0ID0gJC5kYXRlcGlja2VyLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KSksDQoJCQkJLy9kdCA9ICQuZGF0ZXBpY2tlci5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZHBfaW5zdC5jdXJyZW50WWVhciwgZHBfaW5zdC5jdXJyZW50TW9udGgsIGRwX2luc3QuY3VycmVudERheSkpLA0KCQkJCWRhdGVGbXQgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnZGF0ZUZvcm1hdCcpLA0KCQkJCWZvcm1hdENmZyA9ICQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGRwX2luc3QpLA0KCQkJCXRpbWVBdmFpbGFibGUgPSBkdCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVEZWZpbmVkOw0KICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRlID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoZGF0ZUZtdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsNCiAgICAgICAgICAgIHZhciBmb3JtYXR0ZWREYXRlVGltZSA9IHRoaXMuZm9ybWF0dGVkRGF0ZTsNCg0KICAgICAgICAgICAgLy8gaWYgYSBzbGlkZXIgd2FzIGNoYW5nZWQgYnV0IGRhdGVwaWNrZXIgZG9lc24ndCBoYXZlIGEgdmFsdWUgeWV0LCBzZXQgaXQNCiAgICAgICAgICAgIGlmIChkcF9pbnN0Lmxhc3RWYWwgPT09ICIiKSB7DQogICAgICAgICAgICAgICAgZHBfaW5zdC5jdXJyZW50WWVhciA9IGRwX2luc3Quc2VsZWN0ZWRZZWFyOw0KICAgICAgICAgICAgICAgIGRwX2luc3QuY3VycmVudE1vbnRoID0gZHBfaW5zdC5zZWxlY3RlZE1vbnRoOw0KICAgICAgICAgICAgICAgIGRwX2luc3QuY3VycmVudERheSA9IGRwX2luc3Quc2VsZWN0ZWREYXk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qDQoJCQkqIHJlbW92ZSBmb2xsb3dpbmcgbGluZXMgdG8gZm9yY2UgZXZlcnkgY2hhbmdlcyBpbiBkYXRlIHBpY2tlciB0byBjaGFuZ2UgdGhlIGlucHV0IHZhbHVlDQoJCQkqIEJ1ZyBkZXNjcmlwdGlvbnM6IHdoZW4gYW4gaW5wdXQgZmllbGQgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYW5kIGNsaWNrIG9uIHRoZSBmaWVsZCB0byBwb3AgdXAgdGhlIGRhdGUgcGlja2VyLiANCgkJCSogSWYgdGhlIHVzZXIgbWFudWFsbHkgZW1wdHkgdGhlIHZhbHVlIGluIHRoZSBpbnB1dCBmaWVsZCwgdGhlIGRhdGUgcGlja2VyIHdpbGwgbmV2ZXIgY2hhbmdlIHNlbGVjdGVkIHZhbHVlLg0KCQkJKi8NCiAgICAgICAgICAgIC8vaWYgKGRwX2luc3QubGFzdFZhbCAhPT0gdW5kZWZpbmVkICYmIChkcF9pbnN0Lmxhc3RWYWwubGVuZ3RoID4gMCAmJiB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGggPT09IDApKSB7DQogICAgICAgICAgICAvLwlyZXR1cm47DQogICAgICAgICAgICAvL30NCg0KICAgICAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSB0cnVlICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5U2hvd0RhdGUgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZVRpbWUgPSB0aGlzLmZvcm1hdHRlZFRpbWU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9kZWZhdWx0cy50aW1lT25seSAhPT0gdHJ1ZSAmJiAodGhpcy5fZGVmYXVsdHMuYWx3YXlzU2V0VGltZSB8fCB0aW1lQXZhaWxhYmxlKSkgfHwgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSB0cnVlICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5U2hvd0RhdGUgPT09IHRydWUpKSB7DQogICAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yICsgdGhpcy5mb3JtYXR0ZWRUaW1lICsgdGhpcy5fZGVmYXVsdHMudGltZVN1ZmZpeDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRlVGltZSA9IGZvcm1hdHRlZERhdGVUaW1lOw0KDQogICAgICAgICAgICBpZiAoIXRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkRGF0ZSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0ICYmIHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ID09PSBmYWxzZSAmJiB0aGlzLl9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5ID09PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kYWx0SW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkVGltZSk7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuZm9ybWF0dGVkRGF0ZSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0KSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKGZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgICAgICB2YXIgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAnJywNCgkJCQkJYWx0U2VwYXJhdG9yID0gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yICE9PSBudWxsID8gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yLA0KCQkJCQlhbHRUaW1lU3VmZml4ID0gdGhpcy5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCAhPT0gbnVsbCA/IHRoaXMuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXggOiB0aGlzLl9kZWZhdWx0cy50aW1lU3VmZml4Ow0KDQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0cy50aW1lT25seSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdHMuYWx0Rm9ybWF0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSA9ICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRoaXMuX2RlZmF1bHRzLmFsdEZvcm1hdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGFsdEZvcm1hdHRlZERhdGVUaW1lKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSBhbHRTZXBhcmF0b3I7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh0aGlzLl9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0LCB0aGlzLCB0aGlzLl9kZWZhdWx0cykgKyBhbHRUaW1lU3VmZml4Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5mb3JtYXR0ZWRUaW1lICsgYWx0VGltZVN1ZmZpeDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdGhpcy4kYWx0SW5wdXQudmFsKGFsdEZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKGZvcm1hdHRlZERhdGVUaW1lKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy4kaW5wdXQudHJpZ2dlcigiY2hhbmdlIik7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uRm9jdXM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICghdGhpcy4kaW5wdXQudmFsKCkgJiYgdGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuX2RlZmF1bHRzLmRlZmF1bHRWYWx1ZSk7DQogICAgICAgICAgICAgICAgdmFyIGluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXQuZ2V0KDApKSwNCgkJCQkJdHBfaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgICAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWVPbmx5ICYmIChpbnN0LmlucHV0LnZhbCgpICE9PSBpbnN0Lmxhc3RWYWwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQudGltZXBpY2tlci5sb2coZXJyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICAvKg0KCQkqIFNtYWxsIGFic3RyYWN0aW9uIHRvIGNvbnRyb2wgdHlwZXMNCgkJKiBXZSBjYW4gYWRkIG1vcmUsIGp1c3QgYmUgc3VyZSB0byBmb2xsb3cgdGhlIHBhdHRlcm46IGNyZWF0ZSwgb3B0aW9ucywgdmFsdWUNCgkJKi8NCiAgICAgICAgX2NvbnRyb2xzOiB7DQogICAgICAgICAgICAvLyBzbGlkZXIgbWV0aG9kcw0KICAgICAgICAgICAgc2xpZGVyOiB7DQogICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwsIG1pbiwgbWF4LCBzdGVwKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBydGwgPSB0cF9pbnN0Ll9kZWZhdWx0cy5pc1JUTDsgLy8gaWYgcnRsIGdvIC02MC0+MCBpbnN0ZWFkIG9mIDAtPjYwDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoucHJvcCgnc2xpZGUnLCBudWxsKS5zbGlkZXIoew0KICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb246ICJob3Jpem9udGFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBydGwgPyB2YWwgKiAtMSA6IHZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogcnRsID8gbWF4ICogLTEgOiBtaW4sDQogICAgICAgICAgICAgICAgICAgICAgICBtYXg6IHJ0bCA/IG1pbiAqIC0xIDogbWF4LA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5jb250cm9sLnZhbHVlKHRwX2luc3QsICQodGhpcyksIHVuaXQsIHJ0bCA/IHVpLnZhbHVlICogLTEgOiB1aS52YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX29uU2VsZWN0SGFuZGxlcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9wdGlvbnM6IGZ1bmN0aW9uICh0cF9pbnN0LCBvYmosIHVuaXQsIG9wdHMsIHZhbCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHBfaW5zdC5fZGVmYXVsdHMuaXNSVEwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG9wdHMpID09PSAnc3RyaW5nJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRzID09PSAnbWluJyB8fCBvcHRzID09PSAnbWF4Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMsIHZhbCAqIC0xKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMob2JqLnNsaWRlcihvcHRzKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IG9wdHMubWluLA0KCQkJCQkJCW1heCA9IG9wdHMubWF4Ow0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5taW4gPSBvcHRzLm1heCA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLm1heCA9IG1pbiAqIC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5taW4gPSBtYXggKiAtMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKG9wdHMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG9wdHMpID09PSAnc3RyaW5nJyAmJiB2YWwgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5zbGlkZXIob3B0cywgdmFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcihvcHRzKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLmlzUlRMKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcigndmFsdWUnLCB2YWwgKiAtMSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMob2JqLnNsaWRlcigndmFsdWUnKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnNsaWRlcigndmFsdWUnLCB2YWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBzZWxlY3QgbWV0aG9kcw0KICAgICAgICAgICAgc2VsZWN0OiB7DQogICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwsIG1pbiwgbWF4LCBzdGVwKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzZWwgPSAnPHNlbGVjdCBjbGFzcz0idWktdGltZXBpY2tlci1zZWxlY3QiIGRhdGEtdW5pdD0iJyArIHVuaXQgKyAnIiBkYXRhLW1pbj0iJyArIG1pbiArICciIGRhdGEtbWF4PSInICsgbWF4ICsgJyIgZGF0YS1zdGVwPSInICsgc3RlcCArICciPicsDQoJCQkJCQlmb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5waWNrZXJUaW1lRm9ybWF0IHx8IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1pbjsgaSA8PSBtYXg7IGkgKz0gc3RlcCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2VsICs9ICc8b3B0aW9uIHZhbHVlPSInICsgaSArICciJyArIChpID09PSB2YWwgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bml0ID09PSAnaG91cicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoJC50cmltKGZvcm1hdC5yZXBsYWNlKC9bXmh0IF0vaWcsICcnKSksIHsgaG91cjogaSB9LCB0cF9pbnN0Ll9kZWZhdWx0cyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bml0ID09PSAnbWlsbGlzZWMnIHx8IHVuaXQgPT09ICdtaWNyb3NlYycgfHwgaSA+PSAxMCkgeyBzZWwgKz0gaTsgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IHNlbCArPSAnMCcgKyBpLnRvU3RyaW5nKCk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbCArPSAnPC9vcHRpb24+JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBzZWwgKz0gJzwvc2VsZWN0Pic7DQoNCiAgICAgICAgICAgICAgICAgICAgb2JqLmNoaWxkcmVuKCdzZWxlY3QnKS5yZW1vdmUoKTsNCg0KICAgICAgICAgICAgICAgICAgICAkKHNlbCkuYXBwZW5kVG8ob2JqKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX29uVGltZUNoYW5nZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBvcHRpb25zOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCBvcHRzLCB2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSB7fSwNCgkJCQkJCSR0ID0gb2JqLmNoaWxkcmVuKCdzZWxlY3QnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAob3B0cykgPT09ICdzdHJpbmcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHQuZGF0YShvcHRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIG9bb3B0c10gPSB2YWw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7IG8gPSBvcHRzOyB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cF9pbnN0LmNvbnRyb2wuY3JlYXRlKHRwX2luc3QsIG9iaiwgJHQuZGF0YSgndW5pdCcpLCAkdC52YWwoKSwgby5taW4gfHwgJHQuZGF0YSgnbWluJyksIG8ubWF4IHx8ICR0LmRhdGEoJ21heCcpLCBvLnN0ZXAgfHwgJHQuZGF0YSgnc3RlcCcpKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAodHBfaW5zdCwgb2JqLCB1bml0LCB2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyICR0ID0gb2JqLmNoaWxkcmVuKCdzZWxlY3QnKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHQudmFsKHZhbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0LnZhbCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSAvLyBlbmQgX2NvbnRyb2xzDQoNCiAgICB9KTsNCg0KICAgICQuZm4uZXh0ZW5kKHsNCiAgICAgICAgLyoNCgkJKiBzaG9ydGhhbmQganVzdCB0byB1c2UgdGltZXBpY2tlci4NCgkJKi8NCiAgICAgICAgdGltZXBpY2tlcjogZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgICAgIG8gPSBvIHx8IHt9Ow0KICAgICAgICAgICAgdmFyIHRtcF9hcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsNCg0KICAgICAgICAgICAgaWYgKHR5cGVvZiBvID09PSAnb2JqZWN0Jykgew0KICAgICAgICAgICAgICAgIHRtcF9hcmdzWzBdID0gJC5leHRlbmQobywgew0KICAgICAgICAgICAgICAgICAgICB0aW1lT25seTogdHJ1ZQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJCh0aGlzKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAkLmZuLmRhdGV0aW1lcGlja2VyLmFwcGx5KCQodGhpcyksIHRtcF9hcmdzKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9LA0KDQogICAgICAgIC8qDQoJCSogZXh0ZW5kIHRpbWVwaWNrZXIgdG8gZGF0ZXBpY2tlcg0KCQkqLw0KICAgICAgICBkYXRldGltZXBpY2tlcjogZnVuY3Rpb24gKG8pIHsNCiAgICAgICAgICAgIG8gPSBvIHx8IHt9Ow0KICAgICAgICAgICAgdmFyIHRtcF9hcmdzID0gYXJndW1lbnRzOw0KDQogICAgICAgICAgICBpZiAodHlwZW9mIChvKSA9PT0gJ3N0cmluZycpIHsNCiAgICAgICAgICAgICAgICBpZiAobyA9PT0gJ2dldERhdGUnIHx8IChvID09PSAnb3B0aW9uJyAmJiB0bXBfYXJncy5sZW5ndGggPT09IDIgJiYgdHlwZW9mICh0bXBfYXJnc1sxXSkgPT09ICdzdHJpbmcnKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5mbi5kYXRlcGlja2VyLmFwcGx5KCQodGhpc1swXSksIHRtcF9hcmdzKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkdCA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAkdC5kYXRlcGlja2VyLmFwcGx5KCR0LCB0bXBfYXJncyk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciAkdCA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgICAgICR0LmRhdGVwaWNrZXIoJC50aW1lcGlja2VyLl9uZXdJbnN0KCR0LCBvKS5fZGVmYXVsdHMpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAvKg0KCSogUHVibGljIFV0aWxpdHkgdG8gcGFyc2UgZGF0ZSBhbmQgdGltZQ0KCSovDQogICAgJC5kYXRlcGlja2VyLnBhcnNlRGF0ZVRpbWUgPSBmdW5jdGlvbiAoZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKSB7DQogICAgICAgIHZhciBwYXJzZVJlcyA9IHBhcnNlRGF0ZVRpbWVJbnRlcm5hbChkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpOw0KICAgICAgICBpZiAocGFyc2VSZXMudGltZU9iaikgew0KICAgICAgICAgICAgdmFyIHQgPSBwYXJzZVJlcy50aW1lT2JqOw0KICAgICAgICAgICAgcGFyc2VSZXMuZGF0ZS5zZXRIb3Vycyh0LmhvdXIsIHQubWludXRlLCB0LnNlY29uZCwgdC5taWxsaXNlYyk7DQogICAgICAgICAgICBwYXJzZVJlcy5kYXRlLnNldE1pY3Jvc2Vjb25kcyh0Lm1pY3Jvc2VjKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBwYXJzZVJlcy5kYXRlOw0KICAgIH07DQoNCiAgICAvKg0KCSogUHVibGljIHV0aWxpdHkgdG8gcGFyc2UgdGltZQ0KCSovDQogICAgJC5kYXRlcGlja2VyLnBhcnNlVGltZSA9IGZ1bmN0aW9uICh0aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCBvcHRpb25zKSB7DQogICAgICAgIHZhciBvID0gZXh0ZW5kUmVtb3ZlKGV4dGVuZFJlbW92ZSh7fSwgJC50aW1lcGlja2VyLl9kZWZhdWx0cyksIG9wdGlvbnMgfHwge30pLA0KCQkJaXNvODYwMSA9ICh0aW1lRm9ybWF0LnJlcGxhY2UoL1wnLio/XCcvZywgJycpLmluZGV4T2YoJ1onKSAhPT0gLTEpOw0KDQogICAgICAgIC8vIFN0cmljdCBwYXJzZSByZXF1aXJlcyB0aGUgdGltZVN0cmluZyB0byBtYXRjaCB0aGUgdGltZUZvcm1hdCBleGFjdGx5DQogICAgICAgIHZhciBzdHJpY3RQYXJzZSA9IGZ1bmN0aW9uIChmLCBzLCBvKSB7DQoNCiAgICAgICAgICAgIC8vIHBhdHRlcm4gZm9yIHN0YW5kYXJkIGFuZCBsb2NhbGl6ZWQgQU0vUE0gbWFya2Vycw0KICAgICAgICAgICAgdmFyIGdldFBhdHRlcm5BbXBtID0gZnVuY3Rpb24gKGFtTmFtZXMsIHBtTmFtZXMpIHsNCiAgICAgICAgICAgICAgICB2YXIgbWFya2VycyA9IFtdOw0KICAgICAgICAgICAgICAgIGlmIChhbU5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICQubWVyZ2UobWFya2VycywgYW1OYW1lcyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChwbU5hbWVzKSB7DQogICAgICAgICAgICAgICAgICAgICQubWVyZ2UobWFya2VycywgcG1OYW1lcyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIG1hcmtlcnMgPSAkLm1hcChtYXJrZXJzLCBmdW5jdGlvbiAodmFsKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgvWy4qKz98KClcW1xde31cXF0vZywgJ1xcJCYnKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJygnICsgbWFya2Vycy5qb2luKCd8JykgKyAnKT8nOw0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgLy8gZmlndXJlIG91dCBwb3NpdGlvbiBvZiB0aW1lIGVsZW1lbnRzLi4gY2F1c2UganMgY2FudCBkbyBuYW1lZCBjYXB0dXJlcw0KICAgICAgICAgICAgdmFyIGdldEZvcm1hdFBvc2l0aW9ucyA9IGZ1bmN0aW9uICh0aW1lRm9ybWF0KSB7DQogICAgICAgICAgICAgICAgdmFyIGZpbmRzID0gdGltZUZvcm1hdC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oaHsxLDJ9fG17MSwyfXxzezEsMn18bHsxfXxjezF9fHR7MSwyfXx6fCcuKj8nKS9nKSwNCgkJCQkJb3JkZXJzID0gew0KCQkJCQkgICAgaDogLTEsDQoJCQkJCSAgICBtOiAtMSwNCgkJCQkJICAgIHM6IC0xLA0KCQkJCQkgICAgbDogLTEsDQoJCQkJCSAgICBjOiAtMSwNCgkJCQkJICAgIHQ6IC0xLA0KCQkJCQkgICAgejogLTENCgkJCQkJfTsNCg0KICAgICAgICAgICAgICAgIGlmIChmaW5kcykgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXJzW2ZpbmRzW2ldLnRvU3RyaW5nKCkuY2hhckF0KDApXSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcnNbZmluZHNbaV0udG9TdHJpbmcoKS5jaGFyQXQoMCldID0gaSArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyczsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIHZhciByZWdzdHIgPSAnXicgKyBmLnRvU3RyaW5nKCkNCgkJCQkJLnJlcGxhY2UoLyhbaEhdezEsMn18bW0/fHNzP3xbdFRdezEsMn18W3paXXxbbGNdfCcuKj8nKS9nLCBmdW5jdGlvbiAobWF0Y2gpIHsNCgkJCQkJICAgIHZhciBtbCA9IG1hdGNoLmxlbmd0aDsNCgkJCQkJICAgIHN3aXRjaCAobWF0Y2guY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpIHsNCgkJCQkJICAgICAgICBjYXNlICdoJzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuIG1sID09PSAxID8gJyhcXGQ/XFxkKScgOiAnKFxcZHsnICsgbWwgKyAnfSknOw0KCQkJCQkgICAgICAgIGNhc2UgJ20nOg0KCQkJCQkgICAgICAgICAgICByZXR1cm4gbWwgPT09IDEgPyAnKFxcZD9cXGQpJyA6ICcoXFxkeycgKyBtbCArICd9KSc7DQoJCQkJCSAgICAgICAgY2FzZSAncyc6DQoJCQkJCSAgICAgICAgICAgIHJldHVybiBtbCA9PT0gMSA/ICcoXFxkP1xcZCknIDogJyhcXGR7JyArIG1sICsgJ30pJzsNCgkJCQkJICAgICAgICBjYXNlICdsJzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuICcoXFxkP1xcZD9cXGQpJzsNCgkJCQkJICAgICAgICBjYXNlICdjJzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuICcoXFxkP1xcZD9cXGQpJzsNCgkJCQkJICAgICAgICBjYXNlICd6JzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuICcoenxbLStdXFxkXFxkOj9cXGRcXGR8XFxTKyk/JzsNCgkJCQkJICAgICAgICBjYXNlICd0JzoNCgkJCQkJICAgICAgICAgICAgcmV0dXJuIGdldFBhdHRlcm5BbXBtKG8uYW1OYW1lcywgby5wbU5hbWVzKTsNCgkJCQkJICAgICAgICBkZWZhdWx0OiAgICAvLyBsaXRlcmFsIGVzY2FwZWQgaW4gcXVvdGVzDQoJCQkJCSAgICAgICAgICAgIHJldHVybiAnKCcgKyBtYXRjaC5yZXBsYWNlKC9cJy9nLCAiIikucmVwbGFjZSgvKFwufFwkfFxefFxcfFwvfFwofFwpfFxbfFxdfFw/fFwrfFwqKS9nLCBmdW5jdGlvbiAobSkgeyByZXR1cm4gIlxcIiArIG07IH0pICsgJyk/JzsNCgkJCQkJICAgIH0NCgkJCQkJfSkNCgkJCQkJLnJlcGxhY2UoL1xzL2csICdcXHM/JykgKw0KCQkJCQlvLnRpbWVTdWZmaXggKyAnJCcsDQoJCQkJb3JkZXIgPSBnZXRGb3JtYXRQb3NpdGlvbnMoZiksDQoJCQkJYW1wbSA9ICcnLA0KCQkJCXRyZWc7DQoNCiAgICAgICAgICAgIHRyZWcgPSBzLm1hdGNoKG5ldyBSZWdFeHAocmVnc3RyLCAnaScpKTsNCg0KICAgICAgICAgICAgdmFyIHJlc1RpbWUgPSB7DQogICAgICAgICAgICAgICAgaG91cjogMCwNCiAgICAgICAgICAgICAgICBtaW51dGU6IDAsDQogICAgICAgICAgICAgICAgc2Vjb25kOiAwLA0KICAgICAgICAgICAgICAgIG1pbGxpc2VjOiAwLA0KICAgICAgICAgICAgICAgIG1pY3Jvc2VjOiAwDQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBpZiAodHJlZykgew0KICAgICAgICAgICAgICAgIGlmIChvcmRlci50ICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHJlZ1tvcmRlci50XSA9PT0gdW5kZWZpbmVkIHx8IHRyZWdbb3JkZXIudF0ubGVuZ3RoID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbXBtID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNUaW1lLmFtcG0gPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFtcG0gPSAkLmluQXJyYXkodHJlZ1tvcmRlci50XS50b1VwcGVyQ2FzZSgpLCBvLmFtTmFtZXMpICE9PSAtMSA/ICdBTScgOiAnUE0nOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5hbXBtID0gb1thbXBtID09PSAnQU0nID8gJ2FtTmFtZXMnIDogJ3BtTmFtZXMnXVswXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChvcmRlci5oICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiB0cmVnW29yZGVyLmhdID09PSAnMTInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXNUaW1lLmhvdXIgPSAwOyAvLyAxMmFtID0gMCBob3VyDQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiB0cmVnW29yZGVyLmhdICE9PSAnMTInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5ob3VyID0gcGFyc2VJbnQodHJlZ1tvcmRlci5oXSwgMTApICsgMTI7IC8vIDEycG0gPSAxMiBob3VyLCBhbnkgb3RoZXIgcG0gPSBob3VyICsgMTINCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5ob3VyID0gTnVtYmVyKHRyZWdbb3JkZXIuaF0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKG9yZGVyLm0gIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIHJlc1RpbWUubWludXRlID0gTnVtYmVyKHRyZWdbb3JkZXIubV0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAob3JkZXIucyAhPT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5zZWNvbmQgPSBOdW1iZXIodHJlZ1tvcmRlci5zXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChvcmRlci5sICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXNUaW1lLm1pbGxpc2VjID0gTnVtYmVyKHRyZWdbb3JkZXIubF0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAob3JkZXIuYyAhPT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmVzVGltZS5taWNyb3NlYyA9IE51bWJlcih0cmVnW29yZGVyLmNdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG9yZGVyLnogIT09IC0xICYmIHRyZWdbb3JkZXIuel0gIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICByZXNUaW1lLnRpbWV6b25lID0gJC50aW1lcGlja2VyLnRpbWV6b25lT2Zmc2V0TnVtYmVyKHRyZWdbb3JkZXIuel0pOw0KICAgICAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc1RpbWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH07Ly8gZW5kIHN0cmljdFBhcnNlDQoNCiAgICAgICAgLy8gRmlyc3QgdHJ5IEpTIERhdGUsIGlmIHRoYXQgZmFpbHMsIHVzZSBzdHJpY3RQYXJzZQ0KICAgICAgICB2YXIgbG9vc2VQYXJzZSA9IGZ1bmN0aW9uIChmLCBzLCBvKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoJzIwMTItMDEtMDEgJyArIHMpOw0KICAgICAgICAgICAgICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKCcyMDEyLTAxLTAxVCcgKyBzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKCcwMS8wMS8yMDEyICcgKyBzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAiVW5hYmxlIHRvIHBhcnNlIHRpbWUgd2l0aCBuYXRpdmUgRGF0ZTogIiArIHM7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgICAgICBob3VyOiBkLmdldEhvdXJzKCksDQogICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogZC5nZXRNaW51dGVzKCksDQogICAgICAgICAgICAgICAgICAgIHNlY29uZDogZC5nZXRTZWNvbmRzKCksDQogICAgICAgICAgICAgICAgICAgIG1pbGxpc2VjOiBkLmdldE1pbGxpc2Vjb25kcygpLA0KICAgICAgICAgICAgICAgICAgICBtaWNyb3NlYzogZC5nZXRNaWNyb3NlY29uZHMoKSwNCiAgICAgICAgICAgICAgICAgICAgdGltZXpvbmU6IGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaWN0UGFyc2UoZiwgcywgbyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNhdGNoIChlcnIyKSB7DQogICAgICAgICAgICAgICAgICAgICQudGltZXBpY2tlci5sb2coIlVuYWJsZSB0byBwYXJzZSBcbnRpbWVTdHJpbmc6ICIgKyBzICsgIlxudGltZUZvcm1hdDogIiArIGYpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfTsgLy8gZW5kIGxvb3NlUGFyc2UNCg0KICAgICAgICBpZiAodHlwZW9mIG8ucGFyc2UgPT09ICJmdW5jdGlvbiIpIHsNCiAgICAgICAgICAgIHJldHVybiBvLnBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pOw0KICAgICAgICB9DQogICAgICAgIGlmIChvLnBhcnNlID09PSAnbG9vc2UnKSB7DQogICAgICAgICAgICByZXR1cm4gbG9vc2VQYXJzZSh0aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCBvKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gc3RyaWN0UGFyc2UodGltZUZvcm1hdCwgdGltZVN0cmluZywgbyk7DQogICAgfTsNCg0KICAgIC8qKg0KCSAqIFB1YmxpYyB1dGlsaXR5IHRvIGZvcm1hdCB0aGUgdGltZQ0KCSAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgZm9ybWF0IG9mIHRoZSB0aW1lDQoJICogQHBhcmFtIHtPYmplY3R9IHRpbWUgT2JqZWN0IG5vdCBhIERhdGUgZm9yIHRpbWV6b25lcw0KCSAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gZXNzZW50aWFsbHkgdGhlIHJlZ2lvbmFsW10uLiBhbU5hbWVzLCBwbU5hbWVzLCBhbXBtDQoJICogQHJldHVybnMge3N0cmluZ30gdGhlIGZvcm1hdHRlZCB0aW1lDQoJICovDQogICAgJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUgPSBmdW5jdGlvbiAoZm9ybWF0LCB0aW1lLCBvcHRpb25zKSB7DQogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Ow0KICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sICQudGltZXBpY2tlci5fZGVmYXVsdHMsIG9wdGlvbnMpOw0KICAgICAgICB0aW1lID0gJC5leHRlbmQoew0KICAgICAgICAgICAgaG91cjogMCwNCiAgICAgICAgICAgIG1pbnV0ZTogMCwNCiAgICAgICAgICAgIHNlY29uZDogMCwNCiAgICAgICAgICAgIG1pbGxpc2VjOiAwLA0KICAgICAgICAgICAgbWljcm9zZWM6IDAsDQogICAgICAgICAgICB0aW1lem9uZTogbnVsbA0KICAgICAgICB9LCB0aW1lKTsNCg0KICAgICAgICB2YXIgdG1wdGltZSA9IGZvcm1hdCwNCgkJCWFtcG1OYW1lID0gb3B0aW9ucy5hbU5hbWVzWzBdLA0KCQkJaG91ciA9IHBhcnNlSW50KHRpbWUuaG91ciwgMTApOw0KDQogICAgICAgIGlmIChob3VyID4gMTEpIHsNCiAgICAgICAgICAgIGFtcG1OYW1lID0gb3B0aW9ucy5wbU5hbWVzWzBdOw0KICAgICAgICB9DQoNCiAgICAgICAgdG1wdGltZSA9IHRtcHRpbWUucmVwbGFjZSgvKD86SEg/fGhoP3xtbT98c3M/fFt0VF17MSwyfXxbelpdfFtsY118Jy4qPycpL2csIGZ1bmN0aW9uIChtYXRjaCkgew0KICAgICAgICAgICAgc3dpdGNoIChtYXRjaCkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ0hIJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMCcgKyBob3VyKS5zbGljZSgtMik7DQogICAgICAgICAgICAgICAgY2FzZSAnSCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBob3VyOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2hoJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMCcgKyBjb252ZXJ0MjR0bzEyKGhvdXIpKS5zbGljZSgtMik7DQogICAgICAgICAgICAgICAgY2FzZSAnaCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0MjR0bzEyKGhvdXIpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ21tJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMCcgKyB0aW1lLm1pbnV0ZSkuc2xpY2UoLTIpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ20nOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZS5taW51dGU7DQogICAgICAgICAgICAgICAgY2FzZSAnc3MnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwJyArIHRpbWUuc2Vjb25kKS5zbGljZSgtMik7DQogICAgICAgICAgICAgICAgY2FzZSAncyc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lLnNlY29uZDsNCiAgICAgICAgICAgICAgICBjYXNlICdsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMDAnICsgdGltZS5taWxsaXNlYykuc2xpY2UoLTMpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2MnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwMCcgKyB0aW1lLm1pY3Jvc2VjKS5zbGljZSgtMyk7DQogICAgICAgICAgICAgICAgY2FzZSAneic6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRpbWVwaWNrZXIudGltZXpvbmVPZmZzZXRTdHJpbmcodGltZS50aW1lem9uZSA9PT0gbnVsbCA/IG9wdGlvbnMudGltZXpvbmUgOiB0aW1lLnRpbWV6b25lLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgY2FzZSAnWic6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnRpbWVwaWNrZXIudGltZXpvbmVPZmZzZXRTdHJpbmcodGltZS50aW1lem9uZSA9PT0gbnVsbCA/IG9wdGlvbnMudGltZXpvbmUgOiB0aW1lLnRpbWV6b25lLCB0cnVlKTsNCiAgICAgICAgICAgICAgICBjYXNlICdUJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtcG1OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1RUJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFtcG1OYW1lLnRvVXBwZXJDYXNlKCk7DQogICAgICAgICAgICAgICAgY2FzZSAndCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhbXBtTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTsNCiAgICAgICAgICAgICAgICBjYXNlICd0dCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhbXBtTmFtZS50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5yZXBsYWNlKC8nL2csICIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgcmV0dXJuIHRtcHRpbWU7DQogICAgfTsNCg0KICAgIC8qDQoJKiB0aGUgYmFkIGhhY2sgOi8gb3ZlcnJpZGUgZGF0ZXBpY2tlciBzbyBpdCBkb2Vzbid0IGNsb3NlIG9uIHNlbGVjdA0KCS8vIGluc3BpcmVkOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNTI1MTIvanF1ZXJ5LWRhdGVwaWNrZXItcHJldmVudC1jbG9zaW5nLXBpY2tlci13aGVuLWNsaWNraW5nLWEtZGF0ZS8xNzYyMzc4IzE3NjIzNzgNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9zZWxlY3REYXRlID0gJC5kYXRlcGlja2VyLl9zZWxlY3REYXRlOw0KICAgICQuZGF0ZXBpY2tlci5fc2VsZWN0RGF0ZSA9IGZ1bmN0aW9uIChpZCwgZGF0ZVN0cikgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoJChpZClbMF0pLA0KCQkJdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KDQogICAgICAgIGlmICh0cF9pbnN0ICYmIGluc3Quc2V0dGluZ3Muc2hvd1RpbWVwaWNrZXIpIHsNCiAgICAgICAgICAgIHRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUoaW5zdCwgdHJ1ZSk7DQogICAgICAgICAgICBpbnN0LmlubGluZSA9IGluc3Quc3RheV9vcGVuID0gdHJ1ZTsNCiAgICAgICAgICAgIC8vVGhpcyB3YXkgdGhlIG9uU2VsZWN0IGhhbmRsZXIgY2FsbGVkIGZyb20gY2FsZW5kYXJwaWNrZXIgZ2V0IHRoZSBmdWxsIGRhdGVUaW1lDQogICAgICAgICAgICB0aGlzLl9iYXNlX3NlbGVjdERhdGUoaWQsIGRhdGVTdHIpOw0KICAgICAgICAgICAgaW5zdC5pbmxpbmUgPSBpbnN0LnN0YXlfb3BlbiA9IGZhbHNlOw0KICAgICAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOw0KICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIHNlY29uZCBiYWQgaGFjayA6LyBvdmVycmlkZSBkYXRlcGlja2VyIHNvIGl0IHRyaWdnZXJzIGFuIGV2ZW50IHdoZW4gY2hhbmdpbmcgdGhlIGlucHV0IGZpZWxkDQoJKiBhbmQgZG9lcyBub3QgcmVkcmF3IHRoZSBkYXRlcGlja2VyIG9uIGV2ZXJ5IHNlbGVjdERhdGUgZXZlbnQNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVEYXRlcGlja2VyID0gJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyOw0KICAgICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uIChpbnN0KSB7DQoNCiAgICAgICAgLy8gZG9uJ3QgcG9wdXAgdGhlIGRhdGVwaWNrZXIgaWYgdGhlcmUgaXMgYW5vdGhlciBpbnN0YW5jZSBhbHJlYWR5IG9wZW5lZA0KICAgICAgICB2YXIgaW5wdXQgPSBpbnN0LmlucHV0WzBdOw0KICAgICAgICBpZiAoJC5kYXRlcGlja2VyLl9jdXJJbnN0ICYmICQuZGF0ZXBpY2tlci5fY3VySW5zdCAhPT0gaW5zdCAmJiAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ICE9PSBpbnB1dCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHR5cGVvZiAoaW5zdC5zdGF5X29wZW4pICE9PSAnYm9vbGVhbicgfHwgaW5zdC5zdGF5X29wZW4gPT09IGZhbHNlKSB7DQoNCiAgICAgICAgICAgIHRoaXMuX2Jhc2VfdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsNCg0KICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSB0aW1lIGNvbnRyb2wgd2hlbiBjaGFuZ2luZyBzb21ldGhpbmcgaW4gdGhlIGlucHV0IHRleHQgZmllbGQuDQogICAgICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9hZGRUaW1lUGlja2VyKGluc3QpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qDQoJKiB0aGlyZCBiYWQgaGFjayA6LyBvdmVycmlkZSBkYXRlcGlja2VyIHNvIGl0IGFsbG93cyBzcGFjZXMgYW5kIGNvbG9uIGluIHRoZSBpbnB1dCBmaWVsZA0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5UHJlc3MgPSAkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3M7DQogICAgJC5kYXRlcGlja2VyLl9kb0tleVByZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgICAgIHZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksDQoJCQl0cF9pbnN0ID0gJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCg0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgaWYgKCQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICdjb25zdHJhaW5JbnB1dCcpKSB7DQogICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0cF9pbnN0LnN1cHBvcnQuYW1wbSwNCgkJCQkJdHogPSB0cF9pbnN0Ll9kZWZhdWx0cy5zaG93VGltZXpvbmUgIT09IG51bGwgPyB0cF9pbnN0Ll9kZWZhdWx0cy5zaG93VGltZXpvbmUgOiB0cF9pbnN0LnN1cHBvcnQudGltZXpvbmUsDQoJCQkJCWRhdGVDaGFycyA9ICQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycygkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAnZGF0ZUZvcm1hdCcpKSwNCgkJCQkJZGF0ZXRpbWVDaGFycyA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQudG9TdHJpbmcoKQ0KCQkJCQkJCQkJCQkucmVwbGFjZSgvW2htc10vZywgJycpDQoJCQkJCQkJCQkJCS5yZXBsYWNlKC9UVC9nLCBhbXBtID8gJ0FQTScgOiAnJykNCgkJCQkJCQkJCQkJLnJlcGxhY2UoL1R0L2csIGFtcG0gPyAnQWFQcE1tJyA6ICcnKQ0KCQkJCQkJCQkJCQkucmVwbGFjZSgvdFQvZywgYW1wbSA/ICdBYVBwTW0nIDogJycpDQoJCQkJCQkJCQkJCS5yZXBsYWNlKC9UL2csIGFtcG0gPyAnQVAnIDogJycpDQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90dC9nLCBhbXBtID8gJ2FwbScgOiAnJykNCgkJCQkJCQkJCQkJLnJlcGxhY2UoL3QvZywgYW1wbSA/ICdhcCcgOiAnJykgKw0KCQkJCQkJCQkJCQkiICIgKyB0cF9pbnN0Ll9kZWZhdWx0cy5zZXBhcmF0b3IgKw0KCQkJCQkJCQkJCQl0cF9pbnN0Ll9kZWZhdWx0cy50aW1lU3VmZml4ICsNCgkJCQkJCQkJCQkJKHR6ID8gdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0LmpvaW4oJycpIDogJycpICsNCgkJCQkJCQkJCQkJKHRwX2luc3QuX2RlZmF1bHRzLmFtTmFtZXMuam9pbignJykpICsgKHRwX2luc3QuX2RlZmF1bHRzLnBtTmFtZXMuam9pbignJykpICsNCgkJCQkJCQkJCQkJZGF0ZUNoYXJzLA0KCQkJCQljaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlID09PSB1bmRlZmluZWQgPyBldmVudC5rZXlDb2RlIDogZXZlbnQuY2hhckNvZGUpOw0KICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5jdHJsS2V5IHx8IChjaHIgPCAnICcgfHwgIWRhdGVDaGFycyB8fCBkYXRldGltZUNoYXJzLmluZGV4T2YoY2hyKSA+IC0xKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlQcmVzcyhldmVudCk7DQogICAgfTsNCg0KICAgIC8qDQoJKiBGb3VydGggYmFkIGhhY2sgOi8gb3ZlcnJpZGUgX3VwZGF0ZUFsdGVybmF0ZSBmdW5jdGlvbiB1c2VkIGluIGlubGluZSBtb2RlIHRvIGluaXQgYWx0RmllbGQNCgkqIFVwZGF0ZSBhbnkgYWx0ZXJuYXRlIGZpZWxkIHRvIHN5bmNocm9uaXNlIHdpdGggdGhlIG1haW4gZmllbGQuDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlQWx0ZXJuYXRlID0gJC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGU7DQogICAgJC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUgPSBmdW5jdGlvbiAoaW5zdCkgew0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgdmFyIGFsdEZpZWxkID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0RmllbGQ7DQogICAgICAgICAgICBpZiAoYWx0RmllbGQpIHsgLy8gdXBkYXRlIGFsdGVybmF0ZSBmaWVsZCB0b28NCiAgICAgICAgICAgICAgICB2YXIgYWx0Rm9ybWF0ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0Rm9ybWF0IHx8IHRwX2luc3QuX2RlZmF1bHRzLmRhdGVGb3JtYXQsDQoJCQkJCWRhdGUgPSB0aGlzLl9nZXREYXRlKGluc3QpLA0KCQkJCQlmb3JtYXRDZmcgPSAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhpbnN0KSwNCgkJCQkJYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAnJywNCgkJCQkJYWx0U2VwYXJhdG9yID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdHBfaW5zdC5fZGVmYXVsdHMuc2VwYXJhdG9yLA0KCQkJCQlhbHRUaW1lU3VmZml4ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA/IHRwX2luc3QuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXggOiB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lU3VmZml4LA0KCQkJCQlhbHRUaW1lRm9ybWF0ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCAhPT0gbnVsbCA/IHRwX2luc3QuX2RlZmF1bHRzLmFsdFRpbWVGb3JtYXQgOiB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lRm9ybWF0Ow0KDQogICAgICAgICAgICAgICAgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoYWx0VGltZUZvcm1hdCwgdHBfaW5zdCwgdHBfaW5zdC5fZGVmYXVsdHMpICsgYWx0VGltZVN1ZmZpeDsNCiAgICAgICAgICAgICAgICBpZiAoIXRwX2luc3QuX2RlZmF1bHRzLnRpbWVPbmx5ICYmICF0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5ICYmIGRhdGUgIT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZvcm1hdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGb3JtYXQsIGRhdGUsIGZvcm1hdENmZykgKyBhbHRTZXBhcmF0b3IgKyBhbHRGb3JtYXR0ZWREYXRlVGltZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gdHBfaW5zdC5mb3JtYXR0ZWREYXRlICsgYWx0U2VwYXJhdG9yICsgYWx0Rm9ybWF0dGVkRGF0ZVRpbWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJChhbHRGaWVsZCkudmFsKGluc3QuaW5wdXQudmFsKCkgPyBhbHRGb3JtYXR0ZWREYXRlVGltZSA6ICIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVBbHRlcm5hdGUoaW5zdCk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIE92ZXJyaWRlIGtleSB1cCBldmVudCB0byBzeW5jIG1hbnVhbCBpbnB1dCBjaGFuZ2VzLg0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5VXAgPSAkLmRhdGVwaWNrZXIuX2RvS2V5VXA7DQogICAgJC5kYXRlcGlja2VyLl9kb0tleVVwID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgICAgIHZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksDQoJCQl0cF9pbnN0ID0gJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCg0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWVPbmx5ICYmIChpbnN0LmlucHV0LnZhbCgpICE9PSBpbnN0Lmxhc3RWYWwpKSB7DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgew0KICAgICAgICAgICAgICAgICAgICAkLnRpbWVwaWNrZXIubG9nKGVycik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICQuZGF0ZXBpY2tlci5fYmFzZV9kb0tleVVwKGV2ZW50KTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIG92ZXJyaWRlICJUb2RheSIgYnV0dG9uIHRvIGFsc28gZ3JhYiB0aGUgdGltZS4NCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9nb3RvVG9kYXkgPSAkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheTsNCiAgICAkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSA9IGZ1bmN0aW9uIChpZCkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QoJChpZClbMF0pLA0KCQkJJGRwID0gaW5zdC5kcERpdjsNCiAgICAgICAgdGhpcy5fYmFzZV9nb3RvVG9kYXkoaWQpOw0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICBzZWxlY3RMb2NhbFRpbWV6b25lKHRwX2luc3QpOw0KICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsNCiAgICAgICAgdGhpcy5fc2V0VGltZShpbnN0LCBub3cpOw0KICAgICAgICAkKCcudWktZGF0ZXBpY2tlci10b2RheScsICRkcCkuY2xpY2soKTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIERpc2FibGUgJiBlbmFibGUgdGhlIFRpbWUgaW4gdGhlIGRhdGV0aW1lcGlja2VyDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Rpc2FibGVUaW1lcGlja2VyRGF0ZXBpY2tlciA9IGZ1bmN0aW9uICh0YXJnZXQpIHsNCiAgICAgICAgdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7DQogICAgICAgIGlmICghaW5zdCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgJCh0YXJnZXQpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTsgLy8gSW5pdCBzZWxlY3RlZFtZZWFyfE1vbnRofERheV0NCiAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgIGluc3Quc2V0dGluZ3Muc2hvd1RpbWVwaWNrZXIgPSBmYWxzZTsNCiAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyID0gZmFsc2U7DQogICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpbnN0KTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAkLmRhdGVwaWNrZXIuX2VuYWJsZVRpbWVwaWNrZXJEYXRlcGlja2VyID0gZnVuY3Rpb24gKHRhcmdldCkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsNCiAgICAgICAgaWYgKCFpbnN0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KICAgICAgICAkKHRhcmdldCkuZGF0ZXBpY2tlcignZ2V0RGF0ZScpOyAvLyBJbml0IHNlbGVjdGVkW1llYXJ8TW9udGh8RGF5XQ0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgaW5zdC5zZXR0aW5ncy5zaG93VGltZXBpY2tlciA9IHRydWU7DQogICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5zaG93VGltZXBpY2tlciA9IHRydWU7DQogICAgICAgICAgICB0cF9pbnN0Ll9hZGRUaW1lUGlja2VyKGluc3QpOyAvLyBDb3VsZCBiZSBkaXNhYmxlZCBvbiBwYWdlIGxvYWQNCiAgICAgICAgICAgIHRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKGluc3QpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qDQoJKiBDcmVhdGUgb3VyIG93biBzZXQgdGltZSBmdW5jdGlvbg0KCSovDQogICAgJC5kYXRlcGlja2VyLl9zZXRUaW1lID0gZnVuY3Rpb24gKGluc3QsIGRhdGUpIHsNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgIHZhciBkZWZhdWx0cyA9IHRwX2luc3QuX2RlZmF1bHRzOw0KDQogICAgICAgICAgICAvLyBjYWxsaW5nIF9zZXRUaW1lIHdpdGggbm8gZGF0ZSBzZXRzIHRpbWUgdG8gZGVmYXVsdHMNCiAgICAgICAgICAgIHRwX2luc3QuaG91ciA9IGRhdGUgPyBkYXRlLmdldEhvdXJzKCkgOiBkZWZhdWx0cy5ob3VyOw0KICAgICAgICAgICAgdHBfaW5zdC5taW51dGUgPSBkYXRlID8gZGF0ZS5nZXRNaW51dGVzKCkgOiBkZWZhdWx0cy5taW51dGU7DQogICAgICAgICAgICB0cF9pbnN0LnNlY29uZCA9IGRhdGUgPyBkYXRlLmdldFNlY29uZHMoKSA6IGRlZmF1bHRzLnNlY29uZDsNCiAgICAgICAgICAgIHRwX2luc3QubWlsbGlzZWMgPSBkYXRlID8gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSA6IGRlZmF1bHRzLm1pbGxpc2VjOw0KICAgICAgICAgICAgdHBfaW5zdC5taWNyb3NlYyA9IGRhdGUgPyBkYXRlLmdldE1pY3Jvc2Vjb25kcygpIDogZGVmYXVsdHMubWljcm9zZWM7DQoNCiAgICAgICAgICAgIC8vY2hlY2sgaWYgd2l0aGluIG1pbi9tYXggdGltZXMuLiANCiAgICAgICAgICAgIHRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUoaW5zdCwgdHJ1ZSk7DQoNCiAgICAgICAgICAgIHRwX2luc3QuX29uVGltZUNoYW5nZSgpOw0KICAgICAgICAgICAgdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgLyoNCgkqIENyZWF0ZSBuZXcgcHVibGljIG1ldGhvZCB0byBzZXQgb25seSB0aW1lLCBjYWxsYWJsZSBhcyAkKCkuZGF0ZXBpY2tlcignc2V0VGltZScsIGRhdGUpDQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX3NldFRpbWVEYXRlcGlja2VyID0gZnVuY3Rpb24gKHRhcmdldCwgZGF0ZSwgd2l0aERhdGUpIHsNCiAgICAgICAgdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7DQogICAgICAgIGlmICghaW5zdCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCg0KICAgICAgICBpZiAodHBfaW5zdCkgew0KICAgICAgICAgICAgdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpbnN0KTsNCiAgICAgICAgICAgIHZhciB0cF9kYXRlOw0KICAgICAgICAgICAgaWYgKGRhdGUpIHsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICJzdHJpbmciKSB7DQogICAgICAgICAgICAgICAgICAgIHRwX2luc3QuX3BhcnNlVGltZShkYXRlLCB3aXRoRGF0ZSk7DQogICAgICAgICAgICAgICAgICAgIHRwX2RhdGUgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgICAgICAgICB0cF9kYXRlLnNldEhvdXJzKHRwX2luc3QuaG91ciwgdHBfaW5zdC5taW51dGUsIHRwX2luc3Quc2Vjb25kLCB0cF9pbnN0Lm1pbGxpc2VjKTsNCiAgICAgICAgICAgICAgICAgICAgdHBfZGF0ZS5zZXRNaWNyb3NlY29uZHModHBfaW5zdC5taWNyb3NlYyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdHBfZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgdHBfZGF0ZS5zZXRNaWNyb3NlY29uZHMoZGF0ZS5nZXRNaWNyb3NlY29uZHMoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0cF9kYXRlLnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnKSB7DQogICAgICAgICAgICAgICAgICAgIHRwX2RhdGUgPSB1bmRlZmluZWQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbWUoaW5zdCwgdHBfZGF0ZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgIH07DQoNCiAgICAvKg0KCSogb3ZlcnJpZGUgc2V0RGF0ZSgpIHRvIGFsbG93IHNldHRpbmcgdGltZSB0b28gd2l0aGluIERhdGUgb2JqZWN0DQoJKi8NCiAgICAkLmRhdGVwaWNrZXIuX2Jhc2Vfc2V0RGF0ZURhdGVwaWNrZXIgPSAkLmRhdGVwaWNrZXIuX3NldERhdGVEYXRlcGlja2VyOw0KICAgICQuZGF0ZXBpY2tlci5fc2V0RGF0ZURhdGVwaWNrZXIgPSBmdW5jdGlvbiAodGFyZ2V0LCBfZGF0ZSkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsNCiAgICAgICAgdmFyIGRhdGUgPSBfZGF0ZTsNCiAgICAgICAgaWYgKCFpbnN0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodHlwZW9mIChfZGF0ZSkgPT09ICdzdHJpbmcnKSB7DQogICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoX2RhdGUpOw0KICAgICAgICAgICAgaWYgKCFkYXRlLmdldFRpbWUoKSkgew0KICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2Vfc2V0RGF0ZURhdGVwaWNrZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCiAgICAgICAgICAgICAgICBkYXRlID0gJCh0YXJnZXQpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgIHZhciB0cF9kYXRlOw0KICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHsNCiAgICAgICAgICAgIHRwX2RhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7DQogICAgICAgICAgICB0cF9kYXRlLnNldE1pY3Jvc2Vjb25kcyhkYXRlLmdldE1pY3Jvc2Vjb25kcygpKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRwX2RhdGUgPSBkYXRlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgaWYgeW91IGFyZSB1c2luZyB0aGUgdGltZXpvbmUgb3B0aW9uLCBqYXZhc2NyaXB0J3MgRGF0ZSANCiAgICAgICAgLy8gb2JqZWN0IHdpbGwgb25seSByZXR1cm4gdGhlIHRpbWV6b25lIG9mZnNldCBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlLCBzbyB3ZSANCiAgICAgICAgLy8gYWRqdXN0IGl0IGFjY29yZGluZ2x5LiAgSWYgbm90IHVzaW5nIHRpbWV6b25lIG9wdGlvbiB0aGlzIHdvbid0IG1hdHRlci4uDQogICAgICAgIC8vIElmIGEgdGltZXpvbmUgaXMgZGlmZmVyZW50IGluIHRwLCBrZWVwIHRoZSB0aW1lem9uZSBhcyBpcw0KICAgICAgICBpZiAodHBfaW5zdCAmJiB0cF9kYXRlKSB7DQogICAgICAgICAgICAvLyBsb29rIG91dCBmb3IgRFNUIGlmIHR6IHdhc24ndCBzcGVjaWZpZWQNCiAgICAgICAgICAgIGlmICghdHBfaW5zdC5zdXBwb3J0LnRpbWV6b25lICYmIHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lID09PSBudWxsKSB7DQogICAgICAgICAgICAgICAgdHBfaW5zdC50aW1lem9uZSA9IHRwX2RhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZGF0ZSA9ICQudGltZXBpY2tlci50aW1lem9uZUFkanVzdChkYXRlLCB0cF9pbnN0LnRpbWV6b25lKTsNCiAgICAgICAgICAgIHRwX2RhdGUgPSAkLnRpbWVwaWNrZXIudGltZXpvbmVBZGp1c3QodHBfZGF0ZSwgdHBfaW5zdC50aW1lem9uZSk7DQogICAgICAgIH0NCg0KICAgICAgICB0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOw0KICAgICAgICB0aGlzLl9iYXNlX3NldERhdGVEYXRlcGlja2VyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7DQogICAgICAgIHRoaXMuX3NldFRpbWVEYXRlcGlja2VyKHRhcmdldCwgdHBfZGF0ZSwgdHJ1ZSk7DQogICAgfTsNCg0KICAgIC8qDQoJKiBvdmVycmlkZSBnZXREYXRlKCkgdG8gYWxsb3cgZ2V0dGluZyB0aW1lIHRvbyB3aXRoaW4gRGF0ZSBvYmplY3QNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fZ2V0RGF0ZURhdGVwaWNrZXI7DQogICAgJC5kYXRlcGlja2VyLl9nZXREYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uICh0YXJnZXQsIG5vRGVmYXVsdCkgew0KICAgICAgICB2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsNCiAgICAgICAgaWYgKCFpbnN0KSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOw0KDQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICAvLyBpZiBpdCBoYXNuJ3QgeWV0IGJlZW4gZGVmaW5lZCwgZ3JhYiBmcm9tIGZpZWxkDQogICAgICAgICAgICBpZiAoaW5zdC5sYXN0VmFsID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGluc3QsIG5vRGVmYXVsdCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBkYXRlID0gdGhpcy5fZ2V0RGF0ZShpbnN0KTsNCiAgICAgICAgICAgIGlmIChkYXRlICYmIHRwX2luc3QuX3BhcnNlVGltZSgkKHRhcmdldCkudmFsKCksIHRwX2luc3QudGltZU9ubHkpKSB7DQogICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3Vycyh0cF9pbnN0LmhvdXIsIHRwX2luc3QubWludXRlLCB0cF9pbnN0LnNlY29uZCwgdHBfaW5zdC5taWxsaXNlYyk7DQogICAgICAgICAgICAgICAgZGF0ZS5zZXRNaWNyb3NlY29uZHModHBfaW5zdC5taWNyb3NlYyk7DQoNCiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBpZiB5b3UgYXJlIHVzaW5nIHRoZSB0aW1lem9uZSBvcHRpb24sIGphdmFzY3JpcHQncyBEYXRlIA0KICAgICAgICAgICAgICAgIC8vIG9iamVjdCB3aWxsIG9ubHkgcmV0dXJuIHRoZSB0aW1lem9uZSBvZmZzZXQgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSwgc28gd2UgDQogICAgICAgICAgICAgICAgLy8gYWRqdXN0IGl0IGFjY29yZGluZ2x5LiAgSWYgbm90IHVzaW5nIHRpbWV6b25lIG9wdGlvbiB0aGlzIHdvbid0IG1hdHRlci4uDQogICAgICAgICAgICAgICAgaWYgKHRwX2luc3QudGltZXpvbmUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAvLyBsb29rIG91dCBmb3IgRFNUIGlmIHR6IHdhc24ndCBzcGVjaWZpZWQNCiAgICAgICAgICAgICAgICAgICAgaWYgKCF0cF9pbnN0LnN1cHBvcnQudGltZXpvbmUgJiYgdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmUgPT09IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRwX2luc3QudGltZXpvbmUgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBkYXRlID0gJC50aW1lcGlja2VyLnRpbWV6b25lQWRqdXN0KGRhdGUsIHRwX2luc3QudGltZXpvbmUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBkYXRlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzLl9iYXNlX2dldERhdGVEYXRlcGlja2VyKHRhcmdldCwgbm9EZWZhdWx0KTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIG92ZXJyaWRlIHBhcnNlRGF0ZSgpIGJlY2F1c2UgVUkgMS44LjE0IHRocm93cyBhbiBlcnJvciBhYm91dCAiRXh0cmEgY2hhcmFjdGVycyINCgkqIEFuIG9wdGlvbiBpbiBkYXRhcGlja2VyIHRvIGlnbm9yZSBleHRyYSBmb3JtYXQgY2hhcmFjdGVycyB3b3VsZCBiZSBuaWNlci4NCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9wYXJzZURhdGUgPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlOw0KICAgICQuZGF0ZXBpY2tlci5wYXJzZURhdGUgPSBmdW5jdGlvbiAoZm9ybWF0LCB2YWx1ZSwgc2V0dGluZ3MpIHsNCiAgICAgICAgdmFyIGRhdGU7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBkYXRlID0gdGhpcy5fYmFzZV9wYXJzZURhdGUoZm9ybWF0LCB2YWx1ZSwgc2V0dGluZ3MpOw0KICAgICAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgICAgIC8vIEhhY2shICBUaGUgZXJyb3IgbWVzc2FnZSBlbmRzIHdpdGggYSBjb2xvbiwgYSBzcGFjZSwgYW5kDQogICAgICAgICAgICAvLyB0aGUgImV4dHJhIiBjaGFyYWN0ZXJzLiAgV2UgcmVseSBvbiB0aGF0IGluc3RlYWQgb2YNCiAgICAgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcGVyZmVjdGx5IHJlcHJvZHVjZSB0aGUgcGFyc2luZyBhbGdvcml0aG0uDQogICAgICAgICAgICBpZiAoZXJyLmluZGV4T2YoIjoiKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMuX2Jhc2VfcGFyc2VEYXRlKGZvcm1hdCwgdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmxlbmd0aCAtIChlcnIubGVuZ3RoIC0gZXJyLmluZGV4T2YoJzonKSAtIDIpKSwgc2V0dGluZ3MpOw0KICAgICAgICAgICAgICAgICQudGltZXBpY2tlci5sb2coIkVycm9yIHBhcnNpbmcgdGhlIGRhdGUgc3RyaW5nOiAiICsgZXJyICsgIlxuZGF0ZSBzdHJpbmcgPSAiICsgdmFsdWUgKyAiXG5kYXRlIGZvcm1hdCA9ICIgKyBmb3JtYXQpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGRhdGU7DQogICAgfTsNCg0KICAgIC8qDQoJKiBvdmVycmlkZSBmb3JtYXREYXRlIHRvIHNldCBkYXRlIHdpdGggdGltZSB0byB0aGUgaW5wdXQNCgkqLw0KICAgICQuZGF0ZXBpY2tlci5fYmFzZV9mb3JtYXREYXRlID0gJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlOw0KICAgICQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIChpbnN0LCBkYXksIG1vbnRoLCB5ZWFyKSB7DQogICAgICAgIHZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7DQogICAgICAgIGlmICh0cF9pbnN0KSB7DQogICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpbnN0KTsNCiAgICAgICAgICAgIHJldHVybiB0cF9pbnN0LiRpbnB1dC52YWwoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdGhpcy5fYmFzZV9mb3JtYXREYXRlKGluc3QpOw0KICAgIH07DQoNCiAgICAvKg0KCSogb3ZlcnJpZGUgb3B0aW9ucyBzZXR0ZXIgdG8gYWRkIHRpbWUgdG8gbWF4RGF0ZShUaW1lKSBhbmQgbWluRGF0ZShUaW1lKS4gTWF4RGF0ZQ0KCSovDQogICAgJC5kYXRlcGlja2VyLl9iYXNlX29wdGlvbkRhdGVwaWNrZXIgPSAkLmRhdGVwaWNrZXIuX29wdGlvbkRhdGVwaWNrZXI7DQogICAgJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgdmFsdWUpIHsNCiAgICAgICAgdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCksDQoJCQluYW1lX2Nsb25lOw0KICAgICAgICBpZiAoIWluc3QpIHsNCiAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsNCiAgICAgICAgaWYgKHRwX2luc3QpIHsNCiAgICAgICAgICAgIHZhciBtaW4gPSBudWxsLA0KCQkJCW1heCA9IG51bGwsDQoJCQkJb25zZWxlY3QgPSBudWxsLA0KCQkJCW92ZXJyaWRlcyA9IHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLA0KCQkJCWZucyA9IHt9LA0KCQkJCXByb3A7DQogICAgICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7IC8vIGlmIG1pbi9tYXggd2FzIHNldCB3aXRoIHRoZSBzdHJpbmcNCiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ21pbkRhdGUnIHx8IG5hbWUgPT09ICdtaW5EYXRlVGltZScpIHsNCiAgICAgICAgICAgICAgICAgICAgbWluID0gdmFsdWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbWF4RGF0ZScgfHwgbmFtZSA9PT0gJ21heERhdGVUaW1lJykgew0KICAgICAgICAgICAgICAgICAgICBtYXggPSB2YWx1ZTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdvblNlbGVjdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgb25zZWxlY3QgPSB2YWx1ZTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG92ZXJyaWRlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzW25hbWVdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGZuc1tuYW1lXSA9IHZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBuYW1lX2Nsb25lID0ge307IC8vZW1wdHkgcmVzdWx0cyBpbiBleGl0aW5nIGZ1bmN0aW9uIGFmdGVyIG92ZXJyaWRlcyB1cGRhdGVkDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHsgLy9pZiBtaW4vbWF4IHdhcyBzZXQgd2l0aCB0aGUgSlNPTg0KICAgICAgICAgICAgICAgIGlmIChuYW1lLm1pbkRhdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgbWluID0gbmFtZS5taW5EYXRlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5taW5EYXRlVGltZSkgew0KICAgICAgICAgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGVUaW1lOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5tYXhEYXRlKSB7DQogICAgICAgICAgICAgICAgICAgIG1heCA9IG5hbWUubWF4RGF0ZTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUubWF4RGF0ZVRpbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgbWF4ID0gbmFtZS5tYXhEYXRlVGltZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZm9yIChwcm9wIGluIG92ZXJyaWRlcykgew0KICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzLmhhc093blByb3BlcnR5KHByb3ApICYmIG5hbWVbcHJvcF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZuc1twcm9wXSA9IG5hbWVbcHJvcF07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgKHByb3AgaW4gZm5zKSB7DQogICAgICAgICAgICAgICAgaWYgKGZucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgew0KICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXNbcHJvcF0gPSBmbnNbcHJvcF07DQogICAgICAgICAgICAgICAgICAgIGlmICghbmFtZV9jbG9uZSkgeyBuYW1lX2Nsb25lID0gJC5leHRlbmQoe30sIG5hbWUpOyB9DQogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuYW1lX2Nsb25lW3Byb3BdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChuYW1lX2Nsb25lICYmIGlzRW1wdHlPYmplY3QobmFtZV9jbG9uZSkpIHsgcmV0dXJuOyB9DQogICAgICAgICAgICBpZiAobWluKSB7IC8vaWYgbWluIHdhcyBzZXQNCiAgICAgICAgICAgICAgICBpZiAobWluID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIG1pbiA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgbWluID0gbmV3IERhdGUobWluKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSA9IG1pbjsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlVGltZSA9IG1pbjsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4KSB7IC8vaWYgbWF4IHdhcyBzZXQNCiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIG1heCA9IG5ldyBEYXRlKCk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUobWF4KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9IG1heDsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG1heDsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAob25zZWxlY3QpIHsNCiAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5vblNlbGVjdCA9IG9uc2VsZWN0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy5fYmFzZV9vcHRpb25EYXRlcGlja2VyLmNhbGwoJC5kYXRlcGlja2VyLCB0YXJnZXQsIG5hbWUpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0aGlzLl9iYXNlX29wdGlvbkRhdGVwaWNrZXIuY2FsbCgkLmRhdGVwaWNrZXIsIHRhcmdldCwgbmFtZV9jbG9uZSB8fCBuYW1lLCB2YWx1ZSk7DQogICAgfTsNCg0KICAgIC8qDQoJKiBqUXVlcnkgaXNFbXB0eU9iamVjdCBkb2VzIG5vdCBjaGVjayBoYXNPd25Qcm9wZXJ0eSAtIGlmIHNvbWVvbmUgaGFzIGFkZGVkIHRvIHRoZSBvYmplY3QgcHJvdG90eXBlLA0KCSogaXQgd2lsbCByZXR1cm4gZmFsc2UgZm9yIGFsbCBvYmplY3RzDQoJKi8NCiAgICB2YXIgaXNFbXB0eU9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHsNCiAgICAgICAgdmFyIHByb3A7DQogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsNCiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfTsNCg0KICAgIC8qDQoJKiBqUXVlcnkgZXh0ZW5kIG5vdyBpZ25vcmVzIG51bGxzIQ0KCSovDQogICAgdmFyIGV4dGVuZFJlbW92ZSA9IGZ1bmN0aW9uICh0YXJnZXQsIHByb3BzKSB7DQogICAgICAgICQuZXh0ZW5kKHRhcmdldCwgcHJvcHMpOw0KICAgICAgICBmb3IgKHZhciBuYW1lIGluIHByb3BzKSB7DQogICAgICAgICAgICBpZiAocHJvcHNbbmFtZV0gPT09IG51bGwgfHwgcHJvcHNbbmFtZV0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHByb3BzW25hbWVdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0YXJnZXQ7DQogICAgfTsNCg0KICAgIC8qDQoJKiBEZXRlcm1pbmUgYnkgdGhlIHRpbWUgZm9ybWF0IHdoaWNoIHVuaXRzIGFyZSBzdXBwb3J0ZWQNCgkqIFJldHVybnMgYW4gb2JqZWN0IG9mIGJvb2xlYW5zIGZvciBlYWNoIHVuaXQNCgkqLw0KICAgIHZhciBkZXRlY3RTdXBwb3J0ID0gZnVuY3Rpb24gKHRpbWVGb3JtYXQpIHsNCiAgICAgICAgdmFyIHRmID0gdGltZUZvcm1hdC5yZXBsYWNlKC8nLio/Jy9nLCAnJykudG9Mb3dlckNhc2UoKSwgLy8gcmVtb3ZlcyBsaXRlcmFscw0KCQkJaXNJbiA9IGZ1bmN0aW9uIChmLCB0KSB7IC8vIGRvZXMgdGhlIGZvcm1hdCBjb250YWluIHRoZSB0b2tlbj8NCgkJCSAgICByZXR1cm4gZi5pbmRleE9mKHQpICE9PSAtMSA/IHRydWUgOiBmYWxzZTsNCgkJCX07DQogICAgICAgIHJldHVybiB7DQogICAgICAgICAgICBob3VyOiBpc0luKHRmLCAnaCcpLA0KICAgICAgICAgICAgbWludXRlOiBpc0luKHRmLCAnbScpLA0KICAgICAgICAgICAgc2Vjb25kOiBpc0luKHRmLCAncycpLA0KICAgICAgICAgICAgbWlsbGlzZWM6IGlzSW4odGYsICdsJyksDQogICAgICAgICAgICBtaWNyb3NlYzogaXNJbih0ZiwgJ2MnKSwNCiAgICAgICAgICAgIHRpbWV6b25lOiBpc0luKHRmLCAneicpLA0KICAgICAgICAgICAgYW1wbTogaXNJbih0ZiwgJ3QnKSAmJiBpc0luKHRpbWVGb3JtYXQsICdoJyksDQogICAgICAgICAgICBpc284NjAxOiBpc0luKHRpbWVGb3JtYXQsICdaJykNCiAgICAgICAgfTsNCiAgICB9Ow0KDQogICAgLyoNCgkqIENvbnZlcnRzIDI0IGhvdXIgZm9ybWF0IGludG8gMTIgaG91cg0KCSogUmV0dXJucyAxMiBob3VyIHdpdGhvdXQgbGVhZGluZyAwDQoJKi8NCiAgICB2YXIgY29udmVydDI0dG8xMiA9IGZ1bmN0aW9uIChob3VyKSB7DQogICAgICAgIGhvdXIgJT0gMTI7DQoNCiAgICAgICAgaWYgKGhvdXIgPT09IDApIHsNCiAgICAgICAgICAgIGhvdXIgPSAxMjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBTdHJpbmcoaG91cik7DQogICAgfTsNCg0KICAgIHZhciBjb21wdXRlRWZmZWN0aXZlU2V0dGluZyA9IGZ1bmN0aW9uIChzZXR0aW5ncywgcHJvcGVydHkpIHsNCiAgICAgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzW3Byb3BlcnR5XSA/IHNldHRpbmdzW3Byb3BlcnR5XSA6ICQudGltZXBpY2tlci5fZGVmYXVsdHNbcHJvcGVydHldOw0KICAgIH07DQoNCiAgICAvKg0KCSogU3BsaXRzIGRhdGV0aW1lIHN0cmluZyBpbnRvIGRhdGUgYW5kIHRpbWUgc3Vic3RyaW5ncy4NCgkqIFRocm93cyBleGNlcHRpb24gd2hlbiBkYXRlIGNhbid0IGJlIHBhcnNlZA0KCSogUmV0dXJucyB7ZGF0ZVN0cmluZzogZGF0ZVN0cmluZywgdGltZVN0cmluZzogdGltZVN0cmluZ30NCgkqLw0KICAgIHZhciBzcGxpdERhdGVUaW1lID0gZnVuY3Rpb24gKGRhdGVUaW1lU3RyaW5nLCB0aW1lU2V0dGluZ3MpIHsNCiAgICAgICAgLy8gVGhlIGlkZWEgaXMgdG8gZ2V0IHRoZSBudW1iZXIgc2VwYXJhdG9yIG9jY3VycmVuY2VzIGluIGRhdGV0aW1lIGFuZCB0aGUgdGltZSBmb3JtYXQgcmVxdWVzdGVkIChzaW5jZSB0aW1lIGhhcw0KICAgICAgICAvLyBmZXdlciB1bmtub3ducywgbW9zdGx5IG51bWJlcnMgYW5kIGFtL3BtKS4gV2Ugd2lsbCB1c2UgdGhlIHRpbWUgcGF0dGVybiB0byBzcGxpdC4NCiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGNvbXB1dGVFZmZlY3RpdmVTZXR0aW5nKHRpbWVTZXR0aW5ncywgJ3NlcGFyYXRvcicpLA0KCQkJZm9ybWF0ID0gY29tcHV0ZUVmZmVjdGl2ZVNldHRpbmcodGltZVNldHRpbmdzLCAndGltZUZvcm1hdCcpLA0KCQkJdGltZVBhcnRzID0gZm9ybWF0LnNwbGl0KHNlcGFyYXRvciksIC8vIGhvdyBtYW55IG9jY3VycmVuY2VzIG9mIHNlcGFyYXRvciBtYXkgYmUgaW4gb3VyIGZvcm1hdD8NCgkJCXRpbWVQYXJ0c0xlbiA9IHRpbWVQYXJ0cy5sZW5ndGgsDQoJCQlhbGxQYXJ0cyA9IGRhdGVUaW1lU3RyaW5nLnNwbGl0KHNlcGFyYXRvciksDQoJCQlhbGxQYXJ0c0xlbiA9IGFsbFBhcnRzLmxlbmd0aDsNCg0KICAgICAgICBpZiAoYWxsUGFydHNMZW4gPiAxKSB7DQogICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgIGRhdGVTdHJpbmc6IGFsbFBhcnRzLnNwbGljZSgwLCBhbGxQYXJ0c0xlbiAtIHRpbWVQYXJ0c0xlbikuam9pbihzZXBhcmF0b3IpLA0KICAgICAgICAgICAgICAgIHRpbWVTdHJpbmc6IGFsbFBhcnRzLnNwbGljZSgwLCB0aW1lUGFydHNMZW4pLmpvaW4oc2VwYXJhdG9yKQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB7DQogICAgICAgICAgICBkYXRlU3RyaW5nOiBkYXRlVGltZVN0cmluZywNCiAgICAgICAgICAgIHRpbWVTdHJpbmc6ICcnDQogICAgICAgIH07DQogICAgfTsNCg0KICAgIC8qDQoJKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBwYXJzZSBkYXRldGltZSBpbnRlcnZhbA0KCSogUmV0dXJuczoge2RhdGU6IERhdGUsIHRpbWVPYmo6IE9iamVjdH0sIHdoZXJlDQoJKiAgIGRhdGUgLSBwYXJzZWQgZGF0ZSB3aXRob3V0IHRpbWUgKHR5cGUgRGF0ZSkNCgkqICAgdGltZU9iaiA9IHtob3VyOiAsIG1pbnV0ZTogLCBzZWNvbmQ6ICwgbWlsbGlzZWM6ICwgbWljcm9zZWM6IH0gLSBwYXJzZWQgdGltZS4gT3B0aW9uYWwNCgkqLw0KICAgIHZhciBwYXJzZURhdGVUaW1lSW50ZXJuYWwgPSBmdW5jdGlvbiAoZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKSB7DQogICAgICAgIHZhciBkYXRlLA0KCQkJcGFydHMsDQoJCQlwYXJzZWRUaW1lOw0KDQogICAgICAgIHBhcnRzID0gc3BsaXREYXRlVGltZShkYXRlVGltZVN0cmluZywgdGltZVNldHRpbmdzKTsNCiAgICAgICAgZGF0ZSA9ICQuZGF0ZXBpY2tlci5fYmFzZV9wYXJzZURhdGUoZGF0ZUZvcm1hdCwgcGFydHMuZGF0ZVN0cmluZywgZGF0ZVNldHRpbmdzKTsNCg0KICAgICAgICBpZiAocGFydHMudGltZVN0cmluZyA9PT0gJycpIHsNCiAgICAgICAgICAgIHJldHVybiB7DQogICAgICAgICAgICAgICAgZGF0ZTogZGF0ZQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgfQ0KDQogICAgICAgIHBhcnNlZFRpbWUgPSAkLmRhdGVwaWNrZXIucGFyc2VUaW1lKHRpbWVGb3JtYXQsIHBhcnRzLnRpbWVTdHJpbmcsIHRpbWVTZXR0aW5ncyk7DQoNCiAgICAgICAgaWYgKCFwYXJzZWRUaW1lKSB7DQogICAgICAgICAgICB0aHJvdyAnV3JvbmcgdGltZSBmb3JtYXQnOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIGRhdGU6IGRhdGUsDQogICAgICAgICAgICB0aW1lT2JqOiBwYXJzZWRUaW1lDQogICAgICAgIH07DQogICAgfTsNCg0KICAgIC8qDQoJKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZXQgdGltZXpvbmVfc2VsZWN0IHRvIHRoZSBsb2NhbCB0aW1lem9uZQ0KCSovDQogICAgdmFyIHNlbGVjdExvY2FsVGltZXpvbmUgPSBmdW5jdGlvbiAodHBfaW5zdCwgZGF0ZSkgew0KICAgICAgICBpZiAodHBfaW5zdCAmJiB0cF9pbnN0LnRpbWV6b25lX3NlbGVjdCkgew0KICAgICAgICAgICAgdmFyIG5vdyA9IGRhdGUgfHwgbmV3IERhdGUoKTsNCiAgICAgICAgICAgIHRwX2luc3QudGltZXpvbmVfc2VsZWN0LnZhbCgtbm93LmdldFRpbWV6b25lT2Zmc2V0KCkpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIC8qDQoJKiBDcmVhdGUgYSBTaW5nbGV0b24gSW5zdGFuY2UNCgkqLw0KICAgICQudGltZXBpY2tlciA9IG5ldyBUaW1lcGlja2VyKCk7DQoNCiAgICAvKioNCgkgKiBHZXQgdGhlIHRpbWV6b25lIG9mZnNldCBhcyBzdHJpbmcgZnJvbSBhIGRhdGUgb2JqZWN0IChlZyAnKzA1MzAnIGZvciBVVEMrNS41KQ0KCSAqIEBwYXJhbSB7bnVtYmVyfSB0ek1pbnV0ZXMgaWYgbm90IGEgbnVtYmVyLCBsZXNzIHRoYW4gLTcyMCAoLTEyMDApLCBvciBncmVhdGVyIHRoYW4gODQwICgrMTQwMCkgdGhpcyB2YWx1ZSBpcyByZXR1cm5lZA0KCSAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNvODYwMSBpZiB0cnVlIGZvcm1hdHMgaW4gYWNjb3JkYW5jZSB0byBpc284NjAxICIrMTI6NDUiDQoJICogQHJldHVybiB7c3RyaW5nfQ0KCSAqLw0KICAgICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldFN0cmluZyA9IGZ1bmN0aW9uICh0ek1pbnV0ZXMsIGlzbzg2MDEpIHsNCiAgICAgICAgaWYgKGlzTmFOKHR6TWludXRlcykgfHwgdHpNaW51dGVzID4gODQwIHx8IHR6TWludXRlcyA8IC03MjApIHsNCiAgICAgICAgICAgIHJldHVybiB0ek1pbnV0ZXM7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgb2ZmID0gdHpNaW51dGVzLA0KCQkJbWludXRlcyA9IG9mZiAlIDYwLA0KCQkJaG91cnMgPSAob2ZmIC0gbWludXRlcykgLyA2MCwNCgkJCWlzbyA9IGlzbzg2MDEgPyAnOicgOiAnJywNCgkJCXR6ID0gKG9mZiA+PSAwID8gJysnIDogJy0nKSArICgnMCcgKyBNYXRoLmFicyhob3VycykpLnNsaWNlKC0yKSArIGlzbyArICgnMCcgKyBNYXRoLmFicyhtaW51dGVzKSkuc2xpY2UoLTIpOw0KDQogICAgICAgIGlmICh0eiA9PT0gJyswMDowMCcpIHsNCiAgICAgICAgICAgIHJldHVybiAnWic7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHR6Ow0KICAgIH07DQoNCiAgICAvKioNCgkgKiBHZXQgdGhlIG51bWJlciBpbiBtaW51dGVzIHRoYXQgcmVwcmVzZW50cyBhIHRpbWV6b25lIHN0cmluZw0KCSAqIEBwYXJhbSAge3N0cmluZ30gdHpTdHJpbmcgZm9ybWF0dGVkIGxpa2UgIiswNTAwIiwgIi0xMjQ1IiwgIloiDQoJICogQHJldHVybiB7bnVtYmVyfSB0aGUgb2Zmc2V0IG1pbnV0ZXMgb3IgdGhlIG9yaWdpbmFsIHN0cmluZyBpZiBpdCBkb2Vzbid0IG1hdGNoIGV4cGVjdGF0aW9ucw0KCSAqLw0KICAgICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldE51bWJlciA9IGZ1bmN0aW9uICh0elN0cmluZykgew0KICAgICAgICB2YXIgbm9ybWFsaXplZCA9IHR6U3RyaW5nLnRvU3RyaW5nKCkucmVwbGFjZSgnOicsICcnKTsgLy8gZXhjdXNlIGFueSBpc284NjAxLCBlbmQgdXAgd2l0aCAiKzEyNDUiDQoNCiAgICAgICAgaWYgKG5vcm1hbGl6ZWQudG9VcHBlckNhc2UoKSA9PT0gJ1onKSB7IC8vIGlmIGlzbzg2MDEgd2l0aCBaLCBpdHMgMCBtaW51dGUgb2Zmc2V0DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghL14oXC18XCspXGR7NH0kLy50ZXN0KG5vcm1hbGl6ZWQpKSB7IC8vIHBvc3NpYmx5IGEgdXNlciBkZWZpbmVkIHR6LCBzbyBqdXN0IGdpdmUgaXQgYmFjaw0KICAgICAgICAgICAgcmV0dXJuIHR6U3RyaW5nOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICgobm9ybWFsaXplZC5zdWJzdHIoMCwgMSkgPT09ICctJyA/IC0xIDogMSkgKiAvLyBwbHVzIG9yIG1pbnVzDQoJCQkJCSgocGFyc2VJbnQobm9ybWFsaXplZC5zdWJzdHIoMSwgMiksIDEwKSAqIDYwKSArIC8vIGhvdXJzIChjb252ZXJ0ZWQgdG8gbWludXRlcykNCgkJCQkJcGFyc2VJbnQobm9ybWFsaXplZC5zdWJzdHIoMywgMiksIDEwKSkpOyAvLyBtaW51dGVzDQogICAgfTsNCg0KICAgIC8qKg0KCSAqIE5vIHdheSB0byBzZXQgdGltZXpvbmUgaW4ganMgRGF0ZSwgc28gd2UgbXVzdCBhZGp1c3QgdGhlIG1pbnV0ZXMgdG8gY29tcGVuc2F0ZS4gKHRoaW5rIHNldERhdGUsIGdldERhdGUpDQoJICogQHBhcmFtICB7RGF0ZX0gZGF0ZQ0KCSAqIEBwYXJhbSAge3N0cmluZ30gdG9UaW1lem9uZSBmb3JtYXR0ZWQgbGlrZSAiKzA1MDAiLCAiLTEyNDUiDQoJICogQHJldHVybiB7RGF0ZX0NCgkgKi8NCiAgICAkLnRpbWVwaWNrZXIudGltZXpvbmVBZGp1c3QgPSBmdW5jdGlvbiAoZGF0ZSwgdG9UaW1lem9uZSkgew0KICAgICAgICB2YXIgdG9UeiA9ICQudGltZXBpY2tlci50aW1lem9uZU9mZnNldE51bWJlcih0b1RpbWV6b25lKTsNCiAgICAgICAgaWYgKCFpc05hTih0b1R6KSkgew0KICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgLWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHRvVHopOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBkYXRlOw0KICAgIH07DQoNCiAgICAvKioNCgkgKiBDYWxscyBgdGltZXBpY2tlcigpYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bw0KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuDQoJICogbi5iLiBUaGUgaW5wdXQgdmFsdWUgbXVzdCBiZSBjb3JyZWN0bHkgZm9ybWF0dGVkIChyZWZvcm1hdHRpbmcgaXMgbm90IHN1cHBvcnRlZCkNCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBzdGFydFRpbWUNCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBlbmRUaW1lDQoJICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSB0aW1lcGlja2VyKCkgY2FsbA0KCSAqIEByZXR1cm4ge2pRdWVyeX0NCgkgKi8NCiAgICAkLnRpbWVwaWNrZXIudGltZVJhbmdlID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucykgew0KICAgICAgICByZXR1cm4gJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlKCd0aW1lcGlja2VyJywgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKTsNCiAgICB9Ow0KDQogICAgLyoqDQoJICogQ2FsbHMgYGRhdGV0aW1lcGlja2VyYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bw0KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuDQoJICogQHBhcmFtICB7RWxlbWVudH0gc3RhcnRUaW1lDQoJICogQHBhcmFtICB7RWxlbWVudH0gZW5kVGltZQ0KCSAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgYHRpbWVwaWNrZXIoKWAgY2FsbC4gQWxzbyBzdXBwb3J0cyBgcmVmb3JtYXRgLA0KCSAqICAgYSBib29sZWFuIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmb3JtYXQgdGhlIGlucHV0IHZhbHVlcyB0byB0aGUgYGRhdGVGb3JtYXRgLg0KCSAqIEBwYXJhbSAge3N0cmluZ30gbWV0aG9kIENhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgcGlja2VyIHRvIGJlIGFkZGVkDQoJICogQHJldHVybiB7alF1ZXJ5fQ0KCSAqLw0KICAgICQudGltZXBpY2tlci5kYXRldGltZVJhbmdlID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucykgew0KICAgICAgICAkLnRpbWVwaWNrZXIuaGFuZGxlUmFuZ2UoJ2RhdGV0aW1lcGlja2VyJywgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKTsNCiAgICB9Ow0KDQogICAgLyoqDQoJICogQ2FsbHMgYGRhdGVwaWNrZXJgIG9uIHRoZSBgc3RhcnRUaW1lYCBhbmQgYGVuZFRpbWVgIGVsZW1lbnRzLCBhbmQgY29uZmlndXJlcyB0aGVtIHRvDQoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4NCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBzdGFydFRpbWUNCgkgKiBAcGFyYW0gIHtFbGVtZW50fSBlbmRUaW1lDQoJICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBgdGltZXBpY2tlcigpYCBjYWxsLiBBbHNvIHN1cHBvcnRzIGByZWZvcm1hdGAsDQoJICogICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZvcm1hdCB0aGUgaW5wdXQgdmFsdWVzIHRvIHRoZSBgZGF0ZUZvcm1hdGAuDQoJICogQHJldHVybiB7alF1ZXJ5fQ0KCSAqLw0KICAgICQudGltZXBpY2tlci5kYXRlUmFuZ2UgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7DQogICAgICAgICQudGltZXBpY2tlci5oYW5kbGVSYW5nZSgnZGF0ZXBpY2tlcicsIHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucyk7DQogICAgfTsNCg0KICAgIC8qKg0KCSAqIENhbGxzIGBtZXRob2RgIG9uIHRoZSBgc3RhcnRUaW1lYCBhbmQgYGVuZFRpbWVgIGVsZW1lbnRzLCBhbmQgY29uZmlndXJlcyB0aGVtIHRvDQoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4NCgkgKiBAcGFyYW0gIHtzdHJpbmd9IG1ldGhvZCBDYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHBpY2tlciB0byBiZSBhZGRlZA0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IHN0YXJ0VGltZQ0KCSAqIEBwYXJhbSAge0VsZW1lbnR9IGVuZFRpbWUNCgkgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGB0aW1lcGlja2VyKClgIGNhbGwuIEFsc28gc3VwcG9ydHMgYHJlZm9ybWF0YCwNCgkgKiAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZm9ybWF0IHRoZSBpbnB1dCB2YWx1ZXMgdG8gdGhlIGBkYXRlRm9ybWF0YC4NCgkgKiBAcmV0dXJuIHtqUXVlcnl9DQoJICovDQogICAgJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlID0gZnVuY3Rpb24gKG1ldGhvZCwgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7DQogICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgew0KICAgICAgICAgICAgbWluSW50ZXJ2YWw6IDAsIC8vIG1pbiBhbGxvd2VkIGludGVydmFsIGluIG1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgbWF4SW50ZXJ2YWw6IDAsIC8vIG1heCBhbGxvd2VkIGludGVydmFsIGluIG1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgc3RhcnQ6IHt9LCAgICAgIC8vIG9wdGlvbnMgZm9yIHN0YXJ0IHBpY2tlcg0KICAgICAgICAgICAgZW5kOiB7fSAgICAgICAgIC8vIG9wdGlvbnMgZm9yIGVuZCBwaWNrZXINCiAgICAgICAgfSwgb3B0aW9ucyk7DQoNCiAgICAgICAgLy8gZm9yIHRoZSBtZWFuIHRpbWUgdGhpcyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGNhbGxpbmcgZ2V0RGF0ZSB3aXRoIHRpbWVwaWNrZXIoKQ0KICAgICAgICB2YXIgdGltZU9ubHkgPSBmYWxzZTsNCiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RpbWVwaWNrZXInKSB7DQogICAgICAgICAgICB0aW1lT25seSA9IHRydWU7DQogICAgICAgICAgICBtZXRob2QgPSAnZGF0ZXRpbWVwaWNrZXInOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gY2hlY2tEYXRlcyhjaGFuZ2VkLCBvdGhlcikgew0KICAgICAgICAgICAgdmFyIHN0YXJ0ZHQgPSBzdGFydFRpbWVbbWV0aG9kXSgnZ2V0RGF0ZScpLA0KCQkJCWVuZGR0ID0gZW5kVGltZVttZXRob2RdKCdnZXREYXRlJyksDQoJCQkJY2hhbmdlZGR0ID0gY2hhbmdlZFttZXRob2RdKCdnZXREYXRlJyk7DQoNCiAgICAgICAgICAgIGlmIChzdGFydGR0ICE9PSBudWxsKSB7DQogICAgICAgICAgICAgICAgdmFyIG1pbkRhdGUgPSBuZXcgRGF0ZShzdGFydGR0LmdldFRpbWUoKSksDQoJCQkJCW1heERhdGUgPSBuZXcgRGF0ZShzdGFydGR0LmdldFRpbWUoKSk7DQoNCiAgICAgICAgICAgICAgICBtaW5EYXRlLnNldE1pbGxpc2Vjb25kcyhtaW5EYXRlLmdldE1pbGxpc2Vjb25kcygpICsgb3B0aW9ucy5taW5JbnRlcnZhbCk7DQogICAgICAgICAgICAgICAgbWF4RGF0ZS5zZXRNaWxsaXNlY29uZHMobWF4RGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIG9wdGlvbnMubWF4SW50ZXJ2YWwpOw0KDQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubWluSW50ZXJ2YWwgPiAwICYmIG1pbkRhdGUgPiBlbmRkdCkgeyAvLyBtaW5JbnRlcnZhbCBjaGVjaw0KICAgICAgICAgICAgICAgICAgICBlbmRUaW1lW21ldGhvZF0oJ3NldERhdGUnLCBtaW5EYXRlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5tYXhJbnRlcnZhbCA+IDAgJiYgbWF4RGF0ZSA8IGVuZGR0KSB7IC8vIG1heCBpbnRlcnZhbCBjaGVjaw0KICAgICAgICAgICAgICAgICAgICBlbmRUaW1lW21ldGhvZF0oJ3NldERhdGUnLCBtYXhEYXRlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhcnRkdCA+IGVuZGR0KSB7DQogICAgICAgICAgICAgICAgICAgIG90aGVyW21ldGhvZF0oJ3NldERhdGUnLCBjaGFuZ2VkZHQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIHNlbGVjdGVkKGNoYW5nZWQsIG90aGVyLCBvcHRpb24pIHsNCiAgICAgICAgICAgIGlmICghY2hhbmdlZC52YWwoKSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciBkYXRlID0gY2hhbmdlZFttZXRob2RdLmNhbGwoY2hhbmdlZCwgJ2dldERhdGUnKTsNCiAgICAgICAgICAgIGlmIChkYXRlICE9PSBudWxsICYmIG9wdGlvbnMubWluSW50ZXJ2YWwgPiAwKSB7DQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gJ21pbkRhdGUnKSB7DQogICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgKyBvcHRpb25zLm1pbkludGVydmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gJ21heERhdGUnKSB7DQogICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBvcHRpb25zLm1pbkludGVydmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGF0ZS5nZXRUaW1lKSB7DQogICAgICAgICAgICAgICAgb3RoZXJbbWV0aG9kXS5jYWxsKG90aGVyLCAnb3B0aW9uJywgb3B0aW9uLCBkYXRlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgICQuZm5bbWV0aG9kXS5jYWxsKHN0YXJ0VGltZSwgJC5leHRlbmQoew0KICAgICAgICAgICAgdGltZU9ubHk6IHRpbWVPbmx5LA0KICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24gKGRhdGVUZXh0LCBpbnN0KSB7DQogICAgICAgICAgICAgICAgY2hlY2tEYXRlcygkKHRoaXMpLCBlbmRUaW1lKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKHNlbGVjdGVkRGF0ZVRpbWUpIHsNCiAgICAgICAgICAgICAgICBzZWxlY3RlZCgkKHRoaXMpLCBlbmRUaW1lLCAnbWluRGF0ZScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LCBvcHRpb25zLCBvcHRpb25zLnN0YXJ0KSk7DQogICAgICAgICQuZm5bbWV0aG9kXS5jYWxsKGVuZFRpbWUsICQuZXh0ZW5kKHsNCiAgICAgICAgICAgIHRpbWVPbmx5OiB0aW1lT25seSwNCiAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgICAgIGNoZWNrRGF0ZXMoJCh0aGlzKSwgc3RhcnRUaW1lKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKHNlbGVjdGVkRGF0ZVRpbWUpIHsNCiAgICAgICAgICAgICAgICBzZWxlY3RlZCgkKHRoaXMpLCBzdGFydFRpbWUsICdtYXhEYXRlJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIG9wdGlvbnMsIG9wdGlvbnMuZW5kKSk7DQoNCiAgICAgICAgY2hlY2tEYXRlcyhzdGFydFRpbWUsIGVuZFRpbWUpOw0KICAgICAgICBzZWxlY3RlZChzdGFydFRpbWUsIGVuZFRpbWUsICdtaW5EYXRlJyk7DQogICAgICAgIHNlbGVjdGVkKGVuZFRpbWUsIHN0YXJ0VGltZSwgJ21heERhdGUnKTsNCiAgICAgICAgcmV0dXJuICQoW3N0YXJ0VGltZS5nZXQoMCksIGVuZFRpbWUuZ2V0KDApXSk7DQogICAgfTsNCg0KICAgIC8qKg0KCSAqIExvZyBlcnJvciBvciBkYXRhIHRvIHRoZSBjb25zb2xlIGR1cmluZyBlcnJvciBvciBkZWJ1Z2dpbmcNCgkgKiBAcGFyYW0gIHtPYmplY3R9IGVyciBwYXNzIGFueSB0eXBlIG9iamVjdCB0byBsb2cgdG8gdGhlIGNvbnNvbGUgZHVyaW5nIGVycm9yIG9yIGRlYnVnZ2luZw0KCSAqIEByZXR1cm4ge3ZvaWR9DQoJICovDQogICAgJC50aW1lcGlja2VyLmxvZyA9IGZ1bmN0aW9uIChlcnIpIHsNCiAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKSB7DQogICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coZXJyKTsNCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICAvKg0KCSAqIEFkZCB1dGlsIG9iamVjdCB0byBhbGxvdyBhY2Nlc3MgdG8gcHJpdmF0ZSBtZXRob2RzIGZvciB0ZXN0YWJpbGl0eS4NCgkgKi8NCiAgICAkLnRpbWVwaWNrZXIuX3V0aWwgPSB7DQogICAgICAgIF9leHRlbmRSZW1vdmU6IGV4dGVuZFJlbW92ZSwNCiAgICAgICAgX2lzRW1wdHlPYmplY3Q6IGlzRW1wdHlPYmplY3QsDQogICAgICAgIF9jb252ZXJ0MjR0bzEyOiBjb252ZXJ0MjR0bzEyLA0KICAgICAgICBfZGV0ZWN0U3VwcG9ydDogZGV0ZWN0U3VwcG9ydCwNCiAgICAgICAgX3NlbGVjdExvY2FsVGltZXpvbmU6IHNlbGVjdExvY2FsVGltZXpvbmUsDQogICAgICAgIF9jb21wdXRlRWZmZWN0aXZlU2V0dGluZzogY29tcHV0ZUVmZmVjdGl2ZVNldHRpbmcsDQogICAgICAgIF9zcGxpdERhdGVUaW1lOiBzcGxpdERhdGVUaW1lLA0KICAgICAgICBfcGFyc2VEYXRlVGltZUludGVybmFsOiBwYXJzZURhdGVUaW1lSW50ZXJuYWwNCiAgICB9Ow0KDQogICAgLyoNCgkqIE1pY3Jvc2Vjb25kIHN1cHBvcnQNCgkqLw0KICAgIGlmICghRGF0ZS5wcm90b3R5cGUuZ2V0TWljcm9zZWNvbmRzKSB7DQogICAgICAgIERhdGUucHJvdG90eXBlLm1pY3Jvc2Vjb25kcyA9IDA7DQogICAgICAgIERhdGUucHJvdG90eXBlLmdldE1pY3Jvc2Vjb25kcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMubWljcm9zZWNvbmRzOyB9Ow0KICAgICAgICBEYXRlLnByb3RvdHlwZS5zZXRNaWNyb3NlY29uZHMgPSBmdW5jdGlvbiAobSkgew0KICAgICAgICAgICAgdGhpcy5zZXRNaWxsaXNlY29uZHModGhpcy5nZXRNaWxsaXNlY29uZHMoKSArIE1hdGguZmxvb3IobSAvIDEwMDApKTsNCiAgICAgICAgICAgIHRoaXMubWljcm9zZWNvbmRzID0gbSAlIDEwMDA7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfTsNCiAgICB9DQoNCiAgICAvKg0KCSogS2VlcCB1cCB3aXRoIHRoZSB2ZXJzaW9uDQoJKi8NCiAgICAkLnRpbWVwaWNrZXIudmVyc2lvbiA9ICIxLjQuNSI7DQoNCn0pKGpRdWVyeSk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKgogKiBqUXVlcnkgTXVsdGlTZWxlY3QgVUkgV2lkZ2V0IEZpbHRlcmluZyBQbHVnaW4gMS40CiAqIENvcHlyaWdodCAoYykgMjAxMSBFcmljIEh5bmRzCiAqCiAqIGh0dHA6Ly93d3cuZXJpY2h5bmRzLmNvbS9qcXVlcnkvanF1ZXJ5LXVpLW11bHRpc2VsZWN0LXdpZGdldC8KICoKICogRGVwZW5kczoKICogICAtIGpRdWVyeSBVSSBNdWx0aVNlbGVjdCB3aWRnZXQKICoKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6CiAqICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKICogICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKICoKKi8KKGZ1bmN0aW9uKGEpe3ZhciBmPS9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nO2Eud2lkZ2V0KCJlY2gubXVsdGlzZWxlY3RmaWx0ZXIiLHtvcHRpb25zOntsYWJlbDoiRmlsdGVyOiIsd2lkdGg6bnVsbCxwbGFjZWhvbGRlcjoiRW50ZXIga2V5d29yZHMiLGF1dG9SZXNldDohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlO3ZhciBiPXRoaXMsYz10aGlzLm9wdGlvbnMsZD10aGlzLmluc3RhbmNlPWEodGhpcy5lbGVtZW50KS5kYXRhKCJtdWx0aXNlbGVjdCIpO3RoaXMuaGVhZGVyPWQubWVudS5maW5kKCIudWktbXVsdGlzZWxlY3QtaGVhZGVyIikuYWRkQ2xhc3MoInVpLW11bHRpc2VsZWN0LWhhc2ZpbHRlciIpO2U9dGhpcy53cmFwcGVyPWEoJzxkaXYgY2xhc3M9InVpLW11bHRpc2VsZWN0LWZpbHRlciI+JysoYy5sYWJlbC5sZW5ndGg/Yy5sYWJlbDoiIikrJzxpbnB1dCBwbGFjZWhvbGRlcj0iJytjLnBsYWNlaG9sZGVyKyciIHR5cGU9InNlYXJjaCInKygvXGQvLnRlc3QoYy53aWR0aCk/ICAnc3R5bGU9IndpZHRoOicrYy53aWR0aCsncHgiJzoiIikrIiAvPjwvZGl2PiIpLnByZXBlbmRUbyh0aGlzLmhlYWRlciksYz1lO3RoaXMuaW5wdXRzPWQubWVudS5maW5kKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdJyk7dGhpcy5pbnB1dD1jLmZpbmQoImlucHV0IikuYmluZCh7a2V5ZG93bjpmdW5jdGlvbihhKXsxMz09PWEud2hpY2gmJmEucHJldmVudERlZmF1bHQoKX0sa2V5dXA6YS5wcm94eShiLl9oYW5kbGVyLGIpLGNsaWNrOmEucHJveHkoYi5faGFuZGxlcixiKX0pO3RoaXMudXBkYXRlQ2FjaGUoKTtkLl90b2dnbGVDaGVja2VkPWZ1bmN0aW9uKGMsZCl7dmFyIGU9ZCYmZC5sZW5ndGg/ZDp0aGlzLmxhYmVscy5maW5kKCJpbnB1dCIpLGk9dGhpcyxlPWUubm90KGIuaW5zdGFuY2UuX2lzT3Blbj8iOmRpc2FibGVkLCA6aGlkZGVuIjoiOmRpc2FibGVkIikuZWFjaCh0aGlzLl90b2dnbGVTdGF0ZSgiY2hlY2tlZCIsYykpO3RoaXMudXBkYXRlKCk7IHZhciBqPWUubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9KS5nZXQoKTt0aGlzLmVsZW1lbnQuZmluZCgib3B0aW9uIikuZmlsdGVyKGZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJi0xPGEuaW5BcnJheSh0aGlzLnZhbHVlLGopJiZpLl90b2dnbGVTdGF0ZSgic2VsZWN0ZWQiLGMpLmNhbGwodGhpcyl9KX07ZD1hKGRvY3VtZW50KS5iaW5kKCJtdWx0aXNlbGVjdHJlZnJlc2giLGZ1bmN0aW9uKCl7Yi51cGRhdGVDYWNoZSgpO2IuX2hhbmRsZXIoKX0pO3RoaXMub3B0aW9ucy5hdXRvUmVzZXQmJmQuYmluZCgibXVsdGlzZWxlY3RjbG9zZSIsYS5wcm94eSh0aGlzLl9yZXNldCx0aGlzKSl9LF9oYW5kbGVyOmZ1bmN0aW9uKGIpe3ZhciBjPWEudHJpbSh0aGlzLmlucHV0WzBdLnZhbHVlLnRvTG93ZXJDYXNlKCkpLGQ9dGhpcy5yb3dzLGc9dGhpcy5pbnB1dHMsaD10aGlzLmNhY2hlO2lmKGMpe2QuaGlkZSgpO3ZhciBlPVJlZ0V4cChjLnJlcGxhY2UoZiwiXFwkJiIpLCJnaSIpOyB0aGlzLl90cmlnZ2VyKCJmaWx0ZXIiLGIsYS5tYXAoaCxmdW5jdGlvbihhLGIpe3JldHVybi0xIT09YS5zZWFyY2goZSk/KGQuZXEoYikuc2hvdygpLGcuZ2V0KGIpKTpudWxsfSkpfWVsc2UgZC5zaG93KCk7dGhpcy5pbnN0YW5jZS5tZW51LmZpbmQoIi51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGM9Yi5uZXh0VW50aWwoIi51aS1tdWx0aXNlbGVjdC1vcHRncm91cC1sYWJlbCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJub25lIiE9PWEuY3NzKHRoaXMsImRpc3BsYXkiKX0pLmxlbmd0aDtiW2M/InNob3ciOiJoaWRlIl0oKX0pfSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmlucHV0LnZhbCgiIikudHJpZ2dlcigia2V5dXAiKX0sdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLnJvd3M9dGhpcy5pbnN0YW5jZS5tZW51LmZpbmQoIi51aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIGxpOm5vdCgudWktbXVsdGlzZWxlY3Qtb3B0Z3JvdXAtbGFiZWwpIik7dGhpcy5jYWNoZT10aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpOyJvcHRncm91cCI9PT10aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmKGI9Yi5jaGlsZHJlbigpKTtyZXR1cm4gYi5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lckhUTUwudG9Mb3dlckNhc2UoKX0pLmdldCgpfSkuZ2V0KCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXBwZXJ9LGRlc3Ryb3k6ZnVuY3Rpb24oKXthLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO3RoaXMuaW5wdXQudmFsKCIiKS50cmlnZ2VyKCJrZXl1cCIpO3RoaXMud3JhcHBlci5yZW1vdmUoKX19KX0pKGpRdWVyeSk7Cg0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KLyoKICogalF1ZXJ5IE11bHRpU2VsZWN0IFVJIFdpZGdldCAxLjEzCiAqIENvcHlyaWdodCAoYykgMjAxMiBFcmljIEh5bmRzCiAqCiAqIGh0dHA6Ly93d3cuZXJpY2h5bmRzLmNvbS9qcXVlcnkvanF1ZXJ5LXVpLW11bHRpc2VsZWN0LXdpZGdldC8KICoKICogRGVwZW5kczoKICogICAtIGpRdWVyeSAxLjQuMisKICogICAtIGpRdWVyeSBVSSAxLjggd2lkZ2V0IGZhY3RvcnkKICoKICogT3B0aW9uYWw6CiAqICAgLSBqUXVlcnkgVUkgZWZmZWN0cwogKiAgIC0galF1ZXJ5IFVJIHBvc2l0aW9uIHV0aWxpdHkKICoKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6CiAqICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKICogICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKICoKICovCihmdW5jdGlvbihkKXt2YXIgaz0wO2Qud2lkZ2V0KCJlY2gubXVsdGlzZWxlY3QiLHtvcHRpb25zOntoZWFkZXI6ITAsaGVpZ2h0OjE3NSxtaW5XaWR0aDoyMjUsY2xhc3NlczoiIixjaGVja0FsbFRleHQ6IkNoZWNrIGFsbCIsdW5jaGVja0FsbFRleHQ6IlVuY2hlY2sgYWxsIixub25lU2VsZWN0ZWRUZXh0OiJTZWxlY3Qgb3B0aW9ucyIsc2VsZWN0ZWRUZXh0OiIjIHNlbGVjdGVkIixzZWxlY3RlZExpc3Q6MCxzaG93Om51bGwsaGlkZTpudWxsLGF1dG9PcGVuOiExLG11bHRpcGxlOiEwLHBvc2l0aW9uOnt9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50LmhpZGUoKSxiPXRoaXMub3B0aW9uczt0aGlzLnNwZWVkPWQuZnguc3BlZWRzLl9kZWZhdWx0O3RoaXMuX2lzT3Blbj0hMTthPSh0aGlzLmJ1dHRvbj1kKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi10cmlhbmdsZS0yLW4tcyI+PC9zcGFuPjwvYnV0dG9uPicpKS5hZGRDbGFzcygidWktbXVsdGlzZWxlY3QgdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLmFkZENsYXNzKGIuY2xhc3NlcykuYXR0cih7dGl0bGU6YS5hdHRyKCJ0aXRsZSIpLCJhcmlhLWhhc3BvcHVwIjohMCx0YWJJbmRleDphLmF0dHIoInRhYkluZGV4Iil9KS5pbnNlcnRBZnRlcihhKTsodGhpcy5idXR0b25sYWJlbD1kKCI8c3BhbiAvPiIpKS5odG1sKGIubm9uZVNlbGVjdGVkVGV4dCkuYXBwZW5kVG8oYSk7dmFyIGE9KHRoaXMubWVudT1kKCI8ZGl2IC8+IikpLmFkZENsYXNzKCJ1aS1tdWx0aXNlbGVjdC1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoYi5jbGFzc2VzKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSxjPSh0aGlzLmhlYWRlcj1kKCI8ZGl2IC8+IikpLmFkZENsYXNzKCJ1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwgdWktbXVsdGlzZWxlY3QtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCIpLmFwcGVuZFRvKGEpOyh0aGlzLmhlYWRlckxpbmtDb250YWluZXI9ZCgiPHVsIC8+IikpLmFkZENsYXNzKCJ1aS1oZWxwZXItcmVzZXQiKS5odG1sKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1iLmhlYWRlcj8nPGxpPjxhIGNsYXNzPSJ1aS1tdWx0aXNlbGVjdC1hbGwiIGhyZWY9IiMiPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2hlY2siPjwvc3Bhbj48c3Bhbj4nK2IuY2hlY2tBbGxUZXh0Kyc8L3NwYW4+PC9hPjwvbGk+PGxpPjxhIGNsYXNzPSJ1aS1tdWx0aXNlbGVjdC1ub25lIiBocmVmPSIjIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNsb3NldGhpY2siPjwvc3Bhbj48c3Bhbj4nK2IudW5jaGVja0FsbFRleHQrIjwvc3Bhbj48L2E+PC9saT4iOiJzdHJpbmciPT09dHlwZW9mIGIuaGVhZGVyPyI8bGk+IitiLmhlYWRlcisiPC9saT4iOiIifSkuYXBwZW5kKCc8bGkgY2xhc3M9InVpLW11bHRpc2VsZWN0LWNsb3NlIj48YSBocmVmPSIjIiBjbGFzcz0idWktbXVsdGlzZWxlY3QtY2xvc2UiPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLWNsb3NlIj48L3NwYW4+PC9hPjwvbGk+JykuYXBwZW5kVG8oYyk7KHRoaXMuY2hlY2tib3hDb250YWluZXI9ZCgiPHVsIC8+IikpLmFkZENsYXNzKCJ1aS1tdWx0aXNlbGVjdC1jaGVja2JveGVzIHVpLWhlbHBlci1yZXNldCIpLmFwcGVuZFRvKGEpO3RoaXMuX2JpbmRFdmVudHMoKTt0aGlzLnJlZnJlc2goITApO2IubXVsdGlwbGV8fGEuYWRkQ2xhc3MoInVpLW11bHRpc2VsZWN0LXNpbmdsZSIpfSxfaW5pdDpmdW5jdGlvbigpeyExPT09dGhpcy5vcHRpb25zLmhlYWRlciYmdGhpcy5oZWFkZXIuaGlkZSgpO3RoaXMub3B0aW9ucy5tdWx0aXBsZXx8dGhpcy5oZWFkZXJMaW5rQ29udGFpbmVyLmZpbmQoIi51aS1tdWx0aXNlbGVjdC1hbGwsIC51aS1tdWx0aXNlbGVjdC1ub25lIikuaGlkZSgpO3RoaXMub3B0aW9ucy5hdXRvT3BlbiYmdGhpcy5vcGVuKCk7dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKSYmdGhpcy5kaXNhYmxlKCl9LHJlZnJlc2g6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbGVtZW50LGM9dGhpcy5vcHRpb25zLGY9dGhpcy5tZW51LGg9dGhpcy5jaGVja2JveENvbnRhaW5lcixnPVtdLGU9IiIsaT1iLmF0dHIoImlkIil8fGsrKztiLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oYil7ZCh0aGlzKTt2YXIgYT10aGlzLnBhcmVudE5vZGUsZj10aGlzLmlubmVySFRNTCxoPXRoaXMudGl0bGUsaz10aGlzLnZhbHVlLGI9InVpLW11bHRpc2VsZWN0LSIrKHRoaXMuaWR8fGkrIi1vcHRpb24tIitiKSxsPXRoaXMuZGlzYWJsZWQsbj10aGlzLnNlbGVjdGVkLG09WyJ1aS1jb3JuZXItYWxsIl0sbz0obD8idWktbXVsdGlzZWxlY3QtZGlzYWJsZWQgIjoiICIpK3RoaXMuY2xhc3NOYW1lLGo7Ik9QVEdST1VQIj09PWEudGFnTmFtZSYmKGo9YS5nZXRBdHRyaWJ1dGUoImxhYmVsIiksLTE9PT1kLmluQXJyYXkoaixnKSYmKGUrPSc8bGkgY2xhc3M9InVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsICcrYS5jbGFzc05hbWUrJyI+PGEgaHJlZj0iIyI+JytqKyI8L2E+PC9saT4iLGcucHVzaChqKSkpO2wmJm0ucHVzaCgidWktc3RhdGUtZGlzYWJsZWQiKTtuJiYhYy5tdWx0aXBsZSYmbS5wdXNoKCJ1aS1zdGF0ZS1hY3RpdmUiKTtlKz0nPGxpIGNsYXNzPSInK28rJyI+JztlKz0nPGxhYmVsIGZvcj0iJytiKyciIHRpdGxlPSInK2grJyIgY2xhc3M9IicrbS5qb2luKCIgIikrJyI+JztlKz0nPGlucHV0IGlkPSInK2IrJyIgbmFtZT0ibXVsdGlzZWxlY3RfJytpKyciIHR5cGU9IicrKGMubXVsdGlwbGU/ImNoZWNrYm94IjoicmFkaW8iKSsnIiB2YWx1ZT0iJytrKyciIHRpdGxlPSInK2YrJyInO24mJihlKz0nIGNoZWNrZWQ9ImNoZWNrZWQiJyxlKz0nIGFyaWEtc2VsZWN0ZWQ9InRydWUiJyk7bCYmKGUrPScgZGlzYWJsZWQ9ImRpc2FibGVkIicsZSs9JyBhcmlhLWRpc2FibGVkPSJ0cnVlIicpO2UrPSIgLz48c3Bhbj4iK2YrIjwvc3Bhbj48L2xhYmVsPjwvbGk+In0pO2guaHRtbChlKTt0aGlzLmxhYmVscz1mLmZpbmQoImxhYmVsIik7dGhpcy5pbnB1dHM9dGhpcy5sYWJlbHMuY2hpbGRyZW4oImlucHV0Iik7dGhpcy5fc2V0QnV0dG9uV2lkdGgoKTt0aGlzLl9zZXRNZW51V2lkdGgoKTt0aGlzLmJ1dHRvblswXS5kZWZhdWx0VmFsdWU9dGhpcy51cGRhdGUoKTthfHx0aGlzLl90cmlnZ2VyKCJyZWZyZXNoIil9LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxiPXRoaXMuaW5wdXRzLGM9Yi5maWx0ZXIoIjpjaGVja2VkIiksZj1jLmxlbmd0aCxhPTA9PT1mP2Eubm9uZVNlbGVjdGVkVGV4dDpkLmlzRnVuY3Rpb24oYS5zZWxlY3RlZFRleHQpP2Euc2VsZWN0ZWRUZXh0LmNhbGwodGhpcyxmLGIubGVuZ3RoLGMuZ2V0KCkpOi9cZC8udGVzdChhLnNlbGVjdGVkTGlzdCkmJjA8YS5zZWxlY3RlZExpc3QmJmY8PWEuc2VsZWN0ZWRMaXN0P2MubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcykubmV4dCgpLmh0bWwoKX0pLmdldCgpLmpvaW4oIiwgIik6YS5zZWxlY3RlZFRleHQucmVwbGFjZSgiIyIsZikucmVwbGFjZSgiIyIsYi5sZW5ndGgpO3RoaXMuYnV0dG9ubGFiZWwuaHRtbChhKTtyZXR1cm4gYX0sX2JpbmRFdmVudHM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7YltiLl9pc09wZW4/ICJjbG9zZSI6Im9wZW4iXSgpO3JldHVybiExfXZhciBiPXRoaXMsYz10aGlzLmJ1dHRvbjtjLmZpbmQoInNwYW4iKS5iaW5kKCJjbGljay5tdWx0aXNlbGVjdCIsYSk7Yy5iaW5kKHtjbGljazphLGtleXByZXNzOmZ1bmN0aW9uKGEpe3N3aXRjaChhLndoaWNoKXtjYXNlIDI3OmNhc2UgMzg6Y2FzZSAzNzpiLmNsb3NlKCk7YnJlYWs7Y2FzZSAzOTpjYXNlIDQwOmIub3BlbigpfX0sbW91c2VlbnRlcjpmdW5jdGlvbigpe2MuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGQodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oKXtkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxmb2N1czpmdW5jdGlvbigpe2MuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGQodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGJsdXI6ZnVuY3Rpb24oKXtkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pO3RoaXMuaGVhZGVyLmRlbGVnYXRlKCJhIiwiY2xpY2subXVsdGlzZWxlY3QiLGZ1bmN0aW9uKGEpe2lmKGQodGhpcykuaGFzQ2xhc3MoInVpLW11bHRpc2VsZWN0LWNsb3NlIikpYi5jbG9zZSgpO2Vsc2UgYltkKHRoaXMpLmhhc0NsYXNzKCJ1aS1tdWx0aXNlbGVjdC1hbGwiKT8iY2hlY2tBbGwiOiJ1bmNoZWNrQWxsIl0oKTthLnByZXZlbnREZWZhdWx0KCl9KTt0aGlzLm1lbnUuZGVsZWdhdGUoImxpLnVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsIGEiLCJjbGljay5tdWx0aXNlbGVjdCIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBjPWQodGhpcyksZz1jLnBhcmVudCgpLm5leHRVbnRpbCgibGkudWktbXVsdGlzZWxlY3Qtb3B0Z3JvdXAtbGFiZWwiKS5maW5kKCJpbnB1dDp2aXNpYmxlOm5vdCg6ZGlzYWJsZWQpIiksZT1nLmdldCgpLGM9Yy5wYXJlbnQoKS50ZXh0KCk7ITEhPT1iLl90cmlnZ2VyKCJiZWZvcmVvcHRncm91cHRvZ2dsZSIsYSx7aW5wdXRzOmUsbGFiZWw6Y30pJiYoYi5fdG9nZ2xlQ2hlY2tlZChnLmZpbHRlcigiOmNoZWNrZWQiKS5sZW5ndGghPT1nLmxlbmd0aCxnKSxiLl90cmlnZ2VyKCJvcHRncm91cHRvZ2dsZSIsYSx7aW5wdXRzOmUsbGFiZWw6YyxjaGVja2VkOmVbMF0uY2hlY2tlZH0pKX0pLmRlbGVnYXRlKCJsYWJlbCIsIm1vdXNlZW50ZXIubXVsdGlzZWxlY3QiLGZ1bmN0aW9uKCl7ZCh0aGlzKS5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKXx8KGIubGFiZWxzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLGQodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIikuZmluZCgiaW5wdXQiKS5mb2N1cygpKX0pLmRlbGVnYXRlKCJsYWJlbCIsImtleWRvd24ubXVsdGlzZWxlY3QiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTtzd2l0Y2goYS53aGljaCl7Y2FzZSA5OmNhc2UgMjc6Yi5jbG9zZSgpO2JyZWFrO2Nhc2UgMzg6Y2FzZSA0MDpjYXNlIDM3OmNhc2UgMzk6Yi5fdHJhdmVyc2UoYS53aGljaCx0aGlzKTticmVhaztjYXNlIDEzOmQodGhpcykuZmluZCgiaW5wdXQiKVswXS5jbGljaygpfX0pLmRlbGVnYXRlKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdLCBpbnB1dFt0eXBlPSJyYWRpbyJdJywiY2xpY2subXVsdGlzZWxlY3QiLGZ1bmN0aW9uKGEpe3ZhciBjPWQodGhpcyksZz10aGlzLnZhbHVlLGU9dGhpcy5jaGVja2VkLGk9Yi5lbGVtZW50LmZpbmQoIm9wdGlvbiIpO3RoaXMuZGlzYWJsZWR8fCExPT09Yi5fdHJpZ2dlcigiY2xpY2siLGEse3ZhbHVlOmcsdGV4dDp0aGlzLnRpdGxlLGNoZWNrZWQ6ZX0pP2EucHJldmVudERlZmF1bHQoKTooYy5mb2N1cygpLGMuYXR0cigiYXJpYS1zZWxlY3RlZCIsZSksaS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy52YWx1ZT09PWc/dGhpcy5zZWxlY3RlZD1lOmIub3B0aW9ucy5tdWx0aXBsZXx8KHRoaXMuc2VsZWN0ZWQ9ITEpfSksYi5vcHRpb25zLm11bHRpcGxlfHwoYi5sYWJlbHMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGMuY2xvc2VzdCgibGFiZWwiKS50b2dnbGVDbGFzcygidWktc3RhdGUtYWN0aXZlIixlKSxiLmNsb3NlKCkpLGIuZWxlbWVudC50cmlnZ2VyKCJjaGFuZ2UiKSxzZXRUaW1lb3V0KGQucHJveHkoYi51cGRhdGUsYiksMTApKX0pO2QoZG9jdW1lbnQpLmJpbmQoIm1vdXNlZG93bi5tdWx0aXNlbGVjdCIsZnVuY3Rpb24oYSl7Yi5faXNPcGVuJiYoIWQuY29udGFpbnMoYi5tZW51WzBdLGEudGFyZ2V0KSYmIWQuY29udGFpbnMoYi5idXR0b25bMF0sYS50YXJnZXQpJiZhLnRhcmdldCE9PWIuYnV0dG9uWzBdKSYmYi5jbG9zZSgpfSk7ZCh0aGlzLmVsZW1lbnRbMF0uZm9ybSkuYmluZCgicmVzZXQubXVsdGlzZWxlY3QiLGZ1bmN0aW9uKCl7c2V0VGltZW91dChkLnByb3h5KGIucmVmcmVzaCxiKSwxMCl9KX0sX3NldEJ1dHRvbldpZHRoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxiPXRoaXMub3B0aW9uczsvXGQvLnRlc3QoYi5taW5XaWR0aCkmJmE8Yi5taW5XaWR0aCYmKGE9Yi5taW5XaWR0aCk7dGhpcy5idXR0b24ud2lkdGgoYSl9LF9zZXRNZW51V2lkdGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1lbnUsYj10aGlzLmJ1dHRvbi5vdXRlcldpZHRoKCktcGFyc2VJbnQoYS5jc3MoInBhZGRpbmctbGVmdCIpLDEwKS1wYXJzZUludChhLmNzcygicGFkZGluZy1yaWdodCIpLDEwKS1wYXJzZUludChhLmNzcygiYm9yZGVyLXJpZ2h0LXdpZHRoIiksMTApLXBhcnNlSW50KGEuY3NzKCJib3JkZXItbGVmdC13aWR0aCIpLDEwKTthLndpZHRoKGJ8fHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoKSl9LF90cmF2ZXJzZTpmdW5jdGlvbihhLGIpe3ZhciBjPWQoYiksZj0zOD09PWF8fDM3PT09YSxjPWMucGFyZW50KClbZj8icHJldkFsbCI6Im5leHRBbGwiXSgibGk6bm90KC51aS1tdWx0aXNlbGVjdC1kaXNhYmxlZCwgLnVpLW11bHRpc2VsZWN0LW9wdGdyb3VwLWxhYmVsKSIpW2Y/Imxhc3QiOiJmaXJzdCJdKCk7Yy5sZW5ndGg/Yy5maW5kKCJsYWJlbCIpLnRyaWdnZXIoIm1vdXNlb3ZlciIpOihjPXRoaXMubWVudS5maW5kKCJ1bCIpLmxhc3QoKSx0aGlzLm1lbnUuZmluZCgibGFiZWwiKVtmPyAibGFzdCI6ImZpcnN0Il0oKS50cmlnZ2VyKCJtb3VzZW92ZXIiKSxjLnNjcm9sbFRvcChmP2MuaGVpZ2h0KCk6MCkpfSxfdG9nZ2xlU3RhdGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpc1thXT1iKTtiP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwhMCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKX19LF90b2dnbGVDaGVja2VkOmZ1bmN0aW9uKGEsYil7dmFyIGM9YiYmYi5sZW5ndGg/Yjp0aGlzLmlucHV0cyxmPXRoaXM7Yy5lYWNoKHRoaXMuX3RvZ2dsZVN0YXRlKCJjaGVja2VkIixhKSk7Yy5lcSgwKS5mb2N1cygpO3RoaXMudXBkYXRlKCk7dmFyIGg9Yy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0pLmdldCgpO3RoaXMuZWxlbWVudC5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJi0xPGQuaW5BcnJheSh0aGlzLnZhbHVlLGgpJiZmLl90b2dnbGVTdGF0ZSgic2VsZWN0ZWQiLGEpLmNhbGwodGhpcyl9KTtjLmxlbmd0aCYmdGhpcy5lbGVtZW50LnRyaWdnZXIoImNoYW5nZSIpfSxfdG9nZ2xlRGlzYWJsZWQ6ZnVuY3Rpb24oYSl7dGhpcy5idXR0b24uYXR0cih7ZGlzYWJsZWQ6YSwiYXJpYS1kaXNhYmxlZCI6YX0pW2E/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgidWktc3RhdGUtZGlzYWJsZWQiKTt2YXIgYj10aGlzLm1lbnUuZmluZCgiaW5wdXQiKSxiPWE/Yi5maWx0ZXIoIjplbmFibGVkIikuZGF0YSgiZWNoLW11bHRpc2VsZWN0LWRpc2FibGVkIiwhMCk6Yi5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hMD09PWQuZGF0YSh0aGlzLCJlY2gtbXVsdGlzZWxlY3QtZGlzYWJsZWQiKX0pLnJlbW92ZURhdGEoImVjaC1tdWx0aXNlbGVjdC1kaXNhYmxlZCIpO2IuYXR0cih7ZGlzYWJsZWQ6YSwiYXJpYWwtZGlzYWJsZWQiOmF9KS5wYXJlbnQoKVthPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oInVpLXN0YXRlLWRpc2FibGVkIik7dGhpcy5lbGVtZW50LmF0dHIoe2Rpc2FibGVkOmEsImFyaWEtZGlzYWJsZWQiOmF9KX0sb3BlbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuYnV0dG9uLGI9dGhpcy5tZW51LGM9dGhpcy5zcGVlZCxmPXRoaXMub3B0aW9ucyxoPVtdO2lmKCEoITE9PT10aGlzLl90cmlnZ2VyKCJiZWZvcmVvcGVuIil8fGEuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fHRoaXMuX2lzT3Blbikpe3ZhciBnPWIuZmluZCgidWwiKS5sYXN0KCksZT1mLnNob3csaT1hLm9mZnNldCgpO2QuaXNBcnJheShmLnNob3cpJiYoZT1mLnNob3dbMF0sYz1mLnNob3dbMV18fHRoaXMuc3BlZWQpO2UmJihoPVtlLGNdKTtnLnNjcm9sbFRvcCgwKS5oZWlnaHQoZi5oZWlnaHQpO2QudWkucG9zaXRpb24mJiFkLmlzRW1wdHlPYmplY3QoZi5wb3NpdGlvbik/KGYucG9zaXRpb24ub2Y9Zi5wb3NpdGlvbi5vZnx8YSxiLnNob3coKS5wb3NpdGlvbihmLnBvc2l0aW9uKS5oaWRlKCkpOmIuY3NzKHt0b3A6aS50b3ArYS5vdXRlckhlaWdodCgpLGxlZnQ6aS5sZWZ0fSk7ZC5mbi5zaG93LmFwcGx5KGIsaCk7dGhpcy5sYWJlbHMuZXEoMCkudHJpZ2dlcigibW91c2VvdmVyIikudHJpZ2dlcigibW91c2VlbnRlciIpLmZpbmQoImlucHV0IikudHJpZ2dlcigiZm9jdXMiKTthLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKTt0aGlzLl9pc09wZW49ITA7dGhpcy5fdHJpZ2dlcigib3BlbiIpfX0sY2xvc2U6ZnVuY3Rpb24oKXtpZighMSE9PXRoaXMuX3RyaWdnZXIoImJlZm9yZWNsb3NlIikpe3ZhciBhPXRoaXMub3B0aW9ucyxiPWEuaGlkZSxjPXRoaXMuc3BlZWQsZj1bXTtkLmlzQXJyYXkoYS5oaWRlKSYmKGI9YS5oaWRlWzBdLGM9YS5oaWRlWzFdfHx0aGlzLnNwZWVkKTtiJiYoZj1bYixjXSk7ZC5mbi5oaWRlLmFwcGx5KHRoaXMubWVudSxmKTt0aGlzLmJ1dHRvbi5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikudHJpZ2dlcigiYmx1ciIpLnRyaWdnZXIoIm1vdXNlbGVhdmUiKTt0aGlzLl9pc09wZW49ITE7dGhpcy5fdHJpZ2dlcigiY2xvc2UiKX19LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuX3RvZ2dsZURpc2FibGVkKCExKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuX3RvZ2dsZURpc2FibGVkKCEwKX0sY2hlY2tBbGw6ZnVuY3Rpb24oKXt0aGlzLl90b2dnbGVDaGVja2VkKCEwKTt0aGlzLl90cmlnZ2VyKCJjaGVja0FsbCIpfSx1bmNoZWNrQWxsOmZ1bmN0aW9uKCl7dGhpcy5fdG9nZ2xlQ2hlY2tlZCghMSk7dGhpcy5fdHJpZ2dlcigidW5jaGVja0FsbCIpfSxnZXRDaGVja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5maW5kKCJpbnB1dCIpLmZpbHRlcigiOmNoZWNrZWQiKX0sZGVzdHJveTpmdW5jdGlvbigpe2QuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7dGhpcy5idXR0b24ucmVtb3ZlKCk7dGhpcy5tZW51LnJlbW92ZSgpO3RoaXMuZWxlbWVudC5zaG93KCk7cmV0dXJuIHRoaXN9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LGdldEJ1dHRvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sX3NldE9wdGlvbjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMubWVudTtzd2l0Y2goYSl7Y2FzZSAiaGVhZGVyIjpjLmZpbmQoImRpdi51aS1tdWx0aXNlbGVjdC1oZWFkZXIiKVtiPyJzaG93IjoiaGlkZSJdKCk7YnJlYWs7Y2FzZSAiY2hlY2tBbGxUZXh0IjpjLmZpbmQoImEudWktbXVsdGlzZWxlY3QtYWxsIHNwYW4iKS5lcSgtMSkudGV4dChiKTticmVhaztjYXNlICJ1bmNoZWNrQWxsVGV4dCI6Yy5maW5kKCJhLnVpLW11bHRpc2VsZWN0LW5vbmUgc3BhbiIpLmVxKC0xKS50ZXh0KGIpO2JyZWFrO2Nhc2UgImhlaWdodCI6Yy5maW5kKCJ1bCIpLmxhc3QoKS5oZWlnaHQocGFyc2VJbnQoYiwxMCkpO2JyZWFrO2Nhc2UgIm1pbldpZHRoIjp0aGlzLm9wdGlvbnNbYV09cGFyc2VJbnQoYiwxMCk7dGhpcy5fc2V0QnV0dG9uV2lkdGgoKTt0aGlzLl9zZXRNZW51V2lkdGgoKTticmVhaztjYXNlICJzZWxlY3RlZFRleHQiOmNhc2UgInNlbGVjdGVkTGlzdCI6Y2FzZSAibm9uZVNlbGVjdGVkVGV4dCI6dGhpcy5vcHRpb25zW2FdPWI7dGhpcy51cGRhdGUoKTticmVhaztjYXNlICJjbGFzc2VzIjpjLmFkZCh0aGlzLmJ1dHRvbikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmNsYXNzZXMpLmFkZENsYXNzKGIpO2JyZWFrO2Nhc2UgIm11bHRpcGxlIjpjLnRvZ2dsZUNsYXNzKCJ1aS1tdWx0aXNlbGVjdC1zaW5nbGUiLCFiKSx0aGlzLm9wdGlvbnMubXVsdGlwbGU9Yix0aGlzLmVsZW1lbnRbMF0ubXVsdGlwbGU9Yix0aGlzLnJlZnJlc2goKX1kLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9KShqUXVlcnkpOwoNCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8qISBqUXVlcnkgVmFsaWRhdGlvbiBQbHVnaW4gLSB2MS4xMy4wIC0gNy8xLzIwMTQNCiAqIGh0dHA6Ly9qcXVlcnl2YWxpZGF0aW9uLm9yZy8NCiAqIENvcHlyaWdodCAoYykgMjAxNCBKQX7CtnJuIFphZWZmZXJlcjsgTGljZW5zZWQgTUlUICovDQohZnVuY3Rpb24gKGEpIHsgImZ1bmN0aW9uIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWyJqcXVlcnkiXSwgYSkgOiBhKGpRdWVyeSkgfShmdW5jdGlvbiAoYSkgeyBhLmV4dGVuZChhLmZuLCB7IHZhbGlkYXRlOiBmdW5jdGlvbiAoYikgeyBpZiAoIXRoaXMubGVuZ3RoKSByZXR1cm4gdm9pZCAoYiAmJiBiLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUud2FybigiTm90aGluZyBzZWxlY3RlZCwgY2FuJ3QgdmFsaWRhdGUsIHJldHVybmluZyBub3RoaW5nLiIpKTsgdmFyIGMgPSBhLmRhdGEodGhpc1swXSwgInZhbGlkYXRvciIpOyByZXR1cm4gYyA/IGMgOiAodGhpcy5hdHRyKCJub3ZhbGlkYXRlIiwgIm5vdmFsaWRhdGUiKSwgYyA9IG5ldyBhLnZhbGlkYXRvcihiLCB0aGlzWzBdKSwgYS5kYXRhKHRoaXNbMF0sICJ2YWxpZGF0b3IiLCBjKSwgYy5zZXR0aW5ncy5vbnN1Ym1pdCAmJiAodGhpcy52YWxpZGF0ZURlbGVnYXRlKCI6c3VibWl0IiwgImNsaWNrIiwgZnVuY3Rpb24gKGIpIHsgYy5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyICYmIChjLnN1Ym1pdEJ1dHRvbiA9IGIudGFyZ2V0KSwgYShiLnRhcmdldCkuaGFzQ2xhc3MoImNhbmNlbCIpICYmIChjLmNhbmNlbFN1Ym1pdCA9ICEwKSwgdm9pZCAwICE9PSBhKGIudGFyZ2V0KS5hdHRyKCJmb3Jtbm92YWxpZGF0ZSIpICYmIChjLmNhbmNlbFN1Ym1pdCA9ICEwKSB9KSwgdGhpcy5zdWJtaXQoZnVuY3Rpb24gKGIpIHsgZnVuY3Rpb24gZCgpIHsgdmFyIGQ7IHJldHVybiBjLnNldHRpbmdzLnN1Ym1pdEhhbmRsZXIgPyAoYy5zdWJtaXRCdXR0b24gJiYgKGQgPSBhKCI8aW5wdXQgdHlwZT0naGlkZGVuJy8+IikuYXR0cigibmFtZSIsIGMuc3VibWl0QnV0dG9uLm5hbWUpLnZhbChhKGMuc3VibWl0QnV0dG9uKS52YWwoKSkuYXBwZW5kVG8oYy5jdXJyZW50Rm9ybSkpLCBjLnNldHRpbmdzLnN1Ym1pdEhhbmRsZXIuY2FsbChjLCBjLmN1cnJlbnRGb3JtLCBiKSwgYy5zdWJtaXRCdXR0b24gJiYgZC5yZW1vdmUoKSwgITEpIDogITAgfSByZXR1cm4gYy5zZXR0aW5ncy5kZWJ1ZyAmJiBiLnByZXZlbnREZWZhdWx0KCksIGMuY2FuY2VsU3VibWl0ID8gKGMuY2FuY2VsU3VibWl0ID0gITEsIGQoKSkgOiBjLmZvcm0oKSA/IGMucGVuZGluZ1JlcXVlc3QgPyAoYy5mb3JtU3VibWl0dGVkID0gITAsICExKSA6IGQoKSA6IChjLmZvY3VzSW52YWxpZCgpLCAhMSkgfSkpLCBjKSB9LCB2YWxpZDogZnVuY3Rpb24gKCkgeyB2YXIgYiwgYzsgcmV0dXJuIGEodGhpc1swXSkuaXMoImZvcm0iKSA/IGIgPSB0aGlzLnZhbGlkYXRlKCkuZm9ybSgpIDogKGIgPSAhMCwgYyA9IGEodGhpc1swXS5mb3JtKS52YWxpZGF0ZSgpLCB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeyBiID0gYy5lbGVtZW50KHRoaXMpICYmIGIgfSkpLCBiIH0sIHJlbW92ZUF0dHJzOiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IHt9LCBkID0gdGhpczsgcmV0dXJuIGEuZWFjaChiLnNwbGl0KC9ccy8pLCBmdW5jdGlvbiAoYSwgYikgeyBjW2JdID0gZC5hdHRyKGIpLCBkLnJlbW92ZUF0dHIoYikgfSksIGMgfSwgcnVsZXM6IGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkLCBlLCBmLCBnLCBoLCBpLCBqID0gdGhpc1swXTsgaWYgKGIpIHN3aXRjaCAoZCA9IGEuZGF0YShqLmZvcm0sICJ2YWxpZGF0b3IiKS5zZXR0aW5ncywgZSA9IGQucnVsZXMsIGYgPSBhLnZhbGlkYXRvci5zdGF0aWNSdWxlcyhqKSwgYikgeyBjYXNlICJhZGQiOiBhLmV4dGVuZChmLCBhLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGMpKSwgZGVsZXRlIGYubWVzc2FnZXMsIGVbai5uYW1lXSA9IGYsIGMubWVzc2FnZXMgJiYgKGQubWVzc2FnZXNbai5uYW1lXSA9IGEuZXh0ZW5kKGQubWVzc2FnZXNbai5uYW1lXSwgYy5tZXNzYWdlcykpOyBicmVhazsgY2FzZSAicmVtb3ZlIjogcmV0dXJuIGMgPyAoaSA9IHt9LCBhLmVhY2goYy5zcGxpdCgvXHMvKSwgZnVuY3Rpb24gKGIsIGMpIHsgaVtjXSA9IGZbY10sIGRlbGV0ZSBmW2NdLCAicmVxdWlyZWQiID09PSBjICYmIGEoaikucmVtb3ZlQXR0cigiYXJpYS1yZXF1aXJlZCIpIH0pLCBpKSA6IChkZWxldGUgZVtqLm5hbWVdLCBmKSB9IHJldHVybiBnID0gYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZXMoYS5leHRlbmQoe30sIGEudmFsaWRhdG9yLmNsYXNzUnVsZXMoaiksIGEudmFsaWRhdG9yLmF0dHJpYnV0ZVJ1bGVzKGopLCBhLnZhbGlkYXRvci5kYXRhUnVsZXMoaiksIGEudmFsaWRhdG9yLnN0YXRpY1J1bGVzKGopKSwgaiksIGcucmVxdWlyZWQgJiYgKGggPSBnLnJlcXVpcmVkLCBkZWxldGUgZy5yZXF1aXJlZCwgZyA9IGEuZXh0ZW5kKHsgcmVxdWlyZWQ6IGggfSwgZyksIGEoaikuYXR0cigiYXJpYS1yZXF1aXJlZCIsICJ0cnVlIikpLCBnLnJlbW90ZSAmJiAoaCA9IGcucmVtb3RlLCBkZWxldGUgZy5yZW1vdGUsIGcgPSBhLmV4dGVuZChnLCB7IHJlbW90ZTogaCB9KSksIGcgfSB9KSwgYS5leHRlbmQoYS5leHByWyI6Il0sIHsgYmxhbms6IGZ1bmN0aW9uIChiKSB7IHJldHVybiAhYS50cmltKCIiICsgYShiKS52YWwoKSkgfSwgZmlsbGVkOiBmdW5jdGlvbiAoYikgeyByZXR1cm4gISFhLnRyaW0oIiIgKyBhKGIpLnZhbCgpKSB9LCB1bmNoZWNrZWQ6IGZ1bmN0aW9uIChiKSB7IHJldHVybiAhYShiKS5wcm9wKCJjaGVja2VkIikgfSB9KSwgYS52YWxpZGF0b3IgPSBmdW5jdGlvbiAoYiwgYykgeyB0aGlzLnNldHRpbmdzID0gYS5leHRlbmQoITAsIHt9LCBhLnZhbGlkYXRvci5kZWZhdWx0cywgYiksIHRoaXMuY3VycmVudEZvcm0gPSBjLCB0aGlzLmluaXQoKSB9LCBhLnZhbGlkYXRvci5mb3JtYXQgPSBmdW5jdGlvbiAoYiwgYykgeyByZXR1cm4gMSA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBhLm1ha2VBcnJheShhcmd1bWVudHMpOyByZXR1cm4gYy51bnNoaWZ0KGIpLCBhLnZhbGlkYXRvci5mb3JtYXQuYXBwbHkodGhpcywgYykgfSA6IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBjLmNvbnN0cnVjdG9yICE9PSBBcnJheSAmJiAoYyA9IGEubWFrZUFycmF5KGFyZ3VtZW50cykuc2xpY2UoMSkpLCBjLmNvbnN0cnVjdG9yICE9PSBBcnJheSAmJiAoYyA9IFtjXSksIGEuZWFjaChjLCBmdW5jdGlvbiAoYSwgYykgeyBiID0gYi5yZXBsYWNlKG5ldyBSZWdFeHAoIlxceyIgKyBhICsgIlxcfSIsICJnIiksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGMgfSkgfSksIGIpIH0sIGEuZXh0ZW5kKGEudmFsaWRhdG9yLCB7IGRlZmF1bHRzOiB7IG1lc3NhZ2VzOiB7fSwgZ3JvdXBzOiB7fSwgcnVsZXM6IHt9LCBlcnJvckNsYXNzOiAiZXJyb3IiLCB2YWxpZENsYXNzOiAidmFsaWQiLCBlcnJvckVsZW1lbnQ6ICJsYWJlbCIsIGZvY3VzSW52YWxpZDogITAsIGVycm9yQ29udGFpbmVyOiBhKFtdKSwgZXJyb3JMYWJlbENvbnRhaW5lcjogYShbXSksIG9uc3VibWl0OiAhMCwgaWdub3JlOiAiOmhpZGRlbiIsIGlnbm9yZVRpdGxlOiAhMSwgb25mb2N1c2luOiBmdW5jdGlvbiAoYSkgeyB0aGlzLmxhc3RBY3RpdmUgPSBhLCB0aGlzLnNldHRpbmdzLmZvY3VzQ2xlYW51cCAmJiAhdGhpcy5ibG9ja0ZvY3VzQ2xlYW51cCAmJiAodGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodCAmJiB0aGlzLnNldHRpbmdzLnVuaGlnaGxpZ2h0LmNhbGwodGhpcywgYSwgdGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzLCB0aGlzLnNldHRpbmdzLnZhbGlkQ2xhc3MpLCB0aGlzLmhpZGVUaGVzZSh0aGlzLmVycm9yc0ZvcihhKSkpIH0sIG9uZm9jdXNvdXQ6IGZ1bmN0aW9uIChhKSB7IHRoaXMuY2hlY2thYmxlKGEpIHx8ICEoYS5uYW1lIGluIHRoaXMuc3VibWl0dGVkKSAmJiB0aGlzLm9wdGlvbmFsKGEpIHx8IHRoaXMuZWxlbWVudChhKSB9LCBvbmtleXVwOiBmdW5jdGlvbiAoYSwgYikgeyAoOSAhPT0gYi53aGljaCB8fCAiIiAhPT0gdGhpcy5lbGVtZW50VmFsdWUoYSkpICYmIChhLm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQgfHwgYSA9PT0gdGhpcy5sYXN0RWxlbWVudCkgJiYgdGhpcy5lbGVtZW50KGEpIH0sIG9uY2xpY2s6IGZ1bmN0aW9uIChhKSB7IGEubmFtZSBpbiB0aGlzLnN1Ym1pdHRlZCA/IHRoaXMuZWxlbWVudChhKSA6IGEucGFyZW50Tm9kZS5uYW1lIGluIHRoaXMuc3VibWl0dGVkICYmIHRoaXMuZWxlbWVudChhLnBhcmVudE5vZGUpIH0sIGhpZ2hsaWdodDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgInJhZGlvIiA9PT0gYi50eXBlID8gdGhpcy5maW5kQnlOYW1lKGIubmFtZSkuYWRkQ2xhc3MoYykucmVtb3ZlQ2xhc3MoZCkgOiBhKGIpLmFkZENsYXNzKGMpLnJlbW92ZUNsYXNzKGQpIH0sIHVuaGlnaGxpZ2h0OiBmdW5jdGlvbiAoYiwgYywgZCkgeyAicmFkaW8iID09PSBiLnR5cGUgPyB0aGlzLmZpbmRCeU5hbWUoYi5uYW1lKS5yZW1vdmVDbGFzcyhjKS5hZGRDbGFzcyhkKSA6IGEoYikucmVtb3ZlQ2xhc3MoYykuYWRkQ2xhc3MoZCkgfSB9LCBzZXREZWZhdWx0czogZnVuY3Rpb24gKGIpIHsgYS5leHRlbmQoYS52YWxpZGF0b3IuZGVmYXVsdHMsIGIpIH0sIG1lc3NhZ2VzOiB7IHJlcXVpcmVkOiAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iLCByZW1vdGU6ICJQbGVhc2UgZml4IHRoaXMgZmllbGQuIiwgZW1haWw6ICJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsIHVybDogIlBsZWFzZSBlbnRlciBhIHZhbGlkIFVSTC4iLCBkYXRlOiAiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZS4iLCBkYXRlSVNPOiAiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZSAoIElTTyApLiIsIG51bWJlcjogIlBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlci4iLCBkaWdpdHM6ICJQbGVhc2UgZW50ZXIgb25seSBkaWdpdHMuIiwgY3JlZGl0Y2FyZDogIlBsZWFzZSBlbnRlciBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4iLCBlcXVhbFRvOiAiUGxlYXNlIGVudGVyIHRoZSBzYW1lIHZhbHVlIGFnYWluLiIsIG1heGxlbmd0aDogYS52YWxpZGF0b3IuZm9ybWF0KCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXJzLiIpLCBtaW5sZW5ndGg6IGEudmFsaWRhdG9yLmZvcm1hdCgiUGxlYXNlIGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIpLCByYW5nZWxlbmd0aDogYS52YWxpZGF0b3IuZm9ybWF0KCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9IGNoYXJhY3RlcnMgbG9uZy4iKSwgcmFuZ2U6IGEudmFsaWRhdG9yLmZvcm1hdCgiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfS4iKSwgbWF4OiBhLnZhbGlkYXRvci5mb3JtYXQoIlBsZWFzZSBlbnRlciBhIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiksIG1pbjogYS52YWxpZGF0b3IuZm9ybWF0KCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gezB9LiIpIH0sIGF1dG9DcmVhdGVSYW5nZXM6ICExLCBwcm90b3R5cGU6IHsgaW5pdDogZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBiKGIpIHsgdmFyIGMgPSBhLmRhdGEodGhpc1swXS5mb3JtLCAidmFsaWRhdG9yIiksIGQgPSAib24iICsgYi50eXBlLnJlcGxhY2UoL152YWxpZGF0ZS8sICIiKSwgZSA9IGMuc2V0dGluZ3M7IGVbZF0gJiYgIXRoaXMuaXMoZS5pZ25vcmUpICYmIGVbZF0uY2FsbChjLCB0aGlzWzBdLCBiKSB9IHRoaXMubGFiZWxDb250YWluZXIgPSBhKHRoaXMuc2V0dGluZ3MuZXJyb3JMYWJlbENvbnRhaW5lciksIHRoaXMuZXJyb3JDb250ZXh0ID0gdGhpcy5sYWJlbENvbnRhaW5lci5sZW5ndGggJiYgdGhpcy5sYWJlbENvbnRhaW5lciB8fCBhKHRoaXMuY3VycmVudEZvcm0pLCB0aGlzLmNvbnRhaW5lcnMgPSBhKHRoaXMuc2V0dGluZ3MuZXJyb3JDb250YWluZXIpLmFkZCh0aGlzLnNldHRpbmdzLmVycm9yTGFiZWxDb250YWluZXIpLCB0aGlzLnN1Ym1pdHRlZCA9IHt9LCB0aGlzLnZhbHVlQ2FjaGUgPSB7fSwgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IDAsIHRoaXMucGVuZGluZyA9IHt9LCB0aGlzLmludmFsaWQgPSB7fSwgdGhpcy5yZXNldCgpOyB2YXIgYywgZCA9IHRoaXMuZ3JvdXBzID0ge307IGEuZWFjaCh0aGlzLnNldHRpbmdzLmdyb3VwcywgZnVuY3Rpb24gKGIsIGMpIHsgInN0cmluZyIgPT0gdHlwZW9mIGMgJiYgKGMgPSBjLnNwbGl0KC9ccy8pKSwgYS5lYWNoKGMsIGZ1bmN0aW9uIChhLCBjKSB7IGRbY10gPSBiIH0pIH0pLCBjID0gdGhpcy5zZXR0aW5ncy5ydWxlcywgYS5lYWNoKGMsIGZ1bmN0aW9uIChiLCBkKSB7IGNbYl0gPSBhLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGQpIH0pLCBhKHRoaXMuY3VycmVudEZvcm0pLnZhbGlkYXRlRGVsZWdhdGUoIjp0ZXh0LCBbdHlwZT0ncGFzc3dvcmQnXSwgW3R5cGU9J2ZpbGUnXSwgc2VsZWN0LCB0ZXh0YXJlYSwgW3R5cGU9J251bWJlciddLCBbdHlwZT0nc2VhcmNoJ10gLFt0eXBlPSd0ZWwnXSwgW3R5cGU9J3VybCddLCBbdHlwZT0nZW1haWwnXSwgW3R5cGU9J2RhdGV0aW1lJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdtb250aCddLCBbdHlwZT0nd2VlayddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J3JhbmdlJ10sIFt0eXBlPSdjb2xvciddLCBbdHlwZT0ncmFkaW8nXSwgW3R5cGU9J2NoZWNrYm94J10iLCAiZm9jdXNpbiBmb2N1c291dCBrZXl1cCIsIGIpLnZhbGlkYXRlRGVsZWdhdGUoInNlbGVjdCwgb3B0aW9uLCBbdHlwZT0ncmFkaW8nXSwgW3R5cGU9J2NoZWNrYm94J10iLCAiY2xpY2siLCBiKSwgdGhpcy5zZXR0aW5ncy5pbnZhbGlkSGFuZGxlciAmJiBhKHRoaXMuY3VycmVudEZvcm0pLmJpbmQoImludmFsaWQtZm9ybS52YWxpZGF0ZSIsIHRoaXMuc2V0dGluZ3MuaW52YWxpZEhhbmRsZXIpLCBhKHRoaXMuY3VycmVudEZvcm0pLmZpbmQoIltyZXF1aXJlZF0sIFtkYXRhLXJ1bGUtcmVxdWlyZWRdLCAucmVxdWlyZWQiKS5hdHRyKCJhcmlhLXJlcXVpcmVkIiwgInRydWUiKSB9LCBmb3JtOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNoZWNrRm9ybSgpLCBhLmV4dGVuZCh0aGlzLnN1Ym1pdHRlZCwgdGhpcy5lcnJvck1hcCksIHRoaXMuaW52YWxpZCA9IGEuZXh0ZW5kKHt9LCB0aGlzLmVycm9yTWFwKSwgdGhpcy52YWxpZCgpIHx8IGEodGhpcy5jdXJyZW50Rm9ybSkudHJpZ2dlckhhbmRsZXIoImludmFsaWQtZm9ybSIsIFt0aGlzXSksIHRoaXMuc2hvd0Vycm9ycygpLCB0aGlzLnZhbGlkKCkgfSwgY2hlY2tGb3JtOiBmdW5jdGlvbiAoKSB7IHRoaXMucHJlcGFyZUZvcm0oKTsgZm9yICh2YXIgYSA9IDAsIGIgPSB0aGlzLmN1cnJlbnRFbGVtZW50cyA9IHRoaXMuZWxlbWVudHMoKSA7IGJbYV07IGErKykgdGhpcy5jaGVjayhiW2FdKTsgcmV0dXJuIHRoaXMudmFsaWQoKSB9LCBlbGVtZW50OiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IHRoaXMuY2xlYW4oYiksIGQgPSB0aGlzLnZhbGlkYXRpb25UYXJnZXRGb3IoYyksIGUgPSAhMDsgcmV0dXJuIHRoaXMubGFzdEVsZW1lbnQgPSBkLCB2b2lkIDAgPT09IGQgPyBkZWxldGUgdGhpcy5pbnZhbGlkW2MubmFtZV0gOiAodGhpcy5wcmVwYXJlRWxlbWVudChkKSwgdGhpcy5jdXJyZW50RWxlbWVudHMgPSBhKGQpLCBlID0gdGhpcy5jaGVjayhkKSAhPT0gITEsIGUgPyBkZWxldGUgdGhpcy5pbnZhbGlkW2QubmFtZV0gOiB0aGlzLmludmFsaWRbZC5uYW1lXSA9ICEwKSwgYShiKS5hdHRyKCJhcmlhLWludmFsaWQiLCAhZSksIHRoaXMubnVtYmVyT2ZJbnZhbGlkcygpIHx8ICh0aGlzLnRvSGlkZSA9IHRoaXMudG9IaWRlLmFkZCh0aGlzLmNvbnRhaW5lcnMpKSwgdGhpcy5zaG93RXJyb3JzKCksIGUgfSwgc2hvd0Vycm9yczogZnVuY3Rpb24gKGIpIHsgaWYgKGIpIHsgYS5leHRlbmQodGhpcy5lcnJvck1hcCwgYiksIHRoaXMuZXJyb3JMaXN0ID0gW107IGZvciAodmFyIGMgaW4gYikgdGhpcy5lcnJvckxpc3QucHVzaCh7IG1lc3NhZ2U6IGJbY10sIGVsZW1lbnQ6IHRoaXMuZmluZEJ5TmFtZShjKVswXSB9KTsgdGhpcy5zdWNjZXNzTGlzdCA9IGEuZ3JlcCh0aGlzLnN1Y2Nlc3NMaXN0LCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gIShhLm5hbWUgaW4gYikgfSkgfSB0aGlzLnNldHRpbmdzLnNob3dFcnJvcnMgPyB0aGlzLnNldHRpbmdzLnNob3dFcnJvcnMuY2FsbCh0aGlzLCB0aGlzLmVycm9yTWFwLCB0aGlzLmVycm9yTGlzdCkgOiB0aGlzLmRlZmF1bHRTaG93RXJyb3JzKCkgfSwgcmVzZXRGb3JtOiBmdW5jdGlvbiAoKSB7IGEuZm4ucmVzZXRGb3JtICYmIGEodGhpcy5jdXJyZW50Rm9ybSkucmVzZXRGb3JtKCksIHRoaXMuc3VibWl0dGVkID0ge30sIHRoaXMubGFzdEVsZW1lbnQgPSBudWxsLCB0aGlzLnByZXBhcmVGb3JtKCksIHRoaXMuaGlkZUVycm9ycygpLCB0aGlzLmVsZW1lbnRzKCkucmVtb3ZlQ2xhc3ModGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzKS5yZW1vdmVEYXRhKCJwcmV2aW91c1ZhbHVlIikucmVtb3ZlQXR0cigiYXJpYS1pbnZhbGlkIikgfSwgbnVtYmVyT2ZJbnZhbGlkczogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5vYmplY3RMZW5ndGgodGhpcy5pbnZhbGlkKSB9LCBvYmplY3RMZW5ndGg6IGZ1bmN0aW9uIChhKSB7IHZhciBiLCBjID0gMDsgZm9yIChiIGluIGEpIGMrKzsgcmV0dXJuIGMgfSwgaGlkZUVycm9yczogZnVuY3Rpb24gKCkgeyB0aGlzLmhpZGVUaGVzZSh0aGlzLnRvSGlkZSkgfSwgaGlkZVRoZXNlOiBmdW5jdGlvbiAoYSkgeyBhLm5vdCh0aGlzLmNvbnRhaW5lcnMpLnRleHQoIiIpLCB0aGlzLmFkZFdyYXBwZXIoYSkuaGlkZSgpIH0sIHZhbGlkOiBmdW5jdGlvbiAoKSB7IHJldHVybiAwID09PSB0aGlzLnNpemUoKSB9LCBzaXplOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmVycm9yTGlzdC5sZW5ndGggfSwgZm9jdXNJbnZhbGlkOiBmdW5jdGlvbiAoKSB7IGlmICh0aGlzLnNldHRpbmdzLmZvY3VzSW52YWxpZCkgdHJ5IHsgYSh0aGlzLmZpbmRMYXN0QWN0aXZlKCkgfHwgdGhpcy5lcnJvckxpc3QubGVuZ3RoICYmIHRoaXMuZXJyb3JMaXN0WzBdLmVsZW1lbnQgfHwgW10pLmZpbHRlcigiOnZpc2libGUiKS5mb2N1cygpLnRyaWdnZXIoImZvY3VzaW4iKSB9IGNhdGNoIChiKSB7IH0gfSwgZmluZExhc3RBY3RpdmU6IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSB0aGlzLmxhc3RBY3RpdmU7IHJldHVybiBiICYmIDEgPT09IGEuZ3JlcCh0aGlzLmVycm9yTGlzdCwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEuZWxlbWVudC5uYW1lID09PSBiLm5hbWUgfSkubGVuZ3RoICYmIGIgfSwgZWxlbWVudHM6IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSB0aGlzLCBjID0ge307IHJldHVybiBhKHRoaXMuY3VycmVudEZvcm0pLmZpbmQoImlucHV0LCBzZWxlY3QsIHRleHRhcmVhIikubm90KCI6c3VibWl0LCA6cmVzZXQsIDppbWFnZSwgW2Rpc2FibGVkXSIpLm5vdCh0aGlzLnNldHRpbmdzLmlnbm9yZSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICF0aGlzLm5hbWUgJiYgYi5zZXR0aW5ncy5kZWJ1ZyAmJiB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmVycm9yKCIlbyBoYXMgbm8gbmFtZSBhc3NpZ25lZCIsIHRoaXMpLCB0aGlzLm5hbWUgaW4gYyB8fCAhYi5vYmplY3RMZW5ndGgoYSh0aGlzKS5ydWxlcygpKSA/ICExIDogKGNbdGhpcy5uYW1lXSA9ICEwLCAhMCkgfSkgfSwgY2xlYW46IGZ1bmN0aW9uIChiKSB7IHJldHVybiBhKGIpWzBdIH0sIGVycm9yczogZnVuY3Rpb24gKCkgeyB2YXIgYiA9IHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcy5zcGxpdCgiICIpLmpvaW4oIi4iKTsgcmV0dXJuIGEodGhpcy5zZXR0aW5ncy5lcnJvckVsZW1lbnQgKyAiLiIgKyBiLCB0aGlzLmVycm9yQ29udGV4dCkgfSwgcmVzZXQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5zdWNjZXNzTGlzdCA9IFtdLCB0aGlzLmVycm9yTGlzdCA9IFtdLCB0aGlzLmVycm9yTWFwID0ge30sIHRoaXMudG9TaG93ID0gYShbXSksIHRoaXMudG9IaWRlID0gYShbXSksIHRoaXMuY3VycmVudEVsZW1lbnRzID0gYShbXSkgfSwgcHJlcGFyZUZvcm06IGZ1bmN0aW9uICgpIHsgdGhpcy5yZXNldCgpLCB0aGlzLnRvSGlkZSA9IHRoaXMuZXJyb3JzKCkuYWRkKHRoaXMuY29udGFpbmVycykgfSwgcHJlcGFyZUVsZW1lbnQ6IGZ1bmN0aW9uIChhKSB7IHRoaXMucmVzZXQoKSwgdGhpcy50b0hpZGUgPSB0aGlzLmVycm9yc0ZvcihhKSB9LCBlbGVtZW50VmFsdWU6IGZ1bmN0aW9uIChiKSB7IHZhciBjLCBkID0gYShiKSwgZSA9IGIudHlwZTsgcmV0dXJuICJyYWRpbyIgPT09IGUgfHwgImNoZWNrYm94IiA9PT0gZSA/IGEoImlucHV0W25hbWU9JyIgKyBiLm5hbWUgKyAiJ106Y2hlY2tlZCIpLnZhbCgpIDogIm51bWJlciIgPT09IGUgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIGIudmFsaWRpdHkgPyBiLnZhbGlkaXR5LmJhZElucHV0ID8gITEgOiBkLnZhbCgpIDogKGMgPSBkLnZhbCgpLCAic3RyaW5nIiA9PSB0eXBlb2YgYyA/IGMucmVwbGFjZSgvXHIvZywgIiIpIDogYykgfSwgY2hlY2s6IGZ1bmN0aW9uIChiKSB7IGIgPSB0aGlzLnZhbGlkYXRpb25UYXJnZXRGb3IodGhpcy5jbGVhbihiKSk7IHZhciBjLCBkLCBlLCBmID0gYShiKS5ydWxlcygpLCBnID0gYS5tYXAoZiwgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgfSkubGVuZ3RoLCBoID0gITEsIGkgPSB0aGlzLmVsZW1lbnRWYWx1ZShiKTsgZm9yIChkIGluIGYpIHsgZSA9IHsgbWV0aG9kOiBkLCBwYXJhbWV0ZXJzOiBmW2RdIH07IHRyeSB7IGlmIChjID0gYS52YWxpZGF0b3IubWV0aG9kc1tkXS5jYWxsKHRoaXMsIGksIGIsIGUucGFyYW1ldGVycyksICJkZXBlbmRlbmN5LW1pc21hdGNoIiA9PT0gYyAmJiAxID09PSBnKSB7IGggPSAhMDsgY29udGludWUgfSBpZiAoaCA9ICExLCAicGVuZGluZyIgPT09IGMpIHJldHVybiB2b2lkICh0aGlzLnRvSGlkZSA9IHRoaXMudG9IaWRlLm5vdCh0aGlzLmVycm9yc0ZvcihiKSkpOyBpZiAoIWMpIHJldHVybiB0aGlzLmZvcm1hdEFuZEFkZChiLCBlKSwgITEgfSBjYXRjaCAoaikgeyB0aHJvdyB0aGlzLnNldHRpbmdzLmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUubG9nKCJFeGNlcHRpb24gb2NjdXJyZWQgd2hlbiBjaGVja2luZyBlbGVtZW50ICIgKyBiLmlkICsgIiwgY2hlY2sgdGhlICciICsgZS5tZXRob2QgKyAiJyBtZXRob2QuIiwgaiksIGogfSB9IGlmICghaCkgcmV0dXJuIHRoaXMub2JqZWN0TGVuZ3RoKGYpICYmIHRoaXMuc3VjY2Vzc0xpc3QucHVzaChiKSwgITAgfSwgY3VzdG9tRGF0YU1lc3NhZ2U6IGZ1bmN0aW9uIChiLCBjKSB7IHJldHVybiBhKGIpLmRhdGEoIm1zZyIgKyBjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYy5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKSkgfHwgYShiKS5kYXRhKCJtc2ciKSB9LCBjdXN0b21NZXNzYWdlOiBmdW5jdGlvbiAoYSwgYikgeyB2YXIgYyA9IHRoaXMuc2V0dGluZ3MubWVzc2FnZXNbYV07IHJldHVybiBjICYmIChjLmNvbnN0cnVjdG9yID09PSBTdHJpbmcgPyBjIDogY1tiXSkgfSwgZmluZERlZmluZWQ6IGZ1bmN0aW9uICgpIHsgZm9yICh2YXIgYSA9IDA7IGEgPCBhcmd1bWVudHMubGVuZ3RoOyBhKyspIGlmICh2b2lkIDAgIT09IGFyZ3VtZW50c1thXSkgcmV0dXJuIGFyZ3VtZW50c1thXTsgcmV0dXJuIHZvaWQgMCB9LCBkZWZhdWx0TWVzc2FnZTogZnVuY3Rpb24gKGIsIGMpIHsgcmV0dXJuIHRoaXMuZmluZERlZmluZWQodGhpcy5jdXN0b21NZXNzYWdlKGIubmFtZSwgYyksIHRoaXMuY3VzdG9tRGF0YU1lc3NhZ2UoYiwgYyksICF0aGlzLnNldHRpbmdzLmlnbm9yZVRpdGxlICYmIGIudGl0bGUgfHwgdm9pZCAwLCBhLnZhbGlkYXRvci5tZXNzYWdlc1tjXSwgIjxzdHJvbmc+V2FybmluZzogTm8gbWVzc2FnZSBkZWZpbmVkIGZvciAiICsgYi5uYW1lICsgIjwvc3Ryb25nPiIpIH0sIGZvcm1hdEFuZEFkZDogZnVuY3Rpb24gKGIsIGMpIHsgdmFyIGQgPSB0aGlzLmRlZmF1bHRNZXNzYWdlKGIsIGMubWV0aG9kKSwgZSA9IC9cJD9ceyhcZCspXH0vZzsgImZ1bmN0aW9uIiA9PSB0eXBlb2YgZCA/IGQgPSBkLmNhbGwodGhpcywgYy5wYXJhbWV0ZXJzLCBiKSA6IGUudGVzdChkKSAmJiAoZCA9IGEudmFsaWRhdG9yLmZvcm1hdChkLnJlcGxhY2UoZSwgInskMX0iKSwgYy5wYXJhbWV0ZXJzKSksIHRoaXMuZXJyb3JMaXN0LnB1c2goeyBtZXNzYWdlOiBkLCBlbGVtZW50OiBiLCBtZXRob2Q6IGMubWV0aG9kIH0pLCB0aGlzLmVycm9yTWFwW2IubmFtZV0gPSBkLCB0aGlzLnN1Ym1pdHRlZFtiLm5hbWVdID0gZCB9LCBhZGRXcmFwcGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5zZXR0aW5ncy53cmFwcGVyICYmIChhID0gYS5hZGQoYS5wYXJlbnQodGhpcy5zZXR0aW5ncy53cmFwcGVyKSkpLCBhIH0sIGRlZmF1bHRTaG93RXJyb3JzOiBmdW5jdGlvbiAoKSB7IHZhciBhLCBiLCBjOyBmb3IgKGEgPSAwOyB0aGlzLmVycm9yTGlzdFthXTsgYSsrKSBjID0gdGhpcy5lcnJvckxpc3RbYV0sIHRoaXMuc2V0dGluZ3MuaGlnaGxpZ2h0ICYmIHRoaXMuc2V0dGluZ3MuaGlnaGxpZ2h0LmNhbGwodGhpcywgYy5lbGVtZW50LCB0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsIHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyksIHRoaXMuc2hvd0xhYmVsKGMuZWxlbWVudCwgYy5tZXNzYWdlKTsgaWYgKHRoaXMuZXJyb3JMaXN0Lmxlbmd0aCAmJiAodGhpcy50b1Nob3cgPSB0aGlzLnRvU2hvdy5hZGQodGhpcy5jb250YWluZXJzKSksIHRoaXMuc2V0dGluZ3Muc3VjY2VzcykgZm9yIChhID0gMDsgdGhpcy5zdWNjZXNzTGlzdFthXTsgYSsrKSB0aGlzLnNob3dMYWJlbCh0aGlzLnN1Y2Nlc3NMaXN0W2FdKTsgaWYgKHRoaXMuc2V0dGluZ3MudW5oaWdobGlnaHQpIGZvciAoYSA9IDAsIGIgPSB0aGlzLnZhbGlkRWxlbWVudHMoKSA7IGJbYV07IGErKykgdGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKHRoaXMsIGJbYV0sIHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcywgdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKTsgdGhpcy50b0hpZGUgPSB0aGlzLnRvSGlkZS5ub3QodGhpcy50b1Nob3cpLCB0aGlzLmhpZGVFcnJvcnMoKSwgdGhpcy5hZGRXcmFwcGVyKHRoaXMudG9TaG93KS5zaG93KCkgfSwgdmFsaWRFbGVtZW50czogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jdXJyZW50RWxlbWVudHMubm90KHRoaXMuaW52YWxpZEVsZW1lbnRzKCkpIH0sIGludmFsaWRFbGVtZW50czogZnVuY3Rpb24gKCkgeyByZXR1cm4gYSh0aGlzLmVycm9yTGlzdCkubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuZWxlbWVudCB9KSB9LCBzaG93TGFiZWw6IGZ1bmN0aW9uIChiLCBjKSB7IHZhciBkLCBlLCBmLCBnID0gdGhpcy5lcnJvcnNGb3IoYiksIGggPSB0aGlzLmlkT3JOYW1lKGIpLCBpID0gYShiKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iik7IGcubGVuZ3RoID8gKGcucmVtb3ZlQ2xhc3ModGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MpLCBnLmh0bWwoYykpIDogKGcgPSBhKCI8IiArIHRoaXMuc2V0dGluZ3MuZXJyb3JFbGVtZW50ICsgIj4iKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MpLmh0bWwoYyB8fCAiIiksIGQgPSBnLCB0aGlzLnNldHRpbmdzLndyYXBwZXIgJiYgKGQgPSBnLmhpZGUoKS5zaG93KCkud3JhcCgiPCIgKyB0aGlzLnNldHRpbmdzLndyYXBwZXIgKyAiLz4iKS5wYXJlbnQoKSksIHRoaXMubGFiZWxDb250YWluZXIubGVuZ3RoID8gdGhpcy5sYWJlbENvbnRhaW5lci5hcHBlbmQoZCkgOiB0aGlzLnNldHRpbmdzLmVycm9yUGxhY2VtZW50ID8gdGhpcy5zZXR0aW5ncy5lcnJvclBsYWNlbWVudChkLCBhKGIpKSA6IGQuaW5zZXJ0QWZ0ZXIoYiksIGcuaXMoImxhYmVsIikgPyBnLmF0dHIoImZvciIsIGgpIDogMCA9PT0gZy5wYXJlbnRzKCJsYWJlbFtmb3I9JyIgKyBoICsgIiddIikubGVuZ3RoICYmIChmID0gZy5hdHRyKCJpZCIpLCBpID8gaS5tYXRjaChuZXcgUmVnRXhwKCJcYiIgKyBmICsgIlxiIikpIHx8IChpICs9ICIgIiArIGYpIDogaSA9IGYsIGEoYikuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsIGkpLCBlID0gdGhpcy5ncm91cHNbYi5uYW1lXSwgZSAmJiBhLmVhY2godGhpcy5ncm91cHMsIGZ1bmN0aW9uIChiLCBjKSB7IGMgPT09IGUgJiYgYSgiW25hbWU9JyIgKyBiICsgIiddIiwgdGhpcy5jdXJyZW50Rm9ybSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsIGcuYXR0cigiaWQiKSkgfSkpKSwgIWMgJiYgdGhpcy5zZXR0aW5ncy5zdWNjZXNzICYmIChnLnRleHQoIiIpLCAic3RyaW5nIiA9PSB0eXBlb2YgdGhpcy5zZXR0aW5ncy5zdWNjZXNzID8gZy5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLnN1Y2Nlc3MpIDogdGhpcy5zZXR0aW5ncy5zdWNjZXNzKGcsIGIpKSwgdGhpcy50b1Nob3cgPSB0aGlzLnRvU2hvdy5hZGQoZykgfSwgZXJyb3JzRm9yOiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IHRoaXMuaWRPck5hbWUoYiksIGQgPSBhKGIpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKSwgZSA9ICJsYWJlbFtmb3I9JyIgKyBjICsgIiddLCBsYWJlbFtmb3I9JyIgKyBjICsgIiddICoiOyByZXR1cm4gZCAmJiAoZSA9IGUgKyAiLCAjIiArIGQucmVwbGFjZSgvXHMrL2csICIsICMiKSksIHRoaXMuZXJyb3JzKCkuZmlsdGVyKGUpIH0sIGlkT3JOYW1lOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gdGhpcy5ncm91cHNbYS5uYW1lXSB8fCAodGhpcy5jaGVja2FibGUoYSkgPyBhLm5hbWUgOiBhLmlkIHx8IGEubmFtZSkgfSwgdmFsaWRhdGlvblRhcmdldEZvcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIHRoaXMuY2hlY2thYmxlKGEpICYmIChhID0gdGhpcy5maW5kQnlOYW1lKGEubmFtZSkubm90KHRoaXMuc2V0dGluZ3MuaWdub3JlKVswXSksIGEgfSwgY2hlY2thYmxlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gL3JhZGlvfGNoZWNrYm94L2kudGVzdChhLnR5cGUpIH0sIGZpbmRCeU5hbWU6IGZ1bmN0aW9uIChiKSB7IHJldHVybiBhKHRoaXMuY3VycmVudEZvcm0pLmZpbmQoIltuYW1lPSciICsgYiArICInXSIpIH0sIGdldExlbmd0aDogZnVuY3Rpb24gKGIsIGMpIHsgc3dpdGNoIChjLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHsgY2FzZSAic2VsZWN0IjogcmV0dXJuIGEoIm9wdGlvbjpzZWxlY3RlZCIsIGMpLmxlbmd0aDsgY2FzZSAiaW5wdXQiOiBpZiAodGhpcy5jaGVja2FibGUoYykpIHJldHVybiB0aGlzLmZpbmRCeU5hbWUoYy5uYW1lKS5maWx0ZXIoIjpjaGVja2VkIikubGVuZ3RoIH0gcmV0dXJuIGIubGVuZ3RoIH0sIGRlcGVuZDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMuZGVwZW5kVHlwZXNbdHlwZW9mIGFdID8gdGhpcy5kZXBlbmRUeXBlc1t0eXBlb2YgYV0oYSwgYikgOiAhMCB9LCBkZXBlbmRUeXBlczogeyAiYm9vbGVhbiI6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhIH0sIHN0cmluZzogZnVuY3Rpb24gKGIsIGMpIHsgcmV0dXJuICEhYShiLCBjLmZvcm0pLmxlbmd0aCB9LCAiZnVuY3Rpb24iOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYShiKSB9IH0sIG9wdGlvbmFsOiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IHRoaXMuZWxlbWVudFZhbHVlKGIpOyByZXR1cm4gIWEudmFsaWRhdG9yLm1ldGhvZHMucmVxdWlyZWQuY2FsbCh0aGlzLCBjLCBiKSAmJiAiZGVwZW5kZW5jeS1taXNtYXRjaCIgfSwgc3RhcnRSZXF1ZXN0OiBmdW5jdGlvbiAoYSkgeyB0aGlzLnBlbmRpbmdbYS5uYW1lXSB8fCAodGhpcy5wZW5kaW5nUmVxdWVzdCsrLCB0aGlzLnBlbmRpbmdbYS5uYW1lXSA9ICEwKSB9LCBzdG9wUmVxdWVzdDogZnVuY3Rpb24gKGIsIGMpIHsgdGhpcy5wZW5kaW5nUmVxdWVzdC0tLCB0aGlzLnBlbmRpbmdSZXF1ZXN0IDwgMCAmJiAodGhpcy5wZW5kaW5nUmVxdWVzdCA9IDApLCBkZWxldGUgdGhpcy5wZW5kaW5nW2IubmFtZV0sIGMgJiYgMCA9PT0gdGhpcy5wZW5kaW5nUmVxdWVzdCAmJiB0aGlzLmZvcm1TdWJtaXR0ZWQgJiYgdGhpcy5mb3JtKCkgPyAoYSh0aGlzLmN1cnJlbnRGb3JtKS5zdWJtaXQoKSwgdGhpcy5mb3JtU3VibWl0dGVkID0gITEpIDogIWMgJiYgMCA9PT0gdGhpcy5wZW5kaW5nUmVxdWVzdCAmJiB0aGlzLmZvcm1TdWJtaXR0ZWQgJiYgKGEodGhpcy5jdXJyZW50Rm9ybSkudHJpZ2dlckhhbmRsZXIoImludmFsaWQtZm9ybSIsIFt0aGlzXSksIHRoaXMuZm9ybVN1Ym1pdHRlZCA9ICExKSB9LCBwcmV2aW91c1ZhbHVlOiBmdW5jdGlvbiAoYikgeyByZXR1cm4gYS5kYXRhKGIsICJwcmV2aW91c1ZhbHVlIikgfHwgYS5kYXRhKGIsICJwcmV2aW91c1ZhbHVlIiwgeyBvbGQ6IG51bGwsIHZhbGlkOiAhMCwgbWVzc2FnZTogdGhpcy5kZWZhdWx0TWVzc2FnZShiLCAicmVtb3RlIikgfSkgfSB9LCBjbGFzc1J1bGVTZXR0aW5nczogeyByZXF1aXJlZDogeyByZXF1aXJlZDogITAgfSwgZW1haWw6IHsgZW1haWw6ICEwIH0sIHVybDogeyB1cmw6ICEwIH0sIGRhdGU6IHsgZGF0ZTogITAgfSwgZGF0ZUlTTzogeyBkYXRlSVNPOiAhMCB9LCBudW1iZXI6IHsgbnVtYmVyOiAhMCB9LCBkaWdpdHM6IHsgZGlnaXRzOiAhMCB9LCBjcmVkaXRjYXJkOiB7IGNyZWRpdGNhcmQ6ICEwIH0gfSwgYWRkQ2xhc3NSdWxlczogZnVuY3Rpb24gKGIsIGMpIHsgYi5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nID8gdGhpcy5jbGFzc1J1bGVTZXR0aW5nc1tiXSA9IGMgOiBhLmV4dGVuZCh0aGlzLmNsYXNzUnVsZVNldHRpbmdzLCBiKSB9LCBjbGFzc1J1bGVzOiBmdW5jdGlvbiAoYikgeyB2YXIgYyA9IHt9LCBkID0gYShiKS5hdHRyKCJjbGFzcyIpOyByZXR1cm4gZCAmJiBhLmVhY2goZC5zcGxpdCgiICIpLCBmdW5jdGlvbiAoKSB7IHRoaXMgaW4gYS52YWxpZGF0b3IuY2xhc3NSdWxlU2V0dGluZ3MgJiYgYS5leHRlbmQoYywgYS52YWxpZGF0b3IuY2xhc3NSdWxlU2V0dGluZ3NbdGhpc10pIH0pLCBjIH0sIGF0dHJpYnV0ZVJ1bGVzOiBmdW5jdGlvbiAoYikgeyB2YXIgYywgZCwgZSA9IHt9LCBmID0gYShiKSwgZyA9IGIuZ2V0QXR0cmlidXRlKCJ0eXBlIik7IGZvciAoYyBpbiBhLnZhbGlkYXRvci5tZXRob2RzKSAicmVxdWlyZWQiID09PSBjID8gKGQgPSBiLmdldEF0dHJpYnV0ZShjKSwgIiIgPT09IGQgJiYgKGQgPSAhMCksIGQgPSAhIWQpIDogZCA9IGYuYXR0cihjKSwgL21pbnxtYXgvLnRlc3QoYykgJiYgKG51bGwgPT09IGcgfHwgL251bWJlcnxyYW5nZXx0ZXh0Ly50ZXN0KGcpKSAmJiAoZCA9IE51bWJlcihkKSksIGQgfHwgMCA9PT0gZCA/IGVbY10gPSBkIDogZyA9PT0gYyAmJiAicmFuZ2UiICE9PSBnICYmIChlW2NdID0gITApOyByZXR1cm4gZS5tYXhsZW5ndGggJiYgLy0xfDIxNDc0ODM2NDd8NTI0Mjg4Ly50ZXN0KGUubWF4bGVuZ3RoKSAmJiBkZWxldGUgZS5tYXhsZW5ndGgsIGUgfSwgZGF0YVJ1bGVzOiBmdW5jdGlvbiAoYikgeyB2YXIgYywgZCwgZSA9IHt9LCBmID0gYShiKTsgZm9yIChjIGluIGEudmFsaWRhdG9yLm1ldGhvZHMpIGQgPSBmLmRhdGEoInJ1bGUiICsgYy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGMuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpLCB2b2lkIDAgIT09IGQgJiYgKGVbY10gPSBkKTsgcmV0dXJuIGUgfSwgc3RhdGljUnVsZXM6IGZ1bmN0aW9uIChiKSB7IHZhciBjID0ge30sIGQgPSBhLmRhdGEoYi5mb3JtLCAidmFsaWRhdG9yIik7IHJldHVybiBkLnNldHRpbmdzLnJ1bGVzICYmIChjID0gYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZShkLnNldHRpbmdzLnJ1bGVzW2IubmFtZV0pIHx8IHt9KSwgYyB9LCBub3JtYWxpemVSdWxlczogZnVuY3Rpb24gKGIsIGMpIHsgcmV0dXJuIGEuZWFjaChiLCBmdW5jdGlvbiAoZCwgZSkgeyBpZiAoZSA9PT0gITEpIHJldHVybiB2b2lkIGRlbGV0ZSBiW2RdOyBpZiAoZS5wYXJhbSB8fCBlLmRlcGVuZHMpIHsgdmFyIGYgPSAhMDsgc3dpdGNoICh0eXBlb2YgZS5kZXBlbmRzKSB7IGNhc2UgInN0cmluZyI6IGYgPSAhIWEoZS5kZXBlbmRzLCBjLmZvcm0pLmxlbmd0aDsgYnJlYWs7IGNhc2UgImZ1bmN0aW9uIjogZiA9IGUuZGVwZW5kcy5jYWxsKGMsIGMpIH0gZiA/IGJbZF0gPSB2b2lkIDAgIT09IGUucGFyYW0gPyBlLnBhcmFtIDogITAgOiBkZWxldGUgYltkXSB9IH0pLCBhLmVhY2goYiwgZnVuY3Rpb24gKGQsIGUpIHsgYltkXSA9IGEuaXNGdW5jdGlvbihlKSA/IGUoYykgOiBlIH0pLCBhLmVhY2goWyJtaW5sZW5ndGgiLCAibWF4bGVuZ3RoIl0sIGZ1bmN0aW9uICgpIHsgYlt0aGlzXSAmJiAoYlt0aGlzXSA9IE51bWJlcihiW3RoaXNdKSkgfSksIGEuZWFjaChbInJhbmdlbGVuZ3RoIiwgInJhbmdlIl0sIGZ1bmN0aW9uICgpIHsgdmFyIGM7IGJbdGhpc10gJiYgKGEuaXNBcnJheShiW3RoaXNdKSA/IGJbdGhpc10gPSBbTnVtYmVyKGJbdGhpc11bMF0pLCBOdW1iZXIoYlt0aGlzXVsxXSldIDogInN0cmluZyIgPT0gdHlwZW9mIGJbdGhpc10gJiYgKGMgPSBiW3RoaXNdLnJlcGxhY2UoL1tcW1xdXS9nLCAiIikuc3BsaXQoL1tccyxdKy8pLCBiW3RoaXNdID0gW051bWJlcihjWzBdKSwgTnVtYmVyKGNbMV0pXSkpIH0pLCBhLnZhbGlkYXRvci5hdXRvQ3JlYXRlUmFuZ2VzICYmIChiLm1pbiAmJiBiLm1heCAmJiAoYi5yYW5nZSA9IFtiLm1pbiwgYi5tYXhdLCBkZWxldGUgYi5taW4sIGRlbGV0ZSBiLm1heCksIGIubWlubGVuZ3RoICYmIGIubWF4bGVuZ3RoICYmIChiLnJhbmdlbGVuZ3RoID0gW2IubWlubGVuZ3RoLCBiLm1heGxlbmd0aF0sIGRlbGV0ZSBiLm1pbmxlbmd0aCwgZGVsZXRlIGIubWF4bGVuZ3RoKSksIGIgfSwgbm9ybWFsaXplUnVsZTogZnVuY3Rpb24gKGIpIHsgaWYgKCJzdHJpbmciID09IHR5cGVvZiBiKSB7IHZhciBjID0ge307IGEuZWFjaChiLnNwbGl0KC9ccy8pLCBmdW5jdGlvbiAoKSB7IGNbdGhpc10gPSAhMCB9KSwgYiA9IGMgfSByZXR1cm4gYiB9LCBhZGRNZXRob2Q6IGZ1bmN0aW9uIChiLCBjLCBkKSB7IGEudmFsaWRhdG9yLm1ldGhvZHNbYl0gPSBjLCBhLnZhbGlkYXRvci5tZXNzYWdlc1tiXSA9IHZvaWQgMCAhPT0gZCA/IGQgOiBhLnZhbGlkYXRvci5tZXNzYWdlc1tiXSwgYy5sZW5ndGggPCAzICYmIGEudmFsaWRhdG9yLmFkZENsYXNzUnVsZXMoYiwgYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZShiKSkgfSwgbWV0aG9kczogeyByZXF1aXJlZDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgaWYgKCF0aGlzLmRlcGVuZChkLCBjKSkgcmV0dXJuICJkZXBlbmRlbmN5LW1pc21hdGNoIjsgaWYgKCJzZWxlY3QiID09PSBjLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHsgdmFyIGUgPSBhKGMpLnZhbCgpOyByZXR1cm4gZSAmJiBlLmxlbmd0aCA+IDAgfSByZXR1cm4gdGhpcy5jaGVja2FibGUoYykgPyB0aGlzLmdldExlbmd0aChiLCBjKSA+IDAgOiBhLnRyaW0oYikubGVuZ3RoID4gMCB9LCBlbWFpbDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgL15bYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLnRlc3QoYSkgfSwgdXJsOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCAvXihodHRwcz98cz9mdHApOlwvXC8oKCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyFcJCYnXChcKVwqXCssOz1dfDopKkApPygoKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSkpfCgoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKShbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkqKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpXC4pKygoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCgoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSooW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSlcLj8pKDpcZCopPykoXC8oKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbIVwkJidcKFwpXCpcKyw7PV18OnxAKSsoXC8oKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApKikqKT8pPyhcPygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApfFtcdUUwMDAtXHVGOEZGXXxcL3xcPykqKT8oIygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshXCQmJ1woXClcKlwrLDs9XXw6fEApfFwvfFw/KSopPyQvaS50ZXN0KGEpIH0sIGRhdGU6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLm9wdGlvbmFsKGIpIHx8ICEvSW52YWxpZHxOYU4vLnRlc3QobmV3IERhdGUoYSkudG9TdHJpbmcoKSkgfSwgZGF0ZUlTTzogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgL15cZHs0fVtcL1wtXSgwP1sxLTldfDFbMDEyXSlbXC9cLV0oMD9bMS05XXxbMTJdWzAtOV18M1swMV0pJC8udGVzdChhKSB9LCBudW1iZXI6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLm9wdGlvbmFsKGIpIHx8IC9eLT8oPzpcZCt8XGR7MSwzfSg/OixcZHszfSkrKT8oPzpcLlxkKyk/JC8udGVzdChhKSB9LCBkaWdpdHM6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB0aGlzLm9wdGlvbmFsKGIpIHx8IC9eXGQrJC8udGVzdChhKSB9LCBjcmVkaXRjYXJkOiBmdW5jdGlvbiAoYSwgYikgeyBpZiAodGhpcy5vcHRpb25hbChiKSkgcmV0dXJuICJkZXBlbmRlbmN5LW1pc21hdGNoIjsgaWYgKC9bXjAtOSBcLV0rLy50ZXN0KGEpKSByZXR1cm4gITE7IHZhciBjLCBkLCBlID0gMCwgZiA9IDAsIGcgPSAhMTsgaWYgKGEgPSBhLnJlcGxhY2UoL1xEL2csICIiKSwgYS5sZW5ndGggPCAxMyB8fCBhLmxlbmd0aCA+IDE5KSByZXR1cm4gITE7IGZvciAoYyA9IGEubGVuZ3RoIC0gMTsgYyA+PSAwOyBjLS0pIGQgPSBhLmNoYXJBdChjKSwgZiA9IHBhcnNlSW50KGQsIDEwKSwgZyAmJiAoZiAqPSAyKSA+IDkgJiYgKGYgLT0gOSksIGUgKz0gZiwgZyA9ICFnOyByZXR1cm4gZSAlIDEwID09PSAwIH0sIG1pbmxlbmd0aDogZnVuY3Rpb24gKGIsIGMsIGQpIHsgdmFyIGUgPSBhLmlzQXJyYXkoYikgPyBiLmxlbmd0aCA6IHRoaXMuZ2V0TGVuZ3RoKGEudHJpbShiKSwgYyk7IHJldHVybiB0aGlzLm9wdGlvbmFsKGMpIHx8IGUgPj0gZCB9LCBtYXhsZW5ndGg6IGZ1bmN0aW9uIChiLCBjLCBkKSB7IHZhciBlID0gYS5pc0FycmF5KGIpID8gYi5sZW5ndGggOiB0aGlzLmdldExlbmd0aChhLnRyaW0oYiksIGMpOyByZXR1cm4gdGhpcy5vcHRpb25hbChjKSB8fCBkID49IGUgfSwgcmFuZ2VsZW5ndGg6IGZ1bmN0aW9uIChiLCBjLCBkKSB7IHZhciBlID0gYS5pc0FycmF5KGIpID8gYi5sZW5ndGggOiB0aGlzLmdldExlbmd0aChhLnRyaW0oYiksIGMpOyByZXR1cm4gdGhpcy5vcHRpb25hbChjKSB8fCBlID49IGRbMF0gJiYgZSA8PSBkWzFdIH0sIG1pbjogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgYSA+PSBjIH0sIG1heDogZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIHRoaXMub3B0aW9uYWwoYikgfHwgYyA+PSBhIH0sIHJhbmdlOiBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gdGhpcy5vcHRpb25hbChiKSB8fCBhID49IGNbMF0gJiYgYSA8PSBjWzFdIH0sIGVxdWFsVG86IGZ1bmN0aW9uIChiLCBjLCBkKSB7IHZhciBlID0gYShkKTsgcmV0dXJuIHRoaXMuc2V0dGluZ3Mub25mb2N1c291dCAmJiBlLnVuYmluZCgiLnZhbGlkYXRlLWVxdWFsVG8iKS5iaW5kKCJibHVyLnZhbGlkYXRlLWVxdWFsVG8iLCBmdW5jdGlvbiAoKSB7IGEoYykudmFsaWQoKSB9KSwgYiA9PT0gZS52YWwoKSB9LCByZW1vdGU6IGZ1bmN0aW9uIChiLCBjLCBkKSB7IGlmICh0aGlzLm9wdGlvbmFsKGMpKSByZXR1cm4gImRlcGVuZGVuY3ktbWlzbWF0Y2giOyB2YXIgZSwgZiwgZyA9IHRoaXMucHJldmlvdXNWYWx1ZShjKTsgcmV0dXJuIHRoaXMuc2V0dGluZ3MubWVzc2FnZXNbYy5uYW1lXSB8fCAodGhpcy5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdID0ge30pLCBnLm9yaWdpbmFsTWVzc2FnZSA9IHRoaXMuc2V0dGluZ3MubWVzc2FnZXNbYy5uYW1lXS5yZW1vdGUsIHRoaXMuc2V0dGluZ3MubWVzc2FnZXNbYy5uYW1lXS5yZW1vdGUgPSBnLm1lc3NhZ2UsIGQgPSAic3RyaW5nIiA9PSB0eXBlb2YgZCAmJiB7IHVybDogZCB9IHx8IGQsIGcub2xkID09PSBiID8gZy52YWxpZCA6IChnLm9sZCA9IGIsIGUgPSB0aGlzLCB0aGlzLnN0YXJ0UmVxdWVzdChjKSwgZiA9IHt9LCBmW2MubmFtZV0gPSBiLCBhLmFqYXgoYS5leHRlbmQoITAsIHsgdXJsOiBkLCBtb2RlOiAiYWJvcnQiLCBwb3J0OiAidmFsaWRhdGUiICsgYy5uYW1lLCBkYXRhVHlwZTogImpzb24iLCBkYXRhOiBmLCBjb250ZXh0OiBlLmN1cnJlbnRGb3JtLCBzdWNjZXNzOiBmdW5jdGlvbiAoZCkgeyB2YXIgZiwgaCwgaSwgaiA9IGQgPT09ICEwIHx8ICJ0cnVlIiA9PT0gZDsgZS5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdLnJlbW90ZSA9IGcub3JpZ2luYWxNZXNzYWdlLCBqID8gKGkgPSBlLmZvcm1TdWJtaXR0ZWQsIGUucHJlcGFyZUVsZW1lbnQoYyksIGUuZm9ybVN1Ym1pdHRlZCA9IGksIGUuc3VjY2Vzc0xpc3QucHVzaChjKSwgZGVsZXRlIGUuaW52YWxpZFtjLm5hbWVdLCBlLnNob3dFcnJvcnMoKSkgOiAoZiA9IHt9LCBoID0gZCB8fCBlLmRlZmF1bHRNZXNzYWdlKGMsICJyZW1vdGUiKSwgZltjLm5hbWVdID0gZy5tZXNzYWdlID0gYS5pc0Z1bmN0aW9uKGgpID8gaChiKSA6IGgsIGUuaW52YWxpZFtjLm5hbWVdID0gITAsIGUuc2hvd0Vycm9ycyhmKSksIGcudmFsaWQgPSBqLCBlLnN0b3BSZXF1ZXN0KGMsIGopIH0gfSwgZCkpLCAicGVuZGluZyIpIH0gfSB9KSwgYS5mb3JtYXQgPSBmdW5jdGlvbiAoKSB7IHRocm93ICIkLmZvcm1hdCBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICQudmFsaWRhdG9yLmZvcm1hdCBpbnN0ZWFkLiIgfTsgdmFyIGIsIGMgPSB7fTsgYS5hamF4UHJlZmlsdGVyID8gYS5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uIChhLCBiLCBkKSB7IHZhciBlID0gYS5wb3J0OyAiYWJvcnQiID09PSBhLm1vZGUgJiYgKGNbZV0gJiYgY1tlXS5hYm9ydCgpLCBjW2VdID0gZCkgfSkgOiAoYiA9IGEuYWpheCwgYS5hamF4ID0gZnVuY3Rpb24gKGQpIHsgdmFyIGUgPSAoIm1vZGUiIGluIGQgPyBkIDogYS5hamF4U2V0dGluZ3MpLm1vZGUsIGYgPSAoInBvcnQiIGluIGQgPyBkIDogYS5hamF4U2V0dGluZ3MpLnBvcnQ7IHJldHVybiAiYWJvcnQiID09PSBlID8gKGNbZl0gJiYgY1tmXS5hYm9ydCgpLCBjW2ZdID0gYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBjW2ZdKSA6IGIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9KSwgYS5leHRlbmQoYS5mbiwgeyB2YWxpZGF0ZURlbGVnYXRlOiBmdW5jdGlvbiAoYiwgYywgZCkgeyByZXR1cm4gdGhpcy5iaW5kKGMsIGZ1bmN0aW9uIChjKSB7IHZhciBlID0gYShjLnRhcmdldCk7IHJldHVybiBlLmlzKGIpID8gZC5hcHBseShlLCBhcmd1bWVudHMpIDogdm9pZCAwIH0pIH0gfSkgfSk7DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQp2YXIgZXJyb3JWYWxpZGF0ZUZvY3VzT3V0ID0gZmFsc2U7DQp2YXIgZm9jdXNPdXRWYWxpZGF0ZUxpc3QgPSBbXTsNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KKGZ1bmN0aW9uICgkKSB7DQogICAgaWYgKCEkLnZhbGlkYXRvcikgew0KICAgICAgICB0aHJvdyAnJC52YWxpZGF0b3IgaXMgbWlzc2luZy4nOw0KICAgIH0NCg0KICAgIHZhciBjdXN0b20gPSBmdW5jdGlvbiAodmFsdWUsIGVsZW1lbnQsIG1ldGhvZE5hbWUpIHsNCiAgICAgICAgaWYgKCFtZXRob2ROYW1lKSB7DQogICAgICAgICAgICB0aHJvdyAnSW52YWxpZCBtZXRob2QuJzsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBtZXRob2QgPSB3aW5kb3dbbWV0aG9kTmFtZV07DQogICAgICAgIGlmICghbWV0aG9kKSB7DQogICAgICAgICAgICB0aHJvdyAnSW52YWxpZCBtZXRob2QgJyArIG1ldGhvZE5hbWUgKyAnLic7DQogICAgICAgIH0NCiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTUwgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCiAgICAgICAgLy9yZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIFtlbGVtZW50LCAnLTEnLCAxXSk7DQogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgW2VsZW1lbnQsIHRoaXMudmFsaWRhdG9yT2JqZWN0LnNlY3Rpb25TY29wZSA/IHRoaXMudmFsaWRhdG9yT2JqZWN0LnNlY3Rpb25TY29wZS5wYWdlIC0gMSA6ICctMScsIDFdKTsNCiAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCiAgICB9Ow0KICAgICQudmFsaWRhdG9yLmFkZE1ldGhvZCgnY3VzdG9tRScsIGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCwgbWV0aG9kTmFtZSkgew0KICAgICAgICByZXR1cm4gY3VzdG9tKHZhbHVlLCBlbGVtZW50LCBtZXRob2ROYW1lKTsNCiAgICB9KTsNCg0KICAgICQudmFsaWRhdG9yLmFkZE1ldGhvZCgnY3VzdG9tVycsIGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCwgbWV0aG9kTmFtZSkgew0KICAgICAgICByZXR1cm4gY3VzdG9tKHZhbHVlLCBlbGVtZW50LCBtZXRob2ROYW1lKTsNCiAgICB9KTsNCg0KICAgICQudmFsaWRhdG9yLmFkZE1ldGhvZCgiZGF0ZSIsIGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCkgew0KICAgICAgICB2YXIgY2hlY2sgPSBmYWxzZTsNCiAgICAgICAgaWYgKCEkKCIjIiArIGVsZW1lbnQuaWQpLmhhc0NsYXNzKCJkYXRldGltZXBpY2tlciIpKSB7DQogICAgICAgICAgICB2YXIgcmUgPSAvXlxkezEsMn1cLlxkezEsMn1cLlxkezR9JC87DQogICAgICAgICAgICBpZiAocmUudGVzdCh2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICB2YXIgYWRhdGEgPSB2YWx1ZS5zcGxpdCgnLicpOw0KICAgICAgICAgICAgICAgIHZhciBkYXkgPSBwYXJzZUludChhZGF0YVswXSwgMTApOw0KICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHBhcnNlSW50KGFkYXRhWzFdLCAxMCk7DQogICAgICAgICAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludChhZGF0YVsyXSwgMTApOw0KICAgICAgICAgICAgICAgIGNoZWNrID0gaXNWYWxpZERhdGUoZGF5LCBtb250aCwgeWVhcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB2YXIgcmUyID0gL15cZHsxLDJ9XC5cZHsxLDJ9XC5cZHs0fVxzXGR7MSwyfTpcZHsxLDJ9JC87DQogICAgICAgICAgICBpZiAocmUyLnRlc3QodmFsdWUpKSB7DQogICAgICAgICAgICAgICAgdmFyIGFkYXRhID0gdmFsdWUuc3BsaXQoJyAnKTsNCiAgICAgICAgICAgICAgICB2YXIgZGF0ZVBhcnRzID0gYWRhdGFbMF0uc3BsaXQoJy4nKTsNCg0KICAgICAgICAgICAgICAgIHZhciBkYXkgPSBwYXJzZUludChkYXRlUGFydHNbMF0sIDEwKTsNCiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBwYXJzZUludChkYXRlUGFydHNbMV0sIDEwKTsNCiAgICAgICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KGRhdGVQYXJ0c1syXSwgMTApOw0KDQogICAgICAgICAgICAgICAgdmFyIHRpbWVQYXJ0cyA9IGFkYXRhWzFdLnNwbGl0KCc6Jyk7DQoNCiAgICAgICAgICAgICAgICB2YXIgaG91cnMgPSBwYXJzZUludCh0aW1lUGFydHNbMF0sIDEwKTsNCiAgICAgICAgICAgICAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KHRpbWVQYXJ0c1sxXSwgMTApOw0KICAgICAgICAgICAgICAgIGNoZWNrID0gaXNWYWxpZERhdGVUaW1lKGRheSwgbW9udGgsIHllYXIsIGhvdXJzLCBtaW51dGVzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbmFsKGVsZW1lbnQpIHx8IGNoZWNrOw0KICAgIH0sICJQbGVhc2UgZW50ZXIgYSBjb3JyZWN0IGRhdGUiKTsNCg0KDQogICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKCJtYXhWYWx1ZSIsIGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCwgYXJnKSB7DQogICAgICAgIHZhciBjaGVjayA9IHRydWU7DQogICAgICAgIHZhciBtYXggPSBwYXJzZUZsb2F0KGFyZyk7DQogICAgICAgIGlmICh2YWx1ZSA+IG1heCkNCiAgICAgICAgICAgIGNoZWNrID0gZmFsc2U7DQoNCiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uYWwoZWxlbWVudCkgfHwgY2hlY2s7DQogICAgfSwgIkJhZCB2YWx1ZSIpOw0KDQogICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKCJtaW5WYWx1ZSIsIGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCwgYXJnKSB7DQogICAgICAgIHZhciBjaGVjayA9IHRydWU7DQogICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGFyZyk7DQogICAgICAgIGlmICh2YWx1ZSA8IG1pbikNCiAgICAgICAgICAgIGNoZWNrID0gZmFsc2U7DQoNCiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uYWwoZWxlbWVudCkgfHwgY2hlY2s7DQogICAgfSwgIkJhZCB2YWx1ZSIpOw0KDQp9KGpRdWVyeSkpOw0KDQpmdW5jdGlvbiBpc1ZhbGlkRGF0ZShkYXksIG1vbnRoLCB5ZWFyKSB7DQogICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgaWYgKGRheSA8IDEgfHwgZGF5ID4gMzEpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICBpZiAoKG1vbnRoID09IDQgfHwgbW9udGggPT0gNiB8fCBtb250aCA9PSA5IHx8IG1vbnRoID09IDExKSAmJiBkYXkgPT0gMzEpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICBpZiAobW9udGggPT0gMikgeyAvLyBjaGVjayBmb3IgZmVicnVhcnkgMjl0aA0KICAgICAgICB2YXIgaXNsZWFwID0gKHllYXIgJSA0ID09IDAgJiYgKHllYXIgJSAxMDAgIT0gMCB8fCB5ZWFyICUgNDAwID09IDApKTsNCiAgICAgICAgaWYgKGRheSA+IDI5IHx8IChkYXkgPT0gMjkgJiYgIWlzbGVhcCkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gdHJ1ZTsgIC8vIGRhdGUgaXMgdmFsaWQNCn0NCg0KZnVuY3Rpb24gaXNWYWxpZERhdGVUaW1lKGRheSwgbW9udGgsIHllYXIsIGhvdXJzLCBtaW51dGVzKSB7DQogICAgaWYgKCFpc1ZhbGlkRGF0ZShkYXksIG1vbnRoLCB5ZWFyKSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgaWYgKGhvdXJzIDwgMCB8fCBob3VycyA+IDIzKSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcmV0dXJuIHRydWU7ICAvLyBkYXRlIGlzIHZhbGlkDQp9DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQp2YXIgYWRkID0gImFkZCI7DQp2YXIgcmVtb3ZlID0gInJlbW92ZSI7DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICBJbml0VmFsaWRhdGlvbigpOw0KICAgIFJlaW5kZXhFbGVtZW50cygpOw0KICAgIEluaXRQb3BVcERpYWxvZygpOw0KICAgIEluaXRQaWNrZXJzKCk7DQogICAgSW5pdFNlY3Rpb25BY2NvcmRpb24oKTsNCiAgICBJbml0RGF0YVRhYmxlUGx1Z0luKCk7DQogICAgSW5pdENvbmRpdGlvbmFsUnVsZXMoKTsNCiAgICBJbml0UmFkaW8oKTsNCiAgICBJbml0QnV0dG9ucygpOw0KICAgIExvY2FsaXplRXJyb3JNZXNzYWdlcygpOw0KICAgIENsZWFuUmVwZXRpdGlvbkJ1dHRvbnMoKTsNCiAgICBJbml0UmVwZXRpdGlvblNlY3Rpb25zKCQodGhpcykpOw0KICAgIEluaXREZWJ1Z0NvZGUoKTsNCiAgICBSZXNpemVUZXh0YXJlYUZpZWxkKCk7DQogICAgTGF5b3V0VGVtcFJlcGV0aXRvblNlY3Rpb24oKTsNCiAgICBJbml0SGVscCgpOw0KICAgIEluaXRNdWx0aUNvbWJvYm94KCk7DQogICAgSW5pdFJlbW90ZUNvbWJvYm94KCk7DQogICAgLy8gSW5pdCBwYWdlYWJsZSBzZWN0aW9uDQogICAgSW5pdFBhZ2VhYmxlU2VjdGlvbigpOw0KICAgIEluaXRDbG9zZUJ0bnMoKTsNCiAgICBJbml0SGllcmFyY2hpY2FsbHlUcmVlKCk7DQogICAgZXhwYW5kTGF5b3V0Um93c0FuZEZvY3VzKCk7DQp9KTsNCg0KJCh3aW5kb3cpLmxvYWQoZnVuY3Rpb24gKCkgew0KICAgIEluaXRUYWJJbmRleGVzKCk7DQp9KTsNCg0KZnVuY3Rpb24gSW5pdENsb3NlQnRucyhjb250ZXh0KSB7DQoJaWYgKGNvbnRleHQgPT0gbnVsbCkgY29udGV4dCA9ICQoIjpyb290Iik7DQogICAgY29udGV4dC5maW5kKCJbaWRePSdyZW1vdmVTZWN0aW9ubGF5b3V0Um93J10iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHJlbW92ZUJ0biA9ICQodGhpcyk7DQogICAgICAgIHZhciBsYXlvdXRSb3cgPSByZW1vdmVCdG4ucGFyZW50KCkucGFyZW50KCk7DQoJCWlmICghbGF5b3V0Um93Lmhhc0NsYXNzKCJub0Nsb3NlQnV0dG9uIikpIHsNCgkJCXZhciBvbkNsaWNrRm4gPSByZW1vdmVCdG4uYXR0cigib25jbGljayIpOw0KCQkJdmFyIGhlYWRlckNsYXNzID0gIndpdGhIZWFkZXIiOw0KCQkJdmFyIHN0eWxlU3RyID0gImRpc3BsYXk6IG5vbmU7IjsNCgkJCXZhciBsYXlvdXRSb3dJZCA9IGxheW91dFJvdy5hdHRyKCJpZCIpLnNwbGl0KCdfJyk7DQoNCgkJCWlmIChsYXlvdXRSb3cuY2hpbGRyZW4oImRpdltjbGFzc149Y2FwdGlvbl0iKVswXSA9PSBudWxsIHx8IGxheW91dFJvdy5jaGlsZHJlbigiZGl2W2NsYXNzXj1jYXB0aW9uXSIpLmNoaWxkcmVuKCJbY2xhc3NePWhlYWRlcmNvcnJlY3Rpb25dIilbMF0gPT0gbnVsbCkgew0KCQkJICAgIGhlYWRlckNsYXNzID0gIm5vSGVhZGVyIjsNCgkJCX0NCg0KDQoNCgkJCWlmIChsYXlvdXRSb3cucGFyZW50KCkuY2hpbGRyZW4oIltpZF49IiArIGxheW91dFJvd0lkWzBdICsgIl0iKS5sZW5ndGggPiAxKQ0KCQkJCXN0eWxlU3RyID0gImRpc3BsYXk6IGJsb2NrOyI7DQoNCgkJCS8vw7pwcmF2YSBrZcSPIGplIMWhaXLFocOtIGNvbHVtbiBha28gcsOhbSBzZWtjaWUgICAgDQoJCQl2YXIgY29sdW1uID0gbGF5b3V0Um93LnBhcmVudCgpLnBhcmVudCgpOw0KCQkJaWYgKGNvbHVtblswXS5vZmZzZXRXaWR0aCA+IGNvbHVtbi5wYXJlbnQoKVswXS5vZmZzZXRXaWR0aCkgew0KCQkJCXN0eWxlU3RyID0gc3R5bGVTdHIgKyAiIG1hcmdpbi1sZWZ0OiIgKyAoY29sdW1uLnBhcmVudCgpWzBdLm9mZnNldFdpZHRoIC0gMTUpLnRvU3RyaW5nKCkgKyAicHg7IjsNCgkJCQlpZiAoaGVhZGVyQ2xhc3MgIT0gIndpdGhIZWFkZXIiKQ0KCQkJCQloZWFkZXJDbGFzcyA9ICIiOw0KCQkJfQ0KDQoJCQl2YXIgY2xvc2VCdG5DbGFzcyA9ICJjbG9zZUJ1dHRvbiB1aS1pY29uIHVpLWljb24tY2xvc2V0aGljayAiICsgaGVhZGVyQ2xhc3M7DQoJCQl2YXIgc3BhblN0ciA9ICc8c3BhbiBjbGFzcz0iJyArIGNsb3NlQnRuQ2xhc3MgKyAnIiBvbmNsaWNrPSInICsgb25DbGlja0ZuICsgJyIgc3R5bGU9IicgKyBzdHlsZVN0ciArICciPjwvc3Bhbj4nOw0KDQoJCQlsYXlvdXRSb3cuY2hpbGRyZW4oIjpmaXJzdCIpLmJlZm9yZShzcGFuU3RyKTsNCgkJfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0SGllcmFyY2hpY2FsbHlUcmVlKCkgew0KICAgICQoImZvcm0iKS5Jbml0SGllcmFyY2hpY2FsbHlUcmVlKCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRQYWdlYWJsZVNlY3Rpb24oKSB7DQogICAgLy8gSW5pdCBhbGwgcGFnZWFibGUgc2VjdGlvbg0KICAgICQoJy5zZWN0aW9uLnBhZ2VhYmxlU2VjdGlvbicsICdmb3JtJykucGFnZWFibGVTZWN0aW9uKHsNCiAgICAgICAgdmFsaWRhdG9yOiB3aW5kb3cudmFsaWRhdG9yT2JqZWN0DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIEluaXRNdWx0aUNvbWJvYm94KCkgew0KICAgICQoImZvcm0iKS5Jbml0TXVsdGlDb21ib2JveCgpOw0KfQ0KDQpmdW5jdGlvbiBEZWxldGVNdWx0aUNvbWJvYm94KCkgew0KICAgICQoImZvcm0iKS5EZWxldGVNdWx0aUNvbWJvYm94KCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRSZW1vdGVDb21ib2JveCgpIHsNCiAgICAkKCJmb3JtIikuSW5pdFJlbW90ZUNvbWJvYm94KCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRIZWxwKCkgew0KICAgICQoImZvcm0iKS5Jbml0SGVscCgpOw0KfQ0KDQpmdW5jdGlvbiBJbml0UmVwZXRpdGlvblNlY3Rpb25zKGNvbnRleHQpIHsNCiAgICB2YXIgc2VsZWN0b3IgPSAnZGl2W2lkXj1sYXlvdXRSb3ddJzsNCiAgICB2YXIgcmVtb3ZlQnRucyA9IGNvbnRleHQuZmluZCgnc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKTsNCiAgICByZW1vdmVCdG5zLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbGF5b3V0Um93ID0gJCh0aGlzKS5jbG9zZXN0KHNlbGVjdG9yKTsNCiAgICAgICAgJChsYXlvdXRSb3cpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGhhc1ZhbCA9IGZhbHNlOw0KICAgICAgICAgICAgJCh0aGlzKS5maW5kKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKVswXTsNCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9ICdyYWRpbycgJiYgZWxlbWVudC52YWx1ZSAhPSAnJyAmJiBlbGVtZW50LnR5cGUgIT0gJ2J1dHRvbicpDQogICAgICAgICAgICAgICAgICAgIGhhc1ZhbCA9IHRydWU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGlmICghaGFzVmFsKQ0KICAgICAgICAgICAgICAgIHJlbW92ZVNlY3Rpb25Jbml0KHRoaXMpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIEluY3JlbWVudERlY3JlbWVudElubmVyUmVwZWF0aW5nSWRzKGNvbnRleHQpOw0KfQ0KDQpmdW5jdGlvbiByZW1vdmVTZWN0aW9uSW5pdChzZW5kZXIpIHsNCiAgICB2YXIgbGF5b3V0Um93ID0gJChzZW5kZXIpOw0KICAgIHZhciBsYXlvdXRSb3dQcmV2aW91cyA9ICQobGF5b3V0Um93WzBdLmlkKS5wcmV2KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICB2YXIgaWQgPSBzZW5kZXIuaWQ7DQogICAgaWYgKGlkLmluZGV4T2YocmVwZWF0aW5nUG9zdGZpeCkgPT0gLTEpIHsNCiAgICAgICAgdmFyIHJlbW92ZUJ1dHRvbiA9IGxheW91dFJvdy5maW5kKCcjcmVtb3ZlU2VjdGlvbicgKyBpZCk7DQogICAgICAgIHZhciBzdHJpbmcgPSByZW1vdmVCdXR0b24uYXR0cignb25jbGljaycpLnRvU3RyaW5nKCk7DQogICAgICAgIHZhciBtaW5SZXBldGl0aW9uID0gc3RyaW5nLnN1YnN0cmluZyhzdHJpbmcubGFzdEluZGV4T2YoIigiKSArIDEsIHN0cmluZy5sYXN0SW5kZXhPZigiLCB0aGlzIikpOw0KICAgICAgICB2YXIgc2VjdGlvbnNDb3VudCA9IGNvdW50U2VjdGlvbihyZW1vdmVCdXR0b24sICdyZW1vdmVTZWN0aW9uJyk7DQoNCiAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gbWluUmVwZXRpdGlvbikNCiAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICB2YXIgY2hpbGRyZW4gPSBsYXlvdXRSb3dQcmV2aW91cy5jaGlsZHJlbignZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJyk7DQogICAgICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24gJiYgc2VjdGlvbnNDb3VudCA+IDEpDQogICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQoNCiAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gMSkgew0KICAgICAgICAgICAgbGF5b3V0Um93LmF0dHIoImlzRW1wdHkiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePWxheW91dFJvd0NvbnRlbnRdJykuaGlkZSgpLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgICAgICBsYXlvdXRSb3cuUmVpbml0aWFsaXplQ29uZGl0aW9uYWxSdWxlcygpOw0KDQogICAgICAgICAgICB2YXIgcmVwZXRpdGlvbkNvbW1hbmRzID0gbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKTsNCiAgICAgICAgICAgIHJlcGV0aXRpb25Db21tYW5kcy5jaGlsZHJlbignc3BhbltpZF49YWRkU2VjdGlvbl0nKS5zaG93KCk7DQogICAgICAgICAgICBsYXlvdXRSb3cuY2xpY2soKTsNCiAgICAgICAgICAgIHJldHVybiByZXBldGl0aW9uQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePXJlbW92ZVNlY3Rpb25dJykuaGlkZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgY2hpbGRyZW4uc2hvdygpOw0KICAgICAgICBsYXlvdXRSb3cucmVtb3ZlKCk7DQogICAgICAgIGxheW91dFJvd1ByZXZpb3VzLlJlaW5pdGlhbGl6ZUNvbmRpdGlvbmFsUnVsZXMoKTsNCg0KICAgICAgICBpZiAoKHNlY3Rpb25zQ291bnQgLSAxKSA9PSBtaW5SZXBldGl0aW9uKSB7DQogICAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGNvbXBhcmVCeVRhYkluZGV4KGEsIGIpIHsNCiAgICB2YXIgYVRhYkluZGV4ID0gaXNOYU4oJChhKS5hdHRyKCd0YWJpbmRleCcpKSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IE51bWJlcigkKGEpLmF0dHIoJ3RhYmluZGV4JykpOw0KICAgIHZhciBiVGFiSW5kZXggPSBpc05hTigkKGIpLmF0dHIoJ3RhYmluZGV4JykpID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyKCQoYikuYXR0cigndGFiaW5kZXgnKSk7DQoNCiAgICBpZiAoYVRhYkluZGV4IDwgYlRhYkluZGV4KQ0KICAgICAgICByZXR1cm4gLTE7DQogICAgaWYgKGFUYWJJbmRleCA+IGJUYWJJbmRleCkNCiAgICAgICAgcmV0dXJuIDE7DQogICAgcmV0dXJuIDA7DQp9DQoNCmZ1bmN0aW9uIFVwQWxsVGFiSW5kZXgodXApIHsNCiAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QiKTsNCiAgICB2YXIganVtcCA9IDA7DQoNCiAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgZm9jdXNhYmxlcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgaWYgKCQodGhpcykuYXR0cigndGFiaW5kZXgnKSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHZhciBuZXdUYWJJbmRleCA9IE51bWJlcigkKHRoaXMpLmF0dHIoJ3RhYmluZGV4JykpICsganVtcDsNCiAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBuZXdUYWJJbmRleCk7DQogICAgICAgICAgICBqdW1wICs9IHVwOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIFNocmluZ1RhYkluZGV4UmFuZ2UoKSB7DQogICAgdmFyIGZvY3VzYWJsZXMgPSAkKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKTsNCiAgICB2YXIganVtcCA9IDA7DQoNCiAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2N1c2FibGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICQoZm9jdXNhYmxlc1tpXSkuYXR0cigndGFiSW5kZXgnLCBpICsgMSk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBJbml0VGFiSW5kZXhlcygpIHsNCiAgICBpZiAoJCgnLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uJykubGVuZ3RoICE9ICQoJ3NwYW5bdGFiaW5kZXhdJykubGVuZ3RoKSB7DQogICAgICAgIHZhciBwcmV2aW91c1RhYkluZGV4ID0gMDsNCiAgICAgICAgdmFyIGp1bXAgPSAwOw0KICAgICAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QiKTsNCiAgICAgICAgdmFyIGFsbEZvY3VzYWJsZXMgPSAkKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKTsNCg0KICAgICAgICAvLyBQb21vY25hIHVwcmF2YSB0YWJJbmRleG92DQogICAgICAgIFVwQWxsVGFiSW5kZXgoMTAwKTsNCg0KICAgICAgICBmb2N1c2FibGVzLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgICAgIGZvY3VzYWJsZXMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpICE9IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdyZW1vdGVMb29rdXAnKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VGFiSW5kZXggPSBOdW1iZXIoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpKSArIGp1bXA7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBuZXdUYWJJbmRleCk7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuc2libGluZ3MoJy5sb29rdXBidXR0b24nKS5hdHRyKCd0YWJpbmRleCcsIG5ld1RhYkluZGV4ICsgMSk7DQogICAgICAgICAgICAgICAgICAgIGp1bXArKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBOdW1iZXIoJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcpKSArIGp1bXApOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAganVtcCA9IDA7DQoNCiAgICAgICAgYWxsRm9jdXNhYmxlcy5lYWNoKGZ1bmN0aW9uIChpKSB7DQogICAgICAgICAgICB2YXIgdGFiSW5kZXggPSAkKHRoaXMpLmF0dHIoJ3RhYmluZGV4Jyk7DQogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdpZCcpID09ICd0aXR1bEl0ZW1OYW1lJykNCiAgICAgICAgICAgICAgICB2YXIgcG9tOw0KDQogICAgICAgICAgICBpZiAodGFiSW5kZXggPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgcHJldmlvdXNUYWJJbmRleCsrOw0KICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigndGFiaW5kZXgnLCBwcmV2aW91c1RhYkluZGV4KTsNCiAgICAgICAgICAgICAgICBqdW1wKys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBwcmV2aW91c1RhYkluZGV4ID0gTnVtYmVyKHRhYkluZGV4KSArIGp1bXA7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCd0YWJpbmRleCcsIHByZXZpb3VzVGFiSW5kZXgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvLyBQb21vY25hIHVwcmF2YSB0YWJJbmRleG92DQogICAgICAgIFNocmluZ1RhYkluZGV4UmFuZ2UoKTsNCiAgICB9DQoNCiAgICAkKCcuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAudWktZGlhbG9nLWNvbnRlbnQsIC5jbG9zZUJ1dHRvbicpLmxpdmUoJ2tleWRvd24nLCBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICBpZiAoZGF0YS53aGljaCA9PSAxMyB8fCBkYXRhLndoaWNoID09IDMyKSB7DQogICAgICAgICAgICB2YXIgZm9jdXNhYmxlcyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpOw0KICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmluZGV4KHRoaXMpOw0KICAgICAgICAgICAgdmFyIG5leHQ7DQoNCiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdpbmZvSWNvbicpKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzKS5kZWxheSgxMDApLnF1ZXVlKGZ1bmN0aW9uIChuZXh0KSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykubW91c2VvdmVyKCkubW91c2Vkb3duKCk7DQogICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZUJ1dHRvbiA9ICQoJy51aS1kaWFsb2ctdGl0bGViYXItY2xvc2U6dmlzaWJsZScpOw0KICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbi5mb2N1c2luKCk7DQogICAgICAgICAgICAgICAgICAgIG5leHQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHZhciBjb250ZW50TGF5b3RSb3cgPSAkKHRoaXMpLmNsb3Nlc3QoJ1tpZF49bGF5b3V0Um93XScpLmZpbmQoJ1tpZF49bGF5b3V0Um93Q29udGVudGxheW91dFJvd10nKTsNCiAgICAgICAgICAgICAgICB2YXIgaXNGaXJzdEhpZGRlblNlY3Rpb24gPSB0aGlzLmlkLmluZGV4T2YoJ2FkZFNlY3Rpb25sYXlvdXRSb3cnKSAhPSAtMSAmJiAhY29udGVudExheW90Um93LmlzKCc6dmlzaWJsZScpOw0KICAgICAgICAgICAgICAgIHRoaXMuY2xpY2soKTsNCg0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmlkLmluZGV4T2YoJ2FkZFNlY3Rpb25sYXlvdXRSb3cnKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGVzID0gJCgiaW5wdXRbSURdLCBzZWxlY3QsIHRleHRhcmVhLCBhLCBhcmVhLCBidXR0b24sIG9iamVjdCwgLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uIik7DQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmb2N1c2FibGVzLmluZGV4KHRoaXMpOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0SGlkZGVuU2VjdGlvbikNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgLT0gY29udGVudExheW90Um93LmZpbmQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpLmxlbmd0aDsNCg0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCA8IGZvY3VzYWJsZXMubGVuZ3RoICYmIGZvY3VzYWJsZXMuZXEoY3VycmVudCArIDEpLmxlbmd0aCAmJiAoIWZvY3VzYWJsZXMuZXEoY3VycmVudCkuaXMoJzp2aXNpYmxlJykgfHwgZm9jdXNhYmxlcy5lcShjdXJyZW50KS5pcygnc3BhbicpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCsrOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGZvY3VzYWJsZXMuZXEoY3VycmVudCkubGVuZ3RoID8gZm9jdXNhYmxlcy5lcShjdXJyZW50KSA6IGZvY3VzYWJsZXMuZXEoMCk7DQogICAgICAgICAgICAgICAgICAgIG5leHQuZm9jdXMoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pZC5pbmRleE9mKCdyZW1vdmVTZWN0aW9ubGF5b3V0Um93JykgIT0gLTEgfHwgJCh0aGlzKS5oYXNDbGFzcygnY2xvc2VCdXR0b24nKSkgew0KICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCA+IDAgJiYgZm9jdXNhYmxlcy5lcShjdXJyZW50IC0gMSkubGVuZ3RoICYmICghZm9jdXNhYmxlcy5lcShjdXJyZW50KS5pcygnOnZpc2libGUnKSB8fCBmb2N1c2FibGVzLmVxKGN1cnJlbnQpLmlzKCdzcGFuJykpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LS07DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZm9jdXNhYmxlcy5lcShjdXJyZW50KS5sZW5ndGggPyBmb2N1c2FibGVzLmVxKGN1cnJlbnQpIDogZm9jdXNhYmxlcy5lcSgwKTsNCiAgICAgICAgICAgICAgICAgICAgbmV4dC5mb2N1cygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0UGlja2VycygpIHsNCiAgICBSZWFkT25seVBpY2tlcnMoKTsNCiAgICBJbml0RGF0ZVBpY2tlclZhbHVlcygpOw0KICAgIEluaXREYXRlUGlja2VyRGF0ZUZvcm1hdCgpOw0KICAgIEluaXREYXRlVGltZVBpY2tlcigpOw0KICAgIEluaXRUaW1lUGlja2VyVmFsdWVzKCk7DQogICAgSW5pdERhdGVSYW5nZVBpY2tlcigpOw0KfQ0KDQpmdW5jdGlvbiBSZWluZGV4RWxlbWVudHMoKSB7DQogICAgdmFyIHJlcGV0aXRpb25TZWN0aW9ucyA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gIklEIjsNCiAgICAkKCJkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvd10iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICQodGhpcyk7DQogICAgICAgIHZhciB2YWx1ZSA9IGxheW91dFJvdy5hdHRyKGF0dHJpYnV0ZU5hbWUpOw0KICAgICAgICB2YXIgaW5kZXhPZiA9IHZhbHVlLmluZGV4T2YocmVwZWF0aW5nUG9zdGZpeCk7DQogICAgICAgIGlmIChpbmRleE9mICE9IC0xKSB7DQogICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBpbmRleE9mKTsNCiAgICAgICAgICAgIGxheW91dFJvdy5hdHRyKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJC5pbkFycmF5KHZhbHVlLCByZXBldGl0aW9uU2VjdGlvbnMpID09IC0xKSB7DQogICAgICAgICAgICByZXBldGl0aW9uU2VjdGlvbnMucHVzaCh2YWx1ZSk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZXRpdGlvblNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBzZWN0aW9ucyA9ICQoImRpdltpZF49IiArIHJlcGV0aXRpb25TZWN0aW9uc1tpXS5yZXBsYWNlKCdyZXBldGl0aW9uQ29tbWFuZHMnLCAnJykgKyAiXSIpOw0KICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID4gMSkgew0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBzZWN0aW9ucy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgICAgIHZhciBsYXlvdXRSb3cgPSBzZWN0aW9ucy5lcShqKTsNCiAgICAgICAgICAgICAgICBsYXlvdXRSb3cuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gUmVzaXplVGV4dGFyZWFGaWVsZCgpIHsgIC8vIHJlYWRPbmx5IG1vZGUNCiAgICAkKCJ0ZXh0YXJlYVtkaXNhYmxlZF0iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHRleHRBcmVhID0gJCh0aGlzKTsNCiAgICAgICAgdGV4dEFyZWEuYXR0cigncm93cycsIChNYXRoLnJvdW5kKHRleHRBcmVhWzBdLnNjcm9sbEhlaWdodCAvIDE1KSkpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBDbGVhblJlcGV0aXRpb25CdXR0b25zKCkgew0KICAgICQoJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzbGF5b3V0Um93XScpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgcmVwZXRpdGlvblNlY3Rpb24gPSAkKHRoaXMpOw0KICAgICAgICBpZiAocmVwZXRpdGlvblNlY3Rpb25bMF0ubGFzdENoaWxkICE9IG51bGwpIHsNCiAgICAgICAgICAgIHZhciBwYXJlbnRSZXBldGl0aW9uU2VjdGlvbiA9IHJlcGV0aXRpb25TZWN0aW9uLnBhcmVudCgpOw0KICAgICAgICAgICAgdmFyIGlkID0gZ2V0T3JpZ2luYWxJZChwYXJlbnRSZXBldGl0aW9uU2VjdGlvblswXS5pZCwgJ18nKTsNCiAgICAgICAgICAgIHZhciBhZGRCdXR0b24gPSByZXBldGl0aW9uU2VjdGlvbi5maW5kKCdbaWQ9YWRkU2VjdGlvbicgKyBpZCArICddJyk7DQogICAgICAgICAgICBpZiAoYWRkQnV0dG9uLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlQnV0dG9uID0gcmVwZXRpdGlvblNlY3Rpb24uZmluZCgnW2lkPXJlbW92ZVNlY3Rpb24nICsgaWQgKyAnXScpOw0KICAgICAgICAgICAgICAgIHZhciBzdHJpbmcgPSBhZGRCdXR0b24uYXR0cignb25jbGljaycpLnRvU3RyaW5nKCk7DQogICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gc3RyaW5nLnN1YnN0cmluZyhzdHJpbmcubGFzdEluZGV4T2YoIigiKSArIDEsIHN0cmluZy5sYXN0SW5kZXhPZigiLCB0aGlzIikpLnNwbGl0KCcsJyk7DQogICAgICAgICAgICAgICAgdmFyIG1pblJlcGV0aXRpb24gPSBhcnJheVswXTsNCiAgICAgICAgICAgICAgICB2YXIgbWF4UmVwZXRpdGlvbiA9IGFycmF5WzFdOw0KDQogICAgICAgICAgICAgICAgaWYgKG1pblJlcGV0aXRpb24gPT0gMCAmJiBtYXhSZXBldGl0aW9uID09IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1ZhbCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICBwYXJlbnRSZXBldGl0aW9uU2VjdGlvbi5maW5kKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiBlbGVtZW50WzBdLnR5cGUgIT0gJ3JhZGlvJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNWYWwgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVmFsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25zQ291bnQgPSBjb3VudFNlY3Rpb24oYWRkQnV0dG9uLCAnYWRkU2VjdGlvbicpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSBtYXhSZXBldGl0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uc0NvdW50ID09IG1pblJlcGV0aXRpb24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbi5zaG93KCk7DQogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVCdXR0b24uaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb25zQ291bnQgPiAwICYmIG1pblJlcGV0aXRpb24gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBMYXlvdXRUZW1wUmVwZXRpdG9uU2VjdGlvbigpIHsNCiAgICAkKCdkaXZbYWRqdXN0cG9zaXRpb25ePXRydWVdJykuZWFjaChMYXlvdXQpOw0KfQ0KDQpmdW5jdGlvbiBJbml0RGVidWdDb2RlKCkgew0KICAgIHZhciBpZ25vcmVDbGllbnRFcnJvcnMgPSAkLkdldFVybFBhcmFtKCJpZ25vcmVDbGllbnRFcnJvcnMiKTsNCiAgICBpZiAoaWdub3JlQ2xpZW50RXJyb3JzICE9IDApDQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zZXR0aW5ncy5pZ25vcmVDbGllbnRFcnJvcnMgPSB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBJbml0RXhpc3RpbmdGb3JtKCkgew0KICAgICQoImZvcm0gOnJhZGlvOmNoZWNrZWQiKS5jbGljaygpOw0KfQ0KDQpmdW5jdGlvbiBSZWFkT25seVBpY2tlcnMoKSB7DQogICAgJCgiLmRhdGVwaWNrZXJbcmVhZG9ubHk9J3JlYWRvbmx5J10sLmRhdGVwaWNrZXJJU09bcmVhZG9ubHk9J3JlYWRvbmx5J10iKS5kYXRlcGlja2VyKHsgbWluRGF0ZTogLTEsIG1heERhdGU6IC0yIH0pOw0KICAgICQoIi50aW1lcGlja2VyW3JlYWRvbmx5PSdyZWFkb25seSddIikudGltZXBpY2tlcih7IGhvdXJNaW46IDAsIGhvdXJNYXg6IDAsIG1pbnV0ZU1pbjogMCwgbWludXRlTWF4OiAwIH0pOw0KICAgICQoIi5kYXRldGltZXBpY2tlcltyZWFkb25seT0ncmVhZG9ubHknXSIpLmRhdGV0aW1lcGlja2VyKHsgbWluRGF0ZTogLTEsIG1heERhdGU6IC0yLCBob3VyTWluOiAwLCBob3VyTWF4OiAwLCBtaW51dGVNaW46IDAsIG1pbnV0ZU1heDogMCB9KTsNCn0NCg0KZnVuY3Rpb24gSW5pdERhdGVQaWNrZXJWYWx1ZXMoKSB7DQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICQuZGF0ZXBpY2tlci5yZWdpb25hbFsnc2snXSA9IHsNCiAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdaYXZyaWXFpScsDQogICAgICAgICAgICAgICAgcHJldlRleHQ6ICcmI3gzYztQcmVkY2jDoWR6YWrDumNpJywNCiAgICAgICAgICAgICAgICBuZXh0VGV4dDogJ05hc2xlZHVqw7pjaSYjeDNlOycsDQogICAgICAgICAgICAgICAgY3VycmVudFRleHQ6ICdEbmVzJywNCiAgICAgICAgICAgICAgICBtb250aE5hbWVzOiBbJ0phbnXDoXInLCAnRmVicnXDoXInLCAnTWFyZWMnLCAnQXByw61sJywgJ03DoWonLCAnSsO6bicsDQogICAgICAgICAgICAgICAgJ0rDumwnLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPa3TDs2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLA0KICAgICAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTcOhaicsICdKw7puJywNCiAgICAgICAgICAgICAgICAnSsO6bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVjJ10sDQogICAgICAgICAgICAgICAgZGF5TmFtZXM6IFsnTmVkZcS+YScsICdQb25kZWxvaycsICdVdG9yb2snLCAnU3RyZWRhJywgJ8WgdHZydG9rJywgJ1BpYXRvaycsICdTb2JvdGEnXSwNCiAgICAgICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ05lZCcsICdQb24nLCAnVXRvJywgJ1N0cicsICfFoHR2JywgJ1BpYScsICdTb2InXSwNCiAgICAgICAgICAgICAgICBkYXlOYW1lc01pbjogWydOZScsICdQbycsICdVdCcsICdTdCcsICfFoHQnLCAnUGlhJywgJ1NvJ10sDQogICAgICAgICAgICAgICAgd2Vla0hlYWRlcjogJ1R5JywNCiAgICAgICAgICAgICAgICAvL2RhdGVGb3JtYXQ6ICdkZC5tbS55eScsDQogICAgICAgICAgICAgICAgZmlyc3REYXk6IDEsDQogICAgICAgICAgICAgICAgaXNSVEw6IGZhbHNlLA0KICAgICAgICAgICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsDQogICAgICAgICAgICAgICAgeWVhclN1ZmZpeDogJycNCiAgICAgICAgICAgIH07DQogICAgfQ0KDQogICAgJC5kYXRlcGlja2VyLnNldERlZmF1bHRzKCQuZGF0ZXBpY2tlci5yZWdpb25hbFsnc2snXSk7DQp9DQoNCmZ1bmN0aW9uIEluaXRUaW1lUGlja2VyVmFsdWVzKCkgew0KICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgY2FzZSAnZW4nOiAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICAkKCIudGltZXBpY2tlciIpLnRpbWVwaWNrZXIoew0KICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICQoIi50aW1lcGlja2VyIikudGltZXBpY2tlcih7DQogICAgICAgICAgICAgICAgdGltZU9ubHlUaXRsZTogJ1Z5YmVyIMSNYXMnLA0KICAgICAgICAgICAgICAgIHRpbWVUZXh0OiAnxIxhcycsDQogICAgICAgICAgICAgICAgaG91clRleHQ6ICdIb2RpbmEnLA0KICAgICAgICAgICAgICAgIG1pbnV0ZVRleHQ6ICfQnGluw7p0YScsDQogICAgICAgICAgICAgICAgc2Vjb25kVGV4dDogJ1Nla3VuZGEnLA0KICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0OiAnQWt0dcOhbG55JywNCiAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdWeWJyYcWlJywNCiAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1c291dCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH07DQoNCiAgICAkKCcudGltZXBpY2tlcicpLmxpdmUoJ2tleXByZXNzJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgdmFyIG5ld1ZhbCA9ICQodGhpcykudmFsKCkgKyAoZS53aGljaCAhPT0gMCA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCkgOiAnJykNCiAgICAgICAgdmFyIGNoYXJQYXR0ZXJuID0gL15bMC05XT8kfF5cOj8kLzsNCg0KICAgICAgICBpZiAoZS53aGljaCAhPSA4ICYmICFlLmN0cmxLZXkgJiYgIWNoYXJQYXR0ZXJuLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKSkgJiYgbmV3VmFsLmxlbmd0aCA+ICQodGhpcykudmFsKCkubGVuZ3RoKQ0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgIH0pOw0KfQ0KDQovLyBQb3RyZWJuZSBwcmUgRGF0ZVJhbmdlUGlja2VyDQokLmRhdGVwaWNrZXIuX2RlZmF1bHRzLm9uQWZ0ZXJVcGRhdGUgPSBudWxsOw0KDQp2YXIgZGF0ZXBpY2tlcl9fdXBkYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcjsNCiQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uIChpbnN0KSB7DQogICAgZGF0ZXBpY2tlcl9fdXBkYXRlRGF0ZXBpY2tlci5jYWxsKHRoaXMsIGluc3QpOw0KDQogICAgdmFyIG9uQWZ0ZXJVcGRhdGUgPSB0aGlzLl9nZXQoaW5zdCwgJ29uQWZ0ZXJVcGRhdGUnKTsNCg0KICAgIGlmIChvbkFmdGVyVXBkYXRlKQ0KICAgICAgICBvbkFmdGVyVXBkYXRlLmFwcGx5KChpbnN0LmlucHV0ID8gaW5zdC5pbnB1dFswXSA6IG51bGwpLCBbKGluc3QuaW5wdXQgPyBpbnN0LmlucHV0LnZhbCgpIDogJycpLCBpbnN0XSk7DQp9DQovLyAtLS0tDQoNCmZ1bmN0aW9uIEluaXREYXRlUmFuZ2VQaWNrZXIoKSB7DQogICAgJChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjdXIgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdmFyIHBydiA9IG5ldyBBcnJheSgpOw0KICAgICAgICB2YXIgbGlzdCA9ICQoJy5kYXRlcmFuZ2VwaWNrZXJkaXYnKTsNCiAgICAgICAgdmFyIGNvdW50ID0gbGlzdC5sZW5ndGg7DQogICAgICAgIHZhciBudW1iZXJPZk1vbnRoc1ZhbHMgPSBuZXcgQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCiAgICAgICAgICAgIHZhciBkUlBJbnB1dDsNCg0KICAgICAgICAgICAgaWYgKGxpc3RbaV0pIHsNCiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gbGlzdFtpXS5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgIGRSUElucHV0ID0gJChzZWFyY2hEaXYpLmZpbmQoImlucHV0W0lEXSIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoZFJQSW5wdXRbMF0udmFsdWUgIT0gJycpIHsNCiAgICAgICAgICAgICAgICB2YXIgdiA9IGRSUElucHV0WzBdLnZhbHVlOw0KICAgICAgICAgICAgICAgIHZhciBkOw0KDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHYuaW5kZXhPZignIC0gJykgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSB2LnNwbGl0KCcgLSAnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBydi5wdXNoKCQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFswXSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wdXNoKCQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFsxXSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgnZGQubW0ueXknLCB2KS5nZXRUaW1lKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBwcnYucHVzaCh0aW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wdXNoKHRpbWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgew0KICAgICAgICAgICAgICAgICAgICBjdXIucHVzaCgtMSk7DQogICAgICAgICAgICAgICAgICAgIHBydi5wdXNoKC0xKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBjdXIucHVzaCgtMSk7DQogICAgICAgICAgICAgICAgcHJ2LnB1c2goLTEpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBudW1iZXJPZk1vbnRoc1ZhbHMucHVzaCgxKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGFycmF5T2JqZWN0SW5kZXhPZihteUFycmF5LCBzZWFyY2hPYmplY3QpIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXlBcnJheS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGlmIChteUFycmF5W2ldID09PSBzZWFyY2hPYmplY3QpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9DQoNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOiAvLyBFbiBpcyBkZWZhdWx0DQogICAgICAgICAgICAgICAgJCgnLmRhdGVyYW5nZXBpY2tlcmRpdicpDQogICAgICAgICAgICAgICAgICAuZGF0ZXBpY2tlcih7DQogICAgICAgICAgICAgICAgICAgICAgd2Vla0hlYWRlcjogJ1R5JywNCiAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXknLA0KICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5OiAxLA0KICAgICAgICAgICAgICAgICAgICAgIGlzUlRMOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgIHllYXJTdWZmaXg6ICcnLA0KICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgeWVhclJhbmdlOiAiLTEwMDorMTAwIiwNCiAgICAgICAgICAgICAgICAgICAgICBzaG93QnV0dG9uUGFuZWw6IHRydWUsDQoNCiAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbiAoZGF0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAoKGRhdGUuZ2V0VGltZSgpID49IE1hdGgubWluKHBydltpbmRleF0sIGN1cltpbmRleF0pICYmIGRhdGUuZ2V0VGltZSgpIDw9IE1hdGgubWF4KHBydltpbmRleF0sIGN1cltpbmRleF0pKSA/ICdkYXRlLXJhbmdlLXNlbGVjdGVkJyA6ICcnKV07DQogICAgICAgICAgICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQxLCBkMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gKG5ldyBEYXRlKGluc3Quc2VsZWN0ZWRZZWFyLCBpbnN0LnNlbGVjdGVkTW9udGgsIGluc3Quc2VsZWN0ZWREYXkpKS5nZXRUaW1lKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcnZbaW5kZXhdID09IC0xIHx8IHBydltpbmRleF0gPT0gY3VyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkUlBJbnB1dCkudmFsKGRhdGVUZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ2RkLm1tLnl5JywgbmV3IERhdGUoTWF0aC5taW4ocHJ2W2luZGV4XSwgY3VyW2luZGV4XSkpLCB7fSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnZGQubW0ueXknLCBuZXcgRGF0ZShNYXRoLm1heChwcnZbaW5kZXhdLCBjdXJbaW5kZXhdKSksIHt9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRSUElucHV0KS52YWwoZDEgKyAnIC0gJyArIGQyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBpbnN0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGUgb24gbW9udGggb3IgeWVhciBjaGFuZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsqLw0KICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICBvbkFmdGVyVXBkYXRlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzRFJQRGlyID0gdGhpczsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPlNlbGVjdDwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZFJQSW5wdXQ7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0RSUERpcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gdGhpc0RSUERpci5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFJQSW5wdXRbMF0udmFsdWUgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzRFJQRGlyKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQuZm9jdXNvdXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+Q2xlYXI8L2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkUlBJbnB1dDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzRFJQRGlyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzRFJQRGlyLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0ID0gJChzZWFyY2hEaXYpLmZpbmQoImlucHV0W0lEXSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dFswXS52YWx1ZSA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gcHJ2W2luZGV4XSA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXNEUlBEaXIpLmRhdGVwaWNrZXIoInJlZnJlc2giKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgZGF0YS1ldmVudD0iY2xpY2siPj48L2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPSBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdICsgMTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdCA9ICQodGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gPCA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgWzEsIG51bWJlck9mTW9udGhzVmFsc1tpbmRleF1dKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDMsIDRdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PDwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA+IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA9IG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gLSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gJCh0aGlzRFJQRGlyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA8IDUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbMSwgbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGVwaWNrZXIoIm9wdGlvbiIsICJudW1iZXJPZk1vbnRocyIsIFtudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdIC0gMywgNF0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkUlBJbnB1dDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gdGhpc0RSUERpci5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0ID0gJChzZWFyY2hEaXYpLmZpbmQoImlucHV0W0lEXSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0Rlc2NlbmRhbnRPclVpRFAocGFyZW50LCBjaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gY2hpbGQucGFyZW50Tm9kZTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09IHBhcmVudCB8fCBub2RlLmNsYXNzTmFtZS5pbmRleE9mKCd1aS1kYXRlcGlja2VyJykgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkICE9IGRSUElucHV0WzBdLmlkICYmICFpc0Rlc2NlbmRhbnRPclVpRFAodGhpc0RSUERpciwgZS50YXJnZXQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0WzBdLnZhbHVlID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGFycmF5T2JqZWN0SW5kZXhPZihsaXN0LCB0aGlzRFJQRGlyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gcHJ2W2luZGV4XSA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0LmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB6SW5kZXg6IDEgfSk7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgfSkuaGlkZSgpOw0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgICQoJy5kYXRlcmFuZ2VwaWNrZXJkaXYnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRhdGVwaWNrZXIoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlVGV4dDogJ1phdnJpZcWlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2VGV4dDogJyYjeDNjO1ByZWRjaMOhZHphasO6Y2knLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUZXh0OiAnTmFzbGVkdWrDumNpJiN4M2U7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dDogJ0RuZXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsnSmFudcOhcicsICdGZWJydcOhcicsICdNYXJlYycsICdBcHLDrWwnLCAnTcOhaicsICdKw7puJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdKw7psJywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2t0w7NiZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ03DoWonLCAnSsO6bicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSsO6bCcsICdBdWcnLCAnU2VwJywgJ09rdCcsICdOb3YnLCAnRGVjJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5TmFtZXM6IFsnTmVkZcS+YScsICdQb25kZWxvaycsICdVdG9yb2snLCAnU3RyZWRhJywgJ8WgdHZydG9rJywgJ1BpYXRvaycsICdTb2JvdGEnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ05lZCcsICdQb24nLCAnVXRvJywgJ1N0cicsICfFoHR2JywgJ1BpYScsICdTb2InXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlOYW1lc01pbjogWydOZScsICdQbycsICdVdCcsICdTdCcsICfFoHQnLCAnUGlhJywgJ1NvJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla0hlYWRlcjogJ1R5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5OiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUlRMOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXJTdWZmaXg6ICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhclJhbmdlOiAiLTEwMDorMTAwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QnV0dG9uUGFuZWw6IHRydWUsDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbiAoZGF0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAoKGRhdGUuZ2V0VGltZSgpID49IE1hdGgubWluKHBydltpbmRleF0sIGN1cltpbmRleF0pICYmIGRhdGUuZ2V0VGltZSgpIDw9IE1hdGgubWF4KHBydltpbmRleF0sIGN1cltpbmRleF0pKSA/ICdkYXRlLXJhbmdlLXNlbGVjdGVkJyA6ICcnKV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQxLCBkMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkUlBJbnB1dCA9ICQoc2VhcmNoRGl2KS5maW5kKCJpbnB1dFtJRF0iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkUlBJbnB1dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gKG5ldyBEYXRlKGluc3Quc2VsZWN0ZWRZZWFyLCBpbnN0LnNlbGVjdGVkTW9udGgsIGluc3Quc2VsZWN0ZWREYXkpKS5nZXRUaW1lKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcnZbaW5kZXhdID09IC0xIHx8IHBydltpbmRleF0gPT0gY3VyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkUlBJbnB1dCkudmFsKGRhdGVUZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQxID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ2RkLm1tLnl5JywgbmV3IERhdGUoTWF0aC5taW4ocHJ2W2luZGV4XSwgY3VyW2luZGV4XSkpLCB7fSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnZGQubW0ueXknLCBuZXcgRGF0ZShNYXRoLm1heChwcnZbaW5kZXhdLCBjdXJbaW5kZXhdKSksIHt9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRSUElucHV0KS52YWwoZDEgKyAnIC0gJyArIGQyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBpbnN0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGUgb24gbW9udGggb3IgeWVhciBjaGFuZ2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFmdGVyVXBkYXRlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzRFJQRGlyID0gdGhpczsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPlZ5YnJhxaU8L2J1dHRvbj4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKCQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0WzBdLnZhbHVlID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGFycmF5T2JqZWN0SW5kZXhPZihsaXN0LCB0aGlzRFJQRGlyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJbaW5kZXhdID0gcHJ2W2luZGV4XSA9IC0xOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0LmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgZGF0YS1ldmVudD0iY2xpY2siPlZ5bWHFvjwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNEUlBEaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaERpdiA9IHRoaXNEUlBEaXIucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRSUElucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRSUElucHV0WzBdLnZhbHVlID0gJyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpc0RSUERpcikuZGF0ZXBpY2tlcigicmVmcmVzaCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiBkYXRhLWV2ZW50PSJjbGljayI+PjwvYnV0dG9uPicpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJCgnLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZScpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpc0RSUERpcik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA8IDYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA9IG51bWJlck9mTW9udGhzVmFsc1tpbmRleF0gKyAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0gJCh0aGlzRFJQRGlyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSA8IDUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kYXRlcGlja2VyKCJvcHRpb24iLCAibnVtYmVyT2ZNb250aHMiLCBbMSwgbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGVwaWNrZXIoIm9wdGlvbiIsICJudW1iZXJPZk1vbnRocyIsIFtudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdIC0gMywgNF0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIGRhdGEtZXZlbnQ9ImNsaWNrIj48PC9idXR0b24+JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbygkKCcudWktZGF0ZXBpY2tlci1idXR0b25wYW5lJykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGFycmF5T2JqZWN0SW5kZXhPZihsaXN0LCB0aGlzRFJQRGlyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdID4gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdID0gbnVtYmVyT2ZNb250aHNWYWxzW2luZGV4XSAtIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSAkKHRoaXNEUlBEaXIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdIDwgNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRhdGVwaWNrZXIoIm9wdGlvbiIsICJudW1iZXJPZk1vbnRocyIsIFsxLCBudW1iZXJPZk1vbnRoc1ZhbHNbaW5kZXhdXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGF0ZXBpY2tlcigib3B0aW9uIiwgIm51bWJlck9mTW9udGhzIiwgW251bWJlck9mTW9udGhzVmFsc1tpbmRleF0gLSAzLCA0XSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRSUElucHV0Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpc0RSUERpcikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hEaXYgPSB0aGlzRFJQRGlyLnBhcmVudE5vZGU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQgPSAkKHNlYXJjaERpdikuZmluZCgiaW5wdXRbSURdIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRGVzY2VuZGFudE9yVWlEUChwYXJlbnQsIGNoaWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBjaGlsZC5wYXJlbnROb2RlOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50IHx8IG5vZGUuY2xhc3NOYW1lLmluZGV4T2YoJ3VpLWRhdGVwaWNrZXInKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgIT0gZFJQSW5wdXRbMF0uaWQgJiYgIWlzRGVzY2VuZGFudE9yVWlEUCh0aGlzRFJQRGlyLCBlLnRhcmdldCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZFJQSW5wdXRbMF0udmFsdWUgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlPYmplY3RJbmRleE9mKGxpc3QsIHRoaXNEUlBEaXIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cltpbmRleF0gPSBwcnZbaW5kZXhdID0gLTE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzRFJQRGlyKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFJQSW5wdXQuZm9jdXNvdXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHpJbmRleDogMSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5oaWRlKCk7DQogICAgICAgIH0NCg0KICAgICAgICAkKCcuZGF0ZXJhbmdlcGlja2VyJykub24oJ2ZvY3VzJywgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHYgPSB0aGlzLnZhbHVlOw0KICAgICAgICAgICAgdmFyIGQ7DQogICAgICAgICAgICB2YXIgaW5kZXggPSBhcnJheU9iamVjdEluZGV4T2YobGlzdCwgdGhpcyk7DQoNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgaWYgKHYuaW5kZXhPZignIC0gJykgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgZCA9IHYuc3BsaXQoJyAtICcpOw0KDQogICAgICAgICAgICAgICAgICAgIHBydltpbmRleF0gPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlKCdkZC5tbS55eScsIGRbMF0pLmdldFRpbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9ICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJ2RkLm1tLnl5JywgZFsxXSkuZ2V0VGltZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIGlmICh2Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgcHJ2W2luZGV4XSA9IGN1cltpbmRleF0gPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlKCdkZC5tbS55eScsIHYpLmdldFRpbWUoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgY3VyW2luZGV4XSA9IHBydltpbmRleF0gPSAtMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGRSUERpdjsNCg0KICAgICAgICAgICAgaWYgKHRoaXMpIHsNCiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoRGl2ID0gdGhpcy5wYXJlbnROb2RlOw0KICAgICAgICAgICAgICAgIGRSUERpdiA9ICQoc2VhcmNoRGl2KS5maW5kKCIuZGF0ZXJhbmdlcGlja2VyZGl2Iik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChjdXJbaW5kZXhdID4gLTEpDQogICAgICAgICAgICAgICAgJChkUlBEaXYpLmRhdGVwaWNrZXIoJ3NldERhdGUnLCBuZXcgRGF0ZShjdXJbaW5kZXhdKSk7DQoNCiAgICAgICAgICAgICQoZFJQRGl2KS5kYXRlcGlja2VyKCdyZWZyZXNoJykuc2hvdygpOw0KICAgICAgICB9KTsNCiAgICB9KTsNCn0NCg0KZnVuY3Rpb24gTG9jYWxpemVFcnJvck1lc3NhZ2VzKCkgew0KICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgLy8gRW4gaXMgZGVmYXVsdA0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKGpRdWVyeS52YWxpZGF0b3IubWVzc2FnZXMsIHsNCiAgICAgICAgICAgICAgICBkYXRlOiAiWmFkYWp0ZSBwbGF0bsO9IGTDoXR1bS4iLA0KICAgICAgICAgICAgICAgIGRhdGVJU086ICJaYWRhanRlIHBsYXRuw70gZMOhdHVtIChJU08pLiINCiAgICAgICAgICAgIH0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gSW5pdERhdGVQaWNrZXJEYXRlRm9ybWF0KCkgew0KICAgICQoIi5kYXRlcGlja2VyIikuZGF0ZXBpY2tlcih7DQogICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5tbS55eScsDQogICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICQodGhpcykuZm9jdXNvdXQoKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICQoIi5kYXRlcGlja2VySVNPIikuZGF0ZXBpY2tlcih7DQogICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsDQogICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICQodGhpcykuZm9jdXNvdXQoKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBJbml0RGF0ZVRpbWVQaWNrZXIoKSB7DQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6IC8vIEVuIGlzIGRlZmF1bHQNCiAgICAgICAgICAgICQoIi5kYXRldGltZXBpY2tlciIpLmRhdGV0aW1lcGlja2VyKHsNCiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXknLA0KICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uIChkYXRlVGV4dCwgaW5zdCkgew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZvY3Vzb3V0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICQoIi5kYXRldGltZXBpY2tlciIpLmRhdGV0aW1lcGlja2VyKHsNCiAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiAnZGQubW0ueXknLA0KICAgICAgICAgICAgICAgIHRpbWVPbmx5VGl0bGU6ICdWeWJlciBkw6F0dW0nLA0KICAgICAgICAgICAgICAgIHRpbWVUZXh0OiAnxIxhcycsDQogICAgICAgICAgICAgICAgaG91clRleHQ6ICdIb2RpbmEnLA0KICAgICAgICAgICAgICAgIG1pbnV0ZVRleHQ6ICfQnGluw7p0YScsDQogICAgICAgICAgICAgICAgc2Vjb25kVGV4dDogJ1Nla3VuZGEnLA0KICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0OiAnQWt0dcOhbG55JywNCiAgICAgICAgICAgICAgICBjbG9zZVRleHQ6ICdWeWJyYcWlJywNCiAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1c291dCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gSW5pdFNlY3Rpb25BY2NvcmRpb24oKSB7DQogICAgJCgiZm9ybSIpLkluaXRTZWN0aW9uQWNjb3JkaW9uKCk7DQp9DQoNCmZ1bmN0aW9uIEluaXRSYWRpbygpIHsNCiAgICAkKCJpbnB1dFt0eXBlPSdyYWRpbyddW2NoZWNrZWRdIikuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIHJhZGlvID0gJCh0aGlzKTsNCiAgICAgICAgaWYgKHJhZGlvLmF0dHIoImRpc2FibGVkIikgIT09IHVuZGVmaW5lZCB8fCByYWRpby5hdHRyKCJyZWFkb25seSIpICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHJhZGlvLmF0dHIoImNoZWNrZWQiLCAidHJ1ZSIpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmFkaW8uY2xpY2soKTsNCiAgICB9KTsNCn0NCg0KZnVuY3Rpb24gSW5pdEJ1dHRvbnMoY29udGV4dCkgew0KCWlmIChjb250ZXh0ID09IG51bGwpIHsNCiAgICAkKCIuYnV0dG9uIikuYnV0dG9uKCk7DQogICAgJCgiI2NhbmNlbEZvcm0iKS5jbGljayhUcnlSZWRpcmVjdFRvUmV0dXJuVXJsKTsNCgl9IGVsc2Ugew0KCQljb250ZXh0LmZpbmQoIi5idXR0b24iKS5idXR0b24oKTsNCn0NCn0NCg0KZnVuY3Rpb24gSW5pdFBvcFVwRGlhbG9nKCkgew0KICAgICQoImZvcm0iKS5Jbml0UG9wVXBEaWFsb2coKTsNCn0NCg0KdmFyIG9UYWJsZTsNCg0KZnVuY3Rpb24gZm5HZXRTZWxlY3RlZChvVGFibGVMb2NhbCkgew0KICAgIHZhciBhUmV0dXJuID0gbmV3IEFycmF5KCk7DQogICAgdmFyIGFUcnMgPSBvVGFibGVMb2NhbC5mbkdldE5vZGVzKCk7DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFUcnMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgaWYgKCQoYVRyc1tpXSkuaGFzQ2xhc3MoJ3Jvd19zZWxlY3RlZCcpKSB7DQogICAgICAgICAgICBhUmV0dXJuLnB1c2goYVRyc1tpXSk7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIGFSZXR1cm47DQp9DQoNCmZ1bmN0aW9uIEluaXREYXRhVGFibGVQbHVnSW4oKSB7DQogICAgJC5mbi5kYXRhVGFibGVFeHQub0FwaS5mbkZpbHRlck9uUmV0dXJuID0gZnVuY3Rpb24gKG9TZXR0aW5ncykgew0KICAgICAgICB2YXIgdGhhdCA9IHRoaXM7DQoNCiAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uIChpKSB7DQogICAgICAgICAgICAkLmZuLmRhdGFUYWJsZUV4dC5pQXBpSW5kZXggPSBpOw0KICAgICAgICAgICAgdmFyIGFuQ29udHJvbCA9ICQoJ2lucHV0JywgdGhhdC5mblNldHRpbmdzKCkuYWFuRmVhdHVyZXMuZik7DQogICAgICAgICAgICBhbkNvbnRyb2wudW5iaW5kKCdrZXl1cCcpLmJpbmQoJ2tleXByZXNzJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSAxMykgew0KICAgICAgICAgICAgICAgICAgICAkLmZuLmRhdGFUYWJsZUV4dC5pQXBpSW5kZXggPSBpOw0KICAgICAgICAgICAgICAgICAgICB0aGF0LmZuRmlsdGVyKGFuQ29udHJvbC52YWwoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICByZXR1cm4gdGhpczsNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH07DQp9DQoNCmZ1bmN0aW9uIGluaXRSZXBldGl0aW9uU2VjdGlvbihtaW5SZXBldGl0aW9uLCBtYXhSZXBldGl0aW9uLCBzZW5kZXIpIHsNCiAgICBpZiAobWluUmVwZXRpdGlvbiA9PSAxKSB7DQogICAgICAgIHZhciByZXBldGl0aXZlQ29tbWFuZHMgPSAkKCdkaXZbaWRePScgKyBzZW5kZXIgKyAnXScpLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKTsNCiAgICAgICAgcmVwZXRpdGl2ZUNvbW1hbmRzLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCiAgICB9DQogICAgaWYgKG1pblJlcGV0aXRpb24gPiAxKSB7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWluUmVwZXRpdGlvbjsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYWRkQnV0dG9uID0gJCgnZGl2W2lkXj0nICsgc2VuZGVyICsgJ10nKS5sYXN0KCkuZmluZCgnI2FkZFNlY3Rpb24nICsgc2VuZGVyKTsNCiAgICAgICAgICAgIGFkZFNlY3Rpb24obWluUmVwZXRpdGlvbiwgbWF4UmVwZXRpdGlvbiwgYWRkQnV0dG9uKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIGlmIChtaW5SZXBldGl0aW9uID09IDAgJiYgKChwcm9qZWN0VHlwZSA9PSAiTkVWIiAmJiAkKCdkaXZbaWRePScgKyBzZW5kZXIgKyAnXScpLmF0dHIoImlzZW1wdHkiKSAhPSAiZmFsc2UiKSB8fCBwcm9qZWN0VHlwZSAhPSAiTkVWIikpIHsNCiAgICAgICAgdmFyIHJlbW92ZUJ1dHRvbiA9ICQoJ2RpdltpZF49JyArIHNlbmRlciArICddJykubGFzdCgpLmZpbmQoJyNyZW1vdmVTZWN0aW9uJyArIHNlbmRlcik7DQogICAgICAgIHJlbW92ZVNlY3Rpb24obWluUmVwZXRpdGlvbiwgcmVtb3ZlQnV0dG9uKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHBhcnNlSWQoc2VuZGVyLCByZXBsYWNlVGV4dCkgew0KICAgIHZhciBpZCA9IHNlbmRlci5pZDsNCiAgICBpZiAoaWQgPT0gbnVsbCkgew0KICAgICAgICBpZCA9IHNlbmRlclswXS5pZDsNCiAgICB9DQogICAgcmV0dXJuIGlkLnJlcGxhY2UocmVwbGFjZVRleHQsICcnKTsNCn0NCg0KZnVuY3Rpb24gY291bnRTZWN0aW9uKHNlbmRlciwgcmVwbGFjZVRleHQpIHsNCiAgICBpZiAoJChzZW5kZXIpLmhhc0NsYXNzKCJjbG9zZUJ1dHRvbiIpID09IHRydWUpIHsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICQoc2VuZGVyKS5jbG9zZXN0KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICAgICAgdmFyIGxheW91dFJvd0lkID0gbGF5b3V0Um93LmF0dHIoIklEIikuc3BsaXQoJ18nKVswXTsNCiAgICAgICAgcmV0dXJuIGxheW91dFJvdy5wYXJlbnQoKS5jaGlsZHJlbigpLmZpbHRlcignZGl2W2lkXj0nICsgbGF5b3V0Um93SWQgKyAnXScpLmxlbmd0aDsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gJChzZW5kZXIpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmNoaWxkcmVuKCkuZmlsdGVyKCdkaXZbaWRePScgKyBwYXJzZUlkKHNlbmRlciwgcmVwbGFjZVRleHQpICsgJ10nKS5sZW5ndGg7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBSZW1vdmVEYXRlUmFuZ2VQaWNrZXIoKSB7DQogICAgdmFyIGRSUGlja2VyRGl2cyA9ICQoZG9jdW1lbnQpLmZpbmQoIi5kYXRlcmFuZ2VwaWNrZXJkaXYiKTsNCiAgICB2YXIgY291bnQgPSBkUlBpY2tlckRpdnMubGVuZ3RoOw0KICAgIC8vIE9kc3RyYW5lbmllIHZzZXRreWNoIHBvdG9ta292IHZzZXRreW0gZGF0ZXJhbmdlcGlja2VyZGl2b20NCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCiAgICAgICAgaWYgKGRSUGlja2VyRGl2c1tpXSkgew0KICAgICAgICAgICAgd2hpbGUgKGRSUGlja2VyRGl2c1tpXS5maXJzdENoaWxkICYmIGRSUGlja2VyRGl2c1tpXS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgZFJQaWNrZXJEaXZzW2ldLnJlbW92ZUNoaWxkKGRSUGlja2VyRGl2c1tpXS5maXJzdENoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICAvLyBTYW1vdG5lIG9kc3RyYW5lbmllIGNsYXNzeQ0KICAgIGRSUGlja2VyRGl2cy5yZW1vdmVDbGFzcygiaGFzRGF0ZXBpY2tlciIpOw0KfQ0KDQpmdW5jdGlvbiBSZWluaXRUYWJJbmRleEluY3JlbWVudChsYXlvdXRSb3cpIHsNCiAgICB2YXIgYWxsTGF5b3V0Um93RWxlbWVudHMgPSAkKGxheW91dFJvdykuZmluZCgiaW5wdXRbSURdLCBzZWxlY3QsIHRleHRhcmVhLCBhLCBhcmVhLCBidXR0b24sIG9iamVjdCwgLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uIikuc29ydChjb21wYXJlQnlUYWJJbmRleCk7DQogICAgdmFyIGFsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHMgPSAkKGxheW91dFJvdykucHJldigiW2lkXj0nIiArICQobGF5b3V0Um93KS5hdHRyKCdpZCcpICsgIiddIikuZmluZCgiaW5wdXRbSURdLCBzZWxlY3QsIHRleHRhcmVhLCBhLCBhcmVhLCBidXR0b24sIG9iamVjdCwgLmFkZFJlbW92ZVNlY3Rpb24sIC5sb29rdXBidXR0b24sIC5pbmZvSWNvbiwgLmNsb3NlQnV0dG9uIikuc29ydChjb21wYXJlQnlUYWJJbmRleCk7DQoNCiAgICBpZiAoYWxsTGF5b3V0Um93RWxlbWVudHNbMF0gJiYgYWxsTGF5b3V0Um93RWxlbWVudHNbMF0udGFiSW5kZXggJiYgYWxsUHJldmlvdXNMYXlvdXRSb3dFbGVtZW50c1swXSAmJiBhbGxQcmV2aW91c0xheW91dFJvd0VsZW1lbnRzWzBdLnRhYkluZGV4KSB7DQogICAgICAgIHZhciBhbGxFbGVtZW50cyA9ICQoImlucHV0W0lEXSwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgYXJlYSwgYnV0dG9uLCBvYmplY3QsIC5hZGRSZW1vdmVTZWN0aW9uLCAubG9va3VwYnV0dG9uLCAuaW5mb0ljb24sIC5jbG9zZUJ1dHRvbiIpLnNvcnQoY29tcGFyZUJ5VGFiSW5kZXgpOw0KDQogICAgICAgIGlmIChhbGxFbGVtZW50cykgew0KICAgICAgICAgICAgdmFyIGluY3JlbWVudFJhbmdlID0gYWxsTGF5b3V0Um93RWxlbWVudHNbYWxsTGF5b3V0Um93RWxlbWVudHMubGVuZ3RoIC0gMV0udGFiSW5kZXggLSBhbGxMYXlvdXRSb3dFbGVtZW50c1swXS50YWJJbmRleCArIDE7DQogICAgICAgICAgICB2YXIgaW5jcmVtZW50U3ViUmVwZWF0aW5nUmFuZ2UgPSBhbGxQcmV2aW91c0xheW91dFJvd0VsZW1lbnRzW2FsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHMubGVuZ3RoIC0gMV0udGFiSW5kZXggLSBhbGxMYXlvdXRSb3dFbGVtZW50c1thbGxMYXlvdXRSb3dFbGVtZW50cy5sZW5ndGggLSAxXS50YWJJbmRleDsNCg0KICAgICAgICAgICAgJChhbGxFbGVtZW50cykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMudGFiSW5kZXggPiBhbGxQcmV2aW91c0xheW91dFJvd0VsZW1lbnRzW2FsbFByZXZpb3VzTGF5b3V0Um93RWxlbWVudHMubGVuZ3RoIC0gMV0udGFiSW5kZXgpDQogICAgICAgICAgICAgICAgICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnRhYkluZGV4ICsgaW5jcmVtZW50UmFuZ2U7DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgJChhbGxMYXlvdXRSb3dFbGVtZW50cykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy50YWJJbmRleCA9IHRoaXMudGFiSW5kZXggKyBpbmNyZW1lbnRTdWJSZXBlYXRpbmdSYW5nZSArIGluY3JlbWVudFJhbmdlOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFJlaW5pdFRhYkluZGV4RGVjcmVtZW50KGxheW91dFJvdykgew0KICAgIHZhciBhbGxMYXlvdXRSb3dFbGVtZW50cyA9ICQobGF5b3V0Um93KS5maW5kKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKS5zb3J0KGNvbXBhcmVCeVRhYkluZGV4KTsNCg0KICAgIGlmIChhbGxMYXlvdXRSb3dFbGVtZW50c1swXSAmJiBhbGxMYXlvdXRSb3dFbGVtZW50c1swXS50YWJJbmRleCkgew0KICAgICAgICB2YXIgYWxsRWxlbWVudHMgPSAkKCJpbnB1dFtJRF0sIHNlbGVjdCwgdGV4dGFyZWEsIGEsIGFyZWEsIGJ1dHRvbiwgb2JqZWN0LCAuYWRkUmVtb3ZlU2VjdGlvbiwgLmxvb2t1cGJ1dHRvbiwgLmluZm9JY29uLCAuY2xvc2VCdXR0b24iKS5zb3J0KGNvbXBhcmVCeVRhYkluZGV4KTsNCg0KICAgICAgICBpZiAoYWxsRWxlbWVudHMpIHsNCiAgICAgICAgICAgIHZhciBpbmNyZW1lbnRSYW5nZSA9IGFsbExheW91dFJvd0VsZW1lbnRzW2FsbExheW91dFJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdLnRhYkluZGV4IC0gYWxsTGF5b3V0Um93RWxlbWVudHNbMF0udGFiSW5kZXggKyAxOw0KDQogICAgICAgICAgICAkKGFsbEVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJJbmRleCA+IGFsbExheW91dFJvd0VsZW1lbnRzW2FsbExheW91dFJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdLnRhYkluZGV4KQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy50YWJJbmRleCAtIGluY3JlbWVudFJhbmdlOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGFkZFNlY3Rpb24obWluUmVwZXRpdGlvbiwgbWF4UmVwZXRpdGlvbiwgc2VuZGVyKSB7DQogICAgRGVsZXRlTXVsdGlDb21ib2JveCgpOw0KICAgIC8vIFBvdHJlYm5lIG9kc3RyYW5pdCBkYXRlcmFuZ2VwaWNrZXIgZXN0ZSBwcmVkIGNsb25lDQogICAgUmVtb3ZlRGF0ZVJhbmdlUGlja2VyKCk7DQogICAgdmFyIGxheW91dFJvdyA9ICQoc2VuZGVyKS5jbG9zZXN0KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICB2YXIgZmlyc3RMYXlvdXRSb3cgPSBHZXRSZXBlYXRpbmdTZWN0aW9ucyhsYXlvdXRSb3cpLmZpcnN0KCk7DQogICAgdmFyIGxheW91dFJvd0NvcHkgPSBmaXJzdExheW91dFJvdy5jbG9uZSgpOw0KDQogICAgaWYgKGZpcnN0TGF5b3V0Um93LmF0dHIoImlzZW1wdHkiKSA9PSAidHJ1ZSIpIHsNCiAgICAgICAgbGF5b3V0Um93Q29weS5yZW1vdmVBdHRyKCJpc2VtcHR5Iik7DQogICAgICAgIGxheW91dFJvd0NvcHkuY2hpbGRyZW4oIiNsYXlvdXRSb3dDb250ZW50IiArIGZpcnN0TGF5b3V0Um93LmF0dHIoImlkIikpLnNob3coKTsNCiAgICB9DQoNCglpZiAodHlwZW9mIExvYWRTZWN0aW9uSHRtbEZyYWdtZW50ID09ICd2dWNBZGRTZWN0aW9uJykgeyAvLyB3ZSBhcmUgbG9hZGVkIGluIFZVQyBjb25maWd1cmF0aW9uIChmdW5jdGlvbiBpbiBwX3Z1Yy5qcykNCgkJdnVjQWRkU2VjdGlvbihsYXlvdXRSb3dDb3B5KTsNCgl9DQogICAgdmFyIHNlY3Rpb25zQ291bnQgPSBjb3VudFNlY3Rpb24oc2VuZGVyLCAnYWRkU2VjdGlvbicpOw0KICAgIHZhciBpc1NlY3Rpb25MaXN0RW1wdHkgPSBsYXlvdXRSb3cuYXR0cignaXNFbXB0eScpOw0KICAgIHZhciBzZWN0aW9uQ291bnRGb3JYID0gY291bnRTZWN0aW9uKHNlbmRlciwgIiIpOw0KDQogICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gMSAmJiBpc1NlY3Rpb25MaXN0RW1wdHkgPT0gJ3RydWUnKQ0KICAgICAgICBzZWN0aW9uc0NvdW50ID0gMDsNCg0KICAgIGlmIChzZWN0aW9uc0NvdW50ID49IG1heFJlcGV0aXRpb24pDQogICAgICAgIHJldHVybiBhbGVydCgnRG9zaWFobGkgc3RlIG1heGltw6FsbnkgcG/EjWV0IG9wYWtvdmFuaWEgenZvbGVuZWogc2VrY2llLicpOw0KDQogICAgaWYgKHNlY3Rpb25zQ291bnQgPT0gMCkgew0KICAgICAgICBsYXlvdXRSb3cuY2hpbGRyZW4oJ2RpdltpZF49bGF5b3V0Um93Q29udGVudF0nKS5zaG93KCkuVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7IC8vYnVnIGJ5ICJzdHlsZSIgYXRyaWJ1dGUNCiAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5zaG93KCk7IC8vSUUgYnVnIGJ5ICJPZG9icmHFpSIgYnV0dG9uIA0KICAgICAgICBsYXlvdXRSb3cuYXR0cigiaXNFbXB0eSIsICJmYWxzZSIpOw0KICAgICAgICBsYXlvdXRSb3cuZmluZCgnaW5wdXRbdHlwZT0icmFkaW8iXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkKHRoaXMpLmNsaWNrKCk7DQogICAgICAgIH0pOw0KICAgICAgICBsYXlvdXRSb3cuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIGxheW91dFJvd0NvcHkuVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7DQogICAgICAgIGxheW91dFJvd0NvcHkudG9nZ2xlQ2xhc3MoJ2hpZGRlblNlY3Rpb24nLCBmYWxzZSk7DQogICAgICAgIGxheW91dFJvd0NvcHkuQ2xlYXJGb3JtRWxlbWVudHMoKQ0KICAgICAgICAgICAgLlJlc2V0UmVwZXRpdGlvblNlY3Rpb24oKQ0KICAgICAgICAgICAgLkluaXRTZWN0aW9uQWNjb3JkaW9uKCkNCiAgICAgICAgICAgIC5SZW1vdmVEYXRlUGlja2VyQ2xhc3MoKQ0KICAgICAgICAgICAgLkluaXRSZW1vdGVDb21ib2JveCgpDQogICAgICAgICAgICAuSW5pdFBvcFVwRGlhbG9nKCkNCiAgICAgICAgICAgIC5Jbml0SGVscCgpDQogICAgICAgICAgICAuSW5pdEhpZXJhcmNoaWNhbGx5VHJlZSgpOw0KICAgICAgICBsYXlvdXRSb3cuYWZ0ZXIobGF5b3V0Um93Q29weSk7DQogICAgICAgIGxheW91dFJvd0NvcHkuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICAgICAgUmVpbml0VGFiSW5kZXhJbmNyZW1lbnQobGF5b3V0Um93Q29weSk7DQogICAgfQ0KDQogICAgSW5pdFBpY2tlcnMoKTsNCiAgICBJbml0SGVscCgpOw0KICAgIEluaXRNdWx0aUNvbWJvYm94KCk7DQogICAgSW5jcmVtZW50RGVjcmVtZW50U2VjdGlvbklkKGxheW91dFJvd0NvcHkpOw0KDQogICAgLy9BayBwcmlkYXZhbmEgc2VrY2lhIGplIHBvc2xlbmEgbW96bmEgKG1heHJlcGV0aXRpb24pIHNrcnlqZW0gamVqIGJ1dHRvbiBQcmlkYWoNCiAgICB2YXIgcmVwZXRpdGl2ZUNvbW1hbmRzID0gbGF5b3V0Um93Q29weS5jaGlsZHJlbignZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJyk7DQogICAgdmFyIGFkZEJ1dHRvbiA9IHJlcGV0aXRpdmVDb21tYW5kcy5jaGlsZHJlbignc3BhbltpZF49YWRkU2VjdGlvbl0nKTsNCiAgICB2YXIgcmVtb3ZlQnV0dG9uID0gcmVwZXRpdGl2ZUNvbW1hbmRzLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpOw0KICAgIGlmICgoc2VjdGlvbnNDb3VudCArIDEpID09IG1heFJlcGV0aXRpb24pIHsNCiAgICAgICAgaWYgKG1pblJlcGV0aXRpb24gPT0gMCAmJiBtYXhSZXBldGl0aW9uID09IDEpIHsNCiAgICAgICAgICAgIGxheW91dFJvdy5jaGlsZHJlbignZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJykuY2hpbGRyZW4oJ3NwYW5baWRePWFkZFNlY3Rpb25dJykuaGlkZSgpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgYWRkQnV0dG9uLmhpZGUoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmIChzZWN0aW9uc0NvdW50ID4gMCkgew0KICAgICAgICAvL05hIHByaWRhbmVqIHNla2NpaSB6b2JyYXppbSBidXR0b24gT2RvYmVyDQoNCiAgICAgICAgcmVtb3ZlQnV0dG9uLnNob3coKTsNCiAgICAgICAgLy9OYSBwcmVkY2hhZHphanVjZWogc2VrY2lpIHNrcnlqZW0gY29tbWFuZCBiYXINCiAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5oaWRlKCk7DQogICAgfQ0KDQogICAgaWYgKChzZWN0aW9uc0NvdW50ICsgMSkgPT0gbWluUmVwZXRpdGlvbikNCiAgICAgICAgcmVtb3ZlQnV0dG9uLmhpZGUoKTsNCg0KICAgIEluaXRSZXBldGl0aW9uU2VjdGlvbnMobGF5b3V0Um93Q29weSk7DQogICAgbGF5b3V0Um93Q29weS5SZWluaXRpYWxpemVDb25kaXRpb25hbFJ1bGVzKCkuUmVpbml0UmFkaW9EZWZhdWx0Q2hlY2soKTsNCiAgICBIaWRlU2hvd1gobGF5b3V0Um93LCBzZWN0aW9uQ291bnRGb3JYICsgbWluUmVwZXRpdGlvbiwgLTEpOw0KICAgIEluaXRYSW5Db3B5U2VjdGlvbihsYXlvdXRSb3dDb3B5KTsNCn0NCg0KZnVuY3Rpb24gcmVtb3ZlU2VjdGlvbihtaW5SZXBldGl0aW9uLCBzZW5kZXIpIHsNCiAgICB2YXIgbGF5b3V0Um93ID0gJChzZW5kZXIpLmNsb3Nlc3QoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgIHZhciBsYXlvdXRSb3dQcmV2aW91cyA9IGxheW91dFJvdy5wcmV2KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICB2YXIgc2VjdGlvbnNDb3VudCA9IGNvdW50U2VjdGlvbihzZW5kZXIsICdyZW1vdmVTZWN0aW9uJyk7DQogICAgdmFyIHNlY3Rpb25Db3VudEZvclggPSBjb3VudFNlY3Rpb24oc2VuZGVyLCAiIik7DQogICAgdmFyIGxheW91dFJvd0lkQ2xlYW4gPSBsYXlvdXRSb3cuYXR0cigiaWQiKS5zcGxpdCgnXycpWzBdLnJlcGxhY2UoInJlbW92ZVNlY3Rpb24iLCAiIik7DQoNCiAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSBtaW5SZXBldGl0aW9uKQ0KICAgICAgICByZXR1cm4gYWxlcnQoJ1Nla2NpdSBuaWUgamUgbW/Fvm7DqSBvZG9icmHFpS4nKTsNCg0KICAgIHZhciBjaGlsZHJlbiA9IGxheW91dFJvd1ByZXZpb3VzLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKTsNCiAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSBtaW5SZXBldGl0aW9uICYmIHNlY3Rpb25zQ291bnQgPiAxKQ0KICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQoNCiAgICBpZiAoc2VjdGlvbnNDb3VudCA9PSAxKSB7DQogICAgICAgIGxheW91dFJvdy5hdHRyKCJpc0VtcHR5IiwgInRydWUiKTsNCiAgICAgICAgbGF5b3V0Um93LmNoaWxkcmVuKCdkaXZbaWRePWxheW91dFJvd0NvbnRlbnRdJykuaGlkZSgpLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgIGxheW91dFJvdy5JbmNyZW1lbnRGaWVsZElkcygpOw0KICAgICAgICBsYXlvdXRSb3cuUmVpbml0aWFsaXplQ29uZGl0aW9uYWxSdWxlcygpOw0KDQogICAgICAgIHZhciByZXBldGl0aW9uQ29tbWFuZHMgPSBsYXlvdXRSb3cuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpOw0KICAgICAgICByZXBldGl0aW9uQ29tbWFuZHMuY2hpbGRyZW4oJ3NwYW5baWRePWFkZFNlY3Rpb25dJykuc2hvdygpOw0KICAgICAgICByZXR1cm4gcmVwZXRpdGlvbkNvbW1hbmRzLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCiAgICB9DQoNCiAgICBSZWluaXRUYWJJbmRleERlY3JlbWVudChsYXlvdXRSb3cpOw0KICAgIGNoaWxkcmVuLnNob3coKTsNCg0KICAgIGlmICgkKHNlbmRlcikuaGFzQ2xhc3MoImNsb3NlQnV0dG9uIikgfHwgKHNlY3Rpb25zQ291bnQgLSAxKSA9PSAxKSB7DQogICAgICAgIGlmICghJChzZW5kZXIpLmhhc0NsYXNzKCJjbG9zZUJ1dHRvbiIpKSB7IHNlY3Rpb25Db3VudEZvclggPSBzZWN0aW9uc0NvdW50IC0gMTsgfQ0KICAgICAgICBIaWRlU2hvd1gobGF5b3V0Um93LCBzZWN0aW9uQ291bnRGb3JYIC0gMSwgbWluUmVwZXRpdGlvbik7DQogICAgfQ0KDQogICAgaWYgKCQoc2VuZGVyKS5oYXNDbGFzcygiY2xvc2VCdXR0b24iKSkgew0KICAgICAgICBIaWRlQW5kU2hvd1JlbW92ZUJ0bnMobGF5b3V0Um93LnNpYmxpbmdzKCJkaXZbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpLCBzZWN0aW9uQ291bnRGb3JYIC0gMSwgbWluUmVwZXRpdGlvbik7DQogICAgfQ0KDQogICAgbGF5b3V0Um93LnJlbW92ZSgpOw0KDQogICAgaWYgKChzZWN0aW9uc0NvdW50IC0gMSkgPT0gbWluUmVwZXRpdGlvbikgew0KICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbignc3BhbltpZF49cmVtb3ZlU2VjdGlvbl0nKS5oaWRlKCk7DQogICAgfQ0KICAgIGNoaWxkcmVuLmNoaWxkcmVuKCdzcGFuW2lkXj1hZGRTZWN0aW9uXScpLnNob3coKTsNCiAgICANCiAgICBpZiAobGF5b3V0Um93UHJldmlvdXNbMF0pIHsNCiAgICAgICAgJChsYXlvdXRSb3dQcmV2aW91cykuSW5jcmVtZW50RmllbGRJZHMoKTsNCiAgICAgICAgSW5jcmVtZW50RGVjcmVtZW50U2VjdGlvbklkKGxheW91dFJvd1ByZXZpb3VzKTsNCiAgICAgICAgSW5jcmVtZW50RGVjcmVtZW50SW5uZXJSZXBlYXRpbmdJZHMobGF5b3V0Um93UHJldmlvdXMpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBsYXlvdXRSb3dQb20gPSAkKCJbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpWzBdOw0KICAgICAgICAkKGxheW91dFJvd1BvbSkuSW5jcmVtZW50RmllbGRJZHMoKS5SZWluaXRpYWxpemVDb25kaXRpb25hbFJ1bGVzKCk7DQogICAgICAgIFJlbW92ZVJlcFNlY0NsYXNzKGxheW91dFJvd1BvbSk7DQogICAgICAgIEluY3JlbWVudERlY3JlbWVudFNlY3Rpb25JZChsYXlvdXRSb3dQb20pOw0KICAgICAgICBJbmNyZW1lbnREZWNyZW1lbnRJbm5lclJlcGVhdGluZ0lkcyhsYXlvdXRSb3dQb20pOw0KICAgIH0NCg0KICAgIHZhciBsYXlvdXRSb3dBbGwgPSAkKCJbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXSIpOyAvLyB2eWJlciBvcGFrb3ZhY2t5DQogICAgJChsYXlvdXRSb3dBbGwpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAkKHRoaXMpLlJlbW92ZURhdGVQaWNrZXJDbGFzcygpOy8vIHJlc2V0bmUgZGF0ZXBpY2tlciBzZWtjaWUga3RvcnUgbWF6ZW1lIA0KICAgIH0pOw0KICAgIEluaXRQaWNrZXJzKCk7IC8vIG9wZXRvdm5hIGluaWNpYWxpemFjaWEgDQp9DQoNCmZ1bmN0aW9uIFJlbW92ZVJlcFNlY0NsYXNzKHNlbmRlcikgew0KICAgIHZhciBsYXlvdXRSb3dJZENsZWFuID0gJChzZW5kZXIpLmF0dHIoImlkIikuc3BsaXQoJ18nKVswXTsNCiAgICB2YXIgbHIgPSAkKGRvY3VtZW50KS5maW5kKCJkaXZbaWRePSciICsgbGF5b3V0Um93SWRDbGVhbiArICInXTpmaXJzdCIpOw0KICAgIGxyLnJlbW92ZUNsYXNzKCJyZXBlYXRpbmdTZWN0aW9uIik7DQogICAgbHIuZmluZCgiLnJlcGVhdGluZ1NlY3Rpb24iKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygicmVwZWF0aW5nU2VjdGlvbiIpOw0KICAgIH0pOw0KfQ0KDQpmdW5jdGlvbiBIaWRlU2hvd1goc2VuZGVyLCBzZWN0aW9uQ291bnQsIG1pblJlcGV0aXRpb24pIHsNCiAgICB2YXIgbGF5b3V0Um93SWRDbGVhbiA9IHNlbmRlci5hdHRyKCJpZCIpLnNwbGl0KCdfJylbMF07DQogICAgdmFyIGxheW91dFJvd3MgPSBzZW5kZXIucGFyZW50KCkuY2hpbGRyZW4oImRpdltpZF49JyIgKyBsYXlvdXRSb3dJZENsZWFuICsgIiddIik7DQogICAgdmFyIGxheW91dFJvd3NDb3VudCA9IGxheW91dFJvd3MubGVuZ3RoOw0KDQogICAgaWYgKChsYXlvdXRSb3dzQ291bnQgLSAxKSA9PSAxICYmIG1pblJlcGV0aXRpb24gIT0gLTEpIHsNCiAgICAgICAgdmFyIGxyID0gJChzZW5kZXIpLmNoaWxkcmVuKCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICAgICAgbGF5b3V0Um93cy5jaGlsZHJlbignLmNsb3NlQnV0dG9uJykuaGlkZSgpOw0KICAgIH0gZWxzZSBpZiAobGF5b3V0Um93c0NvdW50ID4gMSkNCiAgICAgICAgbGF5b3V0Um93cy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5jbG9zZUJ1dHRvbicpLnNob3coKTsNCiAgICAgICAgfSk7DQp9DQoNCmZ1bmN0aW9uIEhpZGVBbmRTaG93UmVtb3ZlQnRucyhsYXlvdXRSb3dzLCBzZWN0aW9uQ291bnQsIG1pblJlcGV0aXRpb24pIHsNCiAgICBpZiAobWluUmVwZXRpdGlvbiAhPSAtMSkgew0KICAgICAgICB2YXIgY291bnQgPSAwOw0KICAgICAgICBsYXlvdXRSb3dzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNvdW50ICE9IGxheW91dFJvd3MubGVuZ3RoIC0gMSkNCiAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5oaWRlKCk7DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAoKGxheW91dFJvd3MubGVuZ3RoKSA9PSBtaW5SZXBldGl0aW9uKSB7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmNoaWxkcmVuKCdzcGFuW2lkXj1yZW1vdmVTZWN0aW9uXScpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCdkaXZbaWRePXJlcGV0aXRpb25Db21tYW5kc10nKS5zaG93KCk7DQogICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2RpdltpZF49cmVwZXRpdGlvbkNvbW1hbmRzXScpLmNoaWxkcmVuKCdzcGFuW2lkXj1hZGRTZWN0aW9uXScpLnNob3coKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjb3VudCsrOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEluaXRYSW5Db3B5U2VjdGlvbihzZW5kZXIpIHsNCiAgICB2YXIgc3ViU2VjdGlvbiA9ICQoc2VuZGVyKS5jaGlsZHJlbigiW2lkXj0nbGF5b3V0Um93Q29udGVudGxheW91dFJvdyddIik7DQogICAgc3ViU2VjdGlvbi5maW5kKCcuY2xvc2VCdXR0b24nKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgfSk7DQp9DQoNCiQuZm4uTmV3R3VpZCA9IGZ1bmN0aW9uICgpIHsNCiAgICBmdW5jdGlvbiBwOChzKSB7DQogICAgICAgIHZhciBwID0gKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpICsgIjAwMDAwMDAwMCIpLnN1YnN0cigyLCA4KTsNCiAgICAgICAgcmV0dXJuIHMgPyAiLSIgKyBwLnN1YnN0cigwLCA0KSArICItIiArIHAuc3Vic3RyKDQsIDQpIDogcDsNCiAgICB9DQogICAgcmV0dXJuIHA4KCkgKyBwOCh0cnVlKSArIHA4KHRydWUpICsgcDgoKTsNCn07DQoNCmZ1bmN0aW9uIFN3aXRjaFNlY3Rpb25zKHN3aXRjaGVzVG9TZWN0aW9ucywgY29udGV4dCwgaXNDaGVja0JveExpc3QpIHsNCiAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICJvYmplY3QiKQ0KICAgICAgICB0aHJvdyAia29udGV4dCBuZW3DtMW+ZSBiecWlIG9iamVrdCI7DQoNCiAgICBjb250ZXh0ID0gJCgnZGl2W2lkXj0nICsgY29udGV4dCArICddJyk7DQoNCiAgICBmb3IgKHZhciBzaW5nbGVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgIGZvciAodmFyIHNlY3Rpb24gaW4gc3dpdGNoZXNUb1NlY3Rpb25zW3NpbmdsZVN3aXRjaF0pIHsNCiAgICAgICAgICAgIGlmIChzd2l0Y2hlc1RvU2VjdGlvbnNbc2luZ2xlU3dpdGNoXVtzZWN0aW9uXS5pbmRleE9mKCdePScpID09IC0xICYmIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dICE9ICcnKQ0KICAgICAgICAgICAgICAgIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dID0gJ1tpZF49JyArIHN3aXRjaGVzVG9TZWN0aW9uc1tzaW5nbGVTd2l0Y2hdW3NlY3Rpb25dLnJlcGxhY2UoJyMnLCAnJykgKyAnXSc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoY29udGV4dFswXSA9PT0gInVuZGVmaW5lZCIpDQogICAgICAgIHRocm93ICJuZXpuw6FteSBrb250ZXh0IjsNCg0KICAgIGlmIChpc0NoZWNrQm94TGlzdCA9PSB0cnVlKQ0KICAgICAgICBjb250ZXh0LkhpZGVTd2l0Y2hTZWN0aW9ucyhzd2l0Y2hlc1RvU2VjdGlvbnMpOw0KDQogICAgY29udGV4dC5Td2l0Y2hTZWN0aW9ucyhzd2l0Y2hlc1RvU2VjdGlvbnMsIGlzQ2hlY2tCb3hMaXN0KTsNCn0NCg0KZnVuY3Rpb24gRmluZFZhbHVlSW5YbWwoZWxlbWVudE5hbWUsIHhtbERvYykgew0KICAgIHZhciAkeG1sID0gJCh4bWxEb2MpOw0KICAgIHZhciAkeG1sVmFsdWUgPSAkeG1sLmZpbmQoZWxlbWVudE5hbWUpOw0KICAgIHJldHVybiAkeG1sVmFsdWUudGV4dCgpOw0KfQ0KDQovLyBXQ0YgIFZhbGlkYXRpb24gU2VydmljZSAgICAgICANCg0KDQpmdW5jdGlvbiBBZGRWYWxpZGF0aW9uTWVzc2FnZShpbmRleCwgaXRlbSwgdmFsTXNnKSB7DQogICAgdmFyIGlucHV0ID0gJChpdGVtKTsNCiAgICB2YXIga2V5ID0gaW5wdXQuYXR0cigia2V5Iik7DQogICAgdmFyIG9yZGVyID0gKGlucHV0LmF0dHIoIm9yZGVyIikgPT0gbnVsbCB8fCBpbnB1dC5hdHRyKCJvcmRlciIpID09IHVuZGVmaW5lZCkgPyAwIDogaW5wdXQuYXR0cigib3JkZXIiKTsNCg0KICAgIGlmIChrZXkgIT0gbnVsbCkgew0KICAgICAgICB2YXIgcG9zdGZpeCA9IG9yZGVyID09IDAgPyAiIiA6ICItIiArIG9yZGVyOw0KICAgICAgICB2YXIga2V5TmFtZSA9IGtleSArIHBvc3RmaXg7DQogICAgICAgIGlmICgkKCIjIiArIGtleU5hbWUpLmxlbmd0aCA9PSAwKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodmFsTXNnW2tleU5hbWVdID09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgIHZhbE1zZ1trZXlOYW1lXSA9IGlucHV0LnRleHQoKSArICc8L2JyPic7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHZhbE1zZ1trZXlOYW1lXSArPSBpbnB1dC50ZXh0KCkgKyAnPC9icj4nOw0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8vYWsgamUgZmFsc2UsIHpuYW1lbmEsIHplIHNhIG5lZGFsIG5hanN0IHppYWRlbiBpbnB1dCBhIHRyZWJhIHRvIGV2aWRvdmF0IGFrbyB4c2x0IGVycm9yDQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiBUcnlSZWRpcmVjdFRvUmV0dXJuVXJsKCkgew0KICAgIHZhciByZXR1cm5VcmwgPSAkLkdldFVybFBhcmFtKCJSZXR1cm5VcmwiKTsNCg0KICAgIGlmIChyZXR1cm5VcmwgIT0gMCkNCiAgICAgICAgc2VsZi5sb2NhdGlvbi5ocmVmID0gdW5lc2NhcGUocmV0dXJuVXJsKTsNCn0NCg0KZnVuY3Rpb24gaHRtbEVuY29kZSh2YWx1ZSkgew0KICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXG4vZ2ksICIlMEEiKTsNCiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcL2dpLCAiJTBCIik7DQogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8iL2dpLCAiJTBYIik7DQogICAgcmV0dXJuICQoJzxkaXYvPicpLnRleHQodmFsdWUpLmh0bWwoKTsNCn0NCg0KdmFyIGJhc2VNYXJnaW4gPSA0Ow0KZnVuY3Rpb24gTGF5b3V0KCkgew0KICAgIHZhciB0ZW1wbGF0ZVNlY3Rpb24gPSAkKHRoaXMpOw0KICAgIHZhciBwYXJlbnRDZWxsQ291bnQgPSB0ZW1wbGF0ZVNlY3Rpb24ucGFyZW50cygiZGl2W2NsYXNzXj0nY2VsbCAnXSIpLmxlbmd0aDsNCiAgICB2YXIgbWFyZ2luID0gKHBhcmVudENlbGxDb3VudCArIDEpICogYmFzZU1hcmdpbjsNCiAgICBpZiAobWFyZ2luID4gYmFzZU1hcmdpbiAmJiB0ZW1wbGF0ZVNlY3Rpb24uY2hpbGRyZW4oKS5jaGlsZHJlbigiZGl2W2NsYXNzXj0nY2FwdGlvbiAnXSIpLmNzcygnYm9yZGVyLWxlZnQtd2lkdGgnKSA9PSAnMXB4Jykgew0KICAgICAgICBtYXJnaW4gLT0gYmFzZU1hcmdpbjsNCiAgICB9DQogICAgdGVtcGxhdGVTZWN0aW9uLmNzcygnbWFyZ2luLWxlZnQnLCAnLScgKyBtYXJnaW4gKyAncHgnKTsNCiAgICB0ZW1wbGF0ZVNlY3Rpb24uZmluZCgnbGFiZWwnKS5lYWNoKE1vdmUpOw0KfQ0KDQpmdW5jdGlvbiBNb3ZlKCkgew0KICAgIHZhciBsYWJlbCA9ICQodGhpcyk7DQogICAgbGFiZWwuY3NzKCdtYXJnaW4tbGVmdCcsICItIiArIHBhcnNlSW50KGxhYmVsLnBhcmVudHMoImRpdlthZGp1c3Rwb3NpdGlvbl49J3RydWUnXSIpLmNzcygnbWFyZ2luLWxlZnQnKS5yZXBsYWNlKCItIiwgIiIpLnJlcGxhY2UoInB4IiwgIiIpIC0gYmFzZU1hcmdpbikgKyAncHgnKTsNCiAgICBsYWJlbC53aWR0aChsYWJlbC53aWR0aCgpICsgMTYpOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRnVua2NpYSBIb2Rub3RhIHByZSBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KZnVuY3Rpb24gSG9kbm90YVR5cFBvbGEoZWxlbWVudCwgbmF6b3YpIHsNCiAgICB2YXIgdmFsdWUgPSAwOw0KDQogICAgdmFyIGVsZW1lbnRzOw0KDQogICAgaWYgKCFlbGVtZW50KSB7DQogICAgICAgIGVsZW1lbnRzID0gJCgnIycgKyBuYXpvdik7DQogICAgICAgIGlmICghZWxlbWVudHMgfHwgZWxlbWVudHMubGVuZ3RoID09IDApDQogICAgICAgICAgICBlbGVtZW50cyA9ICQoIltuYW1lPSciICsgbmF6b3YgKyAiJ10iKTsNCiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRzWzBdOw0KICAgIH0NCg0KICAgIGlmIChlbGVtZW50LnR5cGUgPT0gJ3NlbGVjdC1vbmUnKSB7DQogICAgICAgIHZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmF6b3YpLnNlbGVjdGVkSW5kZXg7DQogICAgfQ0KICAgIGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PSAncmFkaW8nKSB7DQogICAgICAgIC8vamUgcmFkaW9idXR0b24JCQ0KICAgICAgICAvL2plIHJhZGlvYnV0dG9ubGlzdA0KICAgICAgICAvL2tvZCBqZSB1bml2ZXJ6YWxueSwgemFmdW5ndWplIGFqIGFqDQogICAgICAgIHZhbHVlID0gMDsNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBpZiAoZWxlbWVudHNbaV0uY2hlY2tlZCkgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gaSArIDE7IC8vdnJhdCBpbmRleCBvem5hY2VuZWhvIHBvbGEgb2QgMSAtIG4NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT0gJ2NoZWNrYm94Jykgew0KICAgICAgICAvL2plIGNoZWNrYm94DQogICAgICAgIGlmIChlbGVtZW50LmNoZWNrZWQpIHsNCiAgICAgICAgICAgIHZhbHVlID0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHZhbHVlID0gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgdmFsdWUgPSBlbGVtZW50LnZhbHVlOw0KICAgIH0NCg0KICAgIHJldHVybiB2YWx1ZTsNCn0NCg0KZnVuY3Rpb24gaG9kbm90YShlbGVtZW50LCBuYXpvdiwgb3Bha190eXAsIHNpZCwgbGF5b3V0TmF6b3YsIGRhdGFUeXBlKSB7IC8vIHNpZCBqZSBpbmRleG92YW55IG9kIDAuLg0KICAgIHZhciB0c3RyOw0KDQogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gemFjaWF0b2sgb3Bha292YW5hDQogICAgaWYgKG9wYWtfdHlwID09ICdvJykgew0KICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7DQogICAgICAgICAgICBpZiAoc2lkID09IDAgfHwgc2lkID09IC0xKQ0KICAgICAgICAgICAgICAgIHRzdHIgPSBIb2Rub3RhVHlwUG9sYShudWxsLCBuYXpvdik7ICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hem92KS52YWx1ZTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0c3RyID0gSG9kbm90YVR5cFBvbGEobnVsbCwgR2V0RWxlbWVudEluY3JlbWVudGFsVmFsdWUobmF6b3YsIHNpZCkpOyAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKEdldEluY3JlbWVudGFsVmFsdWUobmF6b3YsIHNpZCkpLnZhbHVlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdHN0ciA9IEhvZG5vdGFUeXBQb2xhKGVsZW1lbnQsIG5hem92KTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZQ0KICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBrb25pZWMgb3Bha292YW5hDQogICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIHphY2lhdG9rIHN0cmFua292YW5hDQogICAgICAgIGlmIChvcGFrX3R5cCA9PSAncycgfHwgb3Bha190eXAgPT0gJ3AnKSB7DQogICAgICAgICAgICB2YXIgc2VjdGlvbiA9ICQoJyMnICsgbGF5b3V0TmF6b3YpLnBhZ2VhYmxlU2VjdGlvbigpOw0KICAgICAgICAgICAgaWYgKHNlY3Rpb24gJiYgc2VjdGlvbi5jdXJyZW50UGFnZSAhPSBzaWQgKyAxKSB7DQogICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBzZWN0aW9uLmdldFZhbHVlRm9yKG5hem92LCBzaWQgKyAxKTsNCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXAgPT09ICdib29sZWFuJykgew0KICAgICAgICAgICAgICAgICAgICB0c3RyID0gdGVtcCA/IDEgOiAwOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHRzdHIgPSB0ZW1wOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdHN0ciA9IEhvZG5vdGFUeXBQb2xhKGVsZW1lbnQsIG5hem92KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBrb25pZWMgc3RyYW5rb3ZhbmENCiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIHphY2lhdG9rIG5vcm1hbG5hDQogICAgICAgICAgICBpZiAob3Bha190eXAgPT0gJ24nKSB7DQogICAgICAgICAgICAgICAgdHN0ciA9IEhvZG5vdGFUeXBQb2xhKGVsZW1lbnQsIG5hem92KTsNCiAgICAgICAgICAgIH0NCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBrb25pZWMgb3Bha292YW5pYQ0KICAgIGlmICh0c3RyID09IG51bGwgJiYgZGF0YVR5cGUgPT0gJ3gnKQ0KICAgICAgICByZXR1cm4gJyc7DQogICAgaWYgKHRzdHIgIT0gbnVsbCAmJiBkYXRhVHlwZSA9PSAneCcpDQogICAgICAgIHJldHVybiB0c3RyLnRvU3RyaW5nKCk7DQogICAgaWYgKHRzdHIgPT0gbnVsbCB8fCB0c3RyID09PSB1bmRlZmluZWQgfHwgdHN0ciA9PSAnJykNCiAgICAgICAgcmV0dXJuIDA7DQogICAgLy90c3RyID0gMDsNCg0KICAgIC8vYWsgamUgZGF0b3Z5IHR5cCBzdHJpbmcsIHZyYXQgZGx6a3UgcmV0YXpjYQ0KICAgIGlmIChkYXRhVHlwZSA9PSAncycpIHsNCiAgICAgICAgLyoNCiAgICAgICAgaWYgKHRzdHIgPT0gMCkgew0KICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgICAqLw0KICAgICAgICBpZiAodHN0ci5sZW5ndGgpIHsNCiAgICAgICAgICAgIHJldHVybiB0c3RyLmxlbmd0aDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gcGFyc2VGbG9hdCh0c3RyKTsNCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vIFN0cmFua292YWNpZSBzZWtjaWUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQoNCihmdW5jdGlvbiAoJCwgdW5kZWZpbmVkKSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgZnVuY3Rpb24gUGFnZWFibGVTZWN0aW9uKCkgew0KDQogICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYWdlYWJsZVNlY3Rpb24pKSB7DQogICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VhYmxlU2VjdGlvbigpOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5zZWN0aW9uID0gbnVsbDsNCiAgICAgICAgdGhpcy5wYWdlciA9IG51bGw7DQogICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbCA9IG51bGw7DQogICAgICAgIHRoaXMudG90YWxQYWdlc0xhYmVsID0gbnVsbDsNCiAgICAgICAgdGhpcy5wcmV2UGFnZUJ1dHRvbiA9IG51bGw7DQogICAgICAgIHRoaXMubmV4dFBhZ2VCdXR0b24gPSBudWxsOw0KICAgICAgICB0aGlzLmFkZFBhZ2VCdXR0b24gPSBudWxsOw0KICAgICAgICB0aGlzLnJlbW92ZVBhZ2VCdXR0b24gPSBudWxsOw0KDQogICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOw0KICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxOw0KDQogICAgICAgIHRoaXMucGFnZXMgPSBbXTsNCiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzID0ge307DQoNCiAgICAgICAgdGhpcy5vcHRpb25zID0gew0KICAgICAgICAgICAgbmFtZXNwYWNlOiAnLnBhZ2VhYmxlLXNlY3Rpb24nLA0KICAgICAgICAgICAgdmFsaWRhdG9yOiBudWxsLA0KICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICcnLA0KICAgICAgICAgICAgeG1sTm9kZU5hbWU6ICcnLA0KICAgICAgICAgICAgbWluOiAxLA0KICAgICAgICAgICAgbWF4OiA1DQogICAgICAgIH07DQogICAgfQ0KDQogICAgJC5leHRlbmQoUGFnZWFibGVTZWN0aW9uLnByb3RvdHlwZSwgew0KICAgICAgICBpbml0OiBmdW5jdGlvbiAodGFyZ2V0LCB1c2VyT3B0aW9ucykgew0KICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgdGhpcy5vcHRpb25zLCB1c2VyT3B0aW9ucyk7DQoNCiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywNCgkJCSAgICBvcHRpb25zID0gc2VsZi5vcHRpb25zLA0KCQkJICAgIG5hbWVzcGFjZSA9IG9wdGlvbnMubmFtZXNwYWNlOw0KDQogICAgICAgICAgICAvLyBzZWN0aW9uDQogICAgICAgICAgICB0aGlzLnNlY3Rpb24gPSAkKHRhcmdldCk7DQoNCiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zZWN0aW9uTmFtZSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VjdGlvbk5hbWUgPSB0aGlzLnNlY3Rpb25bMF0uaWQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghb3B0aW9ucy54bWxOb2RlTmFtZSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMueG1sTm9kZU5hbWUgPSAkKCdpbnB1dDpoaWRkZW4nLCB0aGlzLnNlY3Rpb24pWzBdLm5hbWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIG1pbiwgbWF4DQogICAgICAgICAgICB2YXIgbWluID0gdGhpcy5zZWN0aW9uLmRhdGEoJ3NlY3Rpb24tbWluJykgKiAxLA0KCQkJICAgIG1heCA9IHRoaXMuc2VjdGlvbi5kYXRhKCdzZWN0aW9uLW1heCcpICogMTsNCg0KICAgICAgICAgICAgaWYgKCFpc05hTihtaW4pKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5taW4gPSBtaW47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIWlzTmFOKG1heCkpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLm1heCA9IG1heDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gcGFnZXINCiAgICAgICAgICAgIHRoaXMucGFnZXIgPSAkKCcuc2VjdGlvblBhZ2VyJywgdGhpcy5zZWN0aW9uKTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbCA9ICQoJy5jdXJyZW50UGFnZScsIHRoaXMucGFnZXIpOw0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwgPSAkKCcudG90YWxQYWdlJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLnByZXZQYWdlQnV0dG9uID0gJCgnLnByZXZQYWdlQnV0dG9uJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLm5leHRQYWdlQnV0dG9uID0gJCgnLm5leHRQYWdlQnV0dG9uJywgdGhpcy5wYWdlcik7DQogICAgICAgICAgICB0aGlzLmFkZFBhZ2VCdXR0b24gPSAkKCcuYWRkUGFnZUJ1dHRvbicsIHRoaXMucGFnZXIpOw0KICAgICAgICAgICAgdGhpcy5nb3RvUGFnZUJ1dHRvbiA9ICQoJy5nb3RvUGFnZUJ1dHRvbicsIHRoaXMucGFnZXIpOw0KICAgICAgICAgICAgdGhpcy5yZW1vdmVQYWdlQnV0dG9uID0gJCgnLnJlbW92ZVBhZ2VCdXR0b24nLCB0aGlzLnBhZ2VyKTsNCg0KICAgICAgICAgICAgdGhpcy5wcmV2UGFnZUJ1dHRvbg0KCQkJCS51bmJpbmQobmFtZXNwYWNlKQ0KCQkJCS5iaW5kKCdjbGljaycgKyBuYW1lc3BhY2UsICQucHJveHkoZnVuY3Rpb24gKGUpIHsNCgkJCQkgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCSAgICB0aGlzLnByZXZpb3VzUGFnZSgpOw0KCQkJCX0sIHRoaXMpKTsNCg0KICAgICAgICAgICAgdGhpcy5uZXh0UGFnZUJ1dHRvbg0KCQkJCS51bmJpbmQobmFtZXNwYWNlKQ0KCQkJCS5iaW5kKCdjbGljaycgKyBuYW1lc3BhY2UsICQucHJveHkoZnVuY3Rpb24gKGUpIHsNCgkJCQkgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJCSAgICB0aGlzLm5leHRQYWdlKCk7DQoJCQkJfSwgdGhpcykpOw0KDQogICAgICAgICAgICB0aGlzLmFkZFBhZ2VCdXR0b24NCgkJCQkudW5iaW5kKG5hbWVzcGFjZSkNCgkJCQkuYmluZCgnY2xpY2snICsgbmFtZXNwYWNlLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7DQoJCQkJICAgIGUucHJldmVudERlZmF1bHQoKTsNCgkJCQkgICAgdGhpcy5hZGRQYWdlKCk7DQoJCQkJfSwgdGhpcykpOw0KDQogICAgICAgICAgICB0aGlzLnJlbW92ZVBhZ2VCdXR0b24NCgkJCQkudW5iaW5kKG5hbWVzcGFjZSkNCgkJCQkuYmluZCgnY2xpY2snICsgbmFtZXNwYWNlLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7DQoJCQkJICAgIGUucHJldmVudERlZmF1bHQoKTsNCgkJCQkgICAgdGhpcy5yZW1vdmVQYWdlKCk7DQoJCQkJfSwgdGhpcykpOw0KDQogICAgICAgICAgICB0aGlzLmdvdG9QYWdlQnV0dG9uDQoJCQkJLnVuYmluZChuYW1lc3BhY2UpDQoJCQkJLmJpbmQoJ2NsaWNrJyArIG5hbWVzcGFjZSwgJC5wcm94eShmdW5jdGlvbiAoZSkgew0KCQkJCSAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoJCQkJICAgIHZhciBjdXJyZW50SW5wdXQgPSAkKGUuY3VycmVudFRhcmdldCkubmV4dCgpOw0KCQkJCSAgICBpZiAoaXNOYU4ocGFyc2VJbnQoY3VycmVudElucHV0LnZhbCgpKSkpIHsNCgkJCQkgICAgICAgIHZhciBzdHJhbmEgPSB0aGlzLmN1cnJlbnRQYWdlOw0KCQkJCSAgICAgICAgY3VycmVudElucHV0LnZhbCgiIik7DQoJCQkJICAgIH0gZWxzZSB7DQoJCQkJICAgICAgICB2YXIgc3RyYW5hID0gcGFyc2VJbnQoY3VycmVudElucHV0LnZhbCgpKTsNCgkJCQkgICAgICAgIGN1cnJlbnRJbnB1dC52YWwoIiIpOw0KCQkJCSAgICB9DQoJCQkJICAgIHRoaXMuZ29Ub1BhZ2Uoc3RyYW5hKTsNCgkJCQl9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbC50ZXh0KHRoaXMuY3VycmVudFBhZ2UpOw0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwudGV4dCh0aGlzLnRvdGFsUGFnZXMpOw0KDQogICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoKTsNCiAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB0aGlzLnNhdmVEZWZhdWx0VmFsdWVzKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgcHJldmlvdXNQYWdlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8PSAxKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8PSB0aGlzLnRvdGFsUGFnZXMpDQogICAgICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UtLTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbC50ZXh0KHRoaXMuY3VycmVudFBhZ2UpOw0KDQogICAgICAgICAgICB0aGlzLnJlc2V0TGF5b3V0KCk7DQoNCiAgICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRQYWdlKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgbmV4dFBhZ2U6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID49IHRoaXMudG90YWxQYWdlcykgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCg0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSsrOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUxhYmVsLnRleHQodGhpcy5jdXJyZW50UGFnZSk7DQoNCiAgICAgICAgICAgIHRoaXMucmVzZXRMYXlvdXQoKTsNCiAgICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRQYWdlKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgYWRkUGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA+PSB0aGlzLm9wdGlvbnMubWF4KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMrKzsNCiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlc0xhYmVsLnRleHQodGhpcy50b3RhbFBhZ2VzKTsNCiAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9ucygpOw0KDQogICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlczsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbC50ZXh0KHRoaXMuY3VycmVudFBhZ2UpOw0KDQogICAgICAgICAgICB0aGlzLnJlc2V0TGF5b3V0KCk7DQogICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICB9LA0KDQogICAgICAgIHJlbW92ZVBhZ2U6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPD0gdGhpcy5vcHRpb25zLm1pbikgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzLS07DQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXNMYWJlbC50ZXh0KHRoaXMudG90YWxQYWdlcyk7DQogICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoKTsNCg0KICAgICAgICAgICAgdGhpcy5yZW1vdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgdGhpcy5yZXNldExheW91dCgpOw0KICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIHVwZGF0ZUJ1dHRvbnM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuYWRkUGFnZUJ1dHRvbi50b2dnbGUodGhpcy50b3RhbFBhZ2VzIDwgdGhpcy5vcHRpb25zLm1heCk7DQogICAgICAgICAgICB0aGlzLnJlbW92ZVBhZ2VCdXR0b24udG9nZ2xlKHRoaXMudG90YWxQYWdlcyA+IHRoaXMub3B0aW9ucy5taW4pOw0KICAgICAgICB9LA0KDQogICAgICAgIHJlc2V0TGF5b3V0OiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkKCc6dGV4dCwgOnBhc3N3b3JkLCA6ZmlsZSwgc2VsZWN0LCB0ZXh0YXJlYScsIHRoaXMuc2VjdGlvbikuZWFjaCgkLnByb3h5KGZ1bmN0aW9uIChfLCBpbnB1dCkgew0KICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pZCkgew0KICAgICAgICAgICAgICAgICAgICAkKGlucHV0KS52YWwodGhpcy5kZWZhdWx0VmFsdWVzW2lucHV0LmlkXSB8fCAnJyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJChpbnB1dCkudmFsKCcnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgICQoJzpyYWRpbywgOmNoZWNrYm94JywgdGhpcy5zZWN0aW9uKS5lYWNoKCQucHJveHkoZnVuY3Rpb24gKF8sIGlucHV0KSB7DQogICAgICAgICAgICAgICAgaWYgKGlucHV0LmlkKSB7DQogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSB0aGlzLmRlZmF1bHRWYWx1ZXNbaW5wdXQuaWRdIHx8IGZhbHNlOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LCB0aGlzKSk7DQoNCiAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9yOw0KICAgICAgICAgICAgaWYgKHZhbGlkYXRvciAmJiB2YWxpZGF0b3Iuc2V0dGluZ3MpIHsNCiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB2YWxpZGF0b3Iuc2V0dGluZ3MuZXJyb3JDbGFzcywNCgkJCQkgICAgd2FybmluZyA9IHZhbGlkYXRvci5zZXR0aW5ncy53YXJuaW5nQ2xhc3M7DQoNCiAgICAgICAgICAgICAgICAkKCcuJyArIGVycm9yICsgJywgLicgKyB3YXJuaW5nLCB0aGlzLnNlY3Rpb24pLnJlbW92ZUNsYXNzKGVycm9yICsgJyAnICsgd2FybmluZyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgc2F2ZURlZmF1bHRWYWx1ZXM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBpbnB1dHMgPSAkKCc6dGV4dCwgOnBhc3N3b3JkLCA6ZmlsZSwgc2VsZWN0LCB0ZXh0YXJlYScsIHRoaXMuc2VjdGlvbik7DQoNCiAgICAgICAgICAgIHZhciBkZWZhdWx0cyA9IHt9Ow0KICAgICAgICAgICAgJC5lYWNoKGlucHV0cywgZnVuY3Rpb24gKF8sIGlucHV0KSB7DQogICAgICAgICAgICAgICAgaWYgKGlucHV0LmlkKSB7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzW2lucHV0LmlkXSA9IGlucHV0LnZhbHVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICB2YXIgY2hlY2thYmxlID0gJCgnOnJhZGlvLCA6Y2hlY2tib3gnLCB0aGlzLnNlY3Rpb24pOw0KICAgICAgICAgICAgJC5lYWNoKGNoZWNrYWJsZSwgZnVuY3Rpb24gKF8sIGlucHV0KSB7DQogICAgICAgICAgICAgICAgaWYgKGlucHV0LmlkKSB7DQogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzW2lucHV0LmlkXSA9IGlucHV0LmNoZWNrZWQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRzOw0KICAgICAgICB9LA0KDQogICAgICAgIHNhdmVDdXJyZW50UGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHJhZGlvQnV0dG9uTGlzdHMgPSBbXTsNCg0KICAgICAgICAgICAgdmFyIGdldEVycm9yVHlwZSA9ICQucHJveHkoZnVuY3Rpb24gKCRlbGVtZW50KSB7DQogICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IHRoaXMub3B0aW9ucy52YWxpZGF0b3I7DQogICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvciAmJiB2YWxpZGF0b3Iuc2V0dGluZ3MpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRlbGVtZW50Lmhhc0NsYXNzKHZhbGlkYXRvci5zZXR0aW5ncy5lcnJvckNsYXNzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdlJzsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkZWxlbWVudC5oYXNDbGFzcyh2YWxpZGF0b3Iuc2V0dGluZ3Mud2FybmluZ0NsYXNzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd3JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0sIHRoaXMpOw0KDQogICAgICAgICAgICB2YXIgdmFsdWVzID0gJC5tYXAoJCgnOmlucHV0JywgdGhpcy5zZWN0aW9uKSwgJC5wcm94eShmdW5jdGlvbiAoaW5wdXQpIHsNCiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQoaW5wdXQpLA0KCQkJCQkgICAgcmVzdWx0ID0geyBrZXk6IGlucHV0LmlkLCB2YWx1ZTogJGlucHV0LnZhbCgpIH07DQogICAgICAgICAgICAgICAgICAgIGlmICgkaW5wdXQuaXMoJzpyYWRpbycpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9ICRpbnB1dC5jbG9zZXN0KCcucmFkaW9CdXR0b25MaXN0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaW9CdXR0b25MaXN0TmFtZSA9IGlucHV0Lm5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuaW5BcnJheShyYWRpb0J1dHRvbkxpc3ROYW1lLCByYWRpb0J1dHRvbkxpc3RzKSA+PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRzID0gbGlzdC5maW5kKCc6cmFkaW8nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZCA9IGlucHV0cy5maWx0ZXIoJzpjaGVja2VkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY2hlY2tlZC52YWwoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J1dHRvbkxpc3RzLnB1c2gocmFkaW9CdXR0b25MaXN0TmFtZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdmFsdWUgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IHJhZGlvQnV0dG9uTGlzdE5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJiID0gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0OiBsaXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByYWRpb0J1dHRvbkxpc3ROYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBjaGVja2VkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvclR5cGVzID0gW107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGlucHV0cywgJC5wcm94eShmdW5jdGlvbiAoXywgcmFkaW8pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV0ID0gZ2V0RXJyb3JUeXBlKCQocmFkaW8pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGVzLnB1c2goZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcykpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJiLmVycm9yVHlwZXMgPSBlcnJvclR5cGVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSAkaW5wdXQuaXMoJzpjaGVja2VkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGlucHV0LmlzKCc6Y2hlY2tib3gnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gaW5wdXQuY2hlY2tlZDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHZhciBlcnJvclR5cGUgPSBnZXRFcnJvclR5cGUoJGlucHV0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yVHlwZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yVHlwZSA9IGVycm9yVHlwZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSwgdGhpcykpOw0KDQogICAgICAgICAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZSAtIDFdOw0KICAgICAgICAgICAgICAgIGlmIChjdXJyZW50KSB7DQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudmFsdWVzID0gdmFsdWVzOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSwgMCwgeyB2YWx1ZXM6IHZhbHVlcyB9KTsNCiAgICAgICAgfSwNCg0KICAgICAgICByZW1vdmVDdXJyZW50UGFnZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoICYmIHRoaXMucGFnZXMubGVuZ3RoID49IHRoaXMuY3VycmVudFBhZ2UpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnNwbGljZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSwgMSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmFsaWRhdG9yKSB7DQogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnZhbGlkYXRvci5yZW1vdmVBbGxTZWN0aW9uRXJyb3JzKHRoaXMuZ2V0U2VjdGlvbk5hbWUoKSwgdGhpcy5jdXJyZW50UGFnZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2xvYWRSYWRpb0J1dHRvbkxpc3Q6IGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICAgICAgdmFyIGxpc3QgPSB2YWx1ZS5yYi5saXN0Ow0KICAgICAgICAgICAgbGlzdC5maW5kKCc6cmFkaW8nKS5lYWNoKGZ1bmN0aW9uIChfLCByYWRpbykgew0KICAgICAgICAgICAgICAgIHJhZGlvLmNoZWNrZWQgPSByYWRpby52YWx1ZSA9PT0gdmFsdWUudmFsdWU7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSwNCg0KICAgICAgICBsb2FkQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+PSB0aGlzLmN1cnJlbnRQYWdlKSB7DQogICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2UgLSAxXTsNCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50LnZhbHVlcykgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGN1cnJlbnQudmFsdWVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjdXJyZW50LnZhbHVlc1tqXSwNCgkJCQkJCSAgICByYiA9IHZhbHVlLnJiOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkUmFkaW9CdXR0b25MaXN0KHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQoJyMnICsgdmFsdWUua2V5LCB0aGlzLnNlY3Rpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5wdXQgfHwgJGlucHV0Lmxlbmd0aCA9PT0gMCkgeyAvL3JhZGlvIHYgc3RyYW5rb3ZhY2ljaCBzZWtjaWFjaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJzAnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dCA9ICQoJ2lucHV0W25hbWU9IicgKyB2YWx1ZS5rZXkgKyAnIl0nLCB0aGlzLnNlY3Rpb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXRbdmFsdWUudmFsdWUgLSAxXS5jaGVja2VkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlucHV0LmlzKCc6cmFkaW8nKSB8fCAkaW5wdXQuaXMoJzpjaGVja2JveCcpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dFswXS5jaGVja2VkID0gKHZhbHVlLnZhbHVlID09PSB0cnVlIHx8IHZhbHVlLnZhbHVlID09ICcxJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQudmFsKHZhbHVlLnZhbHVlKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5lcnJvclR5cGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRvciA9IHRoaXMub3B0aW9ucy52YWxpZGF0b3I7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgJiYgdmFsaWRhdG9yLnNldHRpbmdzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZXJyb3JUeXBlID09PSAnZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuYWRkQ2xhc3ModmFsaWRhdG9yLnNldHRpbmdzLmVycm9yQ2xhc3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5lcnJvclR5cGUgPT09ICd3Jykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5hZGRDbGFzcyh2YWxpZGF0b3Iuc2V0dGluZ3Mud2FybmluZ0NsYXNzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBnb1RvUGFnZTogZnVuY3Rpb24gKHBhZ2UpIHsNCiAgICAgICAgICAgIGlmIChwYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7DQogICAgICAgICAgICAgICAgcGFnZSA9IHRoaXMudG90YWxQYWdlczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHBhZ2UgPCAxKSB7DQogICAgICAgICAgICAgICAgcGFnZSA9IDE7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbC50ZXh0KHRoaXMuY3VycmVudFBhZ2UpOw0KICAgICAgICAgICAgdGhpcy5yZXNldExheW91dCgpOw0KICAgICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBnZXRTZWN0aW9uTmFtZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zZWN0aW9uTmFtZSB8fCAnJzsNCiAgICAgICAgfSwNCg0KICAgICAgICBnZXRTZWN0aW9uWG1sTm9kZU5hbWU6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMueG1sTm9kZU5hbWUgfHwgJyc7DQogICAgICAgIH0sDQoNCiAgICAgICAgZ2V0Q3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlOw0KICAgICAgICB9LA0KDQogICAgICAgIGZvY3VzaW46IGZ1bmN0aW9uIChlbGVtZW50SWQpIHsNCiAgICAgICAgICAgIGlmIChlbGVtZW50SWQpIHsNCiAgICAgICAgICAgICAgICAkKCcjJyArIGVsZW1lbnRJZCwgdGhpcy5zZWN0aW9uKS5mb2N1cygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIGdldFZhbHVlRm9yOiBmdW5jdGlvbiAoZWxlbWVudElkLCBwYWdlKSB7DQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzID4gMCAmJiBwYWdlID09PSB0aGlzLmN1cnJlbnRQYWdlKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgcGFnZSA9IHBhZ2UgfHwgMTsNCiAgICAgICAgICAgICAgICBpZiAocGFnZSA+IHRoaXMucGFnZXMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB2YXIgcGFnZVZhbHVlcyA9IHRoaXMucGFnZXNbcGFnZSAtIDFdOw0KDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlVmFsdWVzLnZhbHVlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYWdlVmFsdWVzLnZhbHVlc1tpXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmtleSA9PT0gZWxlbWVudElkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUgfHwgJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICAgICAgfSwNCg0KICAgICAgICBnZXRWYWx1ZXNGb3I6IGZ1bmN0aW9uIChlbGVtZW50SWQpIHsNCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsNCg0KICAgICAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA+IDApIHsNCiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDdXJyZW50UGFnZSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgcGFnZVZhbHVlcyA9IHRoaXMucGFnZXNbaV07DQoNCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhZ2VWYWx1ZXMudmFsdWVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHBhZ2VWYWx1ZXMudmFsdWVzW2pdOw0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUua2V5ID09PSBlbGVtZW50SWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlLnZhbHVlIHx8ICcnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgfSwNCg0KICAgICAgICB2YWxpZGF0ZVBhZ2U6IGZ1bmN0aW9uIChwYWdlKSB7DQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzIDwgcGFnZSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHBhZ2VWYWx1ZXMgPSB0aGlzLnBhZ2VzW3BhZ2UgLSAxXS52YWx1ZXM7DQoNCiAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSB0aGlzLm9wdGlvbnMudmFsaWRhdG9yOw0KICAgICAgICAgICAgaWYgKCF2YWxpZGF0b3IpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhbGlkYXRvci5zZWN0aW9uU2NvcGUgPSB7DQogICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRTZWN0aW9uTmFtZSgpLA0KICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsDQogICAgICAgICAgICAgICAgdmFsdWVzOiBwYWdlVmFsdWVzDQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VWYWx1ZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgcGFnZVZhbHVlID0gcGFnZVZhbHVlc1tpXTsNCiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9ICQoJyMnICsgcGFnZVZhbHVlLmtleSwgdGhpcy5zZWN0aW9uKQ0KICAgICAgICAgICAgICAgIGlmICghZWxlbSB8fCBlbGVtLmxlbmd0aCA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBlbGVtID0gJCgnaW5wdXRbbmFtZT0iJyArIHBhZ2VWYWx1ZS5rZXkgKyAnIl0nLCB0aGlzLnNlY3Rpb24pWzBdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YWxpZGF0b3IuY2hlY2soZWxlbSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0b3Iuc2VjdGlvblNjb3BlOw0KICAgICAgICB9LA0KDQogICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBpZiAodGhpcy50b3RhbFBhZ2VzID4gMCkgew0KICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUN1cnJlbnRQYWdlKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHRoaXMudG90YWxQYWdlczsgaSsrKSB7DQogICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhZ2UoaSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgdmFsaWRhdGVFbGVtZW50T25QYWdlOiBmdW5jdGlvbiAoZWxlbWVudElkLCBwYWdlLCBydWxlTmFtZSkgew0KICAgICAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA8IHBhZ2UpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPiAwKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zYXZlQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHBhZ2VWYWx1ZXMgPSB0aGlzLnBhZ2VzW3BhZ2UgLSAxXS52YWx1ZXM7DQogICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gdGhpcy5vcHRpb25zLnZhbGlkYXRvcjsNCiAgICAgICAgICAgIGlmICghdmFsaWRhdG9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YWxpZGF0b3Iuc2VjdGlvblNjb3BlID0gew0KICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U2VjdGlvbk5hbWUoKSwNCiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLA0KICAgICAgICAgICAgICAgIHZhbHVlczogcGFnZVZhbHVlcywNCiAgICAgICAgICAgICAgICBydWxlTmFtZTogcnVsZU5hbWUNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIHZhbGlkYXRvci5lbGVtZW50KCQoJyMnICsgZWxlbWVudElkLCB0aGlzLnNlY3Rpb24pKTsNCiAgICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0b3Iuc2VjdGlvblNjb3BlOw0KICAgICAgICB9LA0KDQogICAgICAgIHJlc2V0U2VjdGlvbjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5wYWdlcyA9IFtdOw0KDQogICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxOw0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzTGFiZWwudGV4dCh0aGlzLnRvdGFsUGFnZXMpOw0KDQogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTsNCiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VMYWJlbC50ZXh0KHRoaXMuY3VycmVudFBhZ2UpOw0KDQogICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnMoKTsNCg0KICAgICAgICAgICAgdGhpcy5yZXNldExheW91dCgpOw0KICAgICAgICB9LA0KDQogICAgICAgIHN0cnVjdHVyZTogbnVsbCwNCg0KICAgICAgICBidWlsZFVwU3RydWN0dXJlOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuc2VjdGlvbjsNCiAgICAgICAgICAgIHZhciByb3dzID0gJCgnLmxheW91dFJvdycsIHNlY3Rpb24pDQoJCQkJLmZpbHRlcihmdW5jdGlvbiAoXywgcm93KSB7DQoJCQkJICAgIHJldHVybiAkKHJvdykuYXR0cignaXNlbXB0eScpICE9PSAndHJ1ZSc7DQoJCQkJfSkubWFwKGZ1bmN0aW9uIChfLCByb3cpIHsNCgkJCQkgICAgdmFyICRyb3cgPSAkKHJvdyk7DQoJCQkJICAgIHJldHVybiB7IGlkOiByb3cuaWQsIG5vZGU6ICRyb3cuY2hpbGRyZW4oJ2lucHV0OmhpZGRlbicpLmF0dHIoJ25hbWUnKSwgcGFyZW50OiAkcm93LnBhcmVudCgpLmNsb3Nlc3QoJy5sYXlvdXRSb3cnKVswXSwgZWxlbWVudDogcm93IH07DQoJCQkJfSk7DQoNCiAgICAgICAgICAgIHZhciBzZWN0aW9uRWxlbWVudCA9IHNlY3Rpb25bMF07DQoNCiAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlID0gew0KICAgICAgICAgICAgICAgIGlkOiBzZWN0aW9uRWxlbWVudC5pZCwNCiAgICAgICAgICAgICAgICBub2RlOiBzZWN0aW9uLmNoaWxkcmVuKCdpbnB1dDpoaWRkZW4nKS5hdHRyKCduYW1lJyksDQogICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLA0KICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHNlY3Rpb25FbGVtZW50DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB2YXIgYnVpbGRSb3dzUmVjdXJzaXZlID0gZnVuY3Rpb24gKHBhcmVudCkgew0KICAgICAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbiA9ICQuZ3JlcChyb3dzLCBmdW5jdGlvbiAocm93KSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cucGFyZW50ID09PSBwYXJlbnQuZWxlbWVudDsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4gJiYgcGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAkLmVhY2gocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAoXywgY2hpbGQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUm93c1JlY3Vyc2l2ZShjaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGlmIChyb3dzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIGJ1aWxkUm93c1JlY3Vyc2l2ZSh0aGlzLnN0cnVjdHVyZSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBlbGVtZW50cyA9ICQoJzppbnB1dDpub3QoOmhpZGRlbiknLCBzZWN0aW9uKS5tYXAoZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgJGVsZW1lbnQgPSAkKGVsZW1lbnQpOw0KICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBlbGVtZW50LmlkLCBuYW1lOiBlbGVtZW50Lm5hbWUsIGVsZW1lbnQ6IGVsZW1lbnQsIHBhcmVudDogJGVsZW1lbnQuY2xvc2VzdCgnLmxheW91dFJvdycpWzBdIH07DQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgdmFyIGJ1aWxkRWxlbWVudHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyZW50KSB7DQogICAgICAgICAgICAgICAgcGFyZW50LmVsZW1lbnRzID0gJC5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnQgPT09IHBhcmVudC5lbGVtZW50Ow0KICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbiAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICQuZWFjaChwYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uIChfLCBjaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRFbGVtZW50c1JlY3Vyc2l2ZShjaGlsZCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBidWlsZEVsZW1lbnRzUmVjdXJzaXZlKHRoaXMuc3RydWN0dXJlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICB3cml0ZVhtbDogZnVuY3Rpb24gKHNiLCBwYWdlKSB7DQogICAgICAgICAgICBpZiAoIXRoaXMuc3RydWN0dXJlKSB7DQogICAgICAgICAgICAgICAgdGhpcy5idWlsZFVwU3RydWN0dXJlKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghc2IpIHsNCiAgICAgICAgICAgICAgICBzYiA9IG5ldyAkLlN0cmluZ0J1aWxkZXIoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHdyaXRlUmVjdXJzaXZlID0gZnVuY3Rpb24gKHBhcmVudCkgew0KDQogICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIHBhcmVudC5ub2RlICsgJz4nKTsNCg0KICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7DQogICAgICAgICAgICAgICAgdmFyIGxhc3RSYWRpbyA9ICckJCQnOw0KICAgICAgICAgICAgICAgIHZhciBsYXN0UmFkaW9FbXB0eSA9IHRydWU7DQogICAgICAgICAgICAgICAgJC5lYWNoKHBhcmVudC5lbGVtZW50cywgZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBhaXIgPSAkLmdyZXAocGFnZS52YWx1ZXMsIGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmtleSA9PT0gZWxlbWVudC5pZDsNCiAgICAgICAgICAgICAgICAgICAgfSlbMF07DQogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmVsZW1lbnQ7DQogICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLmlzKCc6cmFkaW8nKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RSYWRpbyAhPSBlbGVtZW50Lm5hbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFJhZGlvRW1wdHkgJiYgbGFzdFJhZGlvICE9ICckJCQnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnPCcgKyBsYXN0UmFkaW8gKyAnPicgKyAwICsgJzwvJyArIGxhc3RSYWRpbyArICc+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSYWRpbyA9IGVsZW1lbnQubmFtZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0UmFkaW9FbXB0eSA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpciAmJiBwYWlyLnZhbHVlID09PSB0cnVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIGVsZW1lbnQubmFtZSArICc+JyArIGluZGV4ICsgJzwvJyArIGVsZW1lbnQubmFtZSArICc+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJhZGlvRW1wdHkgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKGVsZW1lbnQpLmlzKCc6Y2hlY2tib3gnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIHBhaXIua2V5ICsgJz4nICsgKHBhaXIudmFsdWUgIT09IHVuZGVmaW5lZCAmJiAocGFpci52YWx1ZSA9PT0gdHJ1ZSB8fCBwYWlyLnZhbHVlID09ICcxJykgPyAxIDogMCkgKyAnPC8nICsgcGFpci5rZXkgKyAnPicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFpci52YWx1ZSAmJiBwYWlyLnZhbHVlLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cignaXNlbXB0eScpID09IHVuZGVmaW5lZCB8fCAkKGVsZW1lbnQpLmF0dHIoJ2lzZW1wdHknKSA9PSAiZmFsc2UiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50KS5hdHRyKCJjbGFzcyIpICYmICQoZWxlbWVudCkuYXR0cigiY2xhc3MiKS5pbmRleE9mKCJkYXRlIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYWlyLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQpLmlzKCdbY2xhc3MqPWRhdGVdJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB4bWxIZWxwZXIudG9YbWxEYXRlKHZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIHBhaXIua2V5ICsgJz4nICsgdmFsdWUgKyAnPC8nICsgcGFpci5rZXkgKyAnPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwnICsgcGFpci5rZXkgKyAnPicgKyBwYWlyLnZhbHVlICsgJzwvJyArIHBhaXIua2V5ICsgJz4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2IuYXBwZW5kKCc8JyArIHBhaXIua2V5ICsgJyAvPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zYi5hcHBlbmQoJzwnICsgZWxlbWVudCArICcgLz4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGlmIChsYXN0UmFkaW9FbXB0eSAmJiBsYXN0UmFkaW8gIT0gJyQkJCcpIHsNCiAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCc8JyArIGxhc3RSYWRpbyArICc+JyArIDAgKyAnPC8nICsgbGFzdFJhZGlvICsgJz4nKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7DQogICAgICAgICAgICAgICAgICAgICQuZWFjaChwYXJlbnQuY2hpbGRyZW4sIGZ1bmN0aW9uIChfLCBjaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVSZWN1cnNpdmUoY2hpbGQpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJzwvJyArIHBhcmVudC5ub2RlICsgJz4nKTsNCg0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgd3JpdGVSZWN1cnNpdmUodGhpcy5zdHJ1Y3R1cmUpOw0KICAgICAgICB9LA0KDQogICAgICAgIGxvYWRYbWw6IGZ1bmN0aW9uICh4bWxOb2RlLCBub2RlTmFtZSkgew0KICAgICAgICAgICAgaWYgKCF4bWxOb2RlIHx8ICF4bWxOb2RlLmNoaWxkTm9kZXMpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHRoaXMucmVzZXRTZWN0aW9uKCk7DQoNCiAgICAgICAgICAgIGlmICghdGhpcy5zdHJ1Y3R1cmUpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkVXBTdHJ1Y3R1cmUoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGxvYWRYbWxSZWN1cnNpdmUgPSBmdW5jdGlvbiAoc3RydWN0dXJlTm9kZSwgc2VjdGlvbk5vZGUsIHZhbHVlcykgew0KICAgICAgICAgICAgICAgIGlmICghc2VjdGlvbk5vZGUgfHwgIXNlY3Rpb25Ob2RlLmNoaWxkTm9kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25Ob2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25DaGlsZE5vZGUgPSBzZWN0aW9uTm9kZS5jaGlsZE5vZGVzW2pdOw0KDQogICAgICAgICAgICAgICAgICAgIHZhciBwb3NzaWJsZVNlY3Rpb25zID0gJC5ncmVwKHN0cnVjdHVyZU5vZGUuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLm5vZGUgPT09IHNlY3Rpb25DaGlsZE5vZGUubm9kZU5hbWU7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZVNlY3Rpb25zLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFhtbFJlY3Vyc2l2ZShwb3NzaWJsZVNlY3Rpb25zWzBdLCBzZWN0aW9uQ2hpbGROb2RlLCB2YWx1ZXMpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlRWxlbWVudHMgPSAkLmdyZXAoc3RydWN0dXJlTm9kZS5lbGVtZW50cywgZnVuY3Rpb24gKGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGVsZW1lbnQuZWxlbWVudCkuaXMoJzpyYWRpbycpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQubmFtZSA9PT0gc2VjdGlvbkNoaWxkTm9kZS5ub2RlTmFtZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmlkID09PSBzZWN0aW9uQ2hpbGROb2RlLm5vZGVOYW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVFbGVtZW50cy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNlY3Rpb25DaGlsZE5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHBvc3NpYmxlRWxlbWVudHNbMF07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50LmVsZW1lbnQpLmlzKCdbY2xhc3MqPWRhdGVdJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHhtbEhlbHBlci5mcm9tWG1sRGF0ZSh2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChlbGVtZW50LmVsZW1lbnQpLmlzKCc6Y2hlY2tib3gnLyosIDpyYWRpbycqLykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSAnMSc7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh7IGtleTogc2VjdGlvbkNoaWxkTm9kZS5ub2RlTmFtZSwgdmFsdWU6IHZhbHVlIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4bWxOb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0geG1sTm9kZS5jaGlsZE5vZGVzW2ldOw0KDQogICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlTmFtZSAhPT0gbm9kZU5hbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdOw0KICAgICAgICAgICAgICAgIGxvYWRYbWxSZWN1cnNpdmUodGhpcy5zdHJ1Y3R1cmUsIGNoaWxkTm9kZSwgdmFsdWVzKTsNCiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzLnB1c2goeyB2YWx1ZXM6IHZhbHVlcyB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gdGhpcy5wYWdlcy5sZW5ndGggfHwgMTsNCiAgICAgICAgICAgIHRoaXMudG90YWxQYWdlc0xhYmVsLnRleHQodGhpcy50b3RhbFBhZ2VzKTsNCg0KICAgICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFBhZ2UoKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgJC5mbi5wYWdlYWJsZVNlY3Rpb24gPSBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICB2YXIgc2VsZiA9IHRoaXM7DQoNCiAgICAgICAgaWYgKCFvcHRpb25zKSB7DQogICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhKCdwYWdlYWJsZS1zZWN0aW9uJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gJC5lYWNoKHNlbGYsIGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7DQogICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgUGFnZWFibGVTZWN0aW9uKCk7DQogICAgICAgICAgICAgICAgc2VjdGlvbi5pbml0KGVsZW1lbnQsIG9wdGlvbnMpOw0KDQogICAgICAgICAgICAgICAgJChlbGVtZW50KS5kYXRhKCdwYWdlYWJsZS1zZWN0aW9uJywgc2VjdGlvbik7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH07DQp9KShqUXVlcnkpOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBGdW5rY2llIHByZSBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpmdW5jdGlvbiB6YW9rcnVobGlfZG9sZShjaXNsbywgcG9jX2Rlc2F0aW4pIHsNCiAgICB2cmF0ID0gY2lzbG87DQogICAgcG9tYiA9IE1hdGgucG93KDEwLCBwb2NfZGVzYXRpbik7DQogICAgcG9tYSA9IGNpc2xvICogcG9tYjsNCiAgICB2cmF0ID0gTWF0aC5mbG9vcihwb21hICsgMC4wMDAwMDAwMSkgLyBwb21iOw0KICAgIHJldHVybiB2cmF0LnRvRml4ZWQocG9jX2Rlc2F0aW4pOw0KfQ0KDQpmdW5jdGlvbiB6YW9rcnVobGlfZG9sZW1qKHBvY19kZXNhdGluLCBjaXNsbykgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLmZsb29yKHBvbWEgKyAwLjAwMDAwMDAxKSAvIHBvbWI7DQogICAgcmV0dXJuIHZyYXQudG9GaXhlZChwb2NfZGVzYXRpbik7DQp9DQoNCmZ1bmN0aW9uIHphb2tydWhsaV9ob3JlKGNpc2xvLCBwb2NfZGVzYXRpbikgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLmNlaWwocG9tYSkgLyBwb21iOw0KICAgIHJldHVybiB2cmF0LnRvRml4ZWQocG9jX2Rlc2F0aW4pOw0KfQ0KDQpmdW5jdGlvbiB6YW9rcnVobGlfaG9yZW1qKHBvY19kZXNhdGluLCBjaXNsbykgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLmNlaWwocG9tYSkgLyBwb21iOw0KICAgIHJldHVybiB2cmF0LnRvRml4ZWQocG9jX2Rlc2F0aW4pOw0KfQ0KDQoNCmZ1bmN0aW9uIHphb2tydWhsaV9tYXRlKGNpc2xvLCBwb2NfZGVzYXRpbikgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLnJvdW5kKHBvbWEpIC8gcG9tYjsNCiAgICByZXR1cm4gdnJhdC50b0ZpeGVkKHBvY19kZXNhdGluKTsNCn0NCg0KZnVuY3Rpb24gemFva3J1aGxpX21hdG1qKHBvY19kZXNhdGluLCBjaXNsbykgew0KICAgIHZyYXQgPSBjaXNsbzsNCiAgICBwb21iID0gTWF0aC5wb3coMTAsIHBvY19kZXNhdGluKTsNCiAgICBwb21hID0gY2lzbG8gKiBwb21iOw0KICAgIHZyYXQgPSBNYXRoLnJvdW5kKHBvbWEpIC8gcG9tYjsNCiAgICByZXR1cm4gdnJhdC50b0ZpeGVkKHBvY19kZXNhdGluKTsNCn0NCg0KZnVuY3Rpb24gY2lzbG9fem5hbWllbmtvKGNpc2xvKSB7DQogICAgdnJhdCA9IGNpc2xvOw0KICAgIGlmIChjaXNsbyA+IDApIHsgdnJhdCA9ICcrJyArIHZyYXQ7IH0NCiAgICByZXR1cm4gdnJhdDsNCn0NCg0KZnVuY3Rpb24gc3VtX29wYWsoZWxlbWVudCkgew0KICAgIHZhciBzdW0gPSAnJzsNCg0KICAgICQoIltpZF49JyIgKyBlbGVtZW50ICsgIiddIikuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIGlmICghaXNOYU4odGhpcy52YWx1ZSkpDQogICAgICAgICAgICBzdW0gPSBOdW1iZXIoc3VtKSArIE51bWJlcih0aGlzLnZhbHVlKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiBzdW07DQp9DQoNCmZ1bmN0aW9uIGNvdW50X29wYWsoZWxlbWVudCkgew0KICAgIHJldHVybiAkKCJbaWRePSciICsgZWxlbWVudCArICInXSIpLmxlbmd0aDsNCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQp2YXIgZGlzYWJsZVZhbGlkYXRvclBvc3RmaXggPSAiX1NlY3Rpb25JbmNyZW1lbnRfIjsNCnZhciBkaXNhYmxlVmFsaWRhdG9yUHJlZml4ID0gIkRvTm90VmFsaWRhdGVfIjsNCnZhciByZXBlYXRpbmdQb3N0Zml4ID0gIl9SZXBlYXRpbmdfIjsNCi8vLy8vLy8vLy8vLy8vLy8gTUwgLy8vLy8vLy8vLy8vLy8NCnZhciByZXBlYXRpbmdFbGVtZW50UG9zdGZpeCA9ICItIjsNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQp2YXIgY291bnQgPSAwOw0KdmFyIGZpZWxkSW5kZXggPSAwOw0KdmFyIHNpZ24gPSAiLSI7DQp2YXIgZGlzYWJsZVZhbGlkYXRvcnMgPSAiZGlzYWJsZVZhbGlkYXRvcnMiOw0KDQpmdW5jdGlvbiBHZXRMb29rdXBVcmkoKSB7DQogICAgdHJ5IHsNCiAgICAgICAgaWYgKGxvb2t1cFVyaSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIHJldHVybiBsb29rdXBVcmk7DQogICAgICAgIH0NCiAgICB9IGNhdGNoIChlcnIpIHsgfQ0KDQogICAgcmV0dXJuICdodHRwczovL3d3dy5zbG92ZW5za28uc2svc3RhdGljL3V0aWwvZmlsbGVyL2xvb2t1cC5hc3B4JzsNCn0NCg0KJC5mbi5Jbml0SGllcmFyY2hpY2FsbHlUcmVlID0gZnVuY3Rpb24gKCkgew0KICAgIC8vYWsgc3UgbmVqYWtlIGhpZXJhcmNoaWNrZSBjb21wb25lbnR5DQogICAgdmFyIGhpZXJhcmNoaWNhbFRyaWVzID0gdGhpcy5maW5kKCIuaGllcmFyY2hpY2FsVHJlZSIpOw0KDQogICAgaWYgKGhpZXJhcmNoaWNhbFRyaWVzLmxlbmd0aCA9PSAwKSB7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0NCg0KICAgIC8vemlza2FuaWUgYWRyZXN5IHNsdXpieQ0KICAgIHZhciB1cmwgPSBHZXRMb29rdXBVcmkoKTsNCg0KICAgIC8vbmFjaXRhbmllIGFkcmVzeSBzbHV6YnkNCiAgICB2YXIgbG9hZENoaWxkcmVuID0gZnVuY3Rpb24gKG5vZGUsIGxldmVsLCBub2RlSWQsIGNhbGxiYWNrLCBsb29rdXBJRCwgbG9va3VwU291cmNlKSB7DQogICAgICAgIHZhciBkYXRhID0gJ2lkPScgKyBsb29rdXBJRCArICcmbG9va3VwU291cmNlPScgKyBsb29rdXBTb3VyY2U7DQogICAgICAgIGlmIChub2RlSWQgIT0gbnVsbCkgew0KICAgICAgICAgICAgZGF0YSArPSAiJnBhcmVudElkPSIgKyBub2RlSWQ7DQogICAgICAgIH0NCg0KICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgYXN5bmM6IHRydWUsDQogICAgICAgICAgICB1cmw6IHVybCwNCiAgICAgICAgICAgIGRhdGE6IGRhdGEsDQogICAgICAgICAgICBkYXRhVHlwZTogImpzb25wIg0KICAgICAgICB9KS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgICAgICBpZiAoZGF0YS5pVG90YWxEaXNwbGF5UmVjb3JkcyA9PSAwKSB7DQogICAgICAgICAgICAgICAgbm9kZS5oYXNfY2hpbGRyZW4gPSBmYWxzZTsNCiAgICAgICAgICAgICAgICBub2RlLmJ1c3kgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICBkZWxldGUgbm9kZS5jaGlsZHJlblswXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KDQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmFhRGF0YS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEuYWFEYXRhW2ldWzBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEuYWFEYXRhW2ldWzFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2NoaWxkcmVuOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGUubGV2ZWwgKyAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdDQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7DQogICAgICAgIH0pDQogICAgICAgIC5lcnJvcihmdW5jdGlvbiAoZGF0YSkgew0KDQogICAgICAgIH0pOw0KICAgIH07DQoNCiAgICBoaWVyYXJjaGljYWxUcmllcy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGhpZXJhcmNoaWNhbFRyZWUgPSAkKHRoaXMpOw0KICAgICAgICBpZiAoIWhpZXJhcmNoaWNhbFRyZWUuaGFzQ2xhc3MoImNob3NlbnRyZWUiKSkgew0KICAgICAgICAgICAgaGllcmFyY2hpY2FsVHJlZS5hZGRDbGFzcygiY2hvc2VudHJlZSIpOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHNwYW5Mb29rdXBDb25maWd1cmF0aW9uID0gaGllcmFyY2hpY2FsVHJlZS5zaWJsaW5ncygic3Bhbi5sb29rdXBDb25maWd1cmF0aW9uIik7DQogICAgICAgIHZhciByZW1vdGVTb3VyY2VJZGVudGlmaWVyID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ucmVtb3RlU291cmNlSWRlbnRpZmllciIpOw0KICAgICAgICB2YXIgcmVtb3RlTG9va3VwQ29kZSA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLnJlbW90ZUxvb2t1cENvZGUiKTsNCiAgICAgICAgdmFyIHJlbW90ZVNvdXJjZUlkID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ubG9va3VwQ29tcG9uZW50SWQiKTsNCiAgICAgICAgdmFyIHJlbW90ZVNvdXJjZU5hbWUgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5sb29rdXBDb21wb25lbnROYW1lIik7DQoNCiAgICAgICAgaWYgKHJlbW90ZVNvdXJjZUlkZW50aWZpZXIubGVuZ3RoID4gMCAmJiByZW1vdGVMb29rdXBDb2RlLmxlbmd0aCA+IDAgJiYgcmVtb3RlU291cmNlSWQubGVuZ3RoID4gMCAmJiByZW1vdGVTb3VyY2VOYW1lLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGhpZXJhcmNoaWNhbFRyZWUuY2hvc2VudHJlZSh7DQogICAgICAgICAgICAgICAgaW5wdXRJZDogcmVtb3RlU291cmNlSWRbMF0uaW5uZXJIVE1MLA0KICAgICAgICAgICAgICAgIGlucHV0TmFtZTogcmVtb3RlU291cmNlTmFtZVswXS5pbm5lckhUTUwsDQogICAgICAgICAgICAgICAgd2lkdGg6IDUwMCwNCiAgICAgICAgICAgICAgICBkZWVwTG9hZDogdHJ1ZSwNCiAgICAgICAgICAgICAgICBzaG93dHJlZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAobm9kZSwgY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGUuaWQgPT0gMCA/IG51bGwgOiBub2RlLmlkOw0KICAgICAgICAgICAgICAgICAgICBsb2FkQ2hpbGRyZW4obm9kZSwgMCwgbm9kZUlkLCBjYWxsYmFjaywgcmVtb3RlTG9va3VwQ29kZVswXS5pbm5lckhUTUwsIHJlbW90ZVNvdXJjZUlkZW50aWZpZXJbMF0uaW5uZXJIVE1MKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9DQoNCiQuZm4uSW5pdEhlbHAgPSBmdW5jdGlvbiAoKSB7DQoNCiAgICB2YXIgSW5mb0RpYWxvZyA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgaW5mb0ljb24gPSAkKHRoaXMpOw0KICAgICAgICB2YXIgbW9kYWwgPSBpbmZvSWNvbi5maW5kKCIuZGlhbG9nLW1vZGFsIik7DQogICAgICAgIG1vZGFsLmRpYWxvZyh7DQogICAgICAgICAgICBwb3NpdGlvbjogew0KICAgICAgICAgICAgICAgIG15OiAibGVmdCIsDQogICAgICAgICAgICAgICAgYXQ6ICJyaWdodCIsDQogICAgICAgICAgICAgICAgb2Y6IGluZm9JY29uLA0KICAgICAgICAgICAgICAgIG9mZnNldDogIjIwIDIwIg0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIChldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICBpbmZvSWNvbi51bmJpbmQoJ21vdXNlb3V0Jyk7DQogICAgICAgICAgICAgICAgaW5mb0ljb24ubW91c2VvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGlhbG9nKCdkZXN0cm95Jyk7DQogICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRUbyhtb2RhbCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgaW5mb0ljb24ubW91c2Vkb3duKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5mb0ljb24udW5iaW5kKCdtb3VzZW91dCcpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTsNCiAgICAgICAgICAgICAgICB0YXJnZXQuZGlhbG9nKCdkZXN0cm95Jyk7DQogICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZFRvKG1vZGFsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsNCg0KICAgIHRoaXMuZmluZCgiLmluZm8iKS5tb3VzZW92ZXIoSW5mb0RpYWxvZyk7DQoNCiAgICByZXR1cm4gdGhpczsNCn0NCg0KJC5mbi5Jbml0TXVsdGlDb21ib2JveCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgZWxlbWVudHMgPSAkKCIubXVsdGlDb21ib2JveCIpOw0KICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIGVsZW1lbnRzLm11bHRpc2VsZWN0KCk7DQogICAgfQ0KfQ0KDQokLmZuLkRlbGV0ZU11bHRpQ29tYm9ib3ggPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGVsZW1lbnRzID0gJCgiLm11bHRpQ29tYm9ib3giKTsNCiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkgew0KICAgICAgICBlbGVtZW50cy5tdWx0aXNlbGVjdCgiZGVzdHJveSIpOw0KICAgIH0NCn0NCg0KJC5mbi5Jbml0UmVtb3RlQ29tYm9ib3ggPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGVsZW1lbnRzID0gdGhpcy5maW5kKCIucmVtb3RlQ29tYm9Cb3giKTsNCiAgICB2YXIgbGF5b3V0Um93ID0gdGhpczsNCiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkgew0KICAgICAgICBlbGVtZW50cy5jaGFuZ2UoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHJlbW90ZUNvbWJvQm94ID0gJCh0aGlzKTsNCg0KICAgICAgICAgICAgaWYgKHJlbW90ZUNvbWJvQm94LmF0dHIoImZpZWxkSUQiKSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICBSZW1vdGVDb21ib2JveE5ldyhyZW1vdGVDb21ib0JveCwgbGF5b3V0Um93KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIFJlbW90ZUNvbWJvYm94T2xkKHJlbW90ZUNvbWJvQm94LCBsYXlvdXRSb3cpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICByZXR1cm4gdGhpczsNCn0NCg0KZnVuY3Rpb24gUmVtb3RlQ29tYm9ib3hOZXcocmVtb3RlQ29tYm9Cb3gsIGxheW91dFJvdykgew0KICAgIHZhciByZW1vdGVDb21ib2JveElkID0gcmVtb3RlQ29tYm9Cb3guYXR0cigiaWQiKTsNCiAgICB2YXIgcmVwZXRpb25zU2VjdGlvbklkID0gIiI7DQogICAgdmFyIHJlcGV0aW9uc1NlY3Rpb25JZFBvc3RmaXggPSAiIjsNCiAgICB2YXIgaWRQYXJ0cyA9IHJlbW90ZUNvbWJvQm94LmF0dHIoImlkIikuc3BsaXQoJy0nKTsNCiAgICBpZiAoaWRQYXJ0cy5sZW5ndGggPiAxKSB7DQogICAgICAgIHJlcGV0aW9uc1NlY3Rpb25JZCA9IGlkUGFydHNbaWRQYXJ0cy5sZW5ndGggLSAxXTsNCiAgICAgICAgcmVtb3RlQ29tYm9ib3hJZCA9IGlkUGFydHNbMF07DQogICAgICAgIHJlcGV0aW9uc1NlY3Rpb25JZFBvc3RmaXggPSAiLSIgKyByZXBldGlvbnNTZWN0aW9uSWQ7DQogICAgfQ0KDQogICAgLy9uYWpkaSBuYWpibGl6c2kgc2tyeXR5IHNwYW4sIGt0b3J5IG9ic2FodWplIGluZm9ybWFjaXUgbyByZW1vdGVDb21ib2JveGUgDQogICAgdmFyIHNwYW5Mb29rdXBDb25maWd1cmF0aW9uID0gcmVtb3RlQ29tYm9Cb3guc2libGluZ3MoInNwYW4ubG9va3VwQ29uZmlndXJhdGlvbiIpOw0KICAgIHZhciBzcGFuTG9va3VwQ29tcG9uZW50SWQgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5sb29rdXBDb21wb25lbnRJZCIpOw0KICAgIHZhciBzcGFuRmllbGRJZCA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLmZpZWxkSWQiKTsNCg0KICAgIGlmIChzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7DQogICAgICAgIGlmIChzcGFuTG9va3VwQ29tcG9uZW50SWQubGVuZ3RoID4gMCAmJiBzcGFuRmllbGRJZC5sZW5ndGggPiAwICYmIHNwYW5Mb29rdXBDb21wb25lbnRJZFswXS5pbm5lckhUTUwgPT0gcmVtb3RlQ29tYm9ib3hJZCkgew0KICAgICAgICAgICAgdmFyIGZpZWxkSWQgPSBzcGFuRmllbGRJZFswXS5pbm5lckhUTUwgKyByZXBldGlvbnNTZWN0aW9uSWRQb3N0Zml4Ow0KICAgICAgICAgICAgdmFyIGZpZWxkcyA9IGxheW91dFJvdy5maW5kKCIjIiArIGZpZWxkSWQpOw0KICAgICAgICAgICAgZmllbGRzLmZpcnN0KCkudmFsKHJlbW90ZUNvbWJvQm94LnZhbCgpKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KLy90b2RvIG9ic29sZXRlDQpmdW5jdGlvbiBSZW1vdGVDb21ib2JveE9sZChyZW1vdGVDb21ib0JveCwgbGF5b3V0Um93KSB7DQogICAgdmFyIHJlcGV0aW9uc1NlY3Rpb25JZCA9ICIiOw0KICAgIHZhciBpZFBhcnRzID0gcmVtb3RlQ29tYm9Cb3guYXR0cigiaWQiKS5zcGxpdCgnLScpOw0KICAgIGlmIChpZFBhcnRzLmxlbmd0aCA+IDEpIHsNCiAgICAgICAgcmVwZXRpb25zU2VjdGlvbklkID0gaWRQYXJ0c1tpZFBhcnRzLmxlbmd0aCAtIDFdOw0KICAgIH0NCg0KICAgIHZhciBmaWVsZElkID0gcmVtb3RlQ29tYm9Cb3guYXR0cigiZmllbGRJRCIpOw0KICAgIHZhciBmaWVsZHMgPSBsYXlvdXRSb3cuZmluZCgiaW5wdXRbIiArICJmaWVsZGlkIiArICI9JyIgKyBmaWVsZElkICsgIiddIik7DQogICAgaWYgKHJlcGV0aW9uc1NlY3Rpb25JZCAhPSAiIikgew0KICAgICAgICBmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgZmllbGQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIGlkUGFydHNGaWxlcyA9IGZpZWxkLmF0dHIoImlkIikuc3BsaXQoJy0nKTsNCiAgICAgICAgICAgIGlmIChpZFBhcnRzRmlsZXNbaWRQYXJ0c0ZpbGVzLmxlbmd0aCAtIDFdID09IHJlcGV0aW9uc1NlY3Rpb25JZCkgew0KICAgICAgICAgICAgICAgIGZpZWxkcyA9IGZpZWxkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQoNCiAgICBpZiAoZmllbGRzLmxlbmd0aCA9PSAwKSB7DQogICAgICAgIGZpZWxkcyA9IGxheW91dFJvdy5maW5kKCJ0ZXh0YXJlYVsiICsgImZpZWxkaWQiICsgIj0nIiArIGZpZWxkSWQgKyAiJ10iKTsNCiAgICAgICAgaWYgKHJlcGV0aW9uc1NlY3Rpb25JZCAhPSAiIikgew0KICAgICAgICAgICAgZmllbGRzLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgdmFyIGlkUGFydHNGaWxlcyA9IGZpZWxkLmF0dHIoImlkIikuc3BsaXQoJy0nKTsNCiAgICAgICAgICAgICAgICBpZiAoaWRQYXJ0c0ZpbGVzW2lkUGFydHNGaWxlcy5sZW5ndGggLSAxXSA9PSByZXBldGlvbnNTZWN0aW9uSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gZmllbGQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoZmllbGRzLmxlbmd0aCA+IDApDQogICAgICAgIGZpZWxkcy5maXJzdCgpLnZhbChyZW1vdGVDb21ib0JveC52YWwoKSk7DQp9DQoNCiQuZm4uSW5pdFNlY3Rpb25BY2NvcmRpb24gPSBmdW5jdGlvbiAoKSB7DQogICAgdGhpcy5maW5kKCIuY2FwdGlvbiIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGNhcHRpb24gPSAkKHRoaXMpOw0KICAgICAgICB2YXIgbGF5b3V0Um93Q29udGVudCA9IGNhcHRpb24ubmV4dCgiLmNvbHVtbnMiKTsNCiAgICAgICAgLy92YXIgbGF5b3V0Um93ID0gbGF5b3V0Um93Q29udGVudC5wYXJlbnQoKTsNCiAgICAgICAgLy92YXIgaXNFbXB0eSA9IGxheW91dFJvdy5hdHRyKCdpc0VtcHR5Jyk7DQoNCiAgICAgICAgLy9pZiAoaXNFbXB0eSA9PSAndHJ1ZScpeyAgICAgICAgICAgICANCiAgICAgICAgLy8gICAgcmV0dXJuOw0KICAgICAgICAvL30NCg0KICAgICAgICB2YXIgYXJyb3dTcGFuID0gY2FwdGlvbi5jaGlsZHJlbigic3Bhbi51aS1pY29uIik7DQogICAgICAgIGFycm93U3Bhbi50b2dnbGVDbGFzcygidWktaWNvbi1jYXJhdC0xLW4iKS50b2dnbGVDbGFzcygidWktaWNvbi1jYXJhdC0xLXMiKTsNCiAgICAgICAgLy9sYXlvdXRSb3dDb250ZW50LnNsaWRlVG9nZ2xlKDApOw0KICAgICAgICBpZiAoYXJyb3dTcGFuLmhhc0NsYXNzKCJ1aS1pY29uLWNhcmF0LTEtbiIpKSB7DQogICAgICAgICAgICBsYXlvdXRSb3dDb250ZW50LnNob3coKTsNCiAgICAgICAgfSBlbHNlIGlmIChhcnJvd1NwYW4uaGFzQ2xhc3MoInVpLWljb24tY2FyYXQtMS1zIikpIHsNCiAgICAgICAgICAgIGxheW91dFJvd0NvbnRlbnQuaGlkZSgpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICByZXR1cm4gdGhpczsNCn07DQoNCi8vIFNrb2sgbmEgcG96YWRvdmFueSBlbGVtZW50IHMgcHJpcGFkbnltIHJvemJhbGVuaW0gemJhbGVueWNoIHNla2NpaSBpbnRlcmFrY2lvdSBjaHlib3ZlaiBobGFza3kNCmZ1bmN0aW9uIGV4cGFuZExheW91dFJvd3NBbmRGb2N1cygpIHsNCiAgICAkKCcuZXJyb3JbZm9yXSwgLndhcm5pbmdbZm9yXScpLmxpdmUoImZvY3VzIGNsaWNrIiwgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KDQogICAgICAgIHZhciBjbG9zZXN0TGF5b3RSb3cgPSAkKCJbaWQ9JyIgKyB0aGlzLmh0bWxGb3IgKyAiJ10iKS5jbG9zZXN0KCcubGF5b3V0Um93Jyk7DQogICAgICAgIHZhciBmaXJzdENhcHRpb247DQoNCiAgICAgICAgaWYgKGNsb3Nlc3RMYXlvdFJvd1swXSkgew0KICAgICAgICAgICAgZmlyc3RDYXB0aW9uID0gJChjbG9zZXN0TGF5b3RSb3dbMF0pLmZpbmQoJy5jYXB0aW9uJykuZmlyc3QoKTsNCg0KICAgICAgICAgICAgaWYgKGZpcnN0Q2FwdGlvbi5jaGlsZHJlbigic3Bhbi51aS1pY29uIikuaGFzQ2xhc3MoInVpLWljb24tY2FyYXQtMS1zIikpDQogICAgICAgICAgICAgICAgZmlyc3RDYXB0aW9uLmNsaWNrKCk7DQogICAgICAgIH0NCg0KICAgICAgICB3aGlsZSAoY2xvc2VzdExheW90Um93WzBdKSB7DQogICAgICAgICAgICBpZiAoY2xvc2VzdExheW90Um93WzBdLnBhcmVudEVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICBjbG9zZXN0TGF5b3RSb3cgPSAkKGNsb3Nlc3RMYXlvdFJvd1swXS5wYXJlbnRFbGVtZW50KS5jbG9zZXN0KCcubGF5b3V0Um93Jyk7DQoNCiAgICAgICAgICAgICAgICBpZiAoY2xvc2VzdExheW90Um93WzBdKSB7DQogICAgICAgICAgICAgICAgICAgIGZpcnN0Q2FwdGlvbiA9ICQoY2xvc2VzdExheW90Um93WzBdKS5maW5kKCcuY2FwdGlvbicpLmZpcnN0KCk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2FwdGlvbi5jaGlsZHJlbigic3Bhbi51aS1pY29uIikuaGFzQ2xhc3MoInVpLWljb24tY2FyYXQtMS1zIikpDQogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENhcHRpb24uY2xpY2soKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAkKCJbaWQ9JyIgKyB0aGlzLmh0bWxGb3IgKyAiJ10iKS5mb2N1cygpOw0KICAgIH0pOw0KfQ0KDQokLmZuLlJlbW92ZURhdGVQaWNrZXJDbGFzcyA9IGZ1bmN0aW9uICgpIHsNCiAgICB0aGlzLmZpbmQoIi5kYXRlcGlja2VyLCAuZGF0ZXBpY2tlcklTTywgLnRpbWVwaWNrZXIsIC5kYXRldGltZXBpY2tlciIpLnJlbW92ZUNsYXNzKCJoYXNEYXRlcGlja2VyIik7DQoNCiAgICByZXR1cm4gdGhpczsNCn07DQoNCiQuZm4uSW5pdERhdGVQaWNrZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgdGhpcy5maW5kKCIuZGF0ZXBpY2tlciIpLmRhdGVwaWNrZXIoKTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5Jbml0RGF0ZVRpbWVDb250cm9sID0gZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuZmluZCgiLmRhdGV0aW1lcGlja2VyIikuZGF0ZXRpbWVwaWNrZXIoKTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5Jbml0UG9wVXBEaWFsb2cgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGVsZW1lbnRzID0gdGhpcy5maW5kKCIucmVtb3RlTG9va3VwIik7DQoNCiAgICAvLyB2eWh5YmthIHN0YXJlaiBhIG5vdmVqIHZlcnppZSBzY3JpcHR1DQogICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgUmVtb3RlTG9va3VwTmV3KHRoaXMpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgUmVtb3RlTG9va3VwT2xkKHRoaXMpOw0KICAgIH0NCg0KICAgIHJldHVybiB0aGlzOw0KfQ0KDQpmdW5jdGlvbiBHZXRGb3JtTGFuZ3VhZ2UoKSB7DQogICAgcmV0dXJuICQoJ21ldGFbbmFtZT1sYW5ndWFnZV0nKS5hdHRyKCJjb250ZW50Iik7DQp9DQoNCi8vdG9kbyBvYnNvbGV0ZQ0KZnVuY3Rpb24gUmVtb3RlTG9va3VwT2xkKGxheW91dFJvdykgew0KICAgIGxheW91dFJvdy5maW5kKCJkaXZbTG9va3VwRGV0YWlsXSIpLmRpYWxvZyh7DQogICAgICAgIGF1dG9PcGVuOiBmYWxzZSwNCiAgICAgICAgbW9kYWw6IHRydWUNCiAgICB9KTsNCg0KICAgIGxheW91dFJvdy5maW5kKCJbTG9va3VwQnV0dG9uXSIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGxvb2t1cEJ0biA9ICQodGhpcyk7DQogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gImZpZWxkSUQiOw0KICAgICAgICB2YXIgZmllbGRJZCA9IGxvb2t1cEJ0bi5hdHRyKGF0dHJpYnV0ZU5hbWUpOw0KICAgICAgICB2YXIgbG9va3VwU291cmNlID0gbG9va3VwQnRuLmF0dHIoJ2xvb2t1cFNvdXJjZScpOw0KICAgICAgICBmaWVsZEluZGV4ID0gJCgic3Bhbi5sb29rdXBidXR0b25bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgZmllbGRJZCArICInXSIpLmluZGV4KHRoaXMpOw0KICAgICAgICB2YXIgbm9uUG9zdGZpeEZpZWxkSUQgPSBmaWVsZElkLnNwbGl0KGRpc2FibGVWYWxpZGF0b3JQb3N0Zml4KVswXTsNCiAgICAgICAgdmFyIGRpYWxvZyA9ICQoIltMb29rdXBGb3JtXVsiICsgYXR0cmlidXRlTmFtZSArICI9JyIgKyBub25Qb3N0Zml4RmllbGRJRCArICInXSIpLmVxKDApOw0KICAgICAgICBkaWFsb2cuYXR0cigiZmllbGRJRCIsIGZpZWxkSWQpOw0KICAgICAgICBkaWFsb2cuYXR0cigibG9va3VwU291cmNlIiwgbG9va3VwU291cmNlKTsNCiAgICAgICAgZGlhbG9nLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5hZGRDbGFzcygibG9va3VwLWRpYWxvZyIpOw0KICAgICAgICBkaWFsb2cuZGlhbG9nKCJvcGVuIik7DQogICAgfSk7DQoNCiAgICBsYXlvdXRSb3cuZmluZCgiW0ZpZWxkSW5mb10iKS5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZmllbGRJbmZvID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAiZmllbGRJRCI7DQogICAgICAgIHZhciBpbmZvSWNvbiA9IGZpZWxkSW5mby5jaGlsZHJlbigic3BhbiIpOw0KICAgICAgICB2YXIgdGFyZ2V0RmllbGQgPSBpbmZvSWNvbi5wYXJlbnQoKS5zaWJsaW5ncygiW2NsYXNzPSdmaWVsZENvbnRlbnQnXSIpLmNoaWxkcmVuKCJpbnB1dFtpZF0iKTsNCiAgICAgICAgdmFyIHRhcmdldFdpZHRoID0gdGFyZ2V0RmllbGQud2lkdGgoKTsNCiAgICAgICAgdmFyIGZpZWxkSWQgPSBmaWVsZEluZm8uYXR0cihhdHRyaWJ1dGVOYW1lKTsNCiAgICAgICAgdmFyIG5vblBvc3RmaXhGaWVsZElEID0gZmllbGRJZC5zcGxpdChkaXNhYmxlVmFsaWRhdG9yUG9zdGZpeClbMF07DQogICAgICAgIHZhciBmaWVsZEluZm9JbmRleCA9ICQoIltGaWVsZEluZm9dWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIG5vblBvc3RmaXhGaWVsZElEICsgIiddIikuaW5kZXgodGhpcyk7DQogICAgICAgIHZhciBpbmZvVGV4dCA9ICQoImlucHV0W0xvb2t1cERldGFpbEluZm9dWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIGZpZWxkSWQgKyAiJ10iKS5lcShmaWVsZEluZm9JbmRleCkudmFsKCk7DQogICAgICAgICQoImRpdltMb29rdXBEZXRhaWxdWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIG5vblBvc3RmaXhGaWVsZElEICsgIiddIikudGV4dChpbmZvVGV4dCk7DQogICAgICAgIHZhciBtb2RhbCA9ICQoImRpdltMb29rdXBEZXRhaWxdWyIgKyBhdHRyaWJ1dGVOYW1lICsgIj0nIiArIG5vblBvc3RmaXhGaWVsZElEICsgIiddIikuZXEoMCk7DQogICAgICAgIG1vZGFsLmRpYWxvZyh7DQogICAgICAgICAgICBhdXRvT3BlbjogdHJ1ZSwNCiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSwNCiAgICAgICAgICAgIHBvc2l0aW9uOiB7IG15OiAibGVmdCBib3R0b20tMyIsIGF0OiAibGVmdCB0b3AiLCBvZjogdGFyZ2V0RmllbGQgfSwNCiAgICAgICAgICAgIHdpZHRoOiB0YXJnZXRXaWR0aCwNCiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uIChldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICBpbmZvSWNvbi51bmJpbmQoJ21vdXNlb3V0Jyk7DQogICAgICAgICAgICAgICAgaW5mb0ljb24ubW91c2VvdXQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChldmVudC50YXJnZXQpOw0KICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGlhbG9nKCdjbG9zZScpOw0KICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kVG8obW9kYWwpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGluZm9JY29uLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIGluZm9JY29uLnVuYmluZCgnbW91c2VvdXQnKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCk7DQogICAgICAgICAgICAgICAgdGFyZ2V0LmRpYWxvZygnY2xvc2UnKTsNCiAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kVG8obW9kYWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIGxheW91dFJvdy5maW5kKCJbTG9va3VwRm9ybV0iKS5kaWFsb2coew0KICAgICAgICBhdXRvT3BlbjogZmFsc2UsDQogICAgICAgIGhlaWdodDogMzUwLA0KICAgICAgICB3aWR0aDogNDIwLA0KICAgICAgICBtb2RhbDogdHJ1ZSwNCiAgICAgICAgYnV0dG9uczogew0KICAgICAgICAgICAgIk9LIjogU3VibWl0TG9va3VwLA0KICAgICAgICAgICAgIlpydcWhacWlIjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICQodGhpcykuZGlhbG9nKCJjbG9zZSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KICAgICAgICBvcGVuOiBPcGVuTG9va3VwDQogICAgfSk7DQoNCiAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgIGxheW91dFJvdy5maW5kKCJbTG9va3VwRm9ybV0iKS5kaWFsb2coew0KICAgICAgICAgICAgICAgIGJ1dHRvbnM6IHsNCiAgICAgICAgICAgICAgICAgICAgIk9LIjogU3VibWl0TG9va3VwLA0KICAgICAgICAgICAgICAgICAgICAiQ2FuY2VsIjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kaWFsb2coImNsb3NlIik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgbGF5b3V0Um93LmZpbmQoIltMb29rdXBGb3JtXSIpLmRpYWxvZyh7DQogICAgICAgICAgICAgICAgYnV0dG9uczogew0KICAgICAgICAgICAgICAgICAgICAiT0siOiBTdWJtaXRMb29rdXAsDQogICAgICAgICAgICAgICAgICAgICJacnXFoWnFpSI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZGlhbG9nKCJjbG9zZSIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gU3VibWl0TG9va3VwKCkgew0KICAgICAgICB2YXIgbG9va3VwID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAiZmllbGRJRCI7DQogICAgICAgIHZhciBmaWVsZElkID0gbG9va3VwLmF0dHIoYXR0cmlidXRlTmFtZSk7DQogICAgICAgIHZhciBub25Qb3N0Zml4RmllbGRJZCA9IGZpZWxkSWQuc3BsaXQoZGlzYWJsZVZhbGlkYXRvclBvc3RmaXgpWzBdOw0KICAgICAgICB2YXIgYW5TZWxlY3RlZCA9IGZuR2V0U2VsZWN0ZWQob1RhYmxlKTsNCiAgICAgICAgdmFyIGZpZWxkID0gJCgiW0xvb2t1cEZpZWxkXVsiICsgYXR0cmlidXRlTmFtZSArICI9JyIgKyBmaWVsZElkICsgIiddIikuZXEoZmllbGRJbmRleCk7DQogICAgICAgIHZhciB0dXJuZWQgPSAidHVybmVkIjsNCiAgICAgICAgdmFyIGxvb2t1cERldGFpbEluZm8gPSAkKCJpbnB1dFtMb29rdXBEZXRhaWxJbmZvXVsiICsgYXR0cmlidXRlTmFtZSArICI9JyIgKyBmaWVsZElkICsgIiddIikuZXEoZmllbGRJbmRleCk7DQogICAgICAgIHZhciBsb29rdXBGaWVsZFZhbHVlID0gJCgiaW5wdXRbTG9va3VwRmllbGRWYWx1ZV1bIiArIGF0dHJpYnV0ZU5hbWUgKyAiPSciICsgZmllbGRJZCArICInXSIpLmVxKGZpZWxkSW5kZXgpOw0KICAgICAgICB2YXIgYURhdGE7DQogICAgICAgIGlmIChhblNlbGVjdGVkLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHZhciBkYXRhOw0KICAgICAgICAgICAgYURhdGEgPSBvVGFibGUuZm5HZXREYXRhKGFuU2VsZWN0ZWRbMF0pOw0KICAgICAgICAgICAgaWYgKGZpZWxkLmhhc0NsYXNzKHR1cm5lZCkpIHsNCiAgICAgICAgICAgICAgICBmaWVsZC52YWwoYURhdGFbMV0pOw0KICAgICAgICAgICAgICAgIGRhdGEgPSBhRGF0YVswXTsNCiAgICAgICAgICAgICAgICBsb29rdXBEZXRhaWxJbmZvLnZhbChkYXRhKTsNCiAgICAgICAgICAgICAgICBsb29rdXBGaWVsZFZhbHVlLnZhbChkYXRhKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgZmllbGQudmFsKGFEYXRhWzBdKTsNCiAgICAgICAgICAgICAgICBkYXRhID0gYURhdGFbMV07DQogICAgICAgICAgICAgICAgbG9va3VwRGV0YWlsSW5mby52YWwoZGF0YSk7DQogICAgICAgICAgICAgICAgbG9va3VwRmllbGRWYWx1ZS52YWwoZGF0YSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBhRGF0YSA9IG9UYWJsZS5mbkdldERhdGEoYW5TZWxlY3RlZFswXSk7DQogICAgICAgICAgICBmaWVsZC52YWwoZmllbGQuaGFzQ2xhc3ModHVybmVkKSA/IGFEYXRhWzBdWzFdIDogYURhdGFbMF1bMF0pOw0KICAgICAgICAgICAgbG9va3VwRGV0YWlsSW5mby52YWwoYURhdGFbMV0pOw0KICAgICAgICB9DQogICAgICAgIGxvb2t1cC5hdHRyKGF0dHJpYnV0ZU5hbWUsIG5vblBvc3RmaXhGaWVsZElkKTsNCiAgICAgICAgZmllbGQuZm9jdXMoKTsNCiAgICAgICAgbG9va3VwLmRpYWxvZygiY2xvc2UiKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBPcGVuTG9va3VwKCkgew0KICAgICAgICB2YXIgbG9va3VwID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGxvb2t1cElkID0gbG9va3VwLmF0dHIoJ2xvb2t1cElEJyk7DQogICAgICAgIHZhciBsb29rdXBTb3VyY2UgPSBsb29rdXAuYXR0cignbG9va3VwU291cmNlJyk7DQoNCiAgICAgICAgb1RhYmxlID0gbG9va3VwLmZpbmQoInRhYmxlW2lkXj0nTG9va3VwVGFibGUnXSIpLmRhdGFUYWJsZSh7DQogICAgICAgICAgICAiYkF1dG9XaWR0aCI6IHRydWUsDQogICAgICAgICAgICAiYkZpbHRlciI6IHRydWUsDQogICAgICAgICAgICAiYlNlcnZlclNpZGUiOiB0cnVlLA0KICAgICAgICAgICAgImJKUXVlcnlVSSI6IHRydWUsDQogICAgICAgICAgICAiYlByb2Nlc3NpbmciOiB0cnVlLA0KICAgICAgICAgICAgImJMZW5ndGhDaGFuZ2UiOiBmYWxzZSwNCiAgICAgICAgICAgICJpRGlzcGxheUxlbmd0aCI6IDEwLA0KICAgICAgICAgICAgImJQYWdpbmF0ZSI6IHRydWUsDQogICAgICAgICAgICAiYkluZm8iOiBmYWxzZSwNCiAgICAgICAgICAgICJiUmV0cmlldmUiOiB0cnVlLA0KICAgICAgICAgICAgInNBamF4U291cmNlIjogR2V0TG9va3VwVXJpKCkgKyAnP2lkPScgKyBsb29rdXBJZCArICcmbG9va3VwU291cmNlPScgKyBsb29rdXBTb3VyY2UgKyAnJmNhbGxiYWNrPT8nLA0KICAgICAgICAgICAgImFvQ29sdW1ucyI6IFt7ICJzTmFtZSI6ICJLb2QiIH0sIHsgInNOYW1lIjogIkhvZG5vdGEiIH1dDQogICAgICAgIH0pOw0KDQogICAgICAgIG9UYWJsZS5mbkZpbHRlck9uUmV0dXJuKCk7DQoNCiAgICAgICAgbG9va3VwLmZpbmQoIltpZF49J0xvb2t1cFRhYmxlJ11baWQkPSdfZmlsdGVyJ10iKS5oaWRlKCk7DQogICAgICAgIGxvb2t1cC5maW5kKCJbaWRePSdGaWx0ZXJCdXR0b24nXSIpLmJ1dHRvbigpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIG9UYWJsZS5mbkZpbHRlcigkKHRoaXMpLnByZXYoKS52YWwoKSk7DQogICAgICAgIH0pOw0KDQogICAgICAgIGxvb2t1cC5maW5kKCJ0YWJsZVtpZF49J0xvb2t1cFRhYmxlJ10gdGJvZHkiKS5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgICAgICQob1RhYmxlLmZuU2V0dGluZ3MoKS5hb0RhdGEpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICQodGhpcy5uVHIpLnJlbW92ZUNsYXNzKCdyb3dfc2VsZWN0ZWQnKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgJChldmVudC50YXJnZXQucGFyZW50Tm9kZSkuYWRkQ2xhc3MoJ3Jvd19zZWxlY3RlZCcpOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFJlbW90ZUxvb2t1cE5ldyhsYXlvdXRSb3cpIHsNCg0KICAgIHZhciBlbGVtZW50cyA9IGxheW91dFJvdy5maW5kKCIucmVtb3RlTG9va3VwIik7DQogICAgZWxlbWVudHMuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciByZW1vdGVMb29rdXAgPSAkKHRoaXMpOw0KDQogICAgICAgIHZhciBsb29rdXBEZXRhaWxJbmZvID0gcmVtb3RlTG9va3VwLnNpYmxpbmdzKCcuTG9va3VwRGV0YWlsSW5mbycpOw0KICAgICAgICB2YXIgbG9va3VwSW5mbyA9IHJlbW90ZUxvb2t1cC5wYXJlbnQoKS5zaWJsaW5ncygiLmZpZWxkSW5mbyIpOw0KICAgICAgICB2YXIgbG9va3VwRmllbGRWYWx1ZSA9IG51bGw7DQogICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKCIiKTsNCg0KICAgICAgICAvL05hY2l0YW5pZSBob2Rub3QgeiBrb25maWd1cmFjbmVqIHNla2NpZQ0KICAgICAgICB2YXIgc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24gPSByZW1vdGVMb29rdXAuc2libGluZ3MoInNwYW4ubG9va3VwQ29uZmlndXJhdGlvbiIpOw0KICAgICAgICB2YXIgc3Bhbkxvb2t1cENvbXBvbmVudElkID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ubG9va3VwQ29tcG9uZW50SWQiKTsNCiAgICAgICAgdmFyIHNwYW5GaWVsZElkID0gc3Bhbkxvb2t1cENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4uZmllbGRJZCIpOw0KICAgICAgICB2YXIgcmVtb3RlU291cmNlSWRlbnRpZmllciA9IHNwYW5Mb29rdXBDb25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLnJlbW90ZVNvdXJjZUlkZW50aWZpZXIiKTsNCiAgICAgICAgdmFyIHJlbW90ZUxvb2t1cENvZGUgPSBzcGFuTG9va3VwQ29uZmlndXJhdGlvbi5jaGlsZHJlbigic3Bhbi5yZW1vdGVMb29rdXBDb2RlIik7DQoNCiAgICAgICAgdmFyIGNsb3Nlc3RMYXlvdXRSb3cgPSByZW1vdGVMb29rdXAuY2xvc2VzdCgiLmxheW91dFJvdyIpOw0KDQogICAgICAgIGlmIChzcGFuRmllbGRJZC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICBsb29rdXBGaWVsZFZhbHVlID0gY2xvc2VzdExheW91dFJvdy5maW5kKCdbaWR8PSInICsgc3BhbkZpZWxkSWQuaHRtbCgpICsgJyJdJyk7DQogICAgICAgIH0NCg0KICAgICAgICAvL25hamRlbmllIGxvb2t1cCBGb3JtdQ0KICAgICAgICB2YXIgbG9va3VwRm9ybXMgPSAkKCIuTG9va3VwRm9ybSIpOw0KICAgICAgICB2YXIgbG9va3VwRm9ybSA9IG51bGw7DQogICAgICAgIGxvb2t1cEZvcm1zLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGxvb2t1cEZvcm1Mb2NhbCA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgc3Bhbkxvb2t1cEZvcm1Db25maWd1cmF0aW9uID0gbG9va3VwRm9ybUxvY2FsLmNoaWxkcmVuKCJzcGFuLmxvb2t1cENvbmZpZ3VyYXRpb24iKTsNCiAgICAgICAgICAgIHZhciBzcGFuTG9va3VwRm9ybUNvbXBvbmVudElkID0gc3Bhbkxvb2t1cEZvcm1Db25maWd1cmF0aW9uLmNoaWxkcmVuKCJzcGFuLmxvb2t1cENvbXBvbmVudElkIik7DQogICAgICAgICAgICBpZiAoc3Bhbkxvb2t1cEZvcm1Db21wb25lbnRJZFswXS5pbm5lckhUTUwgPT0gc3Bhbkxvb2t1cENvbXBvbmVudElkWzBdLmlubmVySFRNTCkgew0KICAgICAgICAgICAgICAgIGxvb2t1cEZvcm0gPSBsb29rdXBGb3JtTG9jYWw7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvL25hamRlbmllIGxvb2t1cCBkZXRhaWx1DQogICAgICAgIHZhciBsb29rdXBEZXRhaWxzID0gJCgiLkxvb2t1cERldGFpbCIpOw0KICAgICAgICB2YXIgbG9va3VwRGV0YWlsID0gbnVsbDsNCiAgICAgICAgdmFyIGxvb2t1cFRhYmxlID0gbnVsbDsNCiAgICAgICAgbG9va3VwRGV0YWlscy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBsb29rdXBEZXRhaWxMb2NhbCA9ICQodGhpcyk7DQogICAgICAgICAgICB2YXIgc3Bhbkxvb2t1cERldGFpbENvbmZpZ3VyYXRpb24gPSBsb29rdXBEZXRhaWxMb2NhbC5jaGlsZHJlbigic3Bhbi5sb29rdXBDb25maWd1cmF0aW9uIik7DQogICAgICAgICAgICB2YXIgc3Bhbkxvb2t1cERldGFpbENvbXBvbmVudElkID0gc3Bhbkxvb2t1cERldGFpbENvbmZpZ3VyYXRpb24uY2hpbGRyZW4oInNwYW4ubG9va3VwQ29tcG9uZW50SWQiKTsNCiAgICAgICAgICAgIGlmIChzcGFuTG9va3VwRGV0YWlsQ29tcG9uZW50SWRbMF0uaW5uZXJIVE1MID09IHNwYW5Mb29rdXBDb21wb25lbnRJZFswXS5pbm5lckhUTUwpIHsNCiAgICAgICAgICAgICAgICBsb29rdXBEZXRhaWwgPSBsb29rdXBEZXRhaWxMb2NhbDsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KDQogICAgICAgIC8vbmFzdGF2bmllIGxvb2t1cCB0YWJsZQ0KICAgICAgICBpZiAobG9va3VwRm9ybSAhPSBudWxsKSB7DQogICAgICAgICAgICBsb29rdXBUYWJsZSA9IGxvb2t1cEZvcm0uZmluZCgnLkxvb2t1cFRhYmxlJyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAobG9va3VwRGV0YWlsIT0gbnVsbCAmJiBsb29rdXBEZXRhaWwubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgbG9va3VwRGV0YWlsLmRpYWxvZyh7DQogICAgICAgICAgICAgICAgYXV0b09wZW46IGZhbHNlLA0KICAgICAgICAgICAgICAgIG1vZGFsOiB0cnVlDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJlbW90ZUxvb2t1cC5zaWJsaW5ncygiLmxvb2t1cGJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGxvb2t1cEZvcm0uZGlhbG9nKHsNCiAgICAgICAgICAgICAgICBhdXRvT3BlbjogZmFsc2UsDQogICAgICAgICAgICAgICAgaGVpZ2h0OiAzNTAsDQogICAgICAgICAgICAgICAgd2lkdGg6IDQyMCwNCiAgICAgICAgICAgICAgICBtb2RhbDogdHJ1ZSwNCiAgICAgICAgICAgICAgICBvcGVuOiBmdW5jdGlvbiAoYXJncywgY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgICAgICAgT3Blbkxvb2t1cChsb29rdXBGb3JtLCBsb29rdXBUYWJsZSwgcmVtb3RlU291cmNlSWRlbnRpZmllclswXS5pbm5lckhUTUwsIHJlbW90ZUxvb2t1cENvZGVbMF0uaW5uZXJIVE1MKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGxvb2t1cEZvcm0uY2xvc2VzdCgiLnVpLWRpYWxvZyIpLmFkZENsYXNzKCJsb29rdXAtZGlhbG9nIik7DQogICAgICAgICAgICBsb29rdXBGb3JtLmRpYWxvZygib3BlbiIpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgcmVtb3RlTG9va3VwLnNpYmxpbmdzKCIubG9va3VwYnV0dG9uIikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBsb29rdXBGb3JtLmRpYWxvZyh7DQogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9LIjogZnVuY3Rpb24gKGFyZ3MsIGNhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdExvb2t1cChsb29rdXBGb3JtLCByZW1vdGVMb29rdXAsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCI6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kaWFsb2coImNsb3NlIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICAgICAgcmVtb3RlTG9va3VwLnNpYmxpbmdzKCIubG9va3VwYnV0dG9uIikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBsb29rdXBGb3JtLmRpYWxvZyh7DQogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9LIjogZnVuY3Rpb24gKGFyZ3MsIGNhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1Ym1pdExvb2t1cChsb29rdXBGb3JtLCByZW1vdGVMb29rdXAsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlpydcWhacWlIjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGxvb2t1cEluZm8ubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgbG9va3VwSW5mby5tb3VzZW92ZXIoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHZhciBpbmZvSWNvbiA9IGxvb2t1cEluZm8uY2hpbGRyZW4oInNwYW4iKTsNCiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0V2lkdGggPSByZW1vdGVMb29rdXAud2lkdGgoKTsNCiAgICAgICAgICAgICAgICB2YXIgaW5mb1RleHQgPSBsb29rdXBEZXRhaWxJbmZvLnZhbCgpOw0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbC5jaGlsZHJlbignLkxvb2t1cERldGFpbEluZm9UZXh0JykudGV4dChpbmZvVGV4dCk7DQoNCiAgICAgICAgICAgICAgICBsb29rdXBEZXRhaWwuZGlhbG9nKHsNCiAgICAgICAgICAgICAgICAgICAgYXV0b09wZW46IHRydWUsDQogICAgICAgICAgICAgICAgICAgIG1vZGFsOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHsgbXk6ICJsZWZ0IGJvdHRvbS0zIiwgYXQ6ICJsZWZ0IHRvcCIsIG9mOiByZW1vdGVMb29rdXAgfSwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRhcmdldFdpZHRoLA0KICAgICAgICAgICAgICAgICAgICBvcGVuOiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpbmZvSWNvbi51bmJpbmQoJ21vdXNlb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpbmZvSWNvbi5tb3VzZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZGlhbG9nKCdjbG9zZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmRUbyhsb29rdXBEZXRhaWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpbmZvSWNvbi5tb3VzZWRvd24oZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9JY29uLnVuYmluZCgnbW91c2VvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5kaWFsb2coJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kVG8obG9va3VwRGV0YWlsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgIH0pOw0KDQogICAgZnVuY3Rpb24gU3VibWl0TG9va3VwKGxvb2t1cEZvcm0sIGZpZWxkLCBsb29rdXBEZXRhaWxJbmZvLCBsb29rdXBGaWVsZFZhbHVlKSB7DQogICAgICAgIHZhciBhblNlbGVjdGVkID0gZm5HZXRTZWxlY3RlZChvVGFibGUpOw0KICAgICAgICB2YXIgdHVybmVkID0gInR1cm5lZCI7DQogICAgICAgIHZhciBhRGF0YTsNCiAgICAgICAgaWYgKGFuU2VsZWN0ZWQubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgdmFyIGRhdGE7DQogICAgICAgICAgICBhRGF0YSA9IG9UYWJsZS5mbkdldERhdGEoYW5TZWxlY3RlZFswXSk7DQogICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3ModHVybmVkKSkgew0KICAgICAgICAgICAgICAgIGZpZWxkLnZhbChhRGF0YVsxXSk7DQogICAgICAgICAgICAgICAgZGF0YSA9IGFEYXRhWzBdOw0KICAgICAgICAgICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKGRhdGEpOw0KICAgICAgICAgICAgICAgIGlmIChsb29rdXBGaWVsZFZhbHVlICE9IG51bGwpDQogICAgICAgICAgICAgICAgICAgIGxvb2t1cEZpZWxkVmFsdWUudmFsKGRhdGEpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBmaWVsZC52YWwoYURhdGFbMF0pOw0KICAgICAgICAgICAgICAgIGRhdGEgPSBhRGF0YVsxXTsNCiAgICAgICAgICAgICAgICBsb29rdXBEZXRhaWxJbmZvLnZhbChkYXRhKTsNCiAgICAgICAgICAgICAgICBpZiAobG9va3VwRmllbGRWYWx1ZSAhPSBudWxsKQ0KICAgICAgICAgICAgICAgICAgICBsb29rdXBGaWVsZFZhbHVlLnZhbChkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGFEYXRhID0gb1RhYmxlLmZuR2V0RGF0YShhblNlbGVjdGVkWzBdKTsNCiAgICAgICAgICAgIGZpZWxkLnZhbChmaWVsZC5oYXNDbGFzcyh0dXJuZWQpID8gYURhdGFbMF1bMV0gOiBhRGF0YVswXVswXSk7DQogICAgICAgICAgICBsb29rdXBEZXRhaWxJbmZvLnZhbChhRGF0YVsxXSk7DQogICAgICAgIH0NCg0KICAgICAgICBmaWVsZC5mb2N1cygpOw0KICAgICAgICBsb29rdXBGb3JtLmRpYWxvZygiY2xvc2UiKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBPcGVuTG9va3VwKGxvb2t1cEZvcm0sIGxvb2t1cFRhYmxlLCBsb29rdXBTb3VyY2UsIGxvb2t1cElkKSB7DQoNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIG9UYWJsZSA9IGxvb2t1cFRhYmxlLmRhdGFUYWJsZSh7DQogICAgICAgICAgICAgICAgICAgICJiQXV0b1dpZHRoIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJGaWx0ZXIiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYlNlcnZlclNpZGUiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkpRdWVyeVVJIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJQcm9jZXNzaW5nIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJMZW5ndGhDaGFuZ2UiOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgImlEaXNwbGF5TGVuZ3RoIjogMTAsDQogICAgICAgICAgICAgICAgICAgICJiUGFnaW5hdGUiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAiYkluZm8iOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgImJSZXRyaWV2ZSI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJzQWpheFNvdXJjZSI6IEdldExvb2t1cFVyaSgpICsgJz9pZD0nICsgbG9va3VwSWQgKyAnJmxvb2t1cFNvdXJjZT0nICsgbG9va3VwU291cmNlICsgJyZjYWxsYmFjaz0/JywNCiAgICAgICAgICAgICAgICAgICAgImFvQ29sdW1ucyI6IFt7ICJzTmFtZSI6ICJDb2RlIiB9LCB7ICJzTmFtZSI6ICJWYWx1ZSIgfV0sDQogICAgICAgICAgICAgICAgICAgICJvTGFuZ3VhZ2UiOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAic0VtcHR5VGFibGUiOiAiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvIjogIlNob3dpbmcgX1NUQVJUXyB0byBfRU5EXyBvZiBfVE9UQUxfIGVudHJpZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvRW1wdHkiOiAiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mb0ZpbHRlcmVkIjogIihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mb1Bvc3RGaXgiOiAiIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mb1Rob3VzYW5kcyI6ICIsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzTGVuZ3RoTWVudSI6ICJTaG93IF9NRU5VXyBlbnRyaWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzTG9hZGluZ1JlY29yZHMiOiAiTG9hZGluZy4uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAic1Byb2Nlc3NpbmciOiAiUHJvY2Vzc2luZy4uLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAic1NlYXJjaCI6ICJTZWFyY2g6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzWmVyb1JlY29yZHMiOiAiTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAib1BhZ2luYXRlIjogew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzRmlyc3QiOiAiRmlyc3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzTGFzdCI6ICJMYXN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic05leHQiOiAiTmV4dCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNQcmV2aW91cyI6ICJQcmV2aW91cyINCiAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAib0FyaWEiOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNTb3J0QXNjZW5kaW5nIjogIjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gYXNjZW5kaW5nIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic1NvcnREZXNjZW5kaW5nIjogIjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gZGVzY2VuZGluZyINCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBvVGFibGUgPSBsb29rdXBUYWJsZS5kYXRhVGFibGUoew0KICAgICAgICAgICAgICAgICAgICAiYkF1dG9XaWR0aCI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiRmlsdGVyIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJTZXJ2ZXJTaWRlIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJKUXVlcnlVSSI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiUHJvY2Vzc2luZyI6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICJiTGVuZ3RoQ2hhbmdlIjogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICJpRGlzcGxheUxlbmd0aCI6IDEwLA0KICAgICAgICAgICAgICAgICAgICAiYlBhZ2luYXRlIjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgImJJbmZvIjogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICJiUmV0cmlldmUiOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAic0FqYXhTb3VyY2UiOiBHZXRMb29rdXBVcmkoKSArICc/aWQ9JyArIGxvb2t1cElkICsgJyZsb29rdXBTb3VyY2U9JyArIGxvb2t1cFNvdXJjZSArICcmY2FsbGJhY2s9PycsDQogICAgICAgICAgICAgICAgICAgICJhb0NvbHVtbnMiOiBbeyAic05hbWUiOiAiS29kIiB9LCB7ICJzTmFtZSI6ICJIb2Rub3RhIiB9XSwNCiAgICAgICAgICAgICAgICAgICAgIm9MYW5ndWFnZSI6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICJzRW1wdHlUYWJsZSI6ICJOaWUgc8O6IGsgZGlzcG96w61jaWkgxb5pYWRuZSBkw6F0YSIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm8iOiAiWsOhem5hbXkgX1NUQVJUXyBhxb4gX0VORF8geiBjZWxrb20gX1RPVEFMXyIsDQogICAgICAgICAgICAgICAgICAgICAgICAic0luZm9FbXB0eSI6ICJaw6F6bmFteSAwIGHFviAwIHogY2Vsa29tIDAgIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzSW5mb0ZpbHRlcmVkIjogIih2eWZpbHRyb3ZhbsOpIHNwb21lZHppIF9NQVhfIHrDoXpuYW1vdikiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvUG9zdEZpeCI6ICIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNJbmZvVGhvdXNhbmRzIjogIiwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNMZW5ndGhNZW51IjogIlpvYnJheiBfTUVOVV8gesOhem5hbW92IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzTG9hZGluZ1JlY29yZHMiOiAiTmHEjcOtdGF2YW0uLi4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNQcm9jZXNzaW5nIjogIlNwcmFjw7p2YW0uLi4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgInNTZWFyY2giOiAiSMS+YWRhxaU6IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzWmVyb1JlY29yZHMiOiAiTmVuYcWhbGkgc2Egxb5pYWRuZSB2eWhvdnVqw7pjZSB6w6F6bmFteSIsDQogICAgICAgICAgICAgICAgICAgICAgICAib1BhZ2luYXRlIjogew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzRmlyc3QiOiAiUHJ2w6EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzTGFzdCI6ICJQb3NsZWRuw6EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzTmV4dCI6ICJOYXNsZWR1asO6Y2EiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzUHJldmlvdXMiOiAiUHJlZGNow6FkemFqw7pjYSINCiAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAib0FyaWEiOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNTb3J0QXNjZW5kaW5nIjogIjogYWt0aXZ1anRlIG5hIHpvcmFkZW5pZSBzdMS6cGNhIHZ6b3N0dXBuZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNTb3J0RGVzY2VuZGluZyI6ICI6IGFrdGl2dWp0ZSBuYSB6b3JhZGVuaWUgc3TEunBjYSB6b3N0dXBuZSINCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgb1RhYmxlLmZuRmlsdGVyT25SZXR1cm4oKTsNCg0KICAgICAgICB2YXIgZmlsdGVyQnV0dG9uID0gbG9va3VwRm9ybS5maW5kKCIuRmlsdGVyQnV0dG9uIik7DQogICAgICAgIHZhciBsb29rdXBUYWJsZVRib2R5ID0gbG9va3VwVGFibGUuZmluZCgidGJvZHkiKTsNCiAgICAgICAgZmlsdGVyQnV0dG9uLnVuYmluZCgiY2xpY2siKTsNCiAgICAgICAgbG9va3VwVGFibGVUYm9keS51bmJpbmQoImNsaWNrIik7DQoNCiAgICAgICAgbG9va3VwRm9ybS5maW5kKCIuZGF0YVRhYmxlc19maWx0ZXIiKS5oaWRlKCk7DQogICAgICAgIGZpbHRlckJ1dHRvbi5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICBvVGFibGUuZm5GaWx0ZXIoJCh0aGlzKS5wcmV2KCkudmFsKCkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBsb29rdXBUYWJsZVRib2R5LmNsaWNrKGZ1bmN0aW9uIChldmVudCkgew0KICAgICAgICAgICAgJChvVGFibGUuZm5TZXR0aW5ncygpLmFvRGF0YSkuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgJCh0aGlzLm5UcikucmVtb3ZlQ2xhc3MoJ3Jvd19zZWxlY3RlZCcpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkKGV2ZW50LnRhcmdldC5wYXJlbnROb2RlKS5hZGRDbGFzcygncm93X3NlbGVjdGVkJyk7DQogICAgICAgIH0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24ganNvbkxvb2t1cENhbGxiYWNrKGpzb24sIGZpZWxkSWQpIHsNCiAgICB2YXIgb3B0aW9ucyA9ICcnOw0KDQogICAgJC5lYWNoKGpzb24sIGZ1bmN0aW9uIChrZXksIHZhbCkgew0KICAgICAgICBvcHRpb25zICs9ICc8b3B0aW9uIHZhbHVlPSInICsgdmFsLm9wdGlvblZhbHVlICsgJyI+JyArIHZhbC5vcHRpb25EaXNwbGF5ICsgJzwvb3B0aW9uPic7DQogICAgfSk7DQoNCiAgICAkKCJzZWxlY3QjIiArIGZpZWxkSWQgKyAiU2VsZWN0TG9va3VwIikuaHRtbChvcHRpb25zKTsNCn0NCg0KJC5mbi5DbGVhckZvcm1FbGVtZW50cyA9IGZ1bmN0aW9uICgpIHsNCiAgICB0aGlzLmZpbmQoJzppbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcyk7DQogICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7DQogICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6DQogICAgICAgICAgICBjYXNlICd0ZXh0JzoNCiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzoNCiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdC1tdWx0aXBsZSc6DQogICAgICAgICAgICAgICAgZWxlbWVudC52YWwoJycpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOg0KICAgICAgICAgICAgY2FzZSAncmFkaW8nOg0KICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGVycm9yQ2xhc3MgPSAiZXJyb3IiOw0KICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcyhlcnJvckNsYXNzKSkgew0KICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyhlcnJvckNsYXNzKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgdGhpcy5maW5kKCd0ZXh0YXJlYScpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAkKHRoaXMpLmh0bWwoIiIpOw0KICAgIH0pOw0KICAgIHRoaXMuZmluZCgnc2VsZWN0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICQodGhpcykudmFsKCIiKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5SZWluaXRSYWRpb0RlZmF1bHRDaGVjayA9IGZ1bmN0aW9uICgpIHsNCiAgICB0aGlzLmZpbmQoJzppbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgew0KICAgICAgICBjYXNlICdyYWRpbyc6DQogICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWwgPSBpbnB1dC5hdHRyKCdkZWZhdWx0Jyk7DQogICAgICAgICAgICBpZiAoZGVmYXVsdFZhbCA9PSAndHJ1ZScpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5SZXNldFJlcGV0aXRpb25TZWN0aW9uID0gZnVuY3Rpb24gKCkgew0KICAgIHRoaXMuZmluZCgnLmxheW91dFJvdy5yZXBlYXRpbmdTZWN0aW9uJykucmVtb3ZlKCk7DQogICAgdGhpcy5maW5kKCcubGF5b3V0Um93LmhpZGRlblNlY3Rpb24nKS50b2dnbGVDbGFzcygiaGlkZGVuU2VjdGlvbiIpOw0KICAgIHRoaXMuZmluZCgnZGl2W2lkXj1yZXBldGl0aW9uQ29tbWFuZHNdJykuc2hvdygpOw0KICAgIHRoaXMuZmluZCgnc3BhbltpZF49cmVtb3ZlU2VjdGlvbmxheW91dFJvd10nKS5oaWRlKCk7DQoNCiAgICByZXR1cm4gdGhpczsNCn07DQoNCmZ1bmN0aW9uIGNsZWFuU2VjdGlvbklEKGxheW91dFJvd0lEKSB7DQogICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cChyZXBlYXRpbmdQb3N0Zml4ICsgIlxcZCskIik7DQogICAgcmV0dXJuIGxheW91dFJvd0lELnJlcGxhY2UocmVnRXgsICcnKTsNCn0NCg0KZnVuY3Rpb24gR2V0UmVwZWF0aW5nU2VjdGlvbnMocmVwZWF0U2VjdGlvbikgew0KICAgIHZhciBzZWN0aW9uczsNCiAgICB2YXIgZmlsdGVyU2VjdGlvbiA9IFtdOw0KDQogICAgaWYgKCQocmVwZWF0U2VjdGlvbikuaGFzQ2xhc3MoImNsb3NlQnV0dG9uIikgPT0gdHJ1ZSkgew0KICAgICAgICB2YXIgbGF5b3V0Um93ID0gJChyZXBlYXRTZWN0aW9uKS5jbG9zZXN0KCdkaXZbaWRePWxheW91dFJvd10nKTsNCiAgICAgICAgdmFyIGxheW91dFJvd0lkID0gbGF5b3V0Um93LmF0dHIoIklEIikuc3BsaXQoJ18nKVswXTsNCg0KICAgICAgICBzZWN0aW9ucyA9ICQoJ2RpdltpZF49JyArIGxheW91dFJvd0lkICsgJ10nKTsNCg0KICAgICAgICBzZWN0aW9ucy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGlmIChjbGVhblNlY3Rpb25JRCgkKHRoaXMpLmF0dHIoJ0lEJykpID09IGxheW91dFJvd0lkKQ0KICAgICAgICAgICAgICAgIGZpbHRlclNlY3Rpb24ucHVzaCgkKHRoaXMpKTsNCiAgICAgICAgfSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgdmFyIGNsZWFuSWQgPSBjbGVhblNlY3Rpb25JRChwYXJzZUlkKHJlcGVhdFNlY3Rpb24sICdhZGRTZWN0aW9uJykpOw0KICAgICAgICBzZWN0aW9ucyA9ICQoJ2RpdltpZF49JyArIGNsZWFuSWQgKyAnXScpOw0KDQogICAgICAgIHNlY3Rpb25zLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKGNsZWFuU2VjdGlvbklEKCQodGhpcykuYXR0cignSUQnKSkgPT0gY2xlYW5JZCkNCiAgICAgICAgICAgICAgICBmaWx0ZXJTZWN0aW9uLnB1c2goJCh0aGlzKSk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHJldHVybiAkKCQubWFwKGZpbHRlclNlY3Rpb24sIGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gJC5tYWtlQXJyYXkoZWwpIH0pKTsNCn0NCg0KZnVuY3Rpb24gSW5jcmVtZW50RGVjcmVtZW50U2VjdGlvbklkKGxheW91dFJvd0NvcHkpIHsNCiAgICB2YXIgcmVwZWF0U2VjdGlvbiA9IGxheW91dFJvd0NvcHlbMF07DQogICAgaWYgKHJlcGVhdFNlY3Rpb24gPT0gdW5kZWZpbmVkKSB7IHJlcGVhdFNlY3Rpb24gPSBsYXlvdXRSb3dDb3B5OyB9DQogICAgdmFyIHNlY3Rpb25zID0gR2V0UmVwZWF0aW5nU2VjdGlvbnMocmVwZWF0U2VjdGlvbik7DQoNCiAgICBpZiAoc2VjdGlvbnMuZmlyc3QoKVswXSkgew0KICAgICAgICAkKHNlY3Rpb25zLmZpcnN0KClbMF0pLmF0dHIoIklEIiwgY2xlYW5TZWN0aW9uSUQoJChzZWN0aW9ucy5maXJzdCgpWzBdKS5hdHRyKCJJRCIpKSk7DQogICAgfQ0KDQogICAgdmFyIGkgPSAwOw0KDQogICAgc2VjdGlvbnMuc2xpY2UoMSkuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBzZWN0aW9uID0gJCh0aGlzKTsNCg0KICAgICAgICBzZWN0aW9uLmF0dHIoIklEIiwgR2V0SW5jcmVtZW50YWxWYWx1ZShzZWN0aW9uLmF0dHIoIklEIiksICsraSkpOw0KICAgICAgICBzZWN0aW9uLmFkZENsYXNzKCJyZXBlYXRpbmdTZWN0aW9uIik7DQogICAgfSk7DQp9Ow0KDQpmdW5jdGlvbiBJbmNyZW1lbnREZWNyZW1lbnRJbm5lclJlcGVhdGluZ0lkcyhsYXlvdXRSb3dDb3B5KSB7DQogICAgJChsYXlvdXRSb3dDb3B5KS5maW5kKCdkaXZbaWRdJykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIEluY3JlbWVudERlY3JlbWVudFNlY3Rpb25JZCgkKHRoaXMpKTsNCiAgICB9KTsNCn0NCg0KJC5mbi5JbmNyZW1lbnRGaWVsZElkcyA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbGF5b3V0Um93ID0gdGhpczsNCiAgICBsYXlvdXRSb3cuZmluZCgnW0lEXS5kYXRlcGlja2VyLCBbSURdOmlucHV0LCBbSURdLmRhdGVyYW5nZXBpY2tlcmRpdicpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICBJbmNyZW1lbnRFbGVtZW50cyhsYXlvdXRSb3csICQodGhpcyksIFsiaWQiLCAibmFtZSJdKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiBsYXlvdXRSb3c7DQp9Ow0KDQpmdW5jdGlvbiBJbmNyZW1lbnRFbGVtZW50cyhsYXlvdXRSb3csIGNvcHlFbGVtZW50LCBhdHRyaWJ1dGVzKSB7DQogICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVzWzBdOw0KICAgIHZhciBvbGRJZCA9IGNvcHlFbGVtZW50LmF0dHIoYXR0cmlidXRlTmFtZSk7DQogICAgb2xkSWQgPSBnZXRPcmlnaW5hbElkKG9sZElkLCBzaWduKTsNCiAgICB2YXIgc2VsZWN0b3IgPSAiWyIgKyBhdHRyaWJ1dGVOYW1lICsgInw9JyIgKyBvbGRJZCArICInXSI7DQogICAgdmFyIGVsZW1lbnRzID0gJCgiI21haW4iKS5maW5kKHNlbGVjdG9yKTsNCg0KICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7DQogICAgICAgIHZhciBzdWZmaXggPSAiIjsNCg0KICAgICAgICBzd2l0Y2ggKGNvcHlFbGVtZW50WzBdLnR5cGUpIHsNCiAgICAgICAgY2FzZSAnY2hlY2tib3gnOg0KICAgICAgICBjYXNlICdyYWRpbyc6DQogICAgICAgICAgICB2YXIgY291bnRSYWRpb3MgPSBsYXlvdXRSb3cuZmluZChzZWxlY3RvcikubGVuZ3RoOw0KICAgICAgICAgICAgdmFyIGNvdW50R3JvdXBzID0gZWxlbWVudHMubGVuZ3RoIC8gY291bnRSYWRpb3M7DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50R3JvdXBzOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBpICogY291bnRSYWRpb3M7DQogICAgICAgICAgICAgICAgZWxlbWVudHMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgY291bnRSYWRpb3MpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSBzaWduICsgaTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIFNldEF0dHJpYnV0ZUZvcihlbGVtZW50LCBvbGRJZCwgc3VmZml4KTsNCiAgICAgICAgICAgICAgICAgICAgZm9yIChhID0gMDsgYSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVzW2FdLCBzdWZmaXgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIGkgPSAwOw0KICAgICAgICAgICAgdmFyIGZpcnRzRWxlbWVudCA9IGVsZW1lbnRzLmZpcnN0KCk7DQogICAgICAgICAgICBTZXRBdHRyaWJ1dGVGb3IoZmlydHNFbGVtZW50LCBvbGRJZCwgc3VmZml4KTsNCiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlcy5sZW5ndGg7IGErKykgew0KICAgICAgICAgICAgICAgIFNldEF0dHJpYnV0ZShmaXJ0c0VsZW1lbnQsIGF0dHJpYnV0ZXNbYV0sIHN1ZmZpeCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGVsZW1lbnRzLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHNpZ24gKyArK2k7DQogICAgICAgICAgICAgICAgU2V0QXR0cmlidXRlRm9yKGVsZW1lbnQsIG9sZElkLCBzdWZmaXgpOw0KICAgICAgICAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgYSsrKSB7DQogICAgICAgICAgICAgICAgICAgIFNldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVzW2FdLCBzdWZmaXgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gZWxlbWVudHMuc2xpY2UoZWxlbWVudHMubGVuZ3RoIC0gMSk7DQogICAgICAgIGlmIChsYXN0RWxlbWVudCAhPSBjb3B5RWxlbWVudCkgew0KICAgICAgICAgICAgQ29weVZhbGlkYXRpb25SdWxlcyhvbGRJZCwgbGFzdEVsZW1lbnQpOw0KICAgICAgICB9DQogICAgICAgIENvcHlWYWxpZGF0aW9uUnVsZXMob2xkSWQsIGNvcHlFbGVtZW50KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFNldEF0dHJpYnV0ZShpbnB1dCwgYXR0cmlidXRlTmFtZSwgc3VmZml4KSB7DQogICAgdmFyIHZhbHVlID0gaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lKTsNCiAgICBpZiAodmFsdWUgIT0gbnVsbCkgew0KICAgICAgICB2YWx1ZSA9IGdldE9yaWdpbmFsSWQodmFsdWUsIHNpZ24pOw0KDQogICAgICAgIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSwgdmFsdWUgKyBzdWZmaXgpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZ2V0T3JpZ2luYWxJZCh2YWx1ZSwgc2lnbikgew0KICAgIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2Yoc2lnbik7DQogICAgaWYgKGluZGV4ID4gLTEpIHsNCiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpOw0KICAgIH0NCg0KICAgIHJldHVybiB2YWx1ZTsNCn0NCg0KZnVuY3Rpb24gU2V0QXR0cmlidXRlRm9yKGVsZW1lbnQsIG9sZElkLCBzdWZmaXgpIHsNCiAgICB2YXIgYXR0cmlidXRlTmFtZSA9ICJmb3IiOw0KICAgIHZhciBzZWxlY3RvckZvciA9ICJbIiArIGF0dHJpYnV0ZU5hbWUgKyAifD0nIiArIG9sZElkICsgIiddIjsNCiAgICB2YXIgbGFiZWwgPSBlbGVtZW50LmNsb3Nlc3QoJ2RpdicpLmZpbmQoc2VsZWN0b3JGb3IpOw0KICAgIGlmIChsYWJlbCAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgU2V0QXR0cmlidXRlKGxhYmVsLCBhdHRyaWJ1dGVOYW1lLCBzdWZmaXgpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gQ29weVZhbGlkYXRpb25SdWxlcyhvbGRJZCwgY29weUVsZW1lbnQpIHsNCiAgICBpZiAoY29weUVsZW1lbnQuYXR0cigibmFtZSIpKSB7DQogICAgICAgIHZhciBlbGVtZW50ID0gJCgnIycgKyBvbGRJZCk7DQogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gIm5hbWUiOw0KICAgICAgICB2YXIgZWxlbWVudE5hbWUgPSBlbGVtZW50LmF0dHIoYXR0cmlidXRlTmFtZSk7DQogICAgICAgIGlmIChlbGVtZW50TmFtZSAhPSBudWxsKSB7DQogICAgICAgICAgICB2YXIgYmFja1VwRWxlbWVudE5hbWUgPSBlbGVtZW50WzBdLm5hbWU7DQogICAgICAgICAgICB2YXIgYmFja1VwQ29weUVsZW1lbnQgPSBjb3B5RWxlbWVudFswXS5uYW1lOw0KICAgICAgICAgICAgZWxlbWVudFswXS5uYW1lID0gZWxlbWVudFswXS5uYW1lLnJlcGxhY2UoZGlzYWJsZVZhbGlkYXRvclByZWZpeCwgJycpOw0KICAgICAgICAgICAgY29weUVsZW1lbnRbMF0ubmFtZSA9IGNvcHlFbGVtZW50WzBdLm5hbWUucmVwbGFjZShkaXNhYmxlVmFsaWRhdG9yUHJlZml4LCAnJyk7DQogICAgICAgICAgICB2YXIgcnVsZXMgPSBlbGVtZW50LnJ1bGVzKCk7DQoNCiAgICAgICAgICAgIGlmIChlbGVtZW50WzBdICE9IGNvcHlFbGVtZW50WzBdKQ0KICAgICAgICAgICAgICAgIGVsZW1lbnRbMF0ubmFtZSA9IGJhY2tVcEVsZW1lbnROYW1lOw0KDQogICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudFswXTsNCiAgICAgICAgICAgIHZhciBuZXdSdWxlcyA9IHt9Ow0KICAgICAgICAgICAgdmFyIG5ld01lc3NhZ2VzID0ge307DQogICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSAkLmRhdGEoZWxlbWVudC5mb3JtLCAndmFsaWRhdG9yJykuc2V0dGluZ3M7DQogICAgICAgICAgICBmb3IgKHZhciBtZXRob2QgaW4gcnVsZXMpIHsNCiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1ldGhvZC5yZXBsYWNlKGVsZW1lbnROYW1lLCBjb3B5RWxlbWVudC5hdHRyKGF0dHJpYnV0ZU5hbWUpKTsNCiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGlvbk9iamVjdCA9IHNldHRpbmdzLm1lc3NhZ2VzW2VsZW1lbnQubmFtZS5yZXBsYWNlKGRpc2FibGVWYWxpZGF0b3JQcmVmaXgsICcnKV07DQogICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25PYmplY3QgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBuZXdSdWxlc1tuYW1lXSA9IHJ1bGVzW21ldGhvZF07DQogICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IHZhbGlkYXRpb25PYmplY3RbbWV0aG9kXTsNCiAgICAgICAgICAgICAgICAgICAgbmV3TWVzc2FnZXNbbmFtZV0gPSBtZXNzYWdlczsNCiAgICAgICAgICAgICAgICAgICAgJC52YWxpZGF0b3IuYWRkTWV0aG9kKG5hbWUsICQudmFsaWRhdG9yLm1ldGhvZHNbbWV0aG9kXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbmV3UnVsZXMubWVzc2FnZXMgPSBuZXdNZXNzYWdlczsNCiAgICAgICAgICAgIGNvcHlFbGVtZW50LnJ1bGVzKCdhZGQnLCBuZXdSdWxlcyk7DQogICAgICAgICAgICBjb3B5RWxlbWVudFswXS5uYW1lID0gYmFja1VwQ29weUVsZW1lbnQ7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEdldEluY3JlbWVudGFsVmFsdWUodmFsdWUsIHNlY3Rpb25JbmNyZW1lbnQpIHsNCiAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKHJlcGVhdGluZ1Bvc3RmaXggKyAiXFxkKyQiKTsNCiAgICB2YXIgY2xlYW5WYWwgPSB2YWx1ZS5yZXBsYWNlKHJlZ0V4LCAnJyk7DQogICAgLy8vLy8vIE1MIHZyYXRpIHBvdm9kbnUgLy8vLw0KICAgIC8vaWYgKHNlY3Rpb25JbmNyZW1lbnQgPT0gJycpDQogICAgLy8gICAgcmV0dXJuIGNsZWFuVmFsOw0KICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCiAgICByZXR1cm4gY2xlYW5WYWwgKyByZXBlYXRpbmdQb3N0Zml4ICsgc2VjdGlvbkluY3JlbWVudDsNCn0NCg0KZnVuY3Rpb24gUmVpbmRleEFkZHJlc3NJbnB1dCh2YWx1ZSkgew0KICAgIHZhciBpbmRleCA9IHZhbHVlLmluZGV4T2Yoc2lnbik7DQogICAgaWYgKGluZGV4ID4gMCkgew0KICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCk7DQogICAgfQ0KDQogICAgdmFyIGNvdW50ID0gMDsNCiAgICB2YXIgc2VsZWN0b3IgPSB2YWx1ZTsNCiAgICB2YXIgZWxlbWVudCA9ICQoJyMnICsgc2VsZWN0b3IpOw0KDQogICAgd2hpbGUgKGVsZW1lbnRbMF0gIT0gdW5kZWZpbmVkKSB7DQogICAgICAgIGNvdW50ID0gY291bnQgKyAxOw0KICAgICAgICBzZWxlY3RvciA9IHZhbHVlICsgc2lnbiArIGNvdW50Ow0KICAgICAgICBlbGVtZW50ID0gJCgnIycgKyBzZWxlY3Rvcik7DQogICAgfQ0KDQogICAgcmV0dXJuIHNlbGVjdG9yOw0KfQ0KDQpmdW5jdGlvbiBHZXRWYWx1ZVdpdGhvdXRJbmNyZW1lbnRhbCh2YWx1ZSkgew0KICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAocmVwZWF0aW5nUG9zdGZpeCArICJcXGQrJCIpOw0KICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4LCAnJyk7DQp9DQoNCmZ1bmN0aW9uIEluY3JlbWVudEl0ZW1EZWxlZ2F0ZShjb250ZXh0LCBzZWN0aW9uSW5jcmVtZW50KSB7DQogICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAibmFtZSI7DQogICAgY29udGV4dC5hdHRyKGF0dHJpYnV0ZU5hbWUsIEdldEluY3JlbWVudGFsVmFsdWUoY29udGV4dC5hdHRyKGF0dHJpYnV0ZU5hbWUpLCBzZWN0aW9uSW5jcmVtZW50KSk7DQp9DQoNCiQuZm4uVG9nZ2xlVmFsaWRhdG9ycyA9IGZ1bmN0aW9uICh0b2dnbGUpIHsNCiAgICB2YXIgYXR0cmlidXRlTmFtZTsNCiAgICBpZiAodG9nZ2xlID09IGZhbHNlKSB7DQogICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAibmFtZSI7DQogICAgICAgIHRoaXMuZmluZCgnW0lEXTppbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKTsNCiAgICAgICAgICAgIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSwgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lKS5yZXBsYWNlKGRpc2FibGVWYWxpZGF0b3JQcmVmaXgsICcnKSk7DQogICAgICAgIH0pOw0KICAgICAgICBhdHRyaWJ1dGVOYW1lID0gImZvciI7DQogICAgICAgIHRoaXMuZmluZCgnbGFiZWwnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgICAgICBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUsIGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSkucmVwbGFjZShkaXNhYmxlVmFsaWRhdG9yUHJlZml4LCAnJykpOw0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy5maW5kKCJbaWRePSdsYXlvdXRSb3cnXVtpc2VtcHR5PSd0cnVlJ10iKS5Ub2dnbGVWYWxpZGF0b3JzKHRydWUpOw0KICAgICAgICB0aGlzLmZpbmQoImRpdi5sYXlvdXRSb3cuaGlkZGVuU2VjdGlvbiIpLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgYXR0cmlidXRlTmFtZSA9ICJuYW1lIjsNCiAgICAgICAgdGhpcy5maW5kKCdbSURdOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOw0KICAgICAgICAgICAgaWYgKGlucHV0LmF0dHIoYXR0cmlidXRlTmFtZSkuaW5kZXhPZihkaXNhYmxlVmFsaWRhdG9yUHJlZml4KSA9PSAtMSkNCiAgICAgICAgICAgICAgICBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUsIGRpc2FibGVWYWxpZGF0b3JQcmVmaXggKyBpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUpKTsNCg0KICAgICAgICAgICAgaW5wdXQuZm9jdXNvdXQoKTsNCiAgICAgICAgfSk7DQogICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAiZm9yIjsNCiAgICAgICAgdGhpcy5maW5kKCdsYWJlbCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKTsNCiAgICAgICAgICAgIGlmIChpbnB1dC5hdHRyKGF0dHJpYnV0ZU5hbWUpLmluZGV4T2YoZGlzYWJsZVZhbGlkYXRvclByZWZpeCkgPT0gLTEpDQogICAgICAgICAgICAgICAgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lLCBkaXNhYmxlVmFsaWRhdG9yUHJlZml4ICsgaW5wdXQuYXR0cihhdHRyaWJ1dGVOYW1lKSk7DQogICAgICAgIH0pOw0KICAgIH0NCiAgICByZXR1cm4gdGhpczsNCn07DQoNCiQuZm4uVG9nZ2xlVmFsaWRhdG9yc1N0eWxlID0gZnVuY3Rpb24gKHRvZ2dsZSkgew0KICAgIHZhciBkaXNhYmxldmFsaWRhdG9ycyA9IGRpc2FibGVWYWxpZGF0b3JzOw0KICAgIHRoaXMuZmluZCgnW0lEXTppbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpOw0KICAgICAgICBpZiAodG9nZ2xlID09IGZhbHNlKSB7DQogICAgICAgICAgICBpbnB1dC5yZW1vdmVDbGFzcyhkaXNhYmxldmFsaWRhdG9ycyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpbnB1dC5hZGRDbGFzcyhkaXNhYmxldmFsaWRhdG9ycyk7DQogICAgICAgIH0NCiAgICAgICAgaW5wdXQuZm9jdXNvdXQoKTsNCiAgICB9KTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5IaWRlU3dpdGNoU2VjdGlvbnMgPSBmdW5jdGlvbiAoc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgZm9yICh2YXIgb25lU3dpdGNoIGluIHN3aXRjaGVzVG9TZWN0aW9ucykgew0KICAgICAgICB2YXIgdHJpZ2dlciA9ICQob25lU3dpdGNoKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlnZ2VyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgY3VycmVudFRyaWdnZXIgPSAkKHRyaWdnZXJbaV0pOw0KICAgICAgICAgICAgaWYgKCFjdXJyZW50VHJpZ2dlci5pcygiOmNoZWNrZWQiKSkgew0KICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uc0NvbGxlY3Rpb24gPSBzd2l0Y2hlc1RvU2VjdGlvbnNbb25lU3dpdGNoXTsNCiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IEdldENvbnRleHQoY3VycmVudFRyaWdnZXIsIHNlY3Rpb25zQ29sbGVjdGlvbik7DQogICAgICAgICAgICAgICAgZm9yIChzZWN0aW9uIGluIHNlY3Rpb25zQ29sbGVjdGlvbikgew0KICAgICAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IGNvbnRleHQuZmluZChzZWN0aW9uc0NvbGxlY3Rpb25bc2VjdGlvbl0pLmVxKDApOw0KICAgICAgICAgICAgICAgICAgICB2YXIgaGlkZGVuc2VjdGlvbiA9ICJoaWRkZW5TZWN0aW9uIjsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24uaGFzQ2xhc3MoJ2NlbGwnKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb25DaGlsZCA9IHNlY3Rpb24uY2hpbGRyZW4oKS5maXJzdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi50b2dnbGVDbGFzcyhoaWRkZW5zZWN0aW9uLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5Ub2dnbGVWYWxpZGF0b3JzKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5Td2l0Y2hTZWN0aW9ucyA9IGZ1bmN0aW9uIChzd2l0Y2hlc1RvU2VjdGlvbnMsIGlzQ2hlY2tCb3hMaXN0KSB7DQogICAgdmFyIGNvbnRleHQgPSAkKHRoaXMpOw0KICAgIHZhciBpc1Nob3dBbGw7DQogICAgdmFyIGhhc1ZhbDsNCg0KICAgICQoJ2Zvcm0nKS5maW5kKGNvbnRleHQuc2VsZWN0b3IpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgYWN0dWFsQ29udGV4dCA9ICQodGhpcyk7DQogICAgICAgIGhhc1ZhbCA9IGZhbHNlOw0KICAgICAgICBmb3IgKHZhciBzaW5nbGVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgICAgICBpc1Nob3dBbGwgPSBmYWxzZTsNCiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBzd2l0Y2hlc1RvU2VjdGlvbnNbc2luZ2xlU3dpdGNoXTsNCiAgICAgICAgICAgIHZhciB0cmlnZ2VyID0gYWN0dWFsQ29udGV4dC5maW5kKHNpbmdsZVN3aXRjaCk7DQogICAgICAgICAgICBmb3IgKHZhciBzZWN0aW9uIGluIHRhcmdldCkgew0KICAgICAgICAgICAgICAgIGlmIChpc1Nob3dBbGwpDQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGFjdHVhbENvbnRleHQuZmluZCh0YXJnZXRbc2VjdGlvbl0pLmZpbmQoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKVswXTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSAncmFkaW8nICYmIGVsZW1lbnQudmFsdWUgIT0gJycpDQogICAgICAgICAgICAgICAgICAgICAgICBoYXNWYWwgPSB0cnVlOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGlzU2hvd0FsbCA9IHRyaWdnZXIuaXMoJ1tyZWFkb25seV0nKSAmJiAhaGFzVmFsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFpc1Nob3dBbGwpIHsNCiAgICAgICAgICAgIGZvciAoc2luZ2xlU3dpdGNoIGluIHN3aXRjaGVzVG9TZWN0aW9ucykgew0KICAgICAgICAgICAgICAgIHRyaWdnZXIgPSBhY3R1YWxDb250ZXh0LmZpbmQoc2luZ2xlU3dpdGNoKTsNCiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlci5sZW5ndGggPT0gMCkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQoNCiAgICAgICAgICAgICAgICB0cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tCb3hMaXN0ID09IHRydWUpDQogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hDaGVja2JveENsaWNrZWQoc3dpdGNoZXNUb1NlY3Rpb25zLCB0aGlzKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoUmFkaW9DbGlja2VkKHN3aXRjaGVzVG9TZWN0aW9ucywgdGhpcyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiB0aGlzOw0KfTsNCg0KJC5mbi5SZWluaXRpYWxpemVDb25kaXRpb25hbFJ1bGVzID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBjb250ZXh0ID0gJCh0aGlzKTsNCg0KICAgIEluaXRDb25kaXRpb25hbFJ1bGVzKGNvbnRleHQpOw0KDQogICAgcmV0dXJuIHRoaXM7DQp9Ow0KDQpmdW5jdGlvbiBHZXRDb250ZXh0KGN1cnJlbnRjbGljaywgdGFyZ2V0KSB7DQogICAgcmV0dXJuIHJlY3VyKCQoY3VycmVudGNsaWNrKSwgdGFyZ2V0WzBdKTsNCn0NCg0KZnVuY3Rpb24gZmluZFBhcmVudChlbGVtZW50KSB7DQogICAgdmFyIHBhdHQgPSBuZXcgUmVnRXhwKCJebGF5b3V0Um93WzAtOV0rJCIpOw0KICAgIHZhciBwYXR0MiA9IG5ldyBSZWdFeHAoIl5sYXlvdXRSb3dbMC05XStfUmVwZWF0aW5nX1swLTldKyQiKTsNCiAgICB2YXIgaWQgPSBlbGVtZW50WzBdLmlkOw0KICAgIGlmIChwYXR0LnRlc3QoaWQpIHx8IHBhdHQyLnRlc3QoaWQpIHx8IGlkID09ICJtYWluIikgew0KICAgICAgICByZXR1cm4gZWxlbWVudDsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gZmluZFBhcmVudChlbGVtZW50LnBhcmVudCgpKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHJlY3VyKGVsZW1lbnQsIHRhcmdldCkgew0KICAgIHZhciBmOw0KICAgIHZhciBjaGlsZHJlbiA9IGVsZW1lbnRbMF0uY2hpbGRyZW47DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOw0KICAgICAgICBpZiAoY2hpbGQuaWQgPT0gIm1haW4iKSB7DQogICAgICAgICAgICByZXR1cm4gJCgiZm9ybSIpOw0KICAgICAgICB9DQogICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICB2YXIgYSA9ICQoY2hpbGQpLmZpbmQodGFyZ2V0KTsNCiAgICAgICAgICAgIGlmIChhLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICBmID0gZmluZFBhcmVudChhLnBhcmVudCgpKTsNCiAgICAgICAgICAgIH0gDQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoZiA9PSBudWxsKSB7DQogICAgICAgIHJldHVybiByZWN1cihlbGVtZW50LnBhcmVudCgpLCB0YXJnZXQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBmOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gY3VzdG9tRnVuY3Rpb25BZnRlclN3aXRjaFNlY3Rpb24oc3dpdGNoZXNUb1NlY3Rpb25zLCBjdXJyZW50Y2xpY2spIHsNCiAgICAvLyBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGN1c3RvbSBwX1BST0pFQ1QuanMgZmlsZQ0KfQ0KDQpmdW5jdGlvbiBzd2l0Y2hSYWRpb0NsaWNrZWQoc3dpdGNoZXNUb1NlY3Rpb25zLCBjdXJyZW50Y2xpY2spIHsNCiAgICBmb3IgKHZhciBvbmVTd2l0Y2ggaW4gc3dpdGNoZXNUb1NlY3Rpb25zKSB7DQogICAgICAgIHZhciB0YXJnZXQgPSBzd2l0Y2hlc1RvU2VjdGlvbnNbb25lU3dpdGNoXTsNCiAgICAgICAgdmFyIGNvbnRleHQgPSBHZXRDb250ZXh0KGN1cnJlbnRjbGljaywgdGFyZ2V0KTsNCiAgICAgICAgb25lU3dpdGNoID0gY29udGV4dC5maW5kKG9uZVN3aXRjaCk7DQoNCiAgICAgICAgZm9yICh2YXIgc2VjdGlvbiBpbiB0YXJnZXQpIHsNCiAgICAgICAgICAgIHNlY3Rpb24gPSBjb250ZXh0LmZpbmQodGFyZ2V0W3NlY3Rpb25dKTsNCiAgICAgICAgICAgIHZhciBzZWN0aW9uQ2hpbGQ7DQogICAgICAgICAgICB2YXIgaGlkZGVuc2VjdGlvbiA9ICJoaWRkZW5TZWN0aW9uIjsNCiAgICAgICAgICAgIHZhciBjZWxsID0gJ2NlbGwnOw0KICAgICAgICAgICAgaWYgKG9uZVN3aXRjaFswXSA9PSBjdXJyZW50Y2xpY2spIHsNCiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5oYXNDbGFzcyhjZWxsKSkgew0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQgPSBzZWN0aW9uLmNoaWxkcmVuKCkuZmlyc3QoKTsNCiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLlRvZ2dsZVZhbGlkYXRvcnMoZmFsc2UpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBzZWN0aW9uLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIGZhbHNlKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uLlRvZ2dsZVZhbGlkYXRvcnMoZmFsc2UpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5oYXNDbGFzcyhjZWxsKSkgew0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQgPSBzZWN0aW9uLmNoaWxkcmVuKCkuZmlyc3QoKTsNCiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQuVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgc2VjdGlvbi50b2dnbGVDbGFzcyhoaWRkZW5zZWN0aW9uLCB0cnVlKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICQoJ1tpZF49JyArIEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKHNlY3Rpb24uYXR0cignaWQnKSArICddJykpLlJlbW92ZURhdGVQaWNrZXJDbGFzcygpOw0KICAgICAgICAgICAgc2VjdGlvbi5JbmNyZW1lbnRGaWVsZElkcygpOw0KICAgICAgICAgICAgSW5pdFBpY2tlcnMoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGN1c3RvbUZ1bmN0aW9uQWZ0ZXJTd2l0Y2hTZWN0aW9uKHN3aXRjaGVzVG9TZWN0aW9ucywgY3VycmVudGNsaWNrKTsNCn0NCg0KZnVuY3Rpb24gc3dpdGNoQ2hlY2tib3hDbGlja2VkKHN3aXRjaGVzVG9TZWN0aW9ucywgY3VycmVudGNsaWNrKSB7DQogICAgdmFyIGlzQ2hlY2tib3hTZWxlY3RlZCA9ICQoY3VycmVudGNsaWNrKS5pcygnOmNoZWNrZWQnKTsNCiAgICB2YXIgc2VjdGlvbnNDb2xsZWN0aW9uID0gbnVsbDsNCg0KICAgIGZvciAodmFyIHNlY3Rpb25zS2V5IGluIHN3aXRjaGVzVG9TZWN0aW9ucykgew0KICAgICAgICB2YXIgdGFyZ2V0ID0gc3dpdGNoZXNUb1NlY3Rpb25zW3NlY3Rpb25zS2V5XTsNCiAgICAgICAgdmFyIGNvbnRleHQgPSBHZXRDb250ZXh0KGN1cnJlbnRjbGljaywgdGFyZ2V0KTsNCiAgICAgICAgdmFyIG9uZVN3aXRjaCA9IGNvbnRleHQuZmluZChzZWN0aW9uc0tleSk7DQogICAgICAgIGlmIChvbmVTd2l0Y2hbMF0gPT0gY3VycmVudGNsaWNrKSB7DQogICAgICAgICAgICBzZWN0aW9uc0NvbGxlY3Rpb24gPSB0YXJnZXQ7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmIChzZWN0aW9uc0NvbGxlY3Rpb24gPT0gbnVsbCkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgZm9yICh2YXIgc2VjdGlvbiBpbiBzZWN0aW9uc0NvbGxlY3Rpb24pIHsNCiAgICAgICAgc2VjdGlvbiA9IGNvbnRleHQuZmluZChzZWN0aW9uc0NvbGxlY3Rpb25bc2VjdGlvbl0pLmVxKDApOw0KICAgICAgICB2YXIgc2VjdGlvbkNoaWxkOw0KICAgICAgICB2YXIgaGlkZGVuc2VjdGlvbiA9ICJoaWRkZW5TZWN0aW9uIjsNCiAgICAgICAgdmFyIGNlbGwgPSAnY2VsbCc7DQogICAgICAgIGlmIChpc0NoZWNrYm94U2VsZWN0ZWQpIHsNCiAgICAgICAgICAgIGlmIChzZWN0aW9uLmhhc0NsYXNzKGNlbGwpKSB7DQogICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkID0gc2VjdGlvbi5jaGlsZHJlbigpLmZpcnN0KCk7DQogICAgICAgICAgICAgICAgc2VjdGlvbkNoaWxkLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIGZhbHNlKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQuVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBzZWN0aW9uLnRvZ2dsZUNsYXNzKGhpZGRlbnNlY3Rpb24sIGZhbHNlKTsNCiAgICAgICAgICAgIHNlY3Rpb24uVG9nZ2xlVmFsaWRhdG9ycyhmYWxzZSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBpZiAoc2VjdGlvbi5oYXNDbGFzcyhjZWxsKSkgew0KICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZCA9IHNlY3Rpb24uY2hpbGRyZW4oKS5maXJzdCgpOw0KICAgICAgICAgICAgICAgIHNlY3Rpb25DaGlsZC50b2dnbGVDbGFzcyhoaWRkZW5zZWN0aW9uLCB0cnVlKTsNCiAgICAgICAgICAgICAgICBzZWN0aW9uQ2hpbGQuVG9nZ2xlVmFsaWRhdG9ycyh0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHNlY3Rpb24udG9nZ2xlQ2xhc3MoaGlkZGVuc2VjdGlvbiwgdHJ1ZSk7DQogICAgICAgICAgICBzZWN0aW9uLlRvZ2dsZVZhbGlkYXRvcnModHJ1ZSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBjdXN0b21GdW5jdGlvbkFmdGVyU3dpdGNoU2VjdGlvbihzd2l0Y2hlc1RvU2VjdGlvbnMsIGN1cnJlbnRjbGljayk7DQp9DQoNCiQuR2V0VXJsUGFyYW0gPSBmdW5jdGlvbiAobmFtZSkgew0KICAgIHZhciByZXN1bHRzID0gbmV3IFJlZ0V4cCgnW1xcPyZdJyArIG5hbWUgKyAnPShbXiYjXSopJykuZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7DQoNCiAgICBpZiAocmVzdWx0cyA9PSBudWxsKQ0KICAgICAgICByZXR1cm4gMDsNCg0KICAgIHJldHVybiByZXN1bHRzWzFdIHx8IDA7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gTUwgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpmdW5jdGlvbiBHZXRPbmx5SW5jcmVtZW50VmFsdWUodmFsdWUpIHsgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIHJvenNpcmVuaWUNCg0KICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAocmVwZWF0aW5nRWxlbWVudFBvc3RmaXggKyAiKFxcZCspJCIpDQogICAgdmFyIGNsZWFuVmFsID0gcmVnRXguZXhlYyh2YWx1ZSk7DQogICAgaWYgKGNsZWFuVmFsID09IG51bGwpDQogICAgICAgIHJldHVybiAnJzsNCiAgICBlbHNlDQogICAgICAgIHJldHVybiBwYXJzZUludChjbGVhblZhbFsxXSk7DQp9DQoNCmZ1bmN0aW9uIGdldFBhZ2VkU2VjdGlvbk5hbWUoZWxlbWVudCkgeyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIHJvenNpcmVuaWUNCiAgICB2YXIgbHNlY3BnID0gJChlbGVtZW50KS5jbG9zZXN0KCdkaXYucGFnZWFibGVTZWN0aW9uJyk7DQogICAgaWYgKGxzZWNwZyAhPSBudWxsKQ0KICAgICAgICByZXR1cm4gbHNlY3BnLmF0dHIoJ2lkJyk7DQogICAgZWxzZQ0KICAgICAgICByZXR1cm4gbnVsbDsNCn0NCg0KZnVuY3Rpb24gR2V0RWxlbWVudEluY3JlbWVudGFsVmFsdWUodmFsdWUsIHNlY3Rpb25JbmNyZW1lbnQpIHsNCiAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKHJlcGVhdGluZ0VsZW1lbnRQb3N0Zml4ICsgIlxcZCskIik7DQogICAgdmFyIGNsZWFuVmFsID0gdmFsdWUucmVwbGFjZShyZWdFeCwgJycpOw0KICAgIC8vLy8gTUwgdnJhdGkgcG92b2RudSAvLy8vDQogICAgaWYgKHNlY3Rpb25JbmNyZW1lbnQgPT0gJycpDQogICAgICAgIHJldHVybiBjbGVhblZhbDsNCg0KICAgIHJldHVybiBjbGVhblZhbCArIHJlcGVhdGluZ0VsZW1lbnRQb3N0Zml4ICsgc2VjdGlvbkluY3JlbWVudDsNCn0NCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8qIF1dPiAqLw0KPC9zY3JpcHQ+DQoJCQkNCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovKiA8IVtDREFUQVsgKi8NCi8vLyA8cmVmZXJlbmNlIHBhdGg9ImpxdWVyeS0xLjQuMS12c2RvYy5qcyIgLz4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICBJbml0U3RhdHVzRGlhbG9nKCk7DQp9KTsNCg0KZnVuY3Rpb24gSW5pdFN0YXR1c0RpYWxvZygpIHsNCiAgICBzdGF0dXNEaWFsb2cuaW5pdERpYWxvZygpOw0KfQ0KDQp2YXIgc3RhdHVzRGlhbG9nID0gew0KDQogICAgZ2V0RGlhbG9nOiBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiAkKCIjc3RhdHVzRGlhbG9nIik7DQogICAgfSwNCg0KICAgIGluaXREaWFsb2c6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGRsZyA9IHN0YXR1c0RpYWxvZy5nZXREaWFsb2coKTsNCg0KICAgICAgICBkbGcuZGlhbG9nKHsgDQogICAgICAgICAgICAnYXV0b09wZW4nOiBmYWxzZSwNCiAgICAgICAgICAgICdtb2RhbCc6IHRydWUsDQogICAgICAgICAgICAndGl0bGUnOiAnRGlhbG9nJywNCiAgICAgICAgICAgICdyZXNpemFibGUnOiAnZGlzYWJsZScsDQogICAgICAgICAgICAnd2lkdGgnOiAnMzUwcHgnLA0KICAgICAgICAgICAgJ2hlaWdodCc6ICdhdXRvJw0KICAgICAgICB9KTsNCiAgICB9LA0KDQogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gKCkgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZGlhbG9nKCdvcGVuJyk7DQogICAgfSwNCg0KICAgIGhpZGVEaWFsb2c6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3RhdHVzRGlhbG9nLmdldERpYWxvZygpLmRpYWxvZygnY2xvc2UnKTsNCiAgICB9LA0KDQogICAgc2hvd1Byb2dyZXNzOiBmdW5jdGlvbiAoKSB7DQogICAgICAgIHN0YXR1c0RpYWxvZy5nZXREaWFsb2coKS5maW5kKCIjc3RhdHVzTG9hZGVyIikuc2hvdygpOw0KICAgIH0sDQoNCiAgICBoaWRlUHJvZ3Jlc3M6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3RhdHVzRGlhbG9nLmdldERpYWxvZygpLmZpbmQoIiNzdGF0dXNMb2FkZXIiKS5oaWRlKCk7DQogICAgfSwNCg0KICAgIHNldFRpdGxlOiBmdW5jdGlvbiAodGl0bGUpIHsNCiAgICAgICAgc3RhdHVzRGlhbG9nLmdldERpYWxvZygpLmRpYWxvZygib3B0aW9uIiwgInRpdGxlIiwgdGl0bGUpOw0KICAgIH0sDQoNCiAgICBzZXRNZXNzYWdlOiBmdW5jdGlvbiAobWVzc2FnZSkgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZmluZCgiI3N0YXR1c01lc3NhZ2UiKS50ZXh0KG1lc3NhZ2UpOw0KICAgIH0sDQoNCiAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICBzdGF0dXNEaWFsb2cuZ2V0RGlhbG9nKCkuZGlhbG9nKCJvcHRpb24iLCBvcHRpb25zKTsNCiAgICB9DQoNCn0NCg0KDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQooZnVuY3Rpb24oJCkgewoKICAvKioKICAgKiBUaGlzIGFkZHMgYSBDaG9zZW4gc3R5bGUgc2VsZWN0b3IgZm9yIHRoZSB0cmVlIHNlbGVjdCB3aWRnZXQuCiAgICoKICAgKiBUaGlzIHdpZGdldCByZXF1aXJlcyBjaG9zZW4uY3NzLgogICAqLwogICQuZm4uY2hvc2VudHJlZSA9IGZ1bmN0aW9uKHBhcmFtcykgewoKICAgIC8vIFNldHVwIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuCiAgICBwYXJhbXMgPSAkLmV4dGVuZCh7CiAgICAgIGlucHV0SWQ6ICdjaG9zZW50cmVlLXNlbGVjdCcsICAgICAvKiogVGhlIGlucHV0IGVsZW1lbnQgSUQgYW5kIE5BTUUuICovCiAgICAgIGxhYmVsOiAnJywgICAgICAgICAgICAgICAgICAgICAgICAvKiogVGhlIGxhYmVsIHRvIGFkZCB0byB0aGUgaW5wdXQuICovCiAgICAgIGRlc2NyaXB0aW9uOiAnJywgICAgICAgICAgICAgICAgICAvKiogVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgaW5wdXQuICovCiAgICAgIGlucHV0X3BsYWNlaG9sZGVyOiBudWxsLCAvKiogVGhlIGlucHV0IHBsYWNlaG9sZGVyIHRleHQuICovCiAgICAgIGlucHV0X3R5cGU6ICd0ZXh0JywgICAgICAgICAgICAgICAvKiogRGVmaW5lIHRoZSBpbnB1dCB0eXBlLiAqLwogICAgICBhdXRvc2VhcmNoOiBmYWxzZSwgICAgICAgICAgICAgICAgLyoqIElmIHdlIHdvdWxkIGxpa2UgdG8gYXV0b3NlYXJjaC4gKi8KICAgICAgc2VhcmNoX3RleHQ6ICdTZWFyY2gnLCAgICAgICAgICAgIC8qKiBUaGUgc2VhcmNoIGJ1dHRvbiB0ZXh0LiAqLwogICAgICBub19yZXN1bHRzX3RleHQ6ICdObyByZXN1bHRzIGZvdW5kJywgLyoqIFNob3duIHdoZW4gbm8gcmVzdWx0cy4gKi8KICAgICAgbWluX2hlaWdodDogMTAwLCAgICAgICAgICAgICAgICAgIC8qKiBUaGUgbWluaXVtdW0gaGVpZ2h0LiAqLwogICAgICBtb3JlX3RleHQ6ICcrJW51bSUgbW9yZScsICAgICAgICAgLyoqIFRoZSB0ZXh0IHRvIHNob3cgaW4gdGhlIG1vcmUuICovCiAgICAgIGxvYWRlZDogbnVsbCwgICAgICAgICAgICAgICAgICAgICAvKiogQ2FsbGVkIHdoZW4gYWxsIGl0ZW1zIGFyZSBsb2FkZWQuICovCiAgICAgIGNvbGxhcHNlZDogdHJ1ZSwgICAgICAgICAgICAgICAgICAvKiogSWYgdGhlIHRyZWUgc2hvdWxkIGJlIGNvbGxhcHNlZC4gKi8KICAgICAgc2hvd3RyZWU6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAvKiogVG8gc2hvdyB0aGUgdHJlZS4gKi8KICAgICAgaW5wdXROYW1lOid0cmVlc2VsZWN0JwogICAgfSwgcGFyYW1zKTsKCiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBpbnN0YW5jZS4KICAgIHJldHVybiAkKHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7CgogICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSB0cmVlc2VsZWN0LgogICAgICB2YXIgc2VsZWN0b3IgPSBudWxsOwogICAgICB2YXIgY2hvaWNlcyA9IG51bGw7CiAgICAgIHZhciBzZWFyY2ggPSBudWxsOwogICAgICB2YXIgaW5wdXQgPSBudWxsOwogICAgICB2YXIgc2VhcmNoX2J0biA9IG51bGw7CiAgICAgIHZhciBsYWJlbCA9IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHZhciB0cmVlc2VsZWN0ID0gbnVsbDsKICAgICAgdmFyIHRyZWV3cmFwcGVyID0gbnVsbDsKICAgICAgdmFyIHNlbGVjdGVkVGltZXIgPSAwOwogICAgICB2YXIgcm9vdCA9IG51bGw7CgogICAgICAvLyBTaG93IG9yIGhpZGUgdGhlIHRyZWUuCiAgICAgIHZhciBzaG93VHJlZSA9IGZ1bmN0aW9uKHNob3csIHR3ZWVuKSB7CiAgICAgICAgdHdlZW4gPSB0d2VlbiB8fCAnZmFzdCc7CiAgICAgICAgaWYgKHNob3cgJiYgKCFyb290IHx8IHJvb3QuaGFzX2NoaWxkcmVuKSkgewogICAgICAgICAgdHJlZXdyYXBwZXIuYWRkQ2xhc3MoJ3RyZWV2aXNpYmxlJykuc2hvdygnZmFzdCcpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHRyZWV3cmFwcGVyLnJlbW92ZUNsYXNzKCd0cmVldmlzaWJsZScpLmhpZGUoJ2Zhc3QnKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBpZiAoJCh0aGlzKS5maW5kKCIuY2h6bnRyZWUtY29udGFpbmVyIikubGVuZ3RoID09IDApIHsKCiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHNlbGVjdG9yIGVsZW1lbnQuCiAgICAgICAgICBzZWxlY3RvciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgICAgc2VsZWN0b3IuYWRkQ2xhc3MoJ2Noem50cmVlLWNvbnRhaW5lcicpOwogICAgICAgICAgc2VsZWN0b3IuYWRkQ2xhc3MoJ2Noem50cmVlLWNvbnRhaW5lci1tdWx0aScpOwogICAgICAgICAgY2hvaWNlcyA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKSk7CiAgICAgICAgICBjaG9pY2VzLmFkZENsYXNzKCdjaHpudHJlZS1jaG9pY2VzIGNob3NlbnRyZWUtY2hvaWNlcycpOwoKICAgICAgICAgIC8vIElmIHRoZXkgd2lzaCB0byBoYXZlIGEgbGFiZWwuCiAgICAgICAgICBsYWJlbCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKSk7CiAgICAgICAgICBsYWJlbC5hdHRyKHsNCiAgICAgICAgICAgICAgJ2Zvcic6IHBhcmFtcy5pbnB1dElkDQogICAgICAgICAgfSk7CiAgICAgICAgICBsYWJlbC50ZXh0KHBhcmFtcy5sYWJlbCk7CgogICAgICAgICAgLy8gSWYgdGhleSB3aXNoIHRvIGhhdmUgYSBkZXNjcmlwdGlvbi4KICAgICAgICAgIGRlc2NyaXB0aW9uID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgICBkZXNjcmlwdGlvbi5hdHRyKHsNCiAgICAgICAgICAgICAgJ2NsYXNzJzogJ2Rlc2NyaXB0aW9uJw0KICAgICAgICAgIH0pOwogICAgICAgICAgZGVzY3JpcHRpb24udGV4dChwYXJhbXMuZGVzY3JpcHRpb24pOwoKICAgICAgICAgIC8vIENyZWF0IHRoZSBjaG9zZW4gc2VsZWN0b3IuCiAgICAgICAgICBpZiAoY2hvaWNlcykgew0KICAgICAgICAgICAgICBzZWxlY3Rvci5hcHBlbmQobGFiZWwpLmFwcGVuZChjaG9pY2VzLmFwcGVuZChzZWFyY2gpKTsNCiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgc2VsZWN0b3IuYXBwZW5kKGxhYmVsKS5hcHBlbmQoc2VhcmNoKTsNCiAgICAgICAgICB9CgogICAgICAgICAgLy8gQWRkIHRoZSBkZXNjcmlwdGlvbi4KICAgICAgICAgICQodGhpcykuYXBwZW5kKGRlc2NyaXB0aW9uKTsNCiAgICAgIH0KICAgICAgZWxzZSB7DQogICAgICAgICAgdHJlZXNlbGVjdCA9ICQodGhpcykuZmluZCgnLnRyZWVzZWxlY3QnKTsKICAgICAgICAgIHRyZWV3cmFwcGVyID0gJCh0aGlzKS5maW5kKCcudHJlZXdyYXBwZXInKTsKICAgICAgICAgIHNlbGVjdG9yID0gJCh0aGlzKS5maW5kKCcuY2h6bnRyZWUtY29udGFpbmVyJyk7CiAgICAgICAgICB0cmVlc2VsZWN0LnJlbW92ZSgpOwogICAgICAgICAgdHJlZXdyYXBwZXIucmVtb3ZlKCk7OwogICAgICB9CgogICAgICB0cmVld3JhcHBlciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICB0cmVld3JhcHBlci5hZGRDbGFzcygndHJlZXdyYXBwZXInKTsKICAgICAgdHJlZXdyYXBwZXIuaGlkZSgpOwoKICAgICAgICAvLyBHZXQgdGhlIHRyZWUgc2VsZWN0LgogICAgICB0cmVlc2VsZWN0ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgIHRyZWVzZWxlY3QuYWRkQ2xhc3MoJ3RyZWVzZWxlY3QnKTsKCiAgICAgICAgLy8gU2V0dXAgdGhlIGtleWV2ZW50cy4KICAgICAgJCh0aGlzKS5rZXl1cChmdW5jdGlvbiAoZXZlbnQpIHsNCiAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT0gMjcpIHsNCiAgICAgICAgICAgICAgc2hvd1RyZWUoZmFsc2UpOw0KICAgICAgICAgIH0NCiAgICAgIH0pOwoKICAgICAgICAvLyBBZGQgdGhlIHRyZWVzZWxlY3Qgd2lkZ2V0LgogICAgICB0cmVld3JhcHBlci5hcHBlbmQodHJlZXNlbGVjdCk7CiAgICAgICQodGhpcykuYXBwZW5kKHNlbGVjdG9yLmFwcGVuZCh0cmVld3JhcHBlcikpOwoKICAgICAgLy8gTm93IGRlY2xhcmUgdGhlIHRyZWVzZWxlY3QuCiAgICAgIHZhciB0cmVlcGFyYW1zID0gcGFyYW1zOwoKICAgICAgLy8gTm93IGRlY2xhcmUgb3VyIHRyZWVzZWxlY3QgY29udHJvbC4KICAgICAgdHJlZXNlbGVjdC50cmVlc2VsZWN0KHRyZWVwYXJhbXMpOwogICAgICByb290ID0gdHJlZXNlbGVjdC5lcSgwKVswXS50cmVlbm9kZTsKCiAgICAgIC8vIFNob3cgdGhlIHRyZWUgYnkgZGVmYXVsdC4KICAgICAgaWYgKHRyZWVwYXJhbXMuc2hvd3RyZWUgfHwgIXRyZWVwYXJhbXMuY29sbGFwc2VkKSB7CiAgICAgICAgc2hvd1RyZWUodHJ1ZSwgbnVsbCk7CiAgICAgIH0KICAgIH0pOwogIH07Cn0pKGpRdWVyeSk7Cg0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KKGZ1bmN0aW9uKCQpIHsKCiAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3Qva2V5cwogIGlmICghT2JqZWN0LmtleXMpIHsKICAgIE9iamVjdC5rZXlzID0gKGZ1bmN0aW9uICgpIHsKICAgICAgJ3VzZSBzdHJpY3QnOwogICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAogICAgICAgIGhhc0RvbnRFbnVtQnVnID0gISh7dG9TdHJpbmc6IG51bGx9KS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKSwKICAgICAgICBkb250RW51bXMgPSBbCiAgICAgICAgICAndG9TdHJpbmcnLAogICAgICAgICAgJ3RvTG9jYWxlU3RyaW5nJywKICAgICAgICAgICd2YWx1ZU9mJywKICAgICAgICAgICdoYXNPd25Qcm9wZXJ0eScsCiAgICAgICAgICAnaXNQcm90b3R5cGVPZicsCiAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLAogICAgICAgICAgJ2NvbnN0cnVjdG9yJwogICAgICAgIF0sCiAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKCiAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7CiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICh0eXBlb2Ygb2JqICE9PSAnZnVuY3Rpb24nIHx8IG9iaiA9PT0gbnVsbCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBub24tb2JqZWN0Jyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzdWx0ID0gW10sIHByb3AsIGk7CgogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgcmVzdWx0LnB1c2gocHJvcCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkb250RW51bXNMZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGRvbnRFbnVtc1tpXSkpIHsKICAgICAgICAgICAgICByZXN1bHQucHVzaChkb250RW51bXNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9KCkpOwogIH0KCiAgLy8gVGhlIHRyZWUgc2VsZWN0IGNvbnRyb2wuCiAgJC5mbi50cmVlc2VsZWN0ID0gZnVuY3Rpb24ocGFyYW1zKSB7CgogICAgLy8gU2V0dXAgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlIHRyZWUgc2VsZWN0IGNvbnRyb2wuCiAgICBwYXJhbXMgPSAkLmV4dGVuZCh7CiAgICAgIGNvbHdpZHRoOiAxOCwgICAgICAgICAgICAgICAvKiogVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zLiAqLwogICAgICBkZWZhdWx0X3ZhbHVlOiB7fSwgICAgICAgICAgLyoqIEFuIGFycmF5IG9mIGRlZmF1bHQgdmFsdWVzLiAqLwogICAgICBzZWxlY3RlZDogbnVsbCwgICAgICAgICAgICAgLyoqIENhbGxiYWNrIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZC4gKi8KICAgICAgdHJlZWxvYWRlZDogbnVsbCwgICAgICAgICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgdHJlZSBpcyBsb2FkZWQuICovCiAgICAgIGxvYWQ6IG51bGwsICAgICAgICAgICAgICAgICAvKiogQ2FsbGJhY2sgdG8gbG9hZCBuZXcgdHJlZSdzICovCiAgICAgIHNlYXJjaGVyOiBudWxsLCAgICAgICAgICAgICAvKiogQ2FsbGJhY2sgdG8gc2VhcmNoIGEgdHJlZSAqLwogICAgICBkZWVwTG9hZDogZmFsc2UsICAgICAgICAgICAgLyoqIFBlcmZvcm1zIGEgZGVlcCBsb2FkICovCiAgICAgIG9uYnVpbGQ6IG51bGwsICAgICAgICAgICAgICAvKiogQ2FsbGVkIHdoZW4gZWFjaCBub2RlIGlzIGJ1aWxkaW5nLiAqLwogICAgICBwb3N0YnVpbGQ6IG51bGwsICAgICAgICAgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBub2RlIGlzIGRvbmUgYnVpbGRpbmcuICovCiAgICAgIGlucHV0TmFtZTogJ3RyZWVzZWxlY3QnLCAgICAvKiogVGhlIGlucHV0IG5hbWUuICovCiAgICAgIGF1dG9TZWxlY3RDaGlsZHJlbjogdHJ1ZSwgICAvKiogU2VsZWN0IGNobGRybiB3aGVuIHBhcmVudCBpcyBzZWxlY3RlZC4gKi8KICAgICAgc2hvd1Jvb3Q6IGZhbHNlLCAgICAgICAgICAgIC8qKiBTaG93IHRoZSByb290IGl0ZW0gd2l0aCBhIGNoZWNrYm94LiAqLwogICAgICBzZWxlY3RBbGw6IGZhbHNlLCAgICAgICAgICAgLyoqIElmIHdlIHdpc2ggdG8gc2VlIGEgc2VsZWN0IGFsbC4gKi8KICAgICAgc2VsZWN0QWxsVGV4dDogJ1NlbGVjdCBBbGwnIC8qKiBUaGUgc2VsZWN0IGFsbCB0ZXh0LiAqLwogICAgfSwgcGFyYW1zKTsKCiAgICAvKiogS2VlcCB0cmFjayBvZiBhbGwgbG9hZGVkIG5vZGVzICovCiAgICB2YXIgbG9hZGVkTm9kZXMgPSB7fTsKCiAgICAvKiogVmFyaWFibGUgZm9yIHRoZSBidXN5IHN0YXRlcy4gKi8KICAgIHZhciBidXN5bG9hZGluZyA9ICd0cmVlYnVzeS1sb2FkaW5nJzsKICAgIHZhciBidXN5bG9hZGluZ2FsbCA9ICd0cmVlYnVzeS1sb2FkaW5nLWFsbCc7CiAgICB2YXIgYnVzeXNlbGVjdGluZyA9ICd0cmVlYnVzeS1zZWxlY3RpbmcnOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IuCiAgICAgKi8KICAgIHZhciBUcmVlTm9kZSA9IGZ1bmN0aW9uKG5vZGVwYXJhbXMsIHJvb3QpIHsKCiAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgcm9vdCBpdGVtLgogICAgICB0aGlzLnJvb3QgPSAhIXJvb3Q7CgogICAgICAvLyBTZXR1cCB0aGUgcGFyYW1ldGVycy4KICAgICAgbm9kZXBhcmFtcy50aXRsZSA9IG5vZGVwYXJhbXMudGl0bGUgfHwgJ2Fub255bW91cyc7CiAgICAgICQuZXh0ZW5kKHRoaXMsIHsKICAgICAgICBpZDogMCwgICAgICAgICAgICAgICAgLyoqIFRoZSBJRCBvZiB0aGlzIG5vZGUuICovCiAgICAgICAgbm9kZWxvYWRlZDogZmFsc2UsICAgIC8qKiBGbGFnIHRvIHNlZSBpZiB0aGlzIG5vZGUgaXMgbG9hZGVkLiAqLwogICAgICAgIGFsbExvYWRlZDogZmFsc2UsICAgICAvKiogRmxhZyB0byBzZWUgaWYgd2UgaGF2ZSBsb2FkZWQgYWxsIG5vZGVzLiAqLwogICAgICAgIHZhbHVlOiAwLCAgICAgICAgICAgICAvKiogVGhlIGlucHV0IHZhbHVlIGZvciB0aGlzIG5vZGUuICovCiAgICAgICAgdGl0bGU6ICcnLCAgICAgICAgICAgIC8qKiBUaGUgdGl0bGUgb2YgdGhpcyBub2RlLiAqLwogICAgICAgIHVybDogJycsICAgICAgICAgICAgICAvKiogVGhlIFVSTCB0byB0aGlzIG5vZGUuICovCiAgICAgICAgaGFzX2NoaWxkcmVuOiB0cnVlLCAgIC8qKiBCb29sZWFuIGlmIHRoaXMgbm9kZSBoYXMgY2hpbGRyZW4uICovCiAgICAgICAgY2hpbGRyZW46IFtdLCAgICAgICAgIC8qKiBBcnJheSBvZiBjaGlsZHJlbi4gKi8KICAgICAgICBkYXRhOiB7fSwgICAgICAgICAgICAgLyoqIEFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIG5vZGUuICovCiAgICAgICAgbGV2ZWw6IDAsICAgICAgICAgICAgIC8qKiBUaGUgbGV2ZWwgb2YgdGhpcyBub2RlLiAqLwogICAgICAgIG9kZDogZmFsc2UsICAgICAgICAgICAvKiogVGhlIG9kZC9ldmVuIHN0YXRlIG9mIHRoaXMgcm93LiAqLwogICAgICAgIGNoZWNrZWQ6IGZhbHNlLCAgICAgICAvKiogSWYgdGhpcyBub2RlIGlzIGNoZWNrZWQuICovCiAgICAgICAgYnVzeTogZmFsc2UsICAgICAgICAgIC8qKiBJZiB0aGlzIG5vZGUgaXMgYnVzeS4gKi8KICAgICAgICBkaXNwbGF5OiAkKCksICAgICAgICAgLyoqIFRoZSBkaXNwbGF5IG9mIHRoaXMgbm9kZS4gKi8KICAgICAgICBpbnB1dDogJCgpLCAgICAgICAgICAgLyoqIFRoZSBpbnB1dCBkaXNwbGF5LiAqLwogICAgICAgIGxpbms6ICQoKSwgICAgICAgICAgICAvKiogVGhlIGxpbmsgZGlzcGxheS4gKi8KICAgICAgICBzcGFuOiAkKCksICAgICAgICAgICAgLyoqIFRoZSBzcGFuIGRpc3BsYXkuICovCiAgICAgICAgY2hpbGRsaXN0OiAkKCksICAgICAgIC8qKiBUaGUgY2hpbGRsaXN0IGRpc3BsYXkuICovCiAgICAgICAgZXhjbHVkZToge30gICAgICAgICAgIC8qKiBBbiBhcnJheSBvZiBub2RlcyB0byBleGNsdWRlIGZvciBzZWxlY3Rpb24uICovCiAgICAgIH0sIG5vZGVwYXJhbXMpOwoKICAgICAgLy8gU2F5IHRoYXQgd2UgYXJlIGEgVHJlZU5vZGUuCiAgICAgIHRoaXMuaXNUcmVlTm9kZSA9IHRydWU7CgogICAgICAvLyBEZXRlcm1pbmUgaWYgYSBub2RlIGlzIGxvYWRpbmcuCiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwoKICAgICAgLy8gVGhlIGxvYWQgY2FsbGJhY2sgcXVldWUuCiAgICAgIHRoaXMubG9hZHF1ZXVlID0gW107CiAgICB9OwoKICAgIC8qKgogICAgICogU2V0IHRoZSBidXN5IGN1cnNvciBmb3IgdGhpcyBub2RlLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuc2V0QnVzeSA9IGZ1bmN0aW9uKHN0YXRlLCB0eXBlKSB7CgogICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICBpZiAoc3RhdGUgIT0gdGhpcy5zcGFuLmhhc0NsYXNzKHR5cGUpKSB7CiAgICAgICAgdGhpcy5idXN5ID0gc3RhdGU7CiAgICAgICAgaWYgKHN0YXRlKSB7CgogICAgICAgICAgLy8gU2V0IHRoZSBidXN5IHR5cGUgYW5kIHRyZWVidXN5LgogICAgICAgICAgdGhpcy5zcGFuLmFkZENsYXNzKHR5cGUpOwogICAgICAgICAgdGhpcy5zcGFuLmFkZENsYXNzKCd0cmVlYnVzeScpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGJ1c3kgdHlwZS4KICAgICAgICAgIHRoaXMuc3Bhbi5yZW1vdmVDbGFzcyh0eXBlKTsKCiAgICAgICAgICAvLyBPbmx5IHJlbW92ZSB0aGUgYnVzeSBpZiB0aGUgYnVzeSBmbGFncyBhcmUgZW1wdHkuCiAgICAgICAgICB2YXIgb3RoZXJ0eXBlID0gKHR5cGUgPT0gYnVzeWxvYWRpbmcpID8gYnVzeXNlbGVjdGluZyA6IGJ1c3lsb2FkaW5nOwogICAgICAgICAgaWYgKCF0aGlzLnNwYW4uaGFzQ2xhc3Mob3RoZXJ0eXBlKSkgewogICAgICAgICAgICB0aGlzLnNwYW4ucmVtb3ZlQ2xhc3MoJ3RyZWVidXN5Jyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgdGhpcyBub2RlIGlzIGFscmVhZHkgbG9hZGVkLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuaXNMb2FkZWQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGxvYWRlZCA9IHRoaXMubm9kZWxvYWRlZDsKICAgICAgbG9hZGVkIHw9IGxvYWRlZE5vZGVzLmhhc093blByb3BlcnR5KHRoaXMuaWQpOwogICAgICBsb2FkZWQgfD0gIXRoaXMuaGFzX2NoaWxkcmVuOwogICAgICBsb2FkZWQgfD0gKHRoaXMuaGFzX2NoaWxkcmVuICYmIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCk7CiAgICAgIHJldHVybiBsb2FkZWQ7CiAgICB9OwoKICAgIC8qKgogICAgICogTG9hZHMgdGhlIGN1cnJlbnQgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB3aGVuIHRoZSBub2RlIGlzIGxvYWRlZC4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmxvYWROb2RlID0gZnVuY3Rpb24oY2FsbGJhY2ssIGhpZGVCdXN5KSB7CgogICAgICAvLyBJZiB3ZSBhcmUgbG9hZGluZywgdGhlbiBqdXN0IGFkZCB0aGlzIGNhbGxiYWNrIHRvIHRoZSBxdWV1ZSBhbmQgcmV0dXJuLgogICAgICBpZiAodGhpcy5sb2FkaW5nKSB7CiAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICB0aGlzLmxvYWRxdWV1ZS5wdXNoKGNhbGxiYWNrKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICAvLyBUcmlnZ2VyIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBub2RlIGlzIGRvbmUgbG9hZGluZy4KICAgICAgdmFyIHRyaWdnZXJDYWxsYmFjayA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAvLyBDYWxsYmFjayB0aGF0IHdlIGFyZSBsb2FkZWQuCiAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICBjYWxsYmFjayh0aGlzKTsKICAgICAgICB9CgogICAgICAgIC8vIFByb2Nlc3MgdGhlIGxvYWRxdWV1ZS4KICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMubG9hZHF1ZXVlKSB7CiAgICAgICAgICB0aGlzLmxvYWRxdWV1ZVtpXSh0aGlzKTsKICAgICAgICB9CgogICAgICAgIC8vIEVtcHR5IHRoZSBsb2FkcXVldWUuCiAgICAgICAgdGhpcy5sb2FkcXVldWUubGVuZ3RoID0gMDsKCiAgICAgICAgLy8gU2F5IHdlIGFyZSBub3QgYnVzeS4KICAgICAgICBpZiAoIWhpZGVCdXN5KSB7CiAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UsIGJ1c3lsb2FkaW5nKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICAvLyBTYXkgd2UgYXJlIGxvYWRpbmcuCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CgogICAgICAvLyBPbmx5IGxvYWQgaWYgd2UgaGF2ZSBub3QgbG9hZGVkIHlldC4KICAgICAgaWYgKHBhcmFtcy5sb2FkICYmICF0aGlzLmlzTG9hZGVkKCkpIHsKCiAgICAgICAgLy8gTWFrZSB0aGlzIG5vZGUgYnVzeS4KICAgICAgICBpZiAoIWhpZGVCdXN5KSB7CiAgICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSwgYnVzeWxvYWRpbmcpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2FsbCB0aGUgbG9hZCBmdW5jdGlvbi4KICAgICAgICBwYXJhbXMubG9hZCh0aGlzLCAoZnVuY3Rpb24odHJlZW5vZGUpIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7CgogICAgICAgICAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIG1lcmdpbmcgYW5kIGJ1aWxkIGlmIGl0IGhhc24ndCBsb2FkZWQuCiAgICAgICAgICAgIGlmICghdHJlZW5vZGUubm9kZWxvYWRlZCkgewoKICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgcmVzdWx0IHdpdGggdGhpcyBub2RlLgogICAgICAgICAgICAgIHRyZWVub2RlID0galF1ZXJ5LmV4dGVuZCh0cmVlbm9kZSwgbm9kZSk7CgogICAgICAgICAgICAgIC8vIFNheSB0aGlzIG5vZGUgaXMgbG9hZGVkLgogICAgICAgICAgICAgIHRyZWVub2RlLm5vZGVsb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAvLyBBZGQgdG8gdGhlIGxvYWRlZCBub2RlcyBhcnJheS4KICAgICAgICAgICAgICBsb2FkZWROb2Rlc1t0cmVlbm9kZS5pZF0gPSB0cmVlbm9kZS5pZDsKCiAgICAgICAgICAgICAgLy8gQnVpbGQgdGhlIG5vZGUuCiAgICAgICAgICAgICAgdHJlZW5vZGUuYnVpbGQoZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgdGhhdCB3ZSBhcmUgbG9hZGVkLgogICAgICAgICAgICAgICAgdHJpZ2dlckNhbGxiYWNrLmNhbGwodHJlZW5vZGUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAvLyBDYWxsYmFjayB0aGF0IHdlIGFyZSBsb2FkZWQuCiAgICAgICAgICAgICAgdHJpZ2dlckNhbGxiYWNrLmNhbGwodHJlZW5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0pKHRoaXMpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjYWxsYmFjaykgewoKICAgICAgICAvLyBKdXN0IGNhbGxiYWNrIHNpbmNlIHdlIGFyZSBhbHJlYWR5IGxvYWRlZC4KICAgICAgICB0cmlnZ2VyQ2FsbGJhY2suY2FsbCh0aGlzKTsKICAgICAgfQoKICAgICAgLy8gU2F5IHRoYXQgd2UgYXJlIG5vdCBsb2FkaW5nIGFueW1vcmUuCiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgfTsKCiAgICAvKioKICAgICAqIFJlY3Vyc2l2ZWx5IGxvYWRzIGFuZCBidWlsZHMgYWxsIG5vZGVzIGJlbmVhdGggdGhpcyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aGVuIHRoZSB0cmVlIGhhcyBsb2FkZWQuCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvcGVyYXRpb24gQWxsb3cgc29tZW9uZSB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbi4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmxvYWRBbGwgPSBmdW5jdGlvbihjYWxsYmFjaywgb3BlcmF0aW9uLCBoaWRlQnVzeSwgaWRzKSB7CiAgICAgIGlkcyA9IGlkcyB8fCB7fTsKCiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgbG9hZGVkIGZpcnN0LgogICAgICB0aGlzLmxvYWROb2RlKGZ1bmN0aW9uKG5vZGUpIHsKCiAgICAgICAgLy8gU2VlIGlmIGFuIG9wZXJhdGlvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQuCiAgICAgICAgaWYgKG9wZXJhdGlvbikgewogICAgICAgICAgb3BlcmF0aW9uKG5vZGUpOwogICAgICAgIH0KCiAgICAgICAgLy8gR2V0IG91ciBjaGlsZHJlbiBjb3VudC4KICAgICAgICB2YXIgaSA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoLCBjb3VudCA9IGk7CgogICAgICAgIC8vIElmIG5vIGNoaWxkcmVuLCB0aGVuIGp1c3QgY2FsbCB0aGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkuCiAgICAgICAgaWYgKCFpIHx8IGlkcy5oYXNPd25Qcm9wZXJ0eShub2RlLmlkKSkgewogICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhpcyB0byB0aGUgaWRzIHRvIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpb24uCiAgICAgICAgaWRzW25vZGUuaWRdID0gbm9kZS5pZDsKCiAgICAgICAgLy8gTWFrZSB0aGlzIG5vZGUgYnVzeS4KICAgICAgICBpZiAoIWhpZGVCdXN5KSB7CiAgICAgICAgICBub2RlLnNldEJ1c3kodHJ1ZSwgYnVzeWxvYWRpbmdhbGwpOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCBjaGlsZHJlbiBhdCBhIHNwZWNpZmljIGluZGV4LgogICAgICAgIHZhciBsb2FkQ2hpbGRyZW4gPSBmdW5jdGlvbihpbmRleCkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgLy8gTG9hZCB0aGlzIGNoaWxkcyBjaGlsZHJlbi4uLgogICAgICAgICAgICBub2RlLmNoaWxkcmVuW2luZGV4XS5sb2FkQWxsKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIGNoaWxkIGNvdW50LgogICAgICAgICAgICAgIGNvdW50LS07CgogICAgICAgICAgICAgIC8vIElmIGFsbCBjaGlsZHJlbiBhcmUgZG9uZSBsb2FkaW5nLCBjYWxsIHRoZSBjYWxsYmFjay4KICAgICAgICAgICAgICBpZiAoIWNvdW50KSB7CgogICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgdGhhdCB3ZSBhcmUgZG9uZSBsb2FkaW5nIHRoaXMgdHJlZS4KICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewogICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhpcyBub2RlIGJ1c3kuCiAgICAgICAgICAgICAgICBpZiAoIWhpZGVCdXN5KSB7CiAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QnVzeShmYWxzZSwgYnVzeWxvYWRpbmdhbGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgb3BlcmF0aW9uLCBoaWRlQnVzeSwgaWRzKTsKICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggY2hpbGQuCiAgICAgICAgd2hpbGUgKGktLSkgewoKICAgICAgICAgIC8vIExvYWQgcmVjdXJzc2lvbiBvbiBhIHNlcGFyYXRlIHRocmVhZC4KICAgICAgICAgIHNldFRpbWVvdXQobG9hZENoaWxkcmVuKGkpLCAyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4cGFuZHMgdGhlIG5vZGUuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5leHBhbmQgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICBpZiAoc3RhdGUpIHsKICAgICAgICB0aGlzLmxpbmsucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlZCcpLmFkZENsYXNzKCdleHBhbmRlZCcpOwogICAgICAgIHRoaXMuc3Bhbi5yZW1vdmVDbGFzcygnY29sbGFwc2VkJykuYWRkQ2xhc3MoJ2V4cGFuZGVkJyk7CiAgICAgICAgdGhpcy5jaGlsZGxpc3Quc2hvdygnZmFzdCcpOwoKICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgY2hlY2tlZCBhcyBpbmNsdWRpbmcgY2hpbGRyZW4sIGdvIHRocm91Z2ggYW5kIHNlbGVjdAogICAgICAgIC8vIGFsbCBvZiBpdCdzIGNoaWxkcmVuLgogICAgICAgIGlmICghcGFyYW1zLmRlZXBMb2FkICYmIHRoaXMuY2hlY2tlZCAmJiB0aGlzLmluY2x1ZGVfY2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5jbHVkZV9jaGlsZHJlbiA9IGZhbHNlOwogICAgICAgICAgdGhpcy5zZWxlY3RDaGlsZHJlbih0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gT25seSBjb2xsYXBzZSBpZiB0aGV5IGNhbiBvcGVuIGl0IGJhY2sgdXAuCiAgICAgIGVsc2UgaWYgKHRoaXMuc3Bhbi5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5saW5rLnJlbW92ZUNsYXNzKCdleHBhbmRlZCcpLmFkZENsYXNzKCdjb2xsYXBzZWQnKTsKICAgICAgICB0aGlzLnNwYW4ucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICAgIHRoaXMuY2hpbGRsaXN0LmhpZGUoJ2Zhc3QnKTsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIHN0YXRlIGlzIGV4cGFuZCwgYnV0IHRoZSBjaGlsZHJlbiBoYXZlIG5vdCBiZWVuIGxvYWRlZC4KICAgICAgaWYgKHN0YXRlICYmICF0aGlzLmlzTG9hZGVkKCkpIHsKCiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuLCB0aGVuIHdlIG5lZWQgdG8gbG9hZCB0aGVtLgogICAgICAgIHRoaXMubG9hZE5vZGUoZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgaWYgKG5vZGUuY2hlY2tlZCkgewogICAgICAgICAgICBub2RlLnNlbGVjdENoaWxkcmVuKG5vZGUuY2hlY2tlZCk7CiAgICAgICAgICB9CiAgICAgICAgICBub2RlLmV4cGFuZCh0cnVlKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIFNlbGVjdHMgYWxsIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlIFRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0aW9uIG9yIGFycmF5IG9mIGRlZmF1bHRzLgogICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZG9uZSBDYWxsZWQgd2hlbiB3ZSBhcmUgZG9uZSBzZWxlY3RpbmcuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5zZWxlY3RDaGlsZHJlbiA9IGZ1bmN0aW9uKHN0YXRlLCBkb25lLCBjaGlsZCkgewoKICAgICAgLy8gU2VlIGlmIHRoZSBzdGF0ZSBpcyBhIGJvb2xlYW4uCiAgICAgIHZhciBkZWZhdWx0cyA9ICh0eXBlb2Ygc3RhdGUgPT0gJ29iamVjdCcpOwoKICAgICAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdlIGFyZSBkb25lIHNlbGVjdGluZy4KICAgICAgdmFyIGRvbmVTZWxlY3RpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIWNoaWxkKSB7CgogICAgICAgICAgLy8gSWYgdGhleSBwcm92aWRlZCBhIHNlbGVjdGVkIHBhcmFtZXRlci4KICAgICAgICAgIGlmIChwYXJhbXMuc2VsZWN0ZWQpIHsKICAgICAgICAgICAgcGFyYW1zLnNlbGVjdGVkKHRoaXMsIHRydWUpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFNheSB0aGF0IHdlIGFyZSBkb25lLgogICAgICAgICAgaWYgKGRvbmUpIHsKCiAgICAgICAgICAgIGRvbmUuY2FsbCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CgogICAgICBpZiAocGFyYW1zLmRlZXBMb2FkKSB7CgogICAgICAgIC8vIExvYWQgYWxsIG5vZGVzIHVuZGVybmVhdGggdGhpcyBub2RlLgogICAgICAgIHRoaXMubG9hZEFsbChmdW5jdGlvbigpIHsKCiAgICAgICAgICAvLyBTZXQgdGhpcyBub2RlIG5vdCBidXN5LgogICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlLCBidXN5c2VsZWN0aW5nKTsKCiAgICAgICAgICAvLyBXZSBhcmUgZG9uZSBzZWxlY3RpbmcuCiAgICAgICAgICBkb25lU2VsZWN0aW5nLmNhbGwodGhpcyk7CgogICAgICAgIH0sIGZ1bmN0aW9uKG5vZGUpIHsKCiAgICAgICAgICB2YXIgdmFsID0gc3RhdGU7CiAgICAgICAgICBpZiAoZGVmYXVsdHMpIHsKICAgICAgICAgICAgdmFsID0gc3RhdGUuaGFzT3duUHJvcGVydHkobm9kZS52YWx1ZSk7CiAgICAgICAgICAgIHZhbCB8PSBzdGF0ZS5oYXNPd25Qcm9wZXJ0eShub2RlLmlkKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBTZWxlY3QgdGhpcyBub2RlLgogICAgICAgICAgbm9kZS5zZWxlY3QodmFsKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBlbHNlIHsKCiAgICAgICAgLy8gU2VsZWN0IHRoZSBjdXJyZW50IG5vZGUuCiAgICAgICAgdGhpcy5zZWxlY3Qoc3RhdGUpOwogICAgICAgIHZhciBuYW1lID0gcGFyYW1zLmlucHV0TmFtZSArICctJyArIHRoaXMudmFsdWU7CiAgICAgICAgJCgnaW5wdXRbbmFtZT0iJyArIG5hbWUgKyAnLWluY2x1ZGUtYmVsb3ciXScpLmF0dHIoCiAgICAgICAgICAnbmFtZScsCiAgICAgICAgICBuYW1lCiAgICAgICAgKTsKCiAgICAgICAgLy8gV2Ugc2hvdWxkIGxvYWQgY2hpbGRyZW4gaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBleHBhbmRlZCwgb3IgdGhlCiAgICAgICAgLy8gY3VycmVudCBub2RlIGlzIGJlaW5nIGRlc2VsZWN0ZWQgYW5kIHBvc3NpYmx5IGhhcyBjaGlsZHJlbiBzZWxlY3RlZAogICAgICAgIC8vIGJlbG93IHRoZW0uCiAgICAgICAgaWYgKCh0aGlzLnJvb3QgPT09IHRydWUpIHx8CiAgICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgJiYgIXRoaXMuaW5jbHVkZV9jaGlsZHJlbikgfHwKICAgICAgICAgICAgKHRoaXMubGluayAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlua1swXSAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICB0aGlzLmxpbmtbMF0uY2xhc3NOYW1lLmluZGV4T2YoJ2V4cGFuZGVkJykgIT09IC0xKQogICAgICAgICAgICkgewogICAgICAgICAgdGhpcy5pbmNsdWRlX2NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmV4cGFuZChzdGF0ZSk7CiAgICAgICAgICB2YXIgaSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGktLSkgewoKICAgICAgICAgICAgLy8gU2VsZWN0IGFsbCB0aGUgY2hpbGRyZW4uCiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0uc2VsZWN0Q2hpbGRyZW4oc3RhdGUsIGRvbmUsIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIC8vIEZsYWcgdGhpcyBub2FkIGFzIGluY2x1ZGluZyBhbGwgY2hpbGRyZW4gYmVsb3cgaWYgaXQgaGFzIGNoaWxkcmVuLgogICAgICAgICAgaWYgKHRoaXMuaGFzX2NoaWxkcmVuID4gMCAmJiBzdGF0ZSkgewogICAgICAgICAgICB0aGlzLmluY2x1ZGVfY2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgICAkKCdpbnB1dFtuYW1lPSInICsgbmFtZSArICciXScpLmF0dHIoCiAgICAgICAgICAgICAgJ25hbWUnLAogICAgICAgICAgICAgIG5hbWUgKyAnLWluY2x1ZGUtYmVsb3cnCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBhcmUgZG9uZSBzZWxlY3RpbmcuCiAgICAgICAgZG9uZVNlbGVjdGluZy5jYWxsKHRoaXMpOwogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogU2VsZWN0cyBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgVHJlZU5vZGUuCiAgICAgKgogICAgICogQHBhcmFtIHtib29sZWFufSBkZWZhdWx0cyBBcnJheSBvZiBkZWZhdWx0cy4KICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGRvbmUgQ2FsbGVkIHdoZW4gd2UgYXJlIGRvbmUgc2VsZWN0aW5nLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuc2VsZWN0RGVmYXVsdHMgPSBmdW5jdGlvbihkZWZhdWx0cywgZG9uZSkgewoKICAgICAgdmFyIGRlZmF1bHRzTGVmdCA9IE9iamVjdC5rZXlzKGRlZmF1bHRzKS5sZW5ndGg7CgogICAgICB2YXIgZGVmYXVsdHNRdWV1ZSA9IFtdOwogICAgICBkZWZhdWx0c1F1ZXVlLnB1c2godGhpcyk7CgogICAgICAvLyBMb29wIHRocm91Z2ggbm9kZXMgZGVwdGggZmlyc3QgdG8gZmluZCB0aGUgZGVmYXVsdHMuCiAgICAgIHdoaWxlIChkZWZhdWx0c0xlZnQgPiAwICYmIGRlZmF1bHRzUXVldWUubGVuZ3RoID4gMCkgewogICAgICAgIHZhciBxdWV1ZUl0ZW0gPSBkZWZhdWx0c1F1ZXVlLnNoaWZ0KCk7CiAgICAgICAgdmFyIHN0YXRlID0gZmFsc2U7CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBxdWV1ZWQgaXRlbSBpcyBsaXN0ZWQgaW4gdGhlIGRlZmF1bHRzLgogICAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShxdWV1ZUl0ZW0udmFsdWUpKSB7CiAgICAgICAgICBkZWxldGUgZGVmYXVsdHNbcXVldWVJdGVtLnZhbHVlXTsKICAgICAgICAgIHN0YXRlID0gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHRzTGVmdC0tOwogICAgICAgIH0KICAgICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkocXVldWVJdGVtLmlkKSkgewogICAgICAgICAgZGVsZXRlIGRlZmF1bHRzW3F1ZXVlSXRlbS5pZF07CiAgICAgICAgICBzdGF0ZSA9IHRydWU7CiAgICAgICAgICBkZWZhdWx0c0xlZnQtLTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBxdWV1ZWQgaXRlbSBpcyBsaXN0ZWQgaW4gdGhlIGRlZmF1bHRzIGFuZCBpcyBmbGFnZ2VkIHRvCiAgICAgICAgLy8gaW5jbHVkZSBkZWZhdWx0cy4KICAgICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkocXVldWVJdGVtLnZhbHVlICsgJy1pbmNsdWRlLWJlbG93JykpIHsKICAgICAgICAgIGRlbGV0ZSBkZWZhdWx0c1txdWV1ZUl0ZW0udmFsdWUgKyAnLWluY2x1ZGUtYmVsb3cnXTsKICAgICAgICAgIHF1ZXVlSXRlbS5pbmNsdWRlX2NoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlID0gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHRzTGVmdC0tOwogICAgICAgIH0KICAgICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkocXVldWVJdGVtLmlkICsgJy1pbmNsdWRlLWJlbG93JykpIHsKICAgICAgICAgIGRlbGV0ZSBkZWZhdWx0c1txdWV1ZUl0ZW0uaWQgKyAnLWluY2x1ZGUtYmVsb3cnXTsKICAgICAgICAgIHF1ZXVlSXRlbS5pbmNsdWRlX2NoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlID0gdHJ1ZTsKICAgICAgICAgIGRlZmF1bHRzTGVmdC0tOwogICAgICAgIH0KCiAgICAgICAgLy8gU2VsZWN0IHRoZSBxdWV1ZWQgaXRlbS4KICAgICAgICBxdWV1ZUl0ZW0uc2VsZWN0KHN0YXRlKTsKCiAgICAgICAgLy8gU2V0IHRoZSBpbnB1dCBuYW1lIHRvIHRoZSBjb3JyZWN0IHZhbHVlLgogICAgICAgIHZhciBuYW1lID0gcGFyYW1zLmlucHV0TmFtZSArICctJyArIHF1ZXVlSXRlbS52YWx1ZTsKICAgICAgICAkKCdpbnB1dFtuYW1lPSInICsgbmFtZSArICctaW5jbHVkZS1iZWxvdyJdJykuYXR0cignbmFtZScsIG5hbWUpOwogICAgICAgIGlmICghcXVldWVJdGVtLnJvb3QgJiYgc3RhdGUgJiYgcXVldWVJdGVtLmluY2x1ZGVfY2hpbGRyZW4pIHsKICAgICAgICAgICQoJ2lucHV0W25hbWU9IicgKyBuYW1lICsgJyJdJykuYXR0cignbmFtZScsIG5hbWUgKyAnLWluY2x1ZGUtYmVsb3cnKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZGVmYXVsdHNMZWZ0ID4gMCkgewogICAgICAgICAgLy8gQWRkIHRoaXMgbm9kZSdzIGNoaWxkcmVuIHRvIHRoZSBxdWV1ZS4KICAgICAgICAgIHZhciBpID0gcXVldWVJdGVtLmNoaWxkcmVuLmxlbmd0aDsKICAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgZGVmYXVsdHNRdWV1ZS5wdXNoKHF1ZXVlSXRlbS5jaGlsZHJlbltpXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHF1ZXVlSXRlbS5yb290ICYmIHF1ZXVlSXRlbS5pbmNsdWRlX2NoaWxkcmVuKSB7CgogICAgICAgICAgLy8gU2VsZWN0IHRoZSByb290IG5vZGUncyBjaGlsZHJlbi4KICAgICAgICAgIHF1ZXVlSXRlbS5zZWxlY3RDaGlsZHJlbih0cnVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFNheSB0aGlzIG5vZGUgaXMgbm93IGZ1bGx5IHNlbGVjdGVkLgogICAgICBpZiAocGFyYW1zLnNlbGVjdGVkKSB7CiAgICAgICAgcGFyYW1zLnNlbGVjdGVkKHRoaXMsIHRydWUpOwogICAgICB9CgogICAgICAvLyBTYXkgd2UgYXJlIG5vdyBkb25lLgogICAgICBpZiAoZG9uZSkgewogICAgICAgIGRvbmUuY2FsbCh0aGlzKTsKICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNoZWNrZWQgc3RhdGUgZm9yIHRoZSBpbnB1dCBmaWVsZCBkZXBlbmRpbmcgb24gdGhlIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGUKICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLnNldENoZWNrZWQgPSBmdW5jdGlvbihzdGF0ZSkgewoKICAgICAgLy8gU2V0IHRoZSBjaGVja2VkIHN0YXRlLgogICAgICB0aGlzLmNoZWNrZWQgPSBzdGF0ZTsKCiAgICAgIC8vIFNldCB0aGUgY2hlY2tlZCBzdGF0ZSBmb3IgdGhpcyBpbnB1dC4KICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuaW5wdXQuZXEoMClbMF0uY2hlY2tlZCA9IHN0YXRlOwogICAgICB9CgogICAgICAvLyBUcmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnQuCiAgICAgIHRoaXMuaW5wdXQuY2hhbmdlKCk7CiAgICB9OwoKICAgIC8qKgogICAgICogU2VsZWN0cyBhIG5vZGUuCiAgICAgKgogICAgICogQHBhcmFtIHtib29sZWFufSBzdGF0ZSBUaGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbi4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKHN0YXRlKSB7CgogICAgICAvLyBPbmx5IGNoZWNrIHRoaXMgbm9kZSBpZiBpdCBpcyBhIHNlbGVjdGFibGUgaW5wdXQuCiAgICAgIGlmICghdGhpcy5pbnB1dC5oYXNDbGFzcygndHJlZW5vZGUtbm8tc2VsZWN0JykpIHsKCiAgICAgICAgLy8gQ29udmVydCBzdGF0ZSB0byBhIGJvb2xlYW4uCiAgICAgICAgc3RhdGUgPSAhIXN0YXRlOwoKICAgICAgICAvLyBTZWxlY3QgdGhlIGVsZW1lbnQgdW5sZXNzIHRoZSBzdGF0ZSBpcyBmYWxzZSBhbmQgd2UgYXJlIG9uIHRoZSByb290CiAgICAgICAgLy8gZWxlbWVudCB3aGljaCBpc24ndCB1bnNlbGVjdGFibGUuCiAgICAgICAgaWYgKHN0YXRlIHx8ICF0aGlzLnJvb3QgfHwgKHRoaXMuc2hvd1Jvb3QgJiYgdGhpcy5oYXNfY2hpbGRyZW4pKSB7CgogICAgICAgICAgLy8gU2V0IHRoZSBjaGVja2VkIHN0YXRlLgogICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHN0YXRlKTsKCiAgICAgICAgICAvLyBTYXkgdGhhdCB0aGlzIG5vZGUgaXMgc2VsZWN0ZWQuCiAgICAgICAgICBpZiAocGFyYW1zLnNlbGVjdGVkKSB7CiAgICAgICAgICAgIHBhcmFtcy5zZWxlY3RlZCh0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgLyoqCiAgICAgKiBCdWlsZCB0aGUgdHJlZW5vZGUgZWxlbWVudC4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmJ1aWxkX3RyZWVub2RlID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciB0cmVlbm9kZSA9ICQoKTsKICAgICAgdHJlZW5vZGUgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5yb290ID8gJ2RpdicgOiAnbGknKSk7CiAgICAgIHRyZWVub2RlLmFkZENsYXNzKCd0cmVlbm9kZScpOwogICAgICB0cmVlbm9kZS5hZGRDbGFzcyh0aGlzLm9kZCA/ICdvZGQnIDogJ2V2ZW4nKTsKICAgICAgcmV0dXJuIHRyZWVub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIEJ1aWxkIHRoZSBpbnB1dCBhbmQgcmV0dXJuLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuYnVpbGRfaW5wdXQgPSBmdW5jdGlvbihsZWZ0KSB7CgogICAgICAvLyBPbmx5IGFkZCBhbiBpbnB1dCBpZiB0aGUgaW5wdXQgbmFtZSBpcyBkZWZpbmVkLgogICAgICBpZiAocGFyYW1zLmlucHV0TmFtZSkgewoKICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgZXhjbHVkZWQgb3IgaGFzIG5vIHJvbGVzIGVuYWJsZWQgaW4gdGhlIGdyb3VwIGZpbmRlciwKICAgICAgICAvLyB0aGVuIGFkZCBhIGR1bW15IGRpdiB0YWcuCiAgICAgICAgaWYgKCh0eXBlb2YgdGhpcy5leGNsdWRlW3RoaXMuaWRdICE9PSAndW5kZWZpbmVkJykgfHwKICAgICAgICAgIChwYXJhbXMuaW5wdXROYW1lID09ICdncm91cF9maW5kZXInICYmICF0aGlzLmRhdGEucm9sZXNfZW5hYmxlZCkpIHsKICAgICAgICAgIHRoaXMuaW5wdXQgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKICAgICAgICAgIHRoaXMuaW5wdXQuYWRkQ2xhc3MoJ3RyZWVub2RlLW5vLXNlbGVjdCcpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBDcmVhdGUgdGhlIGlucHV0IGVsZW1lbnQuCiAgICAgICAgICB0aGlzLmlucHV0ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpKTsKCiAgICAgICAgICAvLyBHZXQgdGhlIHZhbHVlIGZvciB0aGlzIGlucHV0IGl0ZW0uCiAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IHRoaXMuaWQ7CgogICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGlzIGlucHV0IGl0ZW0uCiAgICAgICAgICB0aGlzLmlucHV0LmF0dHIoewogICAgICAgICAgICAndHlwZSc6ICdjaGVja2JveCcsCiAgICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLAogICAgICAgICAgICAnbmFtZSc6IHBhcmFtcy5pbnB1dE5hbWUgKyAnLScgKyB2YWx1ZSwKICAgICAgICAgICAgJ2lkJzogJ2Nob2ljZV8nICsgdGhpcy5pZAogICAgICAgICAgfSkuYWRkQ2xhc3MoJ3RyZWVub2RlLWlucHV0Jyk7CgogICAgICAgICAgLy8gQ2hlY2sgdGhlIGlucHV0LgogICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRoaXMuY2hlY2tlZCk7CgogICAgICAgICAgLy8gQmluZCB0byB0aGUgY2xpY2sgb24gdGhlIGlucHV0LgogICAgICAgICAgdGhpcy5pbnB1dC5iaW5kKCdjbGljaycsIChmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewoKICAgICAgICAgICAgICAvLyBTZXQgdGhlIGNoZWNrZWQgc3RhdGUgYmFzZWQgb24gaW5wdXQuCiAgICAgICAgICAgICAgbm9kZS5jaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7CgogICAgICAgICAgICAgIC8vIE9ubHkgZXhwYW5kL2NvbGxhcHNlIGFuZCBzZWxlY3QgY2hpbGRyZW4gaWYgYXV0byBzZWxlY3QKICAgICAgICAgICAgICAvLyBjaGlsZHJlbiBpcyBlbmFibGVkLgogICAgICAgICAgICAgIGlmIChwYXJhbXMuYXV0b1NlbGVjdENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICAvLyBFeHBhbmQgaWYgZGVlcCBsb2FkaW5nLiBDb2xsYXBzZSBpZiB1bmNoZWNrZWQuCiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2hlY2tlZCB8fCBwYXJhbXMuZGVlcExvYWQpIHsKICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmQobm9kZS5jaGVja2VkKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBzZWxlY3QgbWV0aG9kLgogICAgICAgICAgICAgICAgbm9kZS5zZWxlY3RDaGlsZHJlbihub2RlLmNoZWNrZWQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgIH0pKHRoaXMpKTsKCiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcm9vdCBpdGVtIGFuZCB3ZSBhcmUgbm90IHNob3dpbmcgdGhlIHJvb3QgaXRlbSwgdGhlbgogICAgICAgICAgLy8ganVzdCBoaWRlIHRoZSBpbnB1dC4KICAgICAgICAgIGlmICh0aGlzLnJvb3QgJiYgIXBhcmFtcy5zaG93Um9vdCkgewogICAgICAgICAgICB0aGlzLmlucHV0LmhpZGUoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNldCB0aGUgaW5wdXQgbGVmdC4KICAgICAgICB0aGlzLmlucHV0LmNzcygnbGVmdCcsIGxlZnQgKyAncHgnKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5pbnB1dDsKICAgIH07CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbm9kZSBsaW5rLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuYnVpbGRfbGluayA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgZWxlbWVudC5jc3MoJ2N1cnNvcicsICdwb2ludGVyJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpOwogICAgICBlbGVtZW50LmJpbmQoJ2NsaWNrJywge25vZGU6IHRoaXN9LCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZXZlbnQuZGF0YS5ub2RlLmV4cGFuZCgkKGV2ZW50LnRhcmdldCkuaGFzQ2xhc3MoJ2NvbGxhcHNlZCcpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBlbGVtZW50OwogICAgfTsKCiAgICAvKioKICAgICAqIEJ1aWxkIHRoZSBzcGFuICsvLSBzeW1ib2wuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZF9zcGFuID0gZnVuY3Rpb24obGVmdCkgewoKICAgICAgLy8gSWYgd2UgYXJlIHNob3dpbmcgdGhlIHJvb3QgaXRlbSBvciB3ZSBhcmUgbm90IHJvb3QsIGFuZCB3ZSBoYXZlCiAgICAgIC8vIGNoaWxkcmVuLCBzaG93IGEgKy8tIHN5bWJvbC4KICAgICAgaWYgKCghdGhpcy5yb290IHx8IHRoaXMuc2hvd1Jvb3QpICYmIHRoaXMuaGFzX2NoaWxkcmVuKSB7CiAgICAgICAgdGhpcy5zcGFuID0gdGhpcy5idWlsZF9saW5rKCQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKS5hdHRyKHsKICAgICAgICAgICdjbGFzcyc6ICd0cmVlc2VsZWN0LWV4cGFuZCcKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5zcGFuLmNzcygnbGVmdCcsIGxlZnQgKyAncHgnKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5zcGFuOwogICAgfTsKCiAgICAvKioKICAgICAqIEJ1aWxkIHRoZSB0aXRsZSBsaW5rLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuYnVpbGRfdGl0bGUgPSBmdW5jdGlvbihsZWZ0KSB7CgogICAgICAvLyBJZiB0aGVyZSBpcyBhIHRpdGxlLCB0aGVuIGJ1aWxkIGl0LgogICAgICBpZiAoKCF0aGlzLnJvb3QgfHwgdGhpcy5zaG93Um9vdCkgJiYgdGhpcy50aXRsZSkgewoKICAgICAgICAvLyBDcmVhdGUgYSBub2RlIGxpbmsuCiAgICAgICAgdGhpcy5ub2RlTGluayA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpKS5hdHRyKHsKICAgICAgICAgICdjbGFzcyc6ICd0cmVlc2VsZWN0LXRpdGxlJywKICAgICAgICAgICdocmVmJzogdGhpcy51cmwsCiAgICAgICAgICAndGFyZ2V0JzogJ19ibGFuaycKICAgICAgICB9KS5jc3MoJ21hcmdpbkxlZnQnLCBsZWZ0ICsgJ3B4JykudGV4dCh0aGlzLnRpdGxlKTsKCiAgICAgICAgLy8gSWYgdGhpcyBub2RlIGhhcyBjaGlsZHJlbiwgdGhlbiBpdCBzaG91bGQgYmUgYSBsaW5rLgogICAgICAgIGlmICh0aGlzLmhhc19jaGlsZHJlbikgewogICAgICAgICAgdGhpcy5saW5rID0gdGhpcy5idWlsZF9saW5rKHRoaXMubm9kZUxpbmsuY2xvbmUoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgdGhpcy5saW5rID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuYXR0cih7CiAgICAgICAgICAgICdjbGFzcyc6ICd0cmVlc2VsZWN0LXRpdGxlJwogICAgICAgICAgfSkuY3NzKCdtYXJnaW5MZWZ0JywgbGVmdCArICdweCcpLnRleHQodGhpcy50aXRsZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBSZXR1cm4gdGhlIGxpbmsuCiAgICAgIHJldHVybiB0aGlzLmxpbms7CiAgICB9OwoKICAgIC8qKgogICAgICogQnVpbGQgdGhlIGNoaWxkcmVuLgogICAgICovCiAgICBUcmVlTm9kZS5wcm90b3R5cGUuYnVpbGRfY2hpbGRyZW4gPSBmdW5jdGlvbihkb25lKSB7CgogICAgICAvLyBDcmVhdGUgdGhlIGNoaWxkbGlzdCBlbGVtZW50LgogICAgICB0aGlzLmNoaWxkbGlzdCA9ICQoKTsKCiAgICAgIC8vIElmIHRoaXMgbm9kZSBoYXMgY2hpbGRyZW4uCiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKCiAgICAgICAgLy8gQ3JlYXRlIHRoZSBjaGlsZCBsaXN0LgogICAgICAgIHRoaXMuY2hpbGRsaXN0ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpKTsKCiAgICAgICAgLy8gU2V0IHRoZSBvZGQgc3RhdGUuCiAgICAgICAgdmFyIG9kZCA9IHRoaXMub2RkOwoKICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBjaGlsZHJlbi4KICAgICAgICB2YXIgbnVtQ2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKCiAgICAgICAgLy8gRnVuY3Rpb24gdG8gYXBwZW5kIGNoaWxkcmVuLgogICAgICAgIHZhciBhcHBlbmRDaGlsZHJlbiA9IGZ1bmN0aW9uKHRyZWVub2RlLCBpbmRleCkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGlsZCB0cmVlIHRvIHRoZSBsaXN0LgogICAgICAgICAgICB0cmVlbm9kZS5jaGlsZHJlbltpbmRleF0uYnVpbGQoZnVuY3Rpb24oY2hpbGQpIHsKCiAgICAgICAgICAgICAgLy8gRGVjcmVtZW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gbG9hZGVkLgogICAgICAgICAgICAgIG51bUNoaWxkcmVuLS07CgogICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgY2hpbGQgdG8gdGhlIGxpc3QuCiAgICAgICAgICAgICAgdHJlZW5vZGUuY2hpbGRsaXN0LmFwcGVuZChjaGlsZC5kaXNwbGF5KTsKCiAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgY2hsaWRyZW4sIHRoZW4gc2F5IHdlIGFyZSBkb25lLgogICAgICAgICAgICAgIGlmICghbnVtQ2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgIGRvbmUuY2FsbCh0cmVlbm9kZSwgdHJlZW5vZGUuY2hpbGRsaXN0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICAvLyBOb3cgaWYgdGhlcmUgYXJlIGNoaWxkcmVuLCBpdGVyYXRlIGFuZCBidWlsZCB0aGVtLgogICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5jaGlsZHJlbikgewoKICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2hpbGQgaXMgYSB2YWxpZCBvYmplY3QgaW4gdGhlIGxpc3QuCiAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShpKSkgewoKICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGlsZC4KICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKCiAgICAgICAgICAgIC8vIEFsdGVybmF0ZSB0aGUgb2RkIHN0YXRlLgogICAgICAgICAgICBvZGQgPSAhb2RkOwoKICAgICAgICAgICAgLy8gR2V0IHRoZSBjaGVja2VkIHZhbHVlLgogICAgICAgICAgICB2YXIgaXNDaGVja2VkID0gdGhpcy5jaGVja2VkOwogICAgICAgICAgICBpZiAoY2hpbGQuaGFzT3duUHJvcGVydHkoJ2NoZWNrZWQnKSkgewogICAgICAgICAgICAgIGlzQ2hlY2tlZCA9IGNoaWxkLmNoZWNrZWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBUcmVlTm9kZSBmb3IgdGhpcyBjaGlsZC4KICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXSA9IG5ldyBUcmVlTm9kZSgkLmV4dGVuZChjaGlsZCwgewogICAgICAgICAgICAgIGxldmVsOiB0aGlzLmxldmVsICsgMSwKICAgICAgICAgICAgICBvZGQ6IG9kZCwKICAgICAgICAgICAgICBjaGVja2VkOiBpc0NoZWNrZWQsCiAgICAgICAgICAgICAgZXhjbHVkZTogdGhpcy5leGNsdWRlCiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgIC8vIFNldCB0aW1lb3V0IHRvIGhlbHAgd2l0aCByZWN1cnNpb24uCiAgICAgICAgICAgIHNldFRpbWVvdXQoYXBwZW5kQ2hpbGRyZW4odGhpcywgaSksIDIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIHsKCiAgICAgICAgLy8gQ2FsbCB0aGF0IHdlIGFyZSBkb25lIGxvYWRpbmcgdGhpcyBjaGlsZC4KICAgICAgICBkb25lLmNhbGwodGhpcywgdGhpcy5jaGlsZGxpc3QpOwogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQnVpbGRzIHRoZSBET00gYW5kIHRoZSB0cmVlIGZvciB0aGlzIG5vZGUuCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGRvbmUpIHsKCiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGxlZnQgbWFyZ2luIGZvciBlYWNoIGVsZW1lbnQuCiAgICAgIHZhciBsZWZ0ID0gNSwgZWxlbSA9IG51bGw7CgogICAgICAvLyBDcmVhdGUgdGhlIGxpc3QgZGlzcGxheS4KICAgICAgaWYgKHRoaXMuZGlzcGxheS5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLmRpc3BsYXkgPSB0aGlzLmJ1aWxkX3RyZWVub2RlKCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAodGhpcy5yb290KSB7CiAgICAgICAgdmFyIHRyZWVub2RlID0gdGhpcy5idWlsZF90cmVlbm9kZSgpOwogICAgICAgIHRoaXMuZGlzcGxheS5hcHBlbmQodHJlZW5vZGUpOwogICAgICAgIHRoaXMuZGlzcGxheSA9IHRyZWVub2RlOwogICAgICB9CgogICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnB1dC4KICAgICAgaWYgKCh0aGlzLmlucHV0Lmxlbmd0aCA9PT0gMCkgJiYKICAgICAgICAgIChlbGVtID0gdGhpcy5idWlsZF9pbnB1dChsZWZ0KSkgJiYKICAgICAgICAgIChlbGVtLmxlbmd0aCA+IDApKSB7CgogICAgICAgIC8vIEFkZCB0aGUgaW5wdXQgdG8gdGhlIGRpc3BsYXkuCiAgICAgICAgdGhpcy5kaXNwbGF5LmFwcGVuZChlbGVtKTsKICAgICAgICBsZWZ0ICs9IHBhcmFtcy5jb2x3aWR0aDsKICAgICAgfQoKICAgICAgLy8gTm93IGNyZWF0ZSB0aGUgKy8tIHNpZ24gaWYgbmVlZGVkLgogICAgICBpZiAodGhpcy5zcGFuLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuZGlzcGxheS5hcHBlbmQodGhpcy5idWlsZF9zcGFuKGxlZnQpKTsKICAgICAgICBsZWZ0ICs9IHBhcmFtcy5jb2x3aWR0aDsKICAgICAgfQoKICAgICAgLy8gTm93IGFwcGVuZCB0aGUgbm9kZSB0aXRsZS4KICAgICAgaWYgKHRoaXMubGluay5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLmRpc3BsYXkuYXBwZW5kKHRoaXMuYnVpbGRfdGl0bGUobGVmdCkpOwogICAgICB9CgogICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgbm9kZSBpcyBkb25lIGJ1aWxkaW5nLgogICAgICB2YXIgb25Eb25lID0gZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIFNlZSBpZiB0aGV5IHdpc2ggdG8gYWx0ZXIgdGhlIGJ1aWxkLgogICAgICAgIGlmIChwYXJhbXMub25idWlsZCkgewogICAgICAgICAgcGFyYW1zLm9uYnVpbGQodGhpcyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgYSBzZWFyY2ggaXRlbS4KICAgICAgICB0aGlzLnNlYXJjaEl0ZW0gPSB0aGlzLmRpc3BsYXkuY2xvbmUoKTsKICAgICAgICAkKCcudHJlZXNlbGVjdC1leHBhbmQnLCB0aGlzLnNlYXJjaEl0ZW0pLnJlbW92ZSgpOwoKICAgICAgICAvLyBJZiB0aGUgc2VhcmNoIHRpdGxlIGlzIG5vdCBhIGxpbmssIHRoZW4gbWFrZSBpdCBvbmUuLi4KICAgICAgICB2YXIgc2VhcmNoVGl0bGUgPSAkKCdkaXYudHJlZXNlbGVjdC10aXRsZScsIHRoaXMuc2VhcmNoSXRlbSk7CiAgICAgICAgaWYgKHNlYXJjaFRpdGxlLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHNlYXJjaFRpdGxlLnJlcGxhY2VXaXRoKHRoaXMubm9kZUxpbmspOwogICAgICAgIH0KCiAgICAgICAgLy8gU2VlIGlmIHRoZXkgd2lzaCB0byBob29rIGludG8gdGhlIHBvc3RidWlsZCBwcm9jZXNzLgogICAgICAgIGlmIChwYXJhbXMucG9zdGJ1aWxkKSB7CiAgICAgICAgICBwYXJhbXMucG9zdGJ1aWxkKHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBub2RlIGlzIGV4Y2x1ZGVkLCBhbmQgaGlkZSBpZiBzby4KICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXhjbHVkZVt0aGlzLmlkXSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIGlmICgkKCcudHJlZW5vZGUtaW5wdXQnLCB0aGlzLmRpc3BsYXkpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmRpc3BsYXkuaGlkZSgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhleSB3aXNoIHRvIGtub3cgd2hlbiB3ZSBhcmUgZG9uZSBidWlsZGluZy4KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgZG9uZS5jYWxsKHRoaXMsIHRoaXMpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIC8vIEFwcGVuZCB0aGUgY2hpbGRyZW4uCiAgICAgIGlmICh0aGlzLmNoaWxkbGlzdC5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLmJ1aWxkX2NoaWxkcmVuKGZ1bmN0aW9uKGNoaWxkcmVuKSB7CiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLmRpc3BsYXkuYXBwZW5kKGNoaWxkcmVuKTsKICAgICAgICAgIH0KICAgICAgICAgIG9uRG9uZS5jYWxsKHRoaXMpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIG9uRG9uZS5jYWxsKHRoaXMpOwogICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2VsZWN0QWxsIHRleHQgaWYgdGhhdCBhcHBsaWVzIHRvIHRoaXMgbm9kZS4KICAgICAqLwogICAgVHJlZU5vZGUucHJvdG90eXBlLmdldFNlbGVjdEFsbCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuc2VsZWN0QWxsKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QWxsVGV4dDsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogU2VhcmNoIHRoaXMgbm9kZSBmb3IgbWF0Y2hpbmcgdGV4dC4KICAgICAqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB0byBzZWFyY2ggZm9yLgogICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2guCiAgICAgKi8KICAgIFRyZWVOb2RlLnByb3RvdHlwZS5zZWFyY2ggPSBmdW5jdGlvbih0ZXh0LCBjYWxsYmFjaykgewogICAgICAvLyBJZiBubyB0ZXh0IHdhcyBwcm92aWRlZCwgdGhlbiBqdXN0IHJldHVybiB0aGUgcm9vdCBjaGlsZHJlbi4KICAgICAgaWYgKCF0ZXh0KSB7CiAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICBjYWxsYmFjayh0aGlzLmNoaWxkcmVuLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgewoKICAgICAgICAvLyBJbml0aWFsaXplIG91ciByZXN1bHRzLgogICAgICAgIHZhciByZXN1bHRzID0ge307CgogICAgICAgIC8vIENvbnZlcnQgdGhlIHRleHQgdG8gbG93ZXJjYXNlLgogICAgICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7CgogICAgICAgIC8vIFNlZSBpZiB0aGV5IHByb3ZpZGVkIGEgc2VhcmNoIGVuZHBvaW50LgogICAgICAgIGlmIChwYXJhbXMuc2VhcmNoZXIpIHsKCiAgICAgICAgICAvLyBDYWxsIHRoZSBzZWFyY2hlciBmb3IgdGhlIG5ldyBub2Rlcy4KICAgICAgICAgIHBhcmFtcy5zZWFyY2hlcih0aGlzLCB0ZXh0LCBmdW5jdGlvbihub2RlcywgZ2V0Tm9kZSkgewoKICAgICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2Ygbm9kZXMuCiAgICAgICAgICAgIHZhciBudW1Ob2RlcyA9IE9iamVjdC5rZXlzKG5vZGVzKS5sZW5ndGg7CgogICAgICAgICAgICAvLyBJZiBubyBub2RlcyB3ZXJlIHJldHVybmVkIHRoZW4gcmV0dXJuIG5vdGhpbmcuCiAgICAgICAgICAgIGlmIChudW1Ob2RlcyA9PT0gMCkgewogICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdHMsIHRydWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgdHJlZSBub2RlIGlzIGJ1aWx0LgogICAgICAgICAgICB2YXIgb25CdWlsdCA9IGZ1bmN0aW9uKGlkKSB7CgogICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUgbm9kZSBpcyBidWlsdC4KICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odHJlZW5vZGUpIHsKCiAgICAgICAgICAgICAgICAvLyBEZWNyZW1lbnQgdGhlIGNvdW50ZXIuCiAgICAgICAgICAgICAgICBudW1Ob2Rlcy0tOwoKICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgcmVzdWx0cy4KICAgICAgICAgICAgICAgIHJlc3VsdHNbaWRdID0gdHJlZW5vZGU7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gbW9yZSBub2RlcyBhcmUgbG9hZGluZywgdGhlbiBjYWxsYmFjay4KICAgICAgICAgICAgICAgIGlmICghbnVtTm9kZXMpIHsKCiAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIHdpdGggdGhlIHNlYXJjaCByZXN1bHRzLgogICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHRzLCB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgbm9kZXMuCiAgICAgICAgICAgIGZvciAodmFyIGlkIGluIG5vZGVzKSB7CgogICAgICAgICAgICAgIC8vIFNldCB0aGUgdHJlZW5vZGUuCiAgICAgICAgICAgICAgdmFyIHRyZWVub2RlID0gbmV3IFRyZWVOb2RlKGdldE5vZGUgPyBnZXROb2RlKG5vZGVzW2lkXSkgOiBub2Rlc1tpZF0pOwoKICAgICAgICAgICAgICAvLyBTYXkgdGhpcyBub2RlIGlzIGxvYWRlZC4KICAgICAgICAgICAgICB0cmVlbm9kZS5ub2RlbG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgLy8gQWRkIHRvIHRoZSBsb2FkZWQgbm9kZXMgYXJyYXkuCiAgICAgICAgICAgICAgbG9hZGVkTm9kZXNbdHJlZW5vZGUuaWRdID0gdHJlZW5vZGUuaWQ7CgogICAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBub2RlLgogICAgICAgICAgICAgIHRyZWVub2RlLmJ1aWxkKG9uQnVpbHQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgIC8vIExvYWQgYWxsIG5vZGVzLgogICAgICAgICAgdGhpcy5sb2FkQWxsKGZ1bmN0aW9uKG5vZGUpIHsKCiAgICAgICAgICAgIC8vIENhbGxiYWNrIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2guCiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewogICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdHMsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBmdW5jdGlvbihub2RlKSB7CgogICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IHRoZSByb290IG5vZGUsIGFuZCB0aGUgdGV4dCBtYXRjaGVzIHRoZSB0aXRsZS4KICAgICAgICAgICAgaWYgKCFub2RlLnJvb3QgJiYgbm9kZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNlYXJjaCh0ZXh0KSAhPT0gLTEpIHsKCiAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gb3VyIHNlYXJjaCByZXN1bHRzLgogICAgICAgICAgICAgIHJlc3VsdHNbbm9kZS5pZF0gPSBub2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggaW5zdGFuY2UuCiAgICByZXR1cm4gJCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCkgewoKICAgICAgLy8gR2V0IHRoZSB0cmVlIG5vZGUgcGFyYW1ldGVycy4KICAgICAgdmFyIHRyZWVQYXJhbXMgPSAkLmV4dGVuZChwYXJhbXMsIHtkaXNwbGF5OiAkKHRoaXMpfSk7CgogICAgICAvLyBDcmVhdGUgYSByb290IHRyZWUgbm9kZSBhbmQgbG9hZCBpdC4KICAgICAgdmFyIHJvb3QgPSB0aGlzLnRyZWVub2RlID0gbmV3IFRyZWVOb2RlKHRyZWVQYXJhbXMsIHRydWUpOwoKICAgICAgLy8gQWRkIGEgc2VsZWN0IGFsbCBsaW5rLgogICAgICB2YXIgc2VsZWN0QWxsID0gcm9vdC5nZXRTZWxlY3RBbGwoKTsKICAgICAgaWYgKHNlbGVjdEFsbCAhPT0gZmFsc2UgJiYgIXJvb3Quc2hvd1Jvb3QpIHsKCiAgICAgICAgLy8gU2VlIGlmIHRoZSBzZWxlY3QgYWxsIGJ1dHRvbiBzaG91bGQgYmUgY2hlY2tlZC4KICAgICAgICB2YXIgY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIHZhciBkZWZhdWx0X3ZhbHVlID0gcGFyYW1zLmRlZmF1bHRfdmFsdWU7CiAgICAgICAgaWYgKGRlZmF1bHRfdmFsdWUuaGFzT3duUHJvcGVydHkocm9vdC52YWx1ZSArICctaW5jbHVkZS1iZWxvdycpKSB7CiAgICAgICAgICBjaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIENyZWF0ZSBhbiBpbnB1dCBlbGVtZW50LgogICAgICAgIHZhciBpbnB1dEVsZW1lbnQgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykpLmF0dHIoewogICAgICAgICAgJ3R5cGUnOiAnY2hlY2tib3gnCiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB0aGUgY2hlY2tlZCBzdGF0ZS4KICAgICAgICBpbnB1dEVsZW1lbnQuZXEoMClbMF0uY2hlY2tlZCA9IGNoZWNrZWQ7CgogICAgICAgIC8vIEJpbmQgdG8gdGhlIGNsaWNrIGV2ZW50LgogICAgICAgIGlucHV0RWxlbWVudC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICByb290LnNlbGVjdENoaWxkcmVuKGV2ZW50LnRhcmdldC5jaGVja2VkKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gQWRkIHRoZSBpbnB1dCBpdGVtIHRvIHRoZSByb290LgogICAgICAgIHJvb3QuZGlzcGxheS5hcHBlbmQoaW5wdXRFbGVtZW50KTsKCiAgICAgICAgLy8gSWYgdGhleSBwcm92aWRlZCBzZWxlY3QgYWxsIHRleHQsIGFkZCBpdCBoZXJlLgogICAgICAgIGlmIChzZWxlY3RBbGwpIHsKICAgICAgICAgIHZhciBzcGFuID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLmF0dHIoewogICAgICAgICAgICAnY2xhc3MnOiAndHJlZXNlbGVjdC1zZWxlY3QtYWxsJwogICAgICAgICAgfSkuaHRtbChzZWxlY3RBbGwpOwogICAgICAgICAgcm9vdC5kaXNwbGF5LmFwcGVuZChzcGFuKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIENyZWF0ZSBhIGxvYWRpbmcgc3Bhbi4KICAgICAgdmFyIGluaXRCdXN5ID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpLmFkZENsYXNzKCd0cmVlYnVzeScpOwogICAgICByb290LmRpc3BsYXkuYXBwZW5kKGluaXRCdXN5LmNzcygnZGlzcGxheScsICdibG9jaycpKTsKCiAgICAgIC8vIENhbGxlZCB3aGVuIHRoZSByb290IG5vZGUgaXMgZG9uZSBsb2FkaW5nLgogICAgICB2YXIgZG9uZUxvYWRpbmcgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBpbml0IGJ1c3kgY3Vyc29yLgogICAgICAgIGluaXRCdXN5LnJlbW92ZSgpOwoKICAgICAgICAvLyBDYWxsIHRoZSB0cmVlbG9hZGVkIHBhcmFtcy4KICAgICAgICBpZiAocGFyYW1zLnRyZWVsb2FkZWQpIHsKICAgICAgICAgIHBhcmFtcy50cmVlbG9hZGVkKHRoaXMpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIC8vIExvYWQgdGhlIG5vZGUuCiAgICAgIHJvb3QubG9hZE5vZGUoZnVuY3Rpb24obm9kZSkgewoKICAgICAgICAvLyBDaGVjayB0aGUgbGVuZ3RoIG9mIGNoaWxkcmVuIGluIHRoaXMgbm9kZS4KICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKCiAgICAgICAgICAvLyBJZiB0aGUgcm9vdCBub2RlIGRvZXMgbm90IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIGhpZGUuCiAgICAgICAgICBub2RlLmRpc3BsYXkuaGlkZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gRXhwYW5kIHRoaXMgcm9vdCBub2RlLgogICAgICAgIG5vZGUuZXhwYW5kKHRydWUpOwoKICAgICAgICAvLyBTZWxlY3QgdGhpcyBub2RlIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHZhbHVlLgogICAgICAgIG5vZGUuc2VsZWN0KG5vZGUuY2hlY2tlZCk7CgogICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdHMgZm9yIGFsbCB0aGUgY2hpbGRyZW4uCiAgICAgICAgdmFyIGRlZmF1bHRzID0gbm9kZS5jaGVja2VkOwogICAgICAgIGlmICghalF1ZXJ5LmlzRW1wdHlPYmplY3QocGFyYW1zLmRlZmF1bHRfdmFsdWUpKSB7CiAgICAgICAgICBkZWZhdWx0cyA9IHBhcmFtcy5kZWZhdWx0X3ZhbHVlOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGRlZmF1bHRzLCB0aGVuIHNlbGVjdCB0aGUgY2hpbGRyZW4gd2l0aCB0aGVtLgogICAgICAgIGlmIChkZWZhdWx0cykgewoKICAgICAgICAgIC8vIFNlbGVjdCB0aGUgY2hpbGRyZW4gYmFzZWQgb24gdGhlIGRlZmF1bHRzLgogICAgICAgICAgaWYgKHBhcmFtcy5kZWVwTG9hZCkgewogICAgICAgICAgICBub2RlLnNlbGVjdENoaWxkcmVuKGRlZmF1bHRzLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBkb25lTG9hZGluZy5jYWxsKG5vZGUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAvLyBXaGVuIG5vdCBkZWVwIGxvYWRpbmcsIHVzZSBzZWxlY3REZWZhdWx0cyB0byBzZWFyY2ggZm9yIGRlZmF1bHRzCiAgICAgICAgICAgIC8vIHVzaW5nIGJyZWFkdGggZmlyc3QgY2hlY2suCiAgICAgICAgICAgIG5vZGUuc2VsZWN0RGVmYXVsdHMoZGVmYXVsdHMsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGRvbmVMb2FkaW5nLmNhbGwobm9kZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGRvbmVMb2FkaW5nLmNhbGwobm9kZSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8vIElmIHRoZSByb290IGVsZW1lbnQgZG9lc24ndCBoYXZlIGNoaWxkcmVuLCB0aGVuIGhpZGUgdGhlIHRyZWVzZWxlY3QuCiAgICAgIGlmICghcm9vdC5oYXNfY2hpbGRyZW4pIHsKICAgICAgICB0aGlzLnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfSk7CiAgfTsKfSkoalF1ZXJ5KTsKDQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLyogPCFbQ0RBVEFbICovDQovKiBGaWxlU2F2ZXIuanMNCiogQSBzYXZlQXMoKSBGaWxlU2F2ZXIgaW1wbGVtZW50YXRpb24uDQoqIDIwMTMtMTAtMjENCioNCiogQnkgRWxpIEdyZXksIGh0dHA6Ly9lbGlncmV5LmNvbQ0KKiBMaWNlbnNlOiBYMTEvTUlUDQoqICAgU2VlIExJQ0VOU0UubWQNCiovDQoNCi8qZ2xvYmFsIHNlbGYgKi8NCi8qanNsaW50IGJpdHdpc2U6IHRydWUsIHJlZ2V4cDogdHJ1ZSwgY29uZnVzaW9uOiB0cnVlLCBlczU6IHRydWUsIHZhcnM6IHRydWUsIHdoaXRlOiB0cnVlLA0KcGx1c3BsdXM6IHRydWUgKi8NCg0KLyohIEBzb3VyY2UgaHR0cDovL3B1cmwuZWxpZ3JleS5jb20vZ2l0aHViL0ZpbGVTYXZlci5qcy9ibG9iL21hc3Rlci9GaWxlU2F2ZXIuanMgKi8NCihmdW5jdGlvbiAoJCwgdW5kZWZpbmVkKSB7DQogICAgJC5zYXZlQXMgPSAkLnNhdmVBcw0KCSAgfHwgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iICYmIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iLmJpbmQobmF2aWdhdG9yKSkNCgkJICB8fCAoZnVuY3Rpb24gKHZpZXcpIHsNCgkJICAgICAgInVzZSBzdHJpY3QiOw0KCQkgICAgICB2YXINCgkJCQkgIGRvYyA9IHZpZXcuZG9jdW1lbnQNCgkJICAgICAgLy8gb25seSBnZXQgVVJMIHdoZW4gbmVjZXNzYXJ5IGluIGNhc2UgQmxvYkJ1aWxkZXIuanMgaGFzbid0IG92ZXJyaWRkZW4gaXQgeWV0DQoJCQkJCSAgLCBnZXRfVVJMID0gZnVuY3Rpb24gKCkgew0KCQkJCQkgICAgICByZXR1cm4gdmlldy5VUkwgfHwgdmlldy53ZWJraXRVUkwgfHwgdmlldzsNCgkJCQkJICB9DQoJCQkJLCBVUkwgPSB2aWV3LlVSTCB8fCB2aWV3LndlYmtpdFVSTCB8fCB2aWV3DQoJCQkJLCBzYXZlX2xpbmsgPSAvKiBDVVNUT00gQ09ERSBTVEFSVCAqL2RvYy5jcmVhdGVFbGVtZW50TlMgJiYgLyogQ1VTVE9NIENPREUgRU5EICovZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJhIikNCgkJCQksIGNhbl91c2Vfc2F2ZV9saW5rID0gLyogQ1VTVE9NIENPREUgU1RBUlQgKi9zYXZlX2xpbmsgJiYgLyogQ1VTVE9NIENPREUgRU5EICovIXZpZXcuZXh0ZXJuYWxIb3N0ICYmICJkb3dubG9hZCIgaW4gc2F2ZV9saW5rDQoJCQkJCSAgLCBjbGljayA9IGZ1bmN0aW9uIChub2RlKSB7DQoJCQkJCSAgICAgIHZhciBldmVudCA9IGRvYy5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTsNCgkJCQkJICAgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoDQoJCQkJCQkJImNsaWNrIiwgdHJ1ZSwgZmFsc2UsIHZpZXcsIDAsIDAsIDAsIDAsIDANCgkJCQkJCQksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsDQoJCQkJCQkpOw0KCQkJCQkgICAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpOw0KCQkJCQkgIH0NCgkJCQksIHdlYmtpdF9yZXFfZnMgPSB2aWV3LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtDQoJCQkJLCByZXFfZnMgPSB2aWV3LnJlcXVlc3RGaWxlU3lzdGVtIHx8IHdlYmtpdF9yZXFfZnMgfHwgdmlldy5tb3pSZXF1ZXN0RmlsZVN5c3RlbQ0KCQkJCSwgdGhyb3dfb3V0c2lkZSA9IGZ1bmN0aW9uIChleCkgew0KCQkJCSAgICAodmlldy5zZXRJbW1lZGlhdGUgfHwgdmlldy5zZXRUaW1lb3V0KShmdW5jdGlvbiAoKSB7DQoJCQkJICAgICAgICB0aHJvdyBleDsNCgkJCQkgICAgfSwgMCk7DQoJCQkJfQ0KCQkJCSwgZm9yY2Vfc2F2ZWFibGVfdHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iDQoJCQkJLCBmc19taW5fc2l6ZSA9IDANCgkJCQksIGRlbGV0aW9uX3F1ZXVlID0gW10NCgkJCQkJICAsIHByb2Nlc3NfZGVsZXRpb25fcXVldWUgPSBmdW5jdGlvbiAoKSB7DQoJCQkJCSAgICAgIHZhciBpID0gZGVsZXRpb25fcXVldWUubGVuZ3RoOw0KCQkJCQkgICAgICB3aGlsZSAoaS0tKSB7DQoJCQkJCSAgICAgICAgICB2YXIgZmlsZSA9IGRlbGV0aW9uX3F1ZXVlW2ldOw0KCQkJCQkgICAgICAgICAgaWYgKHR5cGVvZiBmaWxlID09PSAic3RyaW5nIikgeyAvLyBmaWxlIGlzIGFuIG9iamVjdCBVUkwNCgkJCQkJICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGZpbGUpOw0KCQkJCQkgICAgICAgICAgfSBlbHNlIHsgLy8gZmlsZSBpcyBhIEZpbGUNCgkJCQkJICAgICAgICAgICAgICBmaWxlLnJlbW92ZSgpOw0KCQkJCQkgICAgICAgICAgfQ0KCQkJCQkgICAgICB9DQoJCQkJCSAgICAgIGRlbGV0aW9uX3F1ZXVlLmxlbmd0aCA9IDA7IC8vIGNsZWFyIHF1ZXVlDQoJCQkJCSAgfQ0KCQkJCQkgICwgZGlzcGF0Y2ggPSBmdW5jdGlvbiAoZmlsZXNhdmVyLCBldmVudF90eXBlcywgZXZlbnQpIHsNCgkJCQkJICAgICAgZXZlbnRfdHlwZXMgPSBbXS5jb25jYXQoZXZlbnRfdHlwZXMpOw0KCQkJCQkgICAgICB2YXIgaSA9IGV2ZW50X3R5cGVzLmxlbmd0aDsNCgkJCQkJICAgICAgd2hpbGUgKGktLSkgew0KCQkJCQkgICAgICAgICAgdmFyIGxpc3RlbmVyID0gZmlsZXNhdmVyWyJvbiIgKyBldmVudF90eXBlc1tpXV07DQoJCQkJCSAgICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyID09PSAiZnVuY3Rpb24iKSB7DQoJCQkJCSAgICAgICAgICAgICAgdHJ5IHsNCgkJCQkJICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbChmaWxlc2F2ZXIsIGV2ZW50IHx8IGZpbGVzYXZlcik7DQoJCQkJCSAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgdGhyb3dfb3V0c2lkZShleCk7DQoJCQkJCSAgICAgICAgICAgICAgfQ0KCQkJCQkgICAgICAgICAgfQ0KCQkJCQkgICAgICB9DQoJCQkJCSAgfQ0KCQkJCQkgICwgRmlsZVNhdmVyID0gZnVuY3Rpb24gKGJsb2IsIG5hbWUpIHsNCgkJCQkJICAgICAgLy8gRmlyc3QgdHJ5IGEuZG93bmxvYWQsIHRoZW4gd2ViIGZpbGVzeXN0ZW0sIHRoZW4gb2JqZWN0IFVSTHMNCgkJCQkJICAgICAgdmFyDQoJCQkJCQkJICBmaWxlc2F2ZXIgPSB0aGlzDQoJCQkJCQkJLCB0eXBlID0gYmxvYi50eXBlDQoJCQkJCQkJLCBibG9iX2NoYW5nZWQgPSBmYWxzZQ0KCQkJCQkJCSwgb2JqZWN0X3VybA0KCQkJCQkJCSwgdGFyZ2V0X3ZpZXcNCgkJCQkJCQkJICAsIGdldF9vYmplY3RfdXJsID0gZnVuY3Rpb24gKCkgew0KCQkJCQkJCQkgICAgICB2YXIgb2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7DQoJCQkJCQkJCSAgICAgIGRlbGV0aW9uX3F1ZXVlLnB1c2gob2JqZWN0X3VybCk7DQoJCQkJCQkJCSAgICAgIHJldHVybiBvYmplY3RfdXJsOw0KCQkJCQkJCQkgIH0NCgkJCQkJCQkJICAsIGRpc3BhdGNoX2FsbCA9IGZ1bmN0aW9uICgpIHsNCgkJCQkJCQkJICAgICAgZGlzcGF0Y2goZmlsZXNhdmVyLCAid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSB3cml0ZWVuZCIuc3BsaXQoIiAiKSk7DQoJCQkJCQkJCSAgfQ0KCQkJCQkgICAgICAvLyBvbiBhbnkgZmlsZXN5cyBlcnJvcnMgcmV2ZXJ0IHRvIHNhdmluZyB3aXRoIG9iamVjdCBVUkxzDQoJCQkJCQkJCSAgLCBmc19lcnJvciA9IGZ1bmN0aW9uICgpIHsNCgkJCQkJCQkJICAgICAgLy8gZG9uJ3QgY3JlYXRlIG1vcmUgb2JqZWN0IFVSTHMgdGhhbiBuZWVkZWQNCgkJCQkJCQkJICAgICAgaWYgKGJsb2JfY2hhbmdlZCB8fCAhb2JqZWN0X3VybCkgew0KCQkJCQkJCQkgICAgICAgICAgb2JqZWN0X3VybCA9IGdldF9vYmplY3RfdXJsKGJsb2IpOw0KCQkJCQkJCQkgICAgICB9DQoJCQkJCQkJCSAgICAgIGlmICh0YXJnZXRfdmlldykgew0KCQkJCQkJCQkgICAgICAgICAgdGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IG9iamVjdF91cmw7DQoJCQkJCQkJCSAgICAgIH0gZWxzZSB7DQoJCQkJCQkJCSAgICAgICAgICB3aW5kb3cub3BlbihvYmplY3RfdXJsLCAiX2JsYW5rIik7DQoJCQkJCQkJCSAgICAgIH0NCgkJCQkJCQkJICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTsNCgkJCQkJCQkJICAgICAgZGlzcGF0Y2hfYWxsKCk7DQoJCQkJCQkJCSAgfQ0KCQkJCQkJCQkgICwgYWJvcnRhYmxlID0gZnVuY3Rpb24gKGZ1bmMpIHsNCgkJCQkJCQkJICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsNCgkJCQkJCQkJICAgICAgICAgIGlmIChmaWxlc2F2ZXIucmVhZHlTdGF0ZSAhPT0gZmlsZXNhdmVyLkRPTkUpIHsNCgkJCQkJCQkJICAgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOw0KCQkJCQkJCQkgICAgICAgICAgfQ0KCQkJCQkJCQkgICAgICB9Ow0KCQkJCQkJCQkgIH0NCgkJCQkJCQkJICAsIGNyZWF0ZV9pZl9ub3RfZm91bmQgPSB7IGNyZWF0ZTogdHJ1ZSwgZXhjbHVzaXZlOiBmYWxzZSB9DQoJCQkJCQkJLCBzbGljZQ0KCQkJCQkgICAgICA7DQoJCQkJCSAgICAgIGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7DQoJCQkJCSAgICAgIGlmICghbmFtZSkgew0KCQkJCQkgICAgICAgICAgbmFtZSA9ICJkb3dubG9hZCI7DQoJCQkJCSAgICAgIH0NCgkJCQkJICAgICAgaWYgKGNhbl91c2Vfc2F2ZV9saW5rKSB7DQoJCQkJCSAgICAgICAgICBvYmplY3RfdXJsID0gZ2V0X29iamVjdF91cmwoYmxvYik7DQoJCQkJCSAgICAgICAgICAvLyBGRiBmb3IgQW5kcm9pZCBoYXMgYSBuYXN0eSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtDQoJCQkJCSAgICAgICAgICAvLyB0aGF0IHR1cm5zIGFsbCBvYmplY3RzIHRoYXQgYXJlIG5vdCBwdXJlIGphdmFzY3JpcHQgaW50byAnZGVhZE9iamVjdCcNCgkJCQkJICAgICAgICAgIC8vIHRoaXMgbWVhbnMgYGRvY2AgYW5kIGBzYXZlX2xpbmtgIGFyZSB1bnVzYWJsZSBhbmQgbmVlZCB0byBiZSByZWNyZWF0ZWQNCgkJCQkJICAgICAgICAgIC8vIGB2aWV3YCBpcyB1c2FibGUgdGhvdWdoOg0KCQkJCQkgICAgICAgICAgZG9jID0gdmlldy5kb2N1bWVudDsNCgkJCQkJICAgICAgICAgIHNhdmVfbGluayA9IGRvYy5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCAiYSIpOw0KCQkJCQkgICAgICAgICAgc2F2ZV9saW5rLmhyZWYgPSBvYmplY3RfdXJsOw0KCQkJCQkgICAgICAgICAgc2F2ZV9saW5rLmRvd25sb2FkID0gbmFtZTsNCgkJCQkJICAgICAgICAgIHZhciBldmVudCA9IGRvYy5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTsNCgkJCQkJICAgICAgICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KA0KCQkJCQkJCQkiY2xpY2siLCB0cnVlLCBmYWxzZSwgdmlldywgMCwgMCwgMCwgMCwgMA0KCQkJCQkJCQksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsDQoJCQkJCQkJKTsNCgkJCQkJICAgICAgICAgIHNhdmVfbGluay5kaXNwYXRjaEV2ZW50KGV2ZW50KTsNCgkJCQkJICAgICAgICAgIGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7DQoJCQkJCSAgICAgICAgICBkaXNwYXRjaF9hbGwoKTsNCgkJCQkJICAgICAgICAgIHJldHVybjsNCgkJCQkJICAgICAgfQ0KCQkJCQkgICAgICAvLyBPYmplY3QgYW5kIHdlYiBmaWxlc3lzdGVtIFVSTHMgaGF2ZSBhIHByb2JsZW0gc2F2aW5nIGluIEdvb2dsZSBDaHJvbWUgd2hlbg0KCQkJCQkgICAgICAvLyB2aWV3ZWQgaW4gYSB0YWIsIHNvIEkgZm9yY2Ugc2F2ZSB3aXRoIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQ0KCQkJCQkgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD05MTE1OA0KCQkJCQkgICAgICBpZiAodmlldy5jaHJvbWUgJiYgdHlwZSAmJiB0eXBlICE9PSBmb3JjZV9zYXZlYWJsZV90eXBlKSB7DQoJCQkJCSAgICAgICAgICBzbGljZSA9IGJsb2Iuc2xpY2UgfHwgYmxvYi53ZWJraXRTbGljZTsNCgkJCQkJICAgICAgICAgIGJsb2IgPSBzbGljZS5jYWxsKGJsb2IsIDAsIGJsb2Iuc2l6ZSwgZm9yY2Vfc2F2ZWFibGVfdHlwZSk7DQoJCQkJCSAgICAgICAgICBibG9iX2NoYW5nZWQgPSB0cnVlOw0KCQkJCQkgICAgICB9DQoJCQkJCSAgICAgIC8vIFNpbmNlIEkgY2FuJ3QgYmUgc3VyZSB0aGF0IHRoZSBndWVzc2VkIG1lZGlhIHR5cGUgd2lsbCB0cmlnZ2VyIGEgZG93bmxvYWQNCgkJCQkJICAgICAgLy8gaW4gV2ViS2l0LCBJIGFwcGVuZCAuZG93bmxvYWQgdG8gdGhlIGZpbGVuYW1lLg0KCQkJCQkgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0NDANCgkJCQkJICAgICAgaWYgKHdlYmtpdF9yZXFfZnMgJiYgbmFtZSAhPT0gImRvd25sb2FkIikgew0KCQkJCQkgICAgICAgICAgbmFtZSArPSAiLmRvd25sb2FkIjsNCgkJCQkJICAgICAgfQ0KCQkJCQkgICAgICBpZiAodHlwZSA9PT0gZm9yY2Vfc2F2ZWFibGVfdHlwZSB8fCB3ZWJraXRfcmVxX2ZzKSB7DQoJCQkJCSAgICAgICAgICB0YXJnZXRfdmlldyA9IHZpZXc7DQoJCQkJCSAgICAgIH0NCgkJCQkJICAgICAgaWYgKCFyZXFfZnMpIHsNCgkJCQkJICAgICAgICAgIGZzX2Vycm9yKCk7DQoJCQkJCSAgICAgICAgICByZXR1cm47DQoJCQkJCSAgICAgIH0NCgkJCQkJICAgICAgZnNfbWluX3NpemUgKz0gYmxvYi5zaXplOw0KCQkJCQkgICAgICByZXFfZnModmlldy5URU1QT1JBUlksIGZzX21pbl9zaXplLCBhYm9ydGFibGUoZnVuY3Rpb24gKGZzKSB7DQoJCQkJCSAgICAgICAgICBmcy5yb290LmdldERpcmVjdG9yeSgic2F2ZWQiLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24gKGRpcikgew0KCQkJCQkgICAgICAgICAgICAgIHZhciBzYXZlID0gZnVuY3Rpb24gKCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICBkaXIuZ2V0RmlsZShuYW1lLCBjcmVhdGVfaWZfbm90X2ZvdW5kLCBhYm9ydGFibGUoZnVuY3Rpb24gKGZpbGUpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgIGZpbGUuY3JlYXRlV3JpdGVyKGFib3J0YWJsZShmdW5jdGlvbiAod3JpdGVyKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm9ud3JpdGVlbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3ZpZXcubG9jYXRpb24uaHJlZiA9IGZpbGUudG9VUkwoKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRpb25fcXVldWUucHVzaChmaWxlKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuRE9ORTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goZmlsZXNhdmVyLCAid3JpdGVlbmQiLCBldmVudCk7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gd3JpdGVyLmVycm9yOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IuY29kZSAhPT0gZXJyb3IuQUJPUlRfRVJSKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19lcnJvcigpOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGVzdGFydCBwcm9ncmVzcyB3cml0ZSBhYm9ydCIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXJbIm9uIiArIGV2ZW50XSA9IGZpbGVzYXZlclsib24iICsgZXZlbnRdOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShibG9iKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2F2ZXIuYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hYm9ydCgpOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOw0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNhdmVyLnJlYWR5U3RhdGUgPSBmaWxlc2F2ZXIuV1JJVElORzsNCgkJCQkJICAgICAgICAgICAgICAgICAgICAgIH0pLCBmc19lcnJvcik7DQoJCQkJCSAgICAgICAgICAgICAgICAgIH0pLCBmc19lcnJvcik7DQoJCQkJCSAgICAgICAgICAgICAgfTsNCgkJCQkJICAgICAgICAgICAgICBkaXIuZ2V0RmlsZShuYW1lLCB7IGNyZWF0ZTogZmFsc2UgfSwgYWJvcnRhYmxlKGZ1bmN0aW9uIChmaWxlKSB7DQoJCQkJCSAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlIGlmIGl0IGFscmVhZHkgZXhpc3RzDQoJCQkJCSAgICAgICAgICAgICAgICAgIGZpbGUucmVtb3ZlKCk7DQoJCQkJCSAgICAgICAgICAgICAgICAgIHNhdmUoKTsNCgkJCQkJICAgICAgICAgICAgICB9KSwgYWJvcnRhYmxlKGZ1bmN0aW9uIChleCkgew0KCQkJCQkgICAgICAgICAgICAgICAgICBpZiAoZXguY29kZSA9PT0gZXguTk9UX0ZPVU5EX0VSUikgew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgc2F2ZSgpOw0KCQkJCQkgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KCQkJCQkgICAgICAgICAgICAgICAgICAgICAgZnNfZXJyb3IoKTsNCgkJCQkJICAgICAgICAgICAgICAgICAgfQ0KCQkJCQkgICAgICAgICAgICAgIH0pKTsNCgkJCQkJICAgICAgICAgIH0pLCBmc19lcnJvcik7DQoJCQkJCSAgICAgIH0pLCBmc19lcnJvcik7DQoJCQkJCSAgfQ0KCQkJCSwgRlNfcHJvdG8gPSBGaWxlU2F2ZXIucHJvdG90eXBlDQoJCQkJCSAgLCBzYXZlQXMgPSBmdW5jdGlvbiAoYmxvYiwgbmFtZSkgew0KCQkJCQkgICAgICByZXR1cm4gbmV3IEZpbGVTYXZlcihibG9iLCBuYW1lKTsNCgkJCQkJICB9DQoJCSAgICAgIDsNCgkJICAgICAgRlNfcHJvdG8uYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQoJCSAgICAgICAgICB2YXIgZmlsZXNhdmVyID0gdGhpczsNCgkJICAgICAgICAgIGZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7DQoJCSAgICAgICAgICBkaXNwYXRjaChmaWxlc2F2ZXIsICJhYm9ydCIpOw0KCQkgICAgICB9Ow0KCQkgICAgICBGU19wcm90by5yZWFkeVN0YXRlID0gRlNfcHJvdG8uSU5JVCA9IDA7DQoJCSAgICAgIEZTX3Byb3RvLldSSVRJTkcgPSAxOw0KCQkgICAgICBGU19wcm90by5ET05FID0gMjsNCg0KCQkgICAgICBGU19wcm90by5lcnJvciA9DQoJCQlGU19wcm90by5vbndyaXRlc3RhcnQgPQ0KCQkJRlNfcHJvdG8ub25wcm9ncmVzcyA9DQoJCQlGU19wcm90by5vbndyaXRlID0NCgkJCUZTX3Byb3RvLm9uYWJvcnQgPQ0KCQkJRlNfcHJvdG8ub25lcnJvciA9DQoJCQlGU19wcm90by5vbndyaXRlZW5kID0NCgkJCQludWxsOw0KCQkgICAgICAvKiBDVVNUT00gQ09ERSBSRVBMQUNFIFNUQVJUICovDQoJCSAgICAgIGlmICh2aWV3LmFkZEV2ZW50TGlzdGVuZXIpIHsNCgkJICAgICAgICAgIHZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgcHJvY2Vzc19kZWxldGlvbl9xdWV1ZSwgZmFsc2UpOw0KCQkgICAgICB9IGVsc2Ugew0KCQkgICAgICAgICAgdmlldy5hdHRhY2hFdmVudCgidW5sb2FkIiwgcHJvY2Vzc19kZWxldGlvbl9xdWV1ZSk7DQoJCSAgICAgIH0NCgkJICAgICAgLy8gdmlldy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLCBwcm9jZXNzX2RlbGV0aW9uX3F1ZXVlLCBmYWxzZSk7DQoJCSAgICAgIC8qIENVU1RPTSBDT0RFIFJFUExBQ0UgRU5EICovDQoJCSAgICAgIHJldHVybiBzYXZlQXM7DQoJCSAgfSh0aGlzLnNlbGYgfHwgdGhpcy53aW5kb3cgfHwgdGhpcy5jb250ZW50KSk7DQogICAgLy8gYHNlbGZgIGlzIHVuZGVmaW5lZCBpbiBGaXJlZm94IGZvciBBbmRyb2lkIGNvbnRlbnQgc2NyaXB0IGNvbnRleHQNCiAgICAvLyB3aGlsZSBgdGhpc2AgaXMgbnNJQ29udGVudEZyYW1lTWVzc2FnZU1hbmFnZXINCiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZSBgY29udGVudGAgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgd2luZG93DQp9KGpRdWVyeSkpOw0KDQppZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIG1vZHVsZS5leHBvcnRzID0gc2F2ZUFzOw0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KdmFyIGF0dGFjaG1lbnRzRGF0YUFycmF5ID0gbmV3IE9iamVjdCgpOw0KdmFyIGZpbGxlclVyaSA9ICJodHRwOi8vbG9jYWxob3N0L2VHTy5GaWxsZXIuV1MvRmlsbGVyU2VydmljZS5zdmMvcmVzdC8iOw0KDQpmdW5jdGlvbiBHZXREYXRhKGFjY2VwdEVtcHR5Rm9ybSkgew0KDQogICAgaWYgKGFjY2VwdEVtcHR5Rm9ybSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgYWNjZXB0RW1wdHlGb3JtID0gZmFsc2U7DQogICAgfSANCg0KICAgIHZhciBmb3JtSWQgPSBHZXRGb3JtSWQoKTsNCiAgICB2YXIgeG1sbnMgPSBHZXRNZXRhZGF0YU5hbWVzcGFjZSgpOw0KICAgIHZhciB4bWwgPSAnPCcgKyBmb3JtSWQgKyB4bWxucyArICc+JzsNCiAgICB2YXIgaGFzTWV0YWRhdGEgPSAkKCIjbXRkX2Zvcm1NZXRhRGF0YSIpLmxlbmd0aCA+IDA7DQogICAgZnVuY3Rpb24gcHJvY2Vzc0h0bWwoKSB7DQogICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTsNCiAgICAgICAgdmFyIGlzZW1wdHkgPSAnaXNlbXB0eSc7DQoNCiAgICAgICAgaWYgKCFhY2NlcHRFbXB0eUZvcm0gJiYgZWxlbWVudC5hdHRyKGlzZW1wdHkpICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudC5hdHRyKGlzZW1wdHkpID09ICJ0cnVlIikNCiAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICB2YXIgbmFtZSA9ICduYW1lJzsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICdsYXlvdXRSb3cnOw0KICAgICAgICB2YXIgZmlyc3RJbnB1dDsNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnaGlkZGVuU2VjdGlvbicpKSB7DQogICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBkaXNhYmxlVmFsaWRhdG9yUHJlZml4ICsgZmlyc3RJbnB1dC5hdHRyKG5hbWUpICsgJz4nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBmaXJzdElucHV0LmF0dHIobmFtZSkgKyAnPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaXMoJzppbnB1dCcpKSB7DQogICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOmZpbGUnKSB8fCBlbGVtZW50LmlzKCc6YnV0dG9uJykgfHwgZWxlbWVudC5hdHRyKCdMb29rdXBEZXRhaWxJbmZvJykgPT0gInRydWUiKQ0KICAgICAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50KCkuaGFzQ2xhc3MobGF5b3V0Um93KSkNCiAgICAgICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBhdHRyID0gZWxlbWVudC5hdHRyKG5hbWUpOw0KICAgICAgICAgICAgaWYgKGF0dHIgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGF0dHIuaW5kZXhPZihzaWduKTsNCiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgew0KICAgICAgICAgICAgICAgICAgICBhdHRyID0gYXR0ci5zdWJzdHIoMCwgaW5kZXgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZCA9ICc6Y2hlY2tlZCc7DQogICAgICAgICAgICAgICAgdmFyIHZhbDsNCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOnJhZGlvJykpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoY2hlY2tlZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGVhbk5hbWUgPSBHZXRWYWx1ZVdpdGhvdXRJbmNyZW1lbnRhbChhdHRyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGNsZWFuTmFtZSArICc+JyArIGVsZW1lbnQudmFsKCkgKyAnPC8nICsgY2xlYW5OYW1lICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzKCc6Y2hlY2tib3gnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pcyhjaGVja2VkKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNNZXRhZGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBhdHRyICsgJz4nICsgKChlbGVtZW50Lmhhc0NsYXNzKCJjaGVja0JveCIpKSA/IDEgOiBlbGVtZW50LnZhbCgpKSArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArICgoZWxlbWVudC5oYXNDbGFzcygiY2hlY2tCb3giKSAmJiBlbGVtZW50Lmhhc0NsYXNzKCJ4c2RfYm9vbGVhbiIpKSA/IDEgOiBlbGVtZW50LnZhbCgpKSArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoImNoZWNrQm94IikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc01ldGFkYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCArPSAnPCcgKyBhdHRyICsgJz4nICsgMCArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCJ4c2RfYm9vbGVhbiIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArIDAgKyAnPC8nICsgYXR0ciArICc+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5hdHRyKCJtdWx0aXBsZSIpKSB7DQogICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW1lbnQudmFsKCkgPT09IG51bGwgPyAiIiA6IGVsZW1lbnQudmFsKCk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gdmFsLmxlbmd0aDsgaSA8IGo7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8JyArIGF0dHIgKyAnPicgKyBIdG1sRW5jb2RlKHZhbFtpXSkgKyAnPC8nICsgYXR0ciArICc+JzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHZhbCA9IGVsZW1lbnQudmFsKCkgPT09IG51bGwgPyAiIiA6IGVsZW1lbnQudmFsKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInhzZF9kZWNpbWFsIikpDQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnLCcsICcuJyk7DQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInhzZF9kYXRlIikpDQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIudG9YbWxEYXRlKHZhbCk7DQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInhzZF90aW1lIikpDQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIudG9YbWxUaW1lKHZhbCk7DQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInhzZF9kYXRlVGltZSIpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0geG1sSGVscGVyLnRvWG1sRGF0ZVRpbWUodmFsKTsNCg0KICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArIEh0bWxFbmNvZGUodmFsKSArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChhY2NlcHRFbXB0eUZvcm0pDQogICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuKCkuZWFjaChwcm9jZXNzSHRtbCk7DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cihpc2VtcHR5KSA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQuYXR0cihpc2VtcHR5KSA9PSAiZmFsc2UiKQ0KICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oKS5lYWNoKHByb2Nlc3NIdG1sKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKGxheW91dFJvdykpIHsNCiAgICAgICAgICAgIGZpcnN0SW5wdXQgPSBlbGVtZW50LmNoaWxkcmVuKCJpbnB1dDpmaXJzdCIpOw0KICAgICAgICAgICAgaWYgKGZpcnN0SW5wdXQuYXR0cihuYW1lKSAhPSAnQXR0YWNobWVudHMnKSB7DQogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ2hpZGRlblNlY3Rpb24nKSkgew0KICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwvJyArIGRpc2FibGVWYWxpZGF0b3JQcmVmaXggKyBmaXJzdElucHV0LmF0dHIobmFtZSkgKyAnPic7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgeG1sICs9ICc8LycgKyBmaXJzdElucHV0LmF0dHIobmFtZSkgKyAnPic7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgJCgnI21haW4nKS5jaGlsZHJlbignZGl2JykuZWFjaChwcm9jZXNzSHRtbCk7DQoNCiAgICB4bWwgKz0gJzwvJyArIGZvcm1JZCArICc+JzsNCg0KICAgIHJldHVybiB4bWw7DQp9DQoNCnZhciB4bWxIZWxwZXIgPSAoZnVuY3Rpb24gKGhlbHBlcikgew0KICAgIHZhciB0b0RhdGVSZWdleCA9IC9eKFswLTldezEsMn0pXC4oWzAtOV17MSwyfSlcLihbMC05XXsxLDR9KSQvZywNCgkgICAgZnJvbURhdGVSZWdleCA9IC9eKFswLTldezEsNH0pXC0oWzAtOV17MSwyfSlcLShbMC05XXsxLDJ9KSQvZywNCiAgICAgICAgdG9UaW1lUmVnZXggPSAvXihbMC05XXsxLDJ9KVw6KFswLTldezEsMn0pJC9nLA0KICAgICAgICBmcm9tVGltZVJlZ2V4ID0gL14oWzAtOV17MSwyfSlcOihbMC05XXsxLDJ9KVw6KFswLTldezEsMn0pJC9nLA0KICAgICAgICB0b0RhdGVUaW1lUmVnZXggPSAvXihbMC05XXsxLDJ9KVwuKFswLTldezEsMn0pXC4oWzAtOV17MSw0fSkgKFswLTldezEsMn0pXDooWzAtOV17MSwyfSkkL2csDQoJICAgIGZyb21EYXRlVGltZVJlZ2V4ID0gL14oWzAtOV17MSw0fSlcLShbMC05XXsxLDJ9KVwtKFswLTldezEsMn0pVChbMC05XXsxLDJ9KVw6KFswLTldezEsMn0pXDooWzAtOV17MSwyfSkkL2c7DQoNCiAgICBoZWxwZXIudG9YbWxEYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgdG9EYXRlUmVnZXgubGFzdEluZGV4ID0gMDsNCiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gdG9EYXRlUmVnZXguZXhlYygkLnRyaW0odmFsdWUpKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSA0KSB7DQogICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaGVzWzNdICsgJy0nICsgbWF0Y2hlc1syXSArICctJyArIG1hdGNoZXNbMV07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdmFsdWUgfHwgJyc7DQogICAgfTsNCg0KICAgIGhlbHBlci5mcm9tWG1sRGF0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICBpZiAodmFsdWUpIHsNCiAgICAgICAgICAgIGZyb21EYXRlUmVnZXgubGFzdEluZGV4ID0gMDsNCiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gZnJvbURhdGVSZWdleC5leGVjKCQudHJpbSh2YWx1ZSkpOw0KICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDQpIHsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoZXNbM10gKyAnLicgKyBtYXRjaGVzWzJdICsgJy4nICsgbWF0Y2hlc1sxXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAnJzsNCiAgICB9Ow0KDQogICAgaGVscGVyLnRvWG1sVGltZSA9IGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICBpZiAodmFsdWUpIHsNCiAgICAgICAgICAgIHRvVGltZVJlZ2V4Lmxhc3RJbmRleCA9IDA7DQogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHRvVGltZVJlZ2V4LmV4ZWMoJC50cmltKHZhbHVlKSk7DQogICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gMykgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hlc1sxXSArICc6JyArIG1hdGNoZXNbMl0gKyAnOjAwJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB2YWx1ZSB8fCAnJzsNCiAgICB9Ow0KDQogICAgaGVscGVyLmZyb21YbWxUaW1lID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgZnJvbVRpbWVSZWdleC5sYXN0SW5kZXggPSAwOw0KICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBmcm9tVGltZVJlZ2V4LmV4ZWMoJC50cmltKHZhbHVlKSk7DQogICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA9PT0gNCkgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hlc1sxXSArICc6JyArIG1hdGNoZXNbMl07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdmFsdWUgfHwgJyc7DQogICAgfTsNCg0KICAgIGhlbHBlci50b1htbERhdGVUaW1lID0gZnVuY3Rpb24gKHZhbHVlKSB7DQogICAgICAgIGlmICh2YWx1ZSkgew0KICAgICAgICAgICAgdG9EYXRlVGltZVJlZ2V4Lmxhc3RJbmRleCA9IDA7DQogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IHRvRGF0ZVRpbWVSZWdleC5leGVjKCQudHJpbSh2YWx1ZSkpOw0KICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDYpIHsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoZXNbM10gKyAnLScgKyBtYXRjaGVzWzJdICsgJy0nICsgbWF0Y2hlc1sxXSArICdUJyArIG1hdGNoZXNbNF0gKyAnOicgKyBtYXRjaGVzWzVdICsgJzowMCc7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdmFsdWUgfHwgJyc7DQogICAgfTsNCg0KICAgIGhlbHBlci5mcm9tWG1sRGF0ZVRpbWUgPSBmdW5jdGlvbiAodmFsdWUpIHsNCiAgICAgICAgaWYgKHZhbHVlKSB7DQogICAgICAgICAgICBmcm9tRGF0ZVRpbWVSZWdleC5sYXN0SW5kZXggPSAwOw0KICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBmcm9tRGF0ZVRpbWVSZWdleC5leGVjKCQudHJpbSh2YWx1ZSkpOw0KICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPT09IDcpIHsNCiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoZXNbM10gKyAnLicgKyBtYXRjaGVzWzJdICsgJy4nICsgbWF0Y2hlc1sxXSArICcgJyArIG1hdGNoZXNbNF0gKyAnOicgKyBtYXRjaGVzWzVdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICcnOw0KICAgIH07DQoNCiAgICBoZWxwZXIuZnJvbVhtbEFueVVSSSA9IGZ1bmN0aW9uICh2YWx1ZSkgew0KICAgICAgICBpZiAodmFsdWUpIHsNCiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvbWFpbHRvOi9naSwgIiIpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHZhbHVlIHx8ICcnOw0KICAgIH07DQoNCiAgICByZXR1cm4gaGVscGVyOw0KfSh7fSkpOw0KDQpmdW5jdGlvbiBHZXRNZXRhZGF0YU5hbWVzcGFjZSgpIHsNCiAgICB2YXIgeG1sbnMgPSAnJzsNCiAgICB2YXIgbXRkTmFtZXNwYWNlID0gJCgnZm9ybScpLmZpbmQoIiNtdGRfbmFtZXNwYWNlIilbMF07DQogICAgaWYgKG10ZE5hbWVzcGFjZSAhPSB1bmRlZmluZWQpIHsNCiAgICAgICAgbXRkTmFtZXNwYWNlID0gbXRkTmFtZXNwYWNlLmlubmVySFRNTDsNCiAgICAgICAgaWYgKG10ZE5hbWVzcGFjZSAhPSB1bmRlZmluZWQgJiYgbXRkTmFtZXNwYWNlICE9IHhtbG5zKSB7DQogICAgICAgICAgICB4bWxucyA9ICIgeG1sbnM9JyIgKyBtdGROYW1lc3BhY2UgKyAiJyI7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHhtbG5zOw0KfQ0KDQpmdW5jdGlvbiBHZXRWYWx1ZVdpdGhvdXRJbmNyZW1lbnRhbCh2YWx1ZSkgew0KICAgIHZhciByZWdFeCA9IG5ldyBSZWdFeHAocmVwZWF0aW5nUG9zdGZpeCArICJcXGQrJCIpOw0KICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4LCAnJyk7DQp9DQoNCmZ1bmN0aW9uIFNob3dEYXRhKCkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgYWxlcnQoZGVjb2RlVVJJQ29tcG9uZW50KHhtbCkpOw0KfQ0KDQpmdW5jdGlvbiBTaG93RGF0YVdpdGhBdHRhY2htZW50cygpIHsNCiAgICB2YXIgeG1sID0gR2V0RGF0YSgpOw0KICAgIHZhciBmb3JtSWQgPSBHZXRGb3JtSWQoKTsNCiAgICB2YXIgeG1sV2l0aEF0dGFjaG1lbnRzID0geG1sLnJlcGxhY2UoJzwvJyArIGZvcm1JZCArICc+JywgJycpOw0KDQogICAgdmFyIGF0dGFjaG1lbnRzRGF0YSA9ICcnOw0KICAgIGZvciAodmFyIGtleSBpbiBhdHRhY2htZW50c0RhdGFBcnJheSkgew0KICAgICAgICBhdHRhY2htZW50c0RhdGEgPSBhdHRhY2htZW50c0RhdGEgKyBhdHRhY2htZW50c0RhdGFBcnJheVtrZXldOw0KICAgIH0NCg0KICAgIHhtbFdpdGhBdHRhY2htZW50cyArPSAnPEF0dGFjaG1lbnRzPicgKyBhdHRhY2htZW50c0RhdGEgKyAnPC9BdHRhY2htZW50cz4nOw0KICAgIHhtbFdpdGhBdHRhY2htZW50cyArPSAnPC8nICsgZm9ybUlkICsgJz4nOw0KDQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQogICAgcGFyZW50V2luZG93LnNldEZpbmFsWG1sKHhtbFdpdGhBdHRhY2htZW50cyk7DQp9DQoNCmZ1bmN0aW9uIFNhdmVYbWwoKSB7DQogICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oR2V0Rm9ybVN0b3JhZ2VLZXkoKSwgR2V0RGF0YSgpKTsNCiAgICB2YXIgbWVzc2FnZSA9ICcnOw0KDQogICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICBtZXNzYWdlID0gIkZvcm0gIiArICInIiArIEdldEZvcm1TdG9yYWdlS2V5KCkucmVwbGFjZSgnZWdvXycsICcnKSArICInIiArICIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHN0b3JlZCBpbiB0aGUgcmVwb3NpdG9yeSI7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgIG1lc3NhZ2UgPSAiRm9ybXVsYXIgIiArICInIiArIEdldEZvcm1TdG9yYWdlS2V5KCkucmVwbGFjZSgnZWdvXycsICcnKSArICInIiArICIgYm9sIHVzcGVzbmUgdWxvemVueSBkbyBsb2thbG5laG8gdWxvemlza2EiOw0KICAgIH0NCg0KICAgIGFsZXJ0KG1lc3NhZ2UpOw0KDQogICAgU2hvd1NhdmVkRm9ybXMoKTsNCn0NCg0KZnVuY3Rpb24gU2hvd1NhdmVkRm9ybXMoKSB7DQogICAgdmFyIHNhdmVkRm9ybXMgPSAiPHNwYW4gY2xhc3M9J2ZpZWxkQ29udGVudCc+IjsNCiAgICB2YXIgc2F2ZWRGb3Jtc0NvdW50ID0gMDsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChsb2NhbFN0b3JhZ2Uua2V5KGkpID09IEdldEZvcm1TdG9yYWdlS2V5KCkpIHsNCiAgICAgICAgICAgIHNhdmVkRm9ybXMgKz0gIjxzcGFuPiIgKyBsb2NhbFN0b3JhZ2Uua2V5KGkpLnN1YnN0cig0KSArICI8L3NwYW4+PGJyLz4iOw0KICAgICAgICAgICAgc2F2ZWRGb3Jtc0NvdW50Kys7DQogICAgICAgIH0NCiAgICB9DQogICAgc2F2ZWRGb3JtcyArPSAiPC9zcGFuPiI7DQoNCiAgICAkKCcjbGNlbGxTYXZlZEZvcm1zJykuaHRtbChzYXZlZEZvcm1zKTsNCiAgICB2YXIgZWxlbWVudCA9ICQoIiNzYXZlZEZvcm1zQ29udGFpbmVyIik7DQogICAgaWYgKHNhdmVkRm9ybXNDb3VudCA+IDApIHsNCiAgICAgICAgZWxlbWVudC5zaG93KCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBlbGVtZW50LmhpZGUoKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFByaW50Rm9ybSgpIHsNCiAgICB3aW5kb3cucHJpbnQoKTsNCn0NCg0KZnVuY3Rpb24gR2V0Rm9ybUlkKCkgew0KICAgIHJldHVybiAkKCJmb3JtOmhhcygjbWFpbikiKS5hdHRyKCJJRCIpOw0KfQ0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLyBNTCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmZ1bmN0aW9uIElzRXJyb3IoKSB7DQogICAgdmFyIGVycm9ycyA9ICQoJy5lcnJvcicpOw0KDQogICAgZm9yIChpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykgew0KICAgICAgICBpZiAoJChlcnJvcnNbaV0pLmlzKCc6dmlzaWJsZScpKQ0KICAgICAgICAgICAgcmV0dXJuIHRydWUNCiAgICB9DQoNCiAgICByZXR1cm4gZmFsc2U7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpmdW5jdGlvbiBWYWxpZGF0ZUZvcm0oKSB7DQogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8gTUwgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQogICAgZXJyb3JWYWxpZGF0ZUZvY3VzT3V0ID0gZmFsc2U7DQoNCiAgICBpZiAoJCgnIycgKyBHZXRGb3JtSWQoKSkudmFsaWQoKSkgew0KICAgICAgICAvKnN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICBhbGVydCgiQ2hlY2sgdGhlIGZvcm0gd2FzIHN1Y2Nlc3NmdWwuIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIGFsZXJ0KCJLb250cm9sYSBmb3JtdWzDoXJhIHByZWJlaGxhIMO6c3BlxaFuZS4iKTsNCiAgICAgICAgfSovDQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGVsc2UgaWYgKElzRXJyb3IoKSkgew0KICAgICAgICAvKnN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICBhbGVydCgiVGhlIGZvcm0gY29udGFpbnMgdGhlIHZhbGlkYXRpb24gZXJyb3JzLiIpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgiRm9ybXVsw6FyIG9ic2FodWplIHZhbGlkYcSNbsOpIGNoeWJ5LiIpOw0KICAgICAgICB9Ki8NCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAvKnN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICBhbGVydCgiRm9ybXVsw6FyIG9ic2FodWplIGxvZ2lja8OpIGNoeWJ5LiBOYW96YWogY2hjZXRlIHBva3JhxI1vdmHFpT8iKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgZGVmYXVsdDogLy8gc2sgYSBkZWZhdWx0DQogICAgICAgICAgICAgICAgYWxlcnQoIlRoZSBmb3JtIGNvbnRhaW5zIGEgbG9naWMgZXJyb3IuIEFyZSB5b3Ugc3VyZT8iKTsNCiAgICAgICAgfSovDQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiAgICAvL3JldHVybiAkKCcjJyArIEdldEZvcm1JZCgpKS52YWxpZCgpOw0KfQ0KDQpmdW5jdGlvbiBDbG9zZUZvcm0oZmlsbGVyVXJpKSB7DQogICAgdmFyIHhtbCA9IEdldERhdGEoKTsNCiAgICB2YXIgcGFyZW50V2luZG93ID0gd2luZG93Lm9wZW5lcjsNCg0KICAgIHRyeSB7DQogICAgICAgIHZhciBmb3JtSWQgPSBwYXJlbnRXaW5kb3cuZ2V0Rm9ybUlkKCk7DQogICAgICAgIHZhciBlRG9jID0gVHJhbnNsYXRlTmF0aXZlVG9FRG9jKHhtbCwgZmlsbGVyVXJpICsgIlRyYW5zbGF0ZU5hdGl2ZVRvRURvYyIsIGZvcm1JZCk7DQoNCiAgICAgICAgcGFyZW50V2luZG93LnNldFhtbERhdGEoZURvYyk7DQoNCiAgICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICBhbGVydCgnd29ya2Rlc2sgd2FzIGNsb3NlZCcpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgnd29ya2Rlc2sgYm9sIHV6YXZyZXTDvScpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBDYW5jZWxGb3JtKCkgew0KICAgIHdpbmRvdy5jbG9zZSgpOw0KfQ0KDQpmdW5jdGlvbiBTYXZlQW5kQ2xvc2VGb3JtKGZpbGxlclVyaSkgew0KICAgIHZhciBmb3JtID0gJCgnIycgKyBHZXRGb3JtSWQoKSk7DQogICAgdmFyICR2YWxpZGF0b3IgPSBmb3JtLnZhbGlkYXRlKCk7DQogICAgdmFyIGNvbmZpcm1UZXh0ID0gJyc7DQoNCiAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgIGNvbmZpcm1UZXh0ID0gIlRoZSBmb3JtIGNvbnRhaW5zIGVycm9ycy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNhdmU/IjsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgY29uZmlybVRleHQgPSAiRm9ybXVsw6FyIG9ic2FodWplIGNoeWJ5LiBOYW96YWogaG8gY2hjZXRlIHVsb8W+acWlPyI7DQogICAgfQ0KDQogICAgVmFsaWRhdGVGb3JtKGZvcm0pOw0KDQogICAgaWYgKCR2YWxpZGF0b3IubnVtYmVyT2ZJbnZhbGlkcygpID4gMCkgew0KICAgICAgICBpZiAoY29uZmlybShjb25maXJtVGV4dCkpIHsNCiAgICAgICAgICAgIENsb3NlRm9ybShmaWxsZXJVcmkpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICBDbG9zZUZvcm0oZmlsbGVyVXJpKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEdldEF0dGFjaG1lbnRzKCkgew0KICAgIHZhciBmaWxlcyA9ICQoJ2lucHV0W3R5cGU9ImZpbGUiXScpWzBdLmZpbGVzOw0KICAgIHZhciBhdHRhY2hlbWVudHMgPSAiIjsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGF0dGFjaGVtZW50cyArPSBmaWxlc1tpXS5uYW1lICsgIjxici8+IjsNCiAgICB9DQoNCiAgICByZXR1cm4gYXR0YWNoZW1lbnRzOw0KfQ0KDQpmdW5jdGlvbiBDbGVhckZvcm0oZWxlbWVudCkgew0KICAgICQoZWxlbWVudCkuZmluZCgnOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7DQogICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6DQogICAgICAgICAgICBjYXNlICdzZWxlY3QtbXVsdGlwbGUnOg0KICAgICAgICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6DQogICAgICAgICAgICBjYXNlICd0ZXh0JzoNCiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzoNCiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdjaGVja2JveCc6DQogICAgICAgICAgICBjYXNlICdyYWRpbyc6DQogICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7DQogICAgICAgIH0NCiAgICB9KTsNCn0NCg0KZnVuY3Rpb24gR2V0Rm9ybVN0b3JhZ2VLZXkoKSB7DQogICAgdmFyIGZvcm1JZCA9IEdldEZvcm1JZCgpOw0KICAgIHJldHVybiAnZWdvXycgKyBmb3JtSWQ7DQp9DQoNCmZ1bmN0aW9uIEhhbmRsZUZpbGVTZWxlY3QoZXZ0KSB7DQogICAgdmFyIGZpbGVzID0gZXZ0LnRhcmdldC5maWxlczsNCg0KICAgIGZvciAodmFyIGkgPSAwLCBmOyBmID0gZmlsZXNbaV07IGkrKykgew0KICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsNCg0KICAgICAgICByZWFkZXIub25sb2FkID0gKGZ1bmN0aW9uICh0aGVGaWxlKSB7DQogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICBhdHRhY2htZW50c0RhdGFBcnJheVtldnQudGFyZ2V0LmlkXSA9ICc8QXR0YWNobWVudD48TmFtZT4nICsgdGhlRmlsZS5uYW1lICsgJzwvTmFtZT48VHlwZT4nICsgdGhlRmlsZS50eXBlDQogICAgICAgICAgICAgICAgICAgICsgJzwvVHlwZT48U2l6ZT4nICsgdGhlRmlsZS5zaXplICsgJzwvU2l6ZT4nICsgJzxDb250ZW50PicgKyBlLnRhcmdldC5yZXN1bHQgKyAnPC9Db250ZW50PjwvQXR0YWNobWVudD4nOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSkoZmlsZXNbMF0pOw0KDQogICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVzWzBdKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFdyYXBYbWxEYXRhKHhtbCkgew0KICAgIHJldHVybiAiPEZvcm1EYXRhWG1sPjxYbWxEYXRhPiIgKyB4bWwgKyAiPC9YbWxEYXRhPjwvRm9ybURhdGFYbWw+IjsNCn0NCg0KZnVuY3Rpb24gVHJhbnNsYXRlTmF0aXZlVG9FRG9jKHhtbCwgdXJsLCBmb3JtSWQpIHsNCiAgICB2YXIgZm9ybURhdGFYbWwgPSBXcmFwWG1sRGF0YSh4bWwpOw0KICAgIHZhciBmb3JtRGF0YSA9ICd7IkZvcm1JZCI6ICInICsgZm9ybUlkICsgJyIsICJGb3JtRGF0YVhtbCI6ICInICsgZm9ybURhdGFYbWwgKyAnIn0nOw0KDQogICAgdmFyIGNvbnRlbnRUeXBlID0gImFwcGxpY2F0aW9uL2pzb24iOw0KDQogICAgdmFyIGVEb2MgPSAiIjsNCiAgICAkLmFqYXgoew0KICAgICAgICB0eXBlOiAnUE9TVCcsDQogICAgICAgIHVybDogdXJsLA0KICAgICAgICBkYXRhOiBmb3JtRGF0YSwNCiAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7DQogICAgICAgICAgICBlRG9jID0gcmVzdWx0Ow0KICAgICAgICB9LA0KICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3VsdCkgew0KICAgICAgICAgICAgYWxlcnQocmVzdWx0KTsNCiAgICAgICAgfSwNCiAgICAgICAgYXN5bmM6IGZhbHNlDQogICAgfSk7DQoNCiAgICByZXR1cm4gZURvYy5Db250ZW50Ow0KfQ0KDQpmdW5jdGlvbiBWYWxpZGF0ZUZvcm1XaXRoWHNkKGZpbGxlclVyaSkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgZm9ybUlkID0gcGFyZW50V2luZG93LmdldEZvcm1JZCgpOw0KICAgICAgICB2YXIgdmFsUmVzID0gQ2FsbFZhbGlkYXRlRm9ybVdpdGhYc2QoeG1sLCBmaWxsZXJVcmkgKyAiVmFsaWRhdGVGb3JtV2l0aFhzZCIsIGZvcm1JZCk7DQoNCiAgICAgICAgU2hvd1ZhbGlkYXRpb25SZXN1bHQodmFsUmVzLCAieHNkVmFsaWRhdGlvbiIpOw0KDQogICAgfSBjYXRjaCAoZXJyKSB7DQogICAgICAgIGFsZXJ0KGVycik7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBWYWxpZGF0ZUZvcm1XaXRoU2VydmVyKGZpbGxlclVyaSkgew0KICAgIHZhciB4bWwgPSBHZXREYXRhKCk7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgZm9ybUlkID0gcGFyZW50V2luZG93LmdldEZvcm1JZCgpOw0KICAgICAgICB2YXIgdmFsUmVzID0gQ2FsbFZhbGlkYXRlRm9ybVdpdGhTZXJ2ZXIoeG1sLCBmaWxsZXJVcmkgKyAiVmFsaWRhdGVGb3JtIiwgZm9ybUlkKTsNCg0KICAgICAgICBTaG93VmFsaWRhdGlvblJlc3VsdCh2YWxSZXMsICJzZXJ2ZXJWYWxpZGF0aW9uIik7DQoNCiAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgYWxlcnQoZXJyKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIFNob3dWYWxpZGF0aW9uUmVzdWx0KHJlc3VsdCwgdmFsaWRhdGlvblR5cGUpIHsNCiAgICB2YXIgdmFsaWQgPSB0cnVlOw0KICAgIHZhciByZXN1bHRYTUwgPSAkLnBhcnNlWE1MKHJlc3VsdCksDQogICAgcmVzdWx0WE1MVHJhdmVyc2FibGUgPSAkKHJlc3VsdFhNTCk7DQogICAgdmFyIHJlc3BvbnNlQ29kZSA9IHJlc3VsdFhNTFRyYXZlcnNhYmxlLmZpbmQoInJlc3BvbnNlID4gY29kZSIpLnRleHQoKTsNCiAgICB2YXIgcmVzcG9uc2VFcnJvcnMgPSByZXN1bHRYTUxUcmF2ZXJzYWJsZS5maW5kKCJyZXNwb25zZSA+IGVycm9ycyA+IGVycm9yIik7DQogICAgdmFyIHJlc3BvbnNlWHNsdEVycm9ycyA9IHJlc3VsdFhNTFRyYXZlcnNhYmxlLmZpbmQoInJlc3BvbnNlID4gZXJyb3JzID4geHNsdEVycm9yIik7DQogICAgdmFyIGxvY2FsRXJyb3JzID0gbmV3IEFycmF5KCk7DQogICAgdmFyIG9rID0gIm9rIjsNCiAgICB2YWxpZGF0b3JPYmplY3QucmVzZXRGb3JtKCk7DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlID09IG9rICYmIHJlc3BvbnNlRXJyb3JzLmxlbmd0aCA9PSAwICYmIHJlc3BvbnNlWHNsdEVycm9ycy5sZW5ndGggPT0gMCkgew0KICAgICAgICB2YWxpZGF0b3JPYmplY3QucmVzZXRGb3JtKCk7DQogICAgICAgIHN0YXR1c0RpYWxvZy5oaWRlUHJvZ3Jlc3MoKTsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6IHsNCiAgICAgICAgICAgICAgICBzdGF0dXNEaWFsb2cuc2V0TWVzc2FnZSh2YWxpZGF0aW9uVHlwZSA9PT0gInhzZFZhbGlkYXRpb24iID8gIlRoZSBmb3JtIGlzIHZhbGlkIGFnYWluc3QgWFNEIHNjaGVtYS4iIDogIlRoZSBmb3JtIGlzIHZhbGlkLiIpOw0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRPcHRpb25zKHsgImJ1dHRvbnMiOiB7ICJPayI6IGZ1bmN0aW9uICgpIHsgc3RhdHVzRGlhbG9nLmhpZGVEaWFsb2coKTsgfSB9IH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiB7IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRNZXNzYWdlKHZhbGlkYXRpb25UeXBlID09PSAieHNkVmFsaWRhdGlvbiIgPyAiRm9ybXVsw6FyIGplIHZhbGlkbsO9IHZvxI1pIFhTRCBzY2jDqW1lLiIgOiAiRm9ybXVsw6FyIGplIHZhbGlkbsO9LiIpOw0KICAgICAgICAgICAgICAgIHN0YXR1c0RpYWxvZy5zZXRPcHRpb25zKHsgImJ1dHRvbnMiOiB7ICJPayI6IGZ1bmN0aW9uICgpIHsgc3RhdHVzRGlhbG9nLmhpZGVEaWFsb2coKTsgfSB9IH0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICBzdGF0dXNEaWFsb2cuc2hvd0RpYWxvZygpOw0KICAgIH0NCg0KICAgIHZhciB2YWxNc2cgPSBuZXcgT2JqZWN0Ow0KICAgIHJlc3BvbnNlRXJyb3JzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7DQogICAgICAgIGlmICghQWRkVmFsaWRhdGlvbk1lc3NhZ2UoaW5kZXgsIGl0ZW0sIHZhbE1zZykpIHsNCiAgICAgICAgICAgIGxvY2FsRXJyb3JzLnB1c2goJChpdGVtKS50ZXh0KCkpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlICE9IG9rIHx8IHJlc3BvbnNlRXJyb3JzLmxlbmd0aCAhPSAwKSB7DQogICAgICAgIHZhbGlkID0gZmFsc2U7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zZXR0aW5ncy5vbmZvY3Vzb3V0ID0gZmFsc2U7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5zaG93RXJyb3JzKHZhbE1zZyk7DQogICAgICAgIHZhbGlkYXRvck9iamVjdC5mb2N1c0ludmFsaWQoKTsNCiAgICB9DQoNCiAgICBpZiAocmVzcG9uc2VDb2RlICE9IG9rIHx8IHJlc3BvbnNlWHNsdEVycm9ycy5sZW5ndGggIT0gMCB8fCBsb2NhbEVycm9ycy5sZW5ndGggIT0gMCkgew0KICAgICAgICB2YWxpZCA9IGZhbHNlOw0KICAgICAgICB2YXIgeHNsdEVycm9yRGl2ID0gJCgiI3hzbHRFcnJvckNvbnRhaW5lciIpOw0KDQogICAgICAgIGlmICgheHNsdEVycm9yRGl2Lmxlbmd0aCkgew0KICAgICAgICAgICAgJCgnI2Vycm9yc0NvbnRhaW5lckRpdicpLmFmdGVyKCc8ZGl2IGlkPSJ4c2x0RXJyb3JDb250YWluZXIiPjwvZGl2PicpOw0KICAgICAgICAgICAgeHNsdEVycm9yRGl2ID0gJCgiI3hzbHRFcnJvckNvbnRhaW5lciIpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgeHNsdEVycm9yRGl2LmVtcHR5KCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXNwb25zZVhzbHRFcnJvcnMuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQoaXRlbSk7DQogICAgICAgICAgICB4c2x0RXJyb3JEaXYuYXBwZW5kKCc8bGk+JyArIGlucHV0LnRleHQoKSArICc8L2xpPicpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2FsRXJyb3JzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB4c2x0RXJyb3JEaXYuYXBwZW5kKCc8bGk+JyArIGxvY2FsRXJyb3JzW2ldICsgJzwvbGk+Jyk7DQogICAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHZhciB4c2x0RXJyb3JEaXYgPSAkKCcjeHNsdEVycm9yQ29udGFpbmVyJyk7DQogICAgICAgIGlmICh4c2x0RXJyb3JEaXYubGVuZ3RoKSB7DQogICAgICAgICAgICB4c2x0RXJyb3JEaXYucmVtb3ZlKCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHZhbGlkOw0KfQ0KDQpmdW5jdGlvbiBDYWxsVmFsaWRhdGVGb3JtV2l0aFhzZCh4bWwsIHVybCwgZm9ybUlkKSB7DQogICAgdmFyIGZvcm1EYXRhWG1sID0gV3JhcFhtbERhdGEoeG1sKTsNCiAgICB2YXIgZm9ybURhdGEgPSAneyJGb3JtSWQiOiAiJyArIGZvcm1JZCArICciLCAiRm9ybURhdGFYbWwiOiAiJyArIGZvcm1EYXRhWG1sICsgJyJ9JzsNCg0KICAgIHZhciBjb250ZW50VHlwZSA9ICJhcHBsaWNhdGlvbi9qc29uIjsNCg0KICAgIHZhciByZXNwb25zZSA9ICIiOw0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICdQT1NUJywNCiAgICAgICAgdXJsOiB1cmwsDQogICAgICAgIGRhdGE6IGZvcm1EYXRhLA0KICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUsDQogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXN1bHQpIHsNCiAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzdWx0Ow0KICAgICAgICB9LA0KICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHJlc3VsdCkgew0KICAgICAgICAgICAgYWxlcnQocmVzdWx0KTsNCiAgICAgICAgfSwNCiAgICAgICAgYXN5bmM6IGZhbHNlDQogICAgfSk7DQoNCiAgICByZXR1cm4gcmVzcG9uc2UuRGV0YWlsczsNCn0NCg0KZnVuY3Rpb24gQ2FsbFZhbGlkYXRlRm9ybVdpdGhTZXJ2ZXIoeG1sLCB1cmwsIGZvcm1JZCkgew0KICAgIHZhciBmb3JtRGF0YVhtbCA9IFdyYXBYbWxEYXRhKHhtbCk7DQogICAgdmFyIGZvcm1EYXRhID0gJ3siRm9ybUlkIjogIicgKyBmb3JtSWQgKyAnIiwgIkZvcm1EYXRhWG1sIjogIicgKyBmb3JtRGF0YVhtbCArICcifSc7DQoNCiAgICB2YXIgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbiI7DQoNCiAgICB2YXIgcmVzcG9uc2UgPSAiIjsNCiAgICAkLmFqYXgoew0KICAgICAgICB0eXBlOiAnUE9TVCcsDQogICAgICAgIHVybDogdXJsLA0KICAgICAgICBkYXRhOiBmb3JtRGF0YSwNCiAgICAgICAgY29udGVudFR5cGU6IGNvbnRlbnRUeXBlLA0KICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzdWx0KSB7DQogICAgICAgICAgICByZXNwb25zZSA9IHJlc3VsdDsNCiAgICAgICAgfSwNCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXN1bHQpIHsNCiAgICAgICAgICAgIGFsZXJ0KHJlc3VsdCk7DQogICAgICAgIH0sDQogICAgICAgIGFzeW5jOiBmYWxzZQ0KICAgIH0pOw0KDQogICAgcmV0dXJuIHJlc3BvbnNlLkNvbnRlbnQ7DQp9DQoNCmZ1bmN0aW9uIEdldENvbmZpZ3VyYXRpb25WYWx1ZShrZXksIHVybCwgY2FsbGJhY2tOYW1lKSB7DQogICAgdmFyIHBhcmVudFdpbmRvdyA9IHdpbmRvdy5vcGVuZXI7DQogICAgdHJ5IHsNCiAgICAgICAgdmFyIGZvcm1JZCA9IHBhcmVudFdpbmRvdy5nZXRGb3JtSWQoKTsNCiAgICAgICAgdmFyIHZhbHVlcyA9ICJDb25maWd1cmF0aW9uS2V5PSIgKyBrZXkgKyAiJkZvcm1JZD0iICsgZm9ybUlkOw0KICAgICAgICB2YXIgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vanNvbiI7DQoNCiAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29ucCIsDQogICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGUsDQogICAgICAgICAgICBkYXRhOiB2YWx1ZXMsDQogICAgICAgICAgICBqc29ucENhbGxiYWNrOiBjYWxsYmFja05hbWUsDQogICAgICAgICAgICBqc29ucDogJ2NhbGxiYWNrJw0KICAgICAgICB9KTsNCiAgICB9IGNhdGNoIChlcnIpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayB3YXMgY2xvc2VkJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIGFsZXJ0KCd3b3JrZGVzayBib2wgdXphdnJldMO9Jyk7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIEh0bWxFbmNvZGUodmFsdWUpIHsNCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgew0KICAgICAgICByZXR1cm4gdmFsdWU7DQogICAgfQ0KDQogICAgdmFsdWUgPSAkKCc8ZGl2Lz4nKS50ZXh0KHZhbHVlKS5odG1sKCk7DQogICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8mbmJzcDsvZywgIiYjMTYwOyIpOw0KDQogICAgdmFyIGNvZGluZyA9IEFycmF5KCk7DQoNCiAgICBjb2RpbmdbJzkyJ10gPSAnIzkyJzsNCiAgICBjb2RpbmdbJzEwJ10gPSAnIzEwJzsNCiAgICBjb2RpbmdbJzM0J10gPSAncXVvdCc7DQogICAgdmFyIGZpbmFsVGV4dCA9ICIiOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGggOyBpKyspIHsNCiAgICAgICAgdmFyIGNoYXIgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpOw0KICAgICAgICB2YXIgY2hhcmFjdGVycyA9IHZhbHVlLmNoYXJBdChpKTsNCg0KICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29kaW5nKSB7DQogICAgICAgICAgICBpZiAoa2V5ID09IGNoYXIpIHsNCiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzID0gJyYnICsgY29kaW5nW2NoYXJdICsgJzsnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgZmluYWxUZXh0ICs9IGNoYXJhY3RlcnM7DQogICAgfQ0KDQogICAgcmV0dXJuIGZpbmFsVGV4dDsNCn0NCg0KZnVuY3Rpb24gRGlzYWJsZUZvcm0oKSB7ICQoJ2Zvcm0gOmlucHV0JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsgfQ0KDQpmdW5jdGlvbiBFbmFibGVGb3JtKCkgew0KICAgICQoJ2Zvcm0gOmlucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpbnB1dCA9ICQodGhpcyk7DQogICAgICAgIGlmIChpbnB1dC5hdHRyKCdpc1JlYWRvbmx5JykgPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQoNCmZ1bmN0aW9uIFNhdmVYbWxBcygpIHsNCiAgICB0cnkgew0KICAgICAgICB2YXIgeG1sID0gR2V0RGF0YSgpOw0KICAgICAgICB2YXIgZmlsZU5hbWUgPSBHZXRGb3JtSWQoKSArICIueG1sIjsNCiAgICAgICAgdGhpcy5TYXZlVG9GaWxlKHhtbCwgJ3RleHQveG1sJywgZmlsZU5hbWUpOw0KICAgIH0NCiAgICBjYXRjaCAoZXhjKSB7DQogICAgICAgIGFsZXJ0KGV4Yyk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBTYXZlVG9GaWxlKGNvbnRlbnQsIHR5cGUsIGZpbGVuYW1lKSB7DQogICAgaWYgKHdpbmRvdy5CbG9iID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkJsb2IpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIHRocm93ICJTYXZlIHRoaXMgYnJvd3NlciBpcyBub3Qgc3VwcG9ydGVkLCB1c2UgYSBuZXdlciBicm93c2VyIHZlcnNpb24iOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICB0aHJvdyAiVWtsYWRhbmllIHYgdG9tdG8gcHJlaGxpYWRhxI1pIG5pZSBqZSBwb2Rwb3JvdmFuw6ksIHBvdcW+aXRlIG5vdsWhaXUgdmVyeml1IHByZWhsaWFkYcSNYSI7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0cnkgew0KICAgICAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtjb250ZW50XSwgeyB0eXBlOiB0eXBlIH0pOw0KICAgICAgICAkLnNhdmVBcyhibG9iLCBmaWxlbmFtZSk7DQogICAgfQ0KICAgIGNhdGNoIChleGMpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIHRocm93ICJFcnJvciBzYXZpbmcgdGhlIGZpbGUgdG8gZGlzayI7DQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHRocm93ICJDaHliYSBwcmkgdWtsYWRhbsOtIHPDumJvcnUgbmEgZGlzayI7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZ1bmN0aW9uIExvYWRGcm9tRmlsZSgpIHsNCiAgICBpZiAoIXdpbmRvdy5GaWxlUmVhZGVyKSB7DQogICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICB0aHJvdyAiVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLCB1c2UgYSBuZXdlciBicm93c2VyIHZlcnNpb24iDQoNCiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHRocm93ICJUw6F0byBmdW5rY2lvbmFsaXRhIG5pZSBqZSBwb2Rwb3JvdmFuw6EgdiB0b210byBwcmVobGlhZGHEjWksIHBvdcW+aXRlIG5vdsWhaXUgdmVyeml1IHByZWhsaWFkYcSNYSINCiAgICAgICAgfQ0KICAgIH0NCiAgICB2YXIgY29udGVudCA9ICQoIiNmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ciKTsNCiAgICB2YXIgZXhpc3QgPSB0cnVlOw0KDQogICAgaWYgKGNvbnRlbnQubGVuZ3RoID09IDApIHsNCiAgICAgICAgZXhpc3QgPSBmYWxzZTsNCiAgICAgICAgdmFyIGZpbGUgPSAkKCc8aW5wdXQgdHlwZT0iZmlsZSIgaWQ9ImZvcm0tYnV0dG9ucy1pbnB1dC1maWxlIi8+Jyk7DQogICAgICAgIHZhciBzdWJtaXQgPSAnJzsNCg0KICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICBjYXNlICdlbic6IHsNCiAgICAgICAgICAgICAgICBzdWJtaXQgPSAkKCc8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ctY29uZmlybSIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmwiIHZhbHVlPSJMb2FkIGZpbGUiIGlkPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ctY29uZmlybSIgZGlzYWJsZWQgPSAiZGlzYWJsZWQiIC8+Jyk7DQogICAgICAgICAgICAgICAgY29udGVudCA9ICQoJzxkaXYgaWQ9ImZvcm0tYnV0dG9ucy1sb2FkLWRpYWxvZyIgLz4nKS5hdHRyKCd0aXRsZScsICJTZWxlY3QgdGhlIHhtbCBmaWxlIikuYXBwZW5kKGZpbGUpLmFwcGVuZChzdWJtaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiB7IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgIHN1Ym1pdCA9ICQoJzxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImZvcm0tYnV0dG9ucy1sb2FkLWRpYWxvZy1jb25maXJtIiBjbGFzcz0iYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubCIgdmFsdWU9Ik5haHJhxaUgc8O6Ym9yIiBpZD0iZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0iIGRpc2FibGVkID0gImRpc2FibGVkIiAvPicpOw0KICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAkKCc8ZGl2IGlkPSJmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2ciIC8+JykuYXR0cigndGl0bGUnLCAiVnliZXJ0ZSB4bWwgc8O6Ym9yIikuYXBwZW5kKGZpbGUpLmFwcGVuZChzdWJtaXQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICBzdWJtaXQuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIGRpYWxvZyA9ICQoJyNmb3JtLWJ1dHRvbnMtbG9hZC1kaWFsb2cnKTsNCiAgICAgICAgICAgIHZhciBpbnB1dCA9ICQoJ2lucHV0OmZpbGUnLCBkaWFsb2cpWzBdOw0KICAgICAgICAgICAgdmFyIGN1cnJlbnRGaWxlID0gaW5wdXQuZmlsZXNbMF07DQoNCiAgICAgICAgICAgIGlmIChjdXJyZW50RmlsZSkgew0KICAgICAgICAgICAgICAgIGlmICghY3VycmVudEZpbGUubmFtZS5tYXRjaCgvXi4qXC54bWwkL2kpKSB7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnSW5jb3JyZWN0IGZpbGUgZm9ybWF0LicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnTmVzcHLDoXZueSBmb3Jtw6F0IHPDumJvcnUuJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50RmlsZS5zaXplID4gMTUgKiAxMDI0ICogMTAyNCkgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKEdldEZvcm1MYW5ndWFnZSgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ1RoZSBmaWxlIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAxNU1CLicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgnU8O6Ym9yIG5lc21pZSBiecWlIHbDpMSNxaHDrSBha28gMTVNQi4nKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIExvYWRYbWxGcm9tSW5wdXQoY3VycmVudEZpbGUpOw0KICAgICAgICB9KTsNCg0KICAgICAgICBmaWxlLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICBpZiAoJChlLnRhcmdldCkudmFsKCkpIHsNCiAgICAgICAgICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nLWNvbmZpcm0nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAkKCcjJyArIEdldEZvcm1JZCgpKS5hcHBlbmQoY29udGVudCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAkKCIjZm9ybS1idXR0b25zLWlucHV0LWZpbGUiKS52YWwoJycpOw0KICAgIH0NCg0KICAgIGNvbnRlbnQuZGlhbG9nKHsNCiAgICAgICAgYXV0b09wZW46IGZhbHNlLA0KICAgICAgICBtb2RhbDogdHJ1ZSwNCiAgICAgICAgd2lkdGg6IDUwMA0KICAgIH0pOw0KDQogICAgaWYgKCFleGlzdCkgew0KICAgICAgICAkKCcjZm9ybS1idXR0b25zLWxvYWQtZGlhbG9nJykuY2xvc2VzdCgiLnVpLWRpYWxvZyIpLmFkZENsYXNzKCJsb2FkLWRpYWxvZyIpOw0KICAgIH0NCg0KICAgIGNvbnRlbnQuZGlhbG9nKCdvcGVuJyk7DQp9DQoNCmZ1bmN0aW9uIExvYWRYbWxGcm9tSW5wdXQoZmlsZSkgew0KICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOw0KICAgIHZhciByZWFkZXJIZWxwID0gbmV3IEZpbGVSZWFkZXIoKTsNCiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHZhciB4bWxEb2MgPSAkLnBhcnNlWE1MKGUudGFyZ2V0LnJlc3VsdCk7DQogICAgICAgICAgICB2YXIgaW5kZXhlcyA9IEFycmF5KCk7DQogICAgICAgICAgICB2YXIgbm9kZVdpdGhDb250YWlucyA9IG5ldyBBcnJheSgpOw0KICAgICAgICAgICAgdmFyIGVtcHR5TmF0aXZlVGVtcGxhdGUgPSBHZXRFbXB0eU5hdGl2ZVRlbXBsYXRlKCk7DQogICAgICAgICAgICB2YXIgZW1wdHlOYXRpdmVUZW1wbGF0ZURvYyA9ICQucGFyc2VYTUwoZW1wdHlOYXRpdmVUZW1wbGF0ZSk7DQogICAgICAgICAgICBBZGRNaXNzaW5nRWxlbWVudHMoeG1sRG9jLmNoaWxkTm9kZXNbMF0sIGVtcHR5TmF0aXZlVGVtcGxhdGVEb2MuY2hpbGROb2Rlc1swXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICBMb2FkWG1sKHhtbERvYy5jaGlsZE5vZGVzWzBdLCBpbmRleGVzKTsNCg0KICAgICAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2VuJzoNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ0ZpbGxpbmcgdGhlIGZvcm0gd2FzIHN1Y2Nlc3NmdWwnKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ05hcGxuZW5pZSBmb3JtdWzDoXJhIGJvbG8gw7pzcGXFoW7DqScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChleGMpIHsNCiAgICAgICAgICAgIHN3aXRjaCAoR2V0Rm9ybUxhbmd1YWdlKCkpIHsNCiAgICAgICAgICAgICAgICBjYXNlICdlbic6DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdGaWxsaW5nIHRoZSBmb3JtIGhhcyBiZWVuIHVuc3VjY2Vzc2Z1bCcpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHNrIGEgZGVmYXVsdA0KICAgICAgICAgICAgICAgICAgICBhbGVydCgnTmFwbG5lbmllIGZvcm11bMOhcmEgYm9sbyBuZcO6c3BlxaFuw6knKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH07DQoNCiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCdDb3VsZCBub3QgcmVhZCBmaWxlLicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgnTmVwb2RhcmlsbyBzYSBwcmXEjcOtdGHFpSBzw7pib3IuJyk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgcmVhZGVySGVscC5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICBpZiAoZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJJU08tODg1OS0yXCIiKSA+IDAgfHwgZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJpc28tODg1OS0yXCIiKSA+IDAgfHwgZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJJc28tODg1OS0yXCIiKSA+IDApIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdJU08tODg1OS0yJyk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoZS50YXJnZXQucmVzdWx0LnNlYXJjaCgiZW5jb2Rpbmc9XCJXSU5ET1dTLTEyNTBcIiIpID4gMCB8fCBlLnRhcmdldC5yZXN1bHQuc2VhcmNoKCJlbmNvZGluZz1cIldpbmRvd3MtMTI1MFwiIikgPiAwIHx8IGUudGFyZ2V0LnJlc3VsdC5zZWFyY2goImVuY29kaW5nPVwid2luZG93cy0xMjUwXCIiKSA+IDApIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUsICdXaW5kb3dzLTEyNTAnKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOw0KICAgICAgICB9DQogICAgfTsNCg0KICAgIHJlYWRlckhlbHAub25lcnJvciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgc3dpdGNoIChHZXRGb3JtTGFuZ3VhZ2UoKSkgew0KICAgICAgICAgICAgY2FzZSAnZW4nOg0KICAgICAgICAgICAgICAgIGFsZXJ0KCdDb3VsZCBub3QgcmVhZCBmaWxlLicpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBkZWZhdWx0OiAvLyBzayBhIGRlZmF1bHQNCiAgICAgICAgICAgICAgICBhbGVydCgnTmVwb2RhcmlsbyBzYSBwcmXEjcOtdGHFpSBzw7pib3IuJyk7DQogICAgICAgIH0NCiAgICB9Ow0KDQogICAgcmVhZGVySGVscC5yZWFkQXNUZXh0KGZpbGUpOw0KfQ0KDQpmdW5jdGlvbiBHZXRGaWVsZE5vZGUobm9kZSkgew0KICAgIGlmIChub2RlID09IG51bGwpIHsNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KDQogICAgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzW2tdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzW2tdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIG51bGw7DQp9DQoNCmZ1bmN0aW9uIExvYWRYbWwocm9vdE5vZGUsIGluZGV4ZXMpIHsNCg0KICAgIGZ1bmN0aW9uIElzRW1wdHkobm9kZSkgew0KICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAiI3RleHQiKSB7DQogICAgICAgICAgICBpZiAobm9kZS5ub2RlVmFsdWUgIT0gbnVsbCB8fCBub2RlLm5vZGVWYWx1ZSAhPT0gIiIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBJc0VtcHR5KG5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICB2YXIgbGFzdE5vZGUgPSBudWxsOw0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQoNCiAgICAgICAgdmFyIG5vZGUgPSByb290Tm9kZS5jaGlsZE5vZGVzW2ldOw0KDQogICAgICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7DQogICAgICAgIG5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSgiRG9Ob3RWYWxpZGF0ZV8iLCAiIik7DQoNCiAgICAgICAgdmFyIGZpZWxkTm9kZSA9IEdldEZpZWxkTm9kZShub2RlKTsNCiAgICAgICAgdmFyIGxhc3RGaWVsZE5vZGUgPSBHZXRGaWVsZE5vZGUobGFzdE5vZGUpOw0KDQogICAgICAgIGlmIChpbmRleGVzW25vZGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbmRleGVzW25vZGVOYW1lXSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAvL2FrIHN1IG9iYSBmaWVsZG5vZHkgYSBtYWp1IHJvdm5ha3kgbmFtZSwgdGFrIHNhIG5lYnVkZSB6dnlzb3ZhdCwgbGVibyBzYSBidWRlIGplZG5hdCBvIG11bHRpIHBydm9rDQogICAgICAgICAgICBpZiAoZmllbGROb2RlID09IG51bGwgfHwgbGFzdEZpZWxkTm9kZSA9PSBudWxsIHx8IGZpZWxkTm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lICE9IGxhc3RGaWVsZE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSkgew0KICAgICAgICAgICAgICAgIGluZGV4ZXNbbm9kZU5hbWVdKys7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBsYXN0Tm9kZSA9IG5vZGU7DQoNCiAgICAgICAgaWYgKGZpZWxkTm9kZSA9PSBudWxsKSB7DQogICAgICAgICAgICB2YXIgYWxsTGF5b3V0Um93cyA9ICQoJ2RpdltpZF49bGF5b3V0Um93XScpOw0KICAgICAgICAgICAgdmFyIHJlcGVhdGluZ0luZGV4ID0gaW5kZXhlc1tub2RlTmFtZV07DQogICAgICAgICAgICB2YXIgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSByZXBlYXRpbmdJbmRleDsNCiAgICAgICAgICAgIGlmIChyZXBlYXRpbmdJbmRleCA9PSAwKSB7DQogICAgICAgICAgICAgICAgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSAnJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHJlcGVhdGluZ1Bvc3RmaXhUZXh0ID0gcmVwZWF0aW5nUG9zdGZpeCArIHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgZm91bmRTZWN0aW9uID0gbnVsbDsNCiAgICAgICAgICAgIHZhciBsYXlvdXRSb3dJRCA9IG51bGw7DQoNCiAgICAgICAgICAgIGFsbExheW91dFJvd3MuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdmFyIGxheW91dFJvdyA9ICQodGhpcyk7DQogICAgICAgICAgICAgICAgaWYgKGxheW91dFJvdy5maW5kKCdbbmFtZT0nICsgbm9kZU5hbWUgKyAnXScpLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dFJvd1Bvc3RmaXggPSBsYXlvdXRSb3cuYXR0cignaWQnKS5yZXBsYWNlKEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKGxheW91dFJvdy5hdHRyKCdpZCcpKSwgIiIpOw0KICAgICAgICAgICAgICAgICAgICBsYXlvdXRSb3dJRCA9IGxheW91dFJvdy5hdHRyKCdpZCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAobGF5b3V0Um93UG9zdGZpeCA9PSByZXBlYXRpbmdQb3N0Zml4VGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTZWN0aW9uID0gbGF5b3V0Um93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGlmICgoZm91bmRTZWN0aW9uID09IG51bGwgfHwgKGZvdW5kU2VjdGlvbi5hdHRyKCJpc2VtcHR5IikgPT0gInRydWUiKSAmJiAhSXNFbXB0eShub2RlKSkgJiYgbGF5b3V0Um93SUQgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIHZhciBsYXlvdXRSb3dJRFdpdGhvdXRJbmNyZW1lbnRhbCA9IEdldFZhbHVlV2l0aG91dEluY3JlbWVudGFsKGxheW91dFJvd0lEKTsNCiAgICAgICAgICAgICAgICB2YXIgYWRkQnV0dG9uID0gJCgnZGl2W2lkXj0nICsgbGF5b3V0Um93SUQgKyAnXScpLmxhc3QoKS5maW5kKCcjYWRkU2VjdGlvbicgKyBsYXlvdXRSb3dJRFdpdGhvdXRJbmNyZW1lbnRhbCk7DQogICAgICAgICAgICAgICAgaWYgKGFkZEJ1dHRvblswXSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbi5jbGljaygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgTG9hZFhtbChub2RlLCBpbmRleGVzKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIG5vZGUgPSBmaWVsZE5vZGU7DQogICAgICAgICAgICB2YXIgcmVwZWF0aW5nSW5kZXggPSBpbmRleGVzW25vZGVOYW1lXTsNCiAgICAgICAgICAgIHZhciByZXBlYXRpbmdQb3N0Zml4VGV4dCA9IHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgaWYgKHJlcGVhdGluZ0luZGV4ID09IDApIHsNCiAgICAgICAgICAgICAgICByZXBlYXRpbmdQb3N0Zml4VGV4dCA9ICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmVwZWF0aW5nUG9zdGZpeFRleHQgPSByZXBlYXRpbmdFbGVtZW50UG9zdGZpeCArIHJlcGVhdGluZ0luZGV4Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgZmllbGQgPSAkKCJbbmFtZT0iICsgbm9kZU5hbWUgKyByZXBlYXRpbmdQb3N0Zml4VGV4dCArICJdIik7DQoNCiAgICAgICAgICAgIGlmIChmaWVsZC5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzKCc6Y2hlY2tib3gnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3MoImNoZWNrQm94IikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX2Jvb2xlYW4iKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVWYWx1ZSA9PSAiMSIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkQ2hlY2tib3ggPSAkKGZpZWxkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkQ2hlY2tib3guYXR0cigiZGlzYWJsZWQiKSAhPT0gdW5kZWZpbmVkIHx8IGZpZWxkQ2hlY2tib3guYXR0cigicmVhZG9ubHkiKSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZENoZWNrYm94LmF0dHIoImNoZWNrZWQiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmNsaWNrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnZhbCgpID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZENoZWNrYm94ID0gJChmaWVsZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZENoZWNrYm94LmF0dHIoImRpc2FibGVkIikgIT09IHVuZGVmaW5lZCB8fCBmaWVsZENoZWNrYm94LmF0dHIoInJlYWRvbmx5IikgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDaGVja2JveC5hdHRyKCJjaGVja2VkIiwgInRydWUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZC5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZmllbGRbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUudmFsdWUgPT0gbm9kZS5ub2RlVmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkQ2hlY2tib3ggPSAkKGNoaWxkTm9kZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZENoZWNrYm94LmF0dHIoImRpc2FibGVkIikgIT09IHVuZGVmaW5lZCB8fCBmaWVsZENoZWNrYm94LmF0dHIoInJlYWRvbmx5IikgIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDaGVja2JveC5hdHRyKCJjaGVja2VkIiwgInRydWUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuaXMoJzpyYWRpbycpKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZC5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBmaWVsZFtpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLnZhbHVlID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGlvID0gJChjaGlsZE5vZGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYWRpby5hdHRyKCJkaXNhYmxlZCIpICE9PSB1bmRlZmluZWQgfHwgcmFkaW8uYXR0cigicmVhZG9ubHkiKSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvLmF0dHIoImNoZWNrZWQiLCAidHJ1ZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmF0dHIoIm11bHRpcGxlIikpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkWzBdLmNoaWxkTm9kZXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gZmllbGRbMF0uY2hpbGROb2Rlc1tpbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLnZhbHVlID09IG5vZGUubm9kZVZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnNlbGVjdGVkID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHZhbCA9IG5vZGUubm9kZVZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsICE9ICIiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzQ2xhc3MoInhzZF9kZWNpbWFsIikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJy4nLCAnLCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQuaGFzQ2xhc3MoInhzZF9kYXRlIikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0geG1sSGVscGVyLmZyb21YbWxEYXRlKHZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX3RpbWUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIuZnJvbVhtbFRpbWUodmFsKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLmhhc0NsYXNzKCJ4c2RfZGF0ZVRpbWUiKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB4bWxIZWxwZXIuZnJvbVhtbERhdGVUaW1lKHZhbCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZC5oYXNDbGFzcygieHNkX2FueVVSSSIpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHhtbEhlbHBlci5mcm9tWG1sQW55VVJJKHZhbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWwodmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vIEZ1bmtjaWUgcHJlIHByZWtyeXRpZSB1a2xhZGFuaWEgYSBuYWNpdGF2YW5pYQ0KZnVuY3Rpb24gR2V0WHBhdGgoZWxlbWVudHMpIHsNCiAgICB2YXIgeHBhdGggPSAiIjsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHhwYXRoICs9ICIvIiArIGVsZW1lbnRzW2ldLm5vZGVOYW1lOw0KDQogICAgICAgIGlmIChlbGVtZW50c1tpXS5wYXJlbnROb2RlICE9IG51bGwgJiYgZWxlbWVudHNbaV0uYXR0cmlidXRlcyAhPSBudWxsKSB7DQogICAgICAgICAgICAvL3Jvb3R1IHNhIHByZXNrYWt1anUgbmFtZXNwYWNlcw0KICAgICAgICAgICAgaWYgKGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMubGVuZ3RoID09IDAgfHwgaSA9PSAwKSB7DQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHhwYXRoICs9ICJbIjsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgeHBhdGggKz0gIkAiICsgZWxlbWVudHNbaV0uYXR0cmlidXRlc1tqXS5ub2RlTmFtZSArICI9JyIgKyBlbGVtZW50c1tpXS5hdHRyaWJ1dGVzW2pdLnZhbHVlICsgIiciOw0KICAgICAgICAgICAgICAgIGlmIChqICE9IGVsZW1lbnRzW2ldLmF0dHJpYnV0ZXMubGVuZ3RoIC0gMSkgew0KICAgICAgICAgICAgICAgICAgICB4cGF0aCArPSAiIGFuZCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgeHBhdGggKz0gIl0iOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHhwYXRoOw0KfQ0KDQovL3ZyYXRpIGxpc3Qgbm9kb3YgLCBrdG9yeSB1cmN1amUgamVobyBhYnNvbHV0bnUgY2VzdHUgYXogZG8gcm9vdHUNCmZ1bmN0aW9uIEFuY2VzdG9yc0FuZFNlbGYoZWxlbWVudCkgew0KICAgIHZhciBwYXJ0cyA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBhY3R1YWwgPSBlbGVtZW50Ow0KDQogICAgd2hpbGUgKGFjdHVhbCAhPSBudWxsICYmIGFjdHVhbC5wYXJlbnROb2RlICE9IG51bGwpIHsNCiAgICAgICAgcGFydHMucHVzaChhY3R1YWwpOw0KICAgICAgICBhY3R1YWwgPSBhY3R1YWwucGFyZW50Tm9kZTsNCiAgICB9DQoNCiAgICByZXR1cm4gcGFydHMucmV2ZXJzZSgpOw0KfQ0KDQovL25hamRlIG5vZCB2IHphZGFub20gcm9vdGUgbmEgemFrbGFkZSB4cGF0aHUNCmZ1bmN0aW9uIEZvdW5kTm9kZShyb290LCB4UGF0aCkgew0KDQogICAgdmFyIGFuY2VzdG9yc0FuZFNlbGZQYXJlbnQgPSBBbmNlc3RvcnNBbmRTZWxmKHJvb3QpOw0KICAgIHZhciB4UGF0aFBhcmVudCA9IEdldFhwYXRoKGFuY2VzdG9yc0FuZFNlbGZQYXJlbnQpOw0KICAgIGlmICh4UGF0aCA9PSB4UGF0aFBhcmVudCkgew0KICAgICAgICByZXR1cm4gcm9vdDsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3QuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICB2YXIgZm91bmROb2RlID0gRm91bmROb2RlKHJvb3QuY2hpbGROb2Rlc1tpXSwgeFBhdGgpOw0KICAgICAgICBpZiAoZm91bmROb2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgIHJldHVybiBmb3VuZE5vZGU7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4gbnVsbDsNCn0NCg0KLy9uYWpkZSBub2QgdiB6YWRhbm9tIHJvb3RlIG5hIHpha2xhZGUgbmF6dnUNCmZ1bmN0aW9uIEZvdW5kTm9kZUJ5TmFtZShyb290LCBuYW1lKSB7DQoNCiAgICBpZiAocm9vdC5ub2RlTmFtZSA9PSBuYW1lKSB7DQogICAgICAgIHJldHVybiByb290Ow0KICAgIH0NCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBmb3VuZE5vZGUgPSBGb3VuZE5vZGVCeU5hbWUocm9vdC5jaGlsZE5vZGVzW2ldLCBuYW1lKTsNCiAgICAgICAgaWYgKGZvdW5kTm9kZSAhPSBudWxsKSB7DQogICAgICAgICAgICByZXR1cm4gZm91bmROb2RlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIG51bGw7DQp9DQoNCi8vbmEgemFrbGFkZSB4cGF0aG92IGRvZHJ6aSBzaWJibGluZ3MNCmZ1bmN0aW9uIFNvcnRYbWxCeVhQYXRoKHJvb3QpIHsNCiAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgIGlmIChyb290Lm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBhbmNlc3RvckFuZFNpYmJsaW5ncyA9IEFuY2VzdG9yc0FuZFNlbGYocm9vdC5jaGlsZE5vZGVzW2ldKTsNCiAgICAgICAgdmFyIHhQYXRoID0gR2V0WHBhdGgoYW5jZXN0b3JBbmRTaWJibGluZ3MpOw0KDQogICAgICAgIC8vcG96YXpuYW1lbmF2YSBzaSBwb3ppY2llDQogICAgICAgIGlmIChzaWJibGluZ3NbeFBhdGhdID09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgc2liYmxpbmdzW3hQYXRoXSA9IG5ldyBBcnJheSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgc2liYmxpbmdzW3hQYXRoXS5wdXNoKGkpOw0KICAgIH0NCg0KICAgIHZhciBuZXdMaXN0ID0gbmV3IEFycmF5KCk7DQoNCiAgICAvL25hIHpha2xhZGUgcG96aWNpaSB2eXNrbGFkYSBub3ZlIHBvcmFkaWUgZWxlbWVudG92DQogICAgZm9yICh2YXIgc2liYmxpbmcgaW4gc2liYmxpbmdzKSB7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2liYmxpbmdzW3NpYmJsaW5nXS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIHBvbSA9IHNpYmJsaW5nc1tzaWJibGluZ107DQogICAgICAgICAgICBuZXdMaXN0LnB1c2gocm9vdC5jaGlsZE5vZGVzW3BvbVtpXV0pOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy96bWF6YW5pZSBha3R1YWxueWNoIG5vZG92DQogICAgd2hpbGUgKHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIHJvb3QucmVtb3ZlQ2hpbGQocm9vdC5jaGlsZE5vZGVzWzBdKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xpc3QubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChuZXdMaXN0W2ldKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3QuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBTb3J0WG1sQnlYUGF0aChyb290LmNoaWxkTm9kZXNbaV0pOw0KICAgIH0NCn0NCg0KLy9uYSB6YWtsYWRlIHhwYXRob3Ygdnl0dmFyYSB2eXNsZWRuZSB4bWwNCmZ1bmN0aW9uIEJ1aWxkWG1sRnJvbVhwYXRocyh4UGF0aCwgcm9vdCwgZG9jdW1lbnQpIHsNCiAgICBpZiAoeFBhdGggPT0gIiIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIHZhciB4UGF0aFBhcnRzID0geFBhdGguc3BsaXQoJy8nKTsNCiAgICBpZiAoeFBhdGhQYXJ0cy5sZW5ndGggPT0gMCkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgdmFyIHhQYXRoRWxlbWVudE5hbWUgPSB4UGF0aFBhcnRzWzBdOw0KICAgIHZhciBmb3VuZE5vZGUgPSBGb3VuZE5vZGVCeU5hbWUocm9vdCwgeFBhdGhFbGVtZW50TmFtZSk7DQoNCiAgICBpZiAoZm91bmROb2RlID09IG51bGwpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHhQYXRoRWxlbWVudE5hbWUpOw0KICAgICAgICByb290LmFwcGVuZENoaWxkKGVsZW1lbnQpOw0KICAgICAgICByb290ID0gZWxlbWVudDsNCiAgICB9IGVsc2Ugew0KICAgICAgICByb290ID0gZm91bmROb2RlOw0KICAgIH0NCg0KICAgIHZhciBuZXdYUGF0aCA9ICIiOw0KICAgIGZvciAodmFyIGogPSAxOyBqIDwgeFBhdGhQYXJ0cy5sZW5ndGg7IGorKykgew0KICAgICAgICBuZXdYUGF0aCArPSB4UGF0aFBhcnRzW2pdICsgIi8iOw0KICAgIH0NCg0KICAgIGlmIChuZXdYUGF0aC5sZW5ndGggPiAwKSB7DQogICAgICAgIG5ld1hQYXRoID0gbmV3WFBhdGguc3Vic3RyaW5nKDAsIG5ld1hQYXRoLmxlbmd0aCAtIDEpOw0KICAgIH0NCg0KICAgIEJ1aWxkWG1sRnJvbVhwYXRocyhuZXdYUGF0aCwgcm9vdCwgZG9jdW1lbnQpOw0KfQ0KDQovL3ByZWpkZSBjZXogdnNldGt5IGVsZW1lbnR5IGEgdnJhdGkgeG1sIGFrbyBzdHJpbmcNCmZ1bmN0aW9uIEVsZW1lbnRUb1N0cmluZyhyb290KSB7DQogICAgdmFyIHhtbCA9ICIiOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gIiI7DQoNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlcy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgYXR0cmlidXRlcyArPSAiICIgKyByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlc1tqXS5uYW1lICsgIj1cIiIgKyByb290LmNoaWxkTm9kZXNbaV0uYXR0cmlidXRlc1tqXS52YWx1ZSArICJcIiI7DQogICAgICAgIH0NCg0KICAgICAgICB4bWwgKz0gIjwiICsgcm9vdC5jaGlsZE5vZGVzW2ldLm5vZGVOYW1lICsgYXR0cmlidXRlcyArICI+IjsNCiAgICAgICAgaWYgKHJvb3QuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIHJvb3QuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgIHhtbCArPSByb290LmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB4bWwgKz0gRWxlbWVudFRvU3RyaW5nKHJvb3QuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgIH0NCiAgICAgICAgeG1sICs9ICI8LyIgKyByb290LmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgKyAiPiI7DQogICAgfQ0KDQogICAgcmV0dXJuIHhtbDsNCn0NCg0KLy96bWF6ZSB2c2V0a3kgdnlwbG5lbmUgaG9kbm90eQ0KZnVuY3Rpb24gRW1wdHlYbWxOb2RlUmVjdXJzaXZlKG5vZGUpIHsNCiAgICBpZiAobm9kZS5ub2RlTmFtZSA9PSAiI3RleHQiKSB7DQogICAgICAgIG5vZGUubm9kZVZhbHVlID0gIiI7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIEVtcHR5WG1sTm9kZVJlY3Vyc2l2ZShub2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovL3ptYXplIGVsZW1lbnR5LCBrdG9yZSBuaWUgc3UgbmFtYXBvdmFuZQ0KZnVuY3Rpb24gUmVtb3ZlRWxlbWVudHNCeU5hbWVOb3RJbk1hcHBpbmcobm9kZSwgbWFwcGluZykgew0KICAgIGlmIChub2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIHZhciBmb3VuZCA9IGZhbHNlOw0KICAgIHZhciBhY3R1YWxOb2RlID0gbm9kZTsNCg0KICAgIGZvciAodmFyIG1hcCBpbiBtYXBwaW5nKSB7DQogICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09IG1hcCkgew0KICAgICAgICAgICAgZm91bmQgPSB0cnVlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgaWYgKCFmb3VuZCkgew0KICAgICAgICBhY3R1YWxOb2RlID0gbm9kZS5wYXJlbnROb2RlOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgYWN0dWFsTm9kZS5hcHBlbmRDaGlsZChub2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGFjdHVhbE5vZGUgPT0gbnVsbCkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgYWN0dWFsTm9kZS5yZW1vdmVDaGlsZChub2RlKTsNCiAgICB9DQoNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBSZW1vdmVFbGVtZW50c0J5TmFtZU5vdEluTWFwcGluZyhhY3R1YWxOb2RlLmNoaWxkTm9kZXNbaV0sIG1hcHBpbmcpOw0KICAgIH0NCn0NCg0KLy9wcmVsb3ppIHogbmF0aXZ1IGRvIGJ1c2luZXNzDQpmdW5jdGlvbiBUcmFuc2xhdGVOYXRpdmVUb0Vkb2MobmF0aXZlWG1sLCBza1htbFRlbXBsYXRlLCBtYXBwaW5nLCB0cmFuc2xhdGVUeXBlKSB7DQoNCiAgICBmdW5jdGlvbiBUcmFuc2xhdGVSZWN1cnNpdmUoeG1sRG9jTm9kZSwgc2tYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSkgew0KICAgICAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhtbERvY05vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIHhtbE5vZGUgPSB4bWxEb2NOb2RlLmNoaWxkTm9kZXNbaV07DQoNCiAgICAgICAgICAgIGlmICh4bWxOb2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICBpZiAoeG1sTm9kZS5ub2RlVmFsdWUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50WG1sTm9kZSA9IHhtbE5vZGUucGFyZW50Tm9kZTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhQYXRoRWRvYyA9IG1hcHBpbmdbcGFyZW50WG1sTm9kZS5ub2RlTmFtZV07DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKHhQYXRoRWRvYyAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmROb2RlID0gRm91bmROb2RlKHNrWG1sRG9jTm9kZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE5vZGUuYXBwZW5kQ2hpbGQoeG1sTm9kZS5jbG9uZU5vZGUoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmROb2RlLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0geG1sTm9kZS5ub2RlVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChzaWJibGluZ3NbeG1sTm9kZS5ub2RlTmFtZV0gPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgc2liYmxpbmdzW3htbE5vZGUubm9kZU5hbWVdID0gMDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2liYmxpbmdzW3htbE5vZGUubm9kZU5hbWVdKys7DQoNCiAgICAgICAgICAgIC8vb3Bha29hdmFjaWEgc2VrYWNpYQ0KICAgICAgICAgICAgaWYgKHNpYmJsaW5nc1t4bWxOb2RlLm5vZGVOYW1lXSA+IDEpIHsNCiAgICAgICAgICAgICAgICAvL2tlZHplIG9wYWtvdmFjaWUgbm9keSBtYWp1IHJvdm5ha3kgbmF6b3YgYWtvIHYgbmF0b3ZlLCBzdGFjaSBsZW4gcG9kbGEgbmF6dnUNCiAgICAgICAgICAgICAgICB2YXIgcmVwZXRpdGlvbk5vZGUgPSBudWxsOw0KICAgICAgICAgICAgICAgIHZhciByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gbnVsbDsNCg0KICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVUeXBlID09ICJEaWN0aW9uYXJ5Iikgew0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShza1htbERvY05vZGUsIHhtbE5vZGUubm9kZU5hbWUpOw0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gRm91bmROb2RlQnlOYW1lKHRlbXBsYXRlLCB4bWxOb2RlLm5vZGVOYW1lKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVR5cGUgPT0gIk1hcHBlciIpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHhQYXRoRWRvYyA9IG1hcHBpbmdbeG1sTm9kZS5ub2RlTmFtZV07DQogICAgICAgICAgICAgICAgICAgIHJlcGV0aXRpb25Ob2RlID0gRm91bmROb2RlKHNrWG1sRG9jTm9kZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSA9IEZvdW5kTm9kZSh0ZW1wbGF0ZSwgeFBhdGhFZG9jKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAocmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSAhPSBudWxsICYmIHJlcGV0aXRpb25Ob2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lZE5vZGUgPSByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlUmVjdXJzaXZlKHhtbE5vZGUsIGNsb25lZE5vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZSh4bWxOb2RlLCBza1htbERvY05vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHZhciBuYXRpdmVEb2MgPSAkLnBhcnNlWE1MKG5hdGl2ZVhtbCk7DQogICAgdmFyIGVEb2NEb2MgPSAkLnBhcnNlWE1MKHNrWG1sVGVtcGxhdGUpOw0KICAgIHZhciB0ZW1wbGF0ZSA9ICQucGFyc2VYTUwoc2tYbWxUZW1wbGF0ZSk7DQogICAgVHJhbnNsYXRlUmVjdXJzaXZlKG5hdGl2ZURvYy5jaGlsZE5vZGVzWzBdLCBlRG9jRG9jLmNoaWxkTm9kZXNbMF0sIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCiAgICBTb3J0WG1sQnlYUGF0aChlRG9jRG9jLmNoaWxkTm9kZXNbMF0pOw0KDQogICAgcmV0dXJuIEVsZW1lbnRUb1N0cmluZyhlRG9jRG9jKTsNCn0NCg0KLy9wcmVsb3ppIHogZWRvYyBkbyBuYXRpdnUNCmZ1bmN0aW9uIFRyYW5zbGF0ZUVkb2NUb05hdGl2ZShlZG9jWG1sLCBuYXRpdmVYbWxUZW1wbGF0ZSwgbWFwcGluZywgdHJhbnNsYXRlVHlwZSkgew0KDQogICAgZnVuY3Rpb24gVHJhbnNsYXRlUmVjdXJzaXZlKGVkb2NEb2NOb2RlLCBuYXRpdmVYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSkgew0KICAgICAgICB2YXIgc2liYmxpbmdzID0gQXJyYXkoKTsNCg0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkb2NEb2NOb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciB4bWxOb2RlID0gZWRvY0RvY05vZGUuY2hpbGROb2Rlc1tpXTsNCiAgICAgICAgICAgIHZhciBhbmNlc29yc0FuZFNlbGYgPSBBbmNlc3RvcnNBbmRTZWxmKHhtbE5vZGUpOw0KICAgICAgICAgICAgdmFyIGVEb2NYcGF0aCA9IEdldFhwYXRoKGFuY2Vzb3JzQW5kU2VsZik7DQoNCiAgICAgICAgICAgIGlmICh4bWxOb2RlLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICBlRG9jWHBhdGggPSBlRG9jWHBhdGguc3Vic3RyaW5nKDAsIGVEb2NYcGF0aC5sZW5ndGggLSA2KTsgLy8gb3JlemVtIGVzdGUgLyN0ZXh0IHpuYW1lDQogICAgICAgICAgICAgICAgaWYgKHhtbE5vZGUubm9kZVZhbHVlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgLy9lZG9jIA0KICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlTmFtZSA9IG51bGw7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG1hcCBpbiBtYXBwaW5nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZ1ttYXBdID09IGVEb2NYcGF0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU5hbWUgPSBtYXA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGV0aXRpb25Ob2RlVGVtcGxhdGUgPSBGb3VuZE5vZGVCeU5hbWUodGVtcGxhdGUsIG5hdGl2ZU5hbWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW96dSBieXQgcm92bmFrZSB4cGF0aHksIGFsZSB6YXVqaW1hdnkgamUgbGVuIHRlbiBmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXMubGVuZ3RoID09IDAgfHwgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZS5jaGlsZE5vZGVzWzBdLm5vZGVOYW1lID09ICIjdGV4dCIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZU5hbWUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE5vZGUuYXBwZW5kQ2hpbGQoeG1sTm9kZS5jbG9uZU5vZGUoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmROb2RlLmNoaWxkTm9kZXNbMF0ubm9kZVZhbHVlID0geG1sTm9kZS5ub2RlVmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChzaWJibGluZ3NbZURvY1hwYXRoXSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICBzaWJibGluZ3NbZURvY1hwYXRoXSA9IDA7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHNpYmJsaW5nc1tlRG9jWHBhdGhdKys7DQoNCiAgICAgICAgICAgIC8vb3Bha29hdmFjaWEgc2VrYWNpYQ0KICAgICAgICAgICAgaWYgKHNpYmJsaW5nc1tlRG9jWHBhdGhdID4gMSkgew0KICAgICAgICAgICAgICAgIHZhciByZXBldGl0aW9uTm9kZSA9IG51bGw7DQogICAgICAgICAgICAgICAgdmFyIHJlcGV0aXRpb25Ob2RlVGVtcGxhdGUgPSBudWxsOw0KDQogICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVR5cGUgPT0gIkRpY3Rpb25hcnkiKSB7DQogICAgICAgICAgICAgICAgICAgIC8va2VkemUgb3Bha292YWNpZSBub2R5IG1hanUgcm92bmFreSBuYXpvdiBha28gdiBuYXRvdmUsIHN0YWNpIGxlbiBwb2RsYSBuYXp2dQ0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCB4bWxOb2RlLm5vZGVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSA9IEZvdW5kTm9kZUJ5TmFtZSh0ZW1wbGF0ZSwgeG1sTm9kZS5ub2RlTmFtZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVUeXBlID09ICJNYXBwZXIiKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBhbmNlc29yc0FuZFNlbGYgPSBBbmNlc3RvcnNBbmRTZWxmKHhtbE5vZGUpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZURvY1hwYXRoID0gR2V0WHBhdGgoYW5jZXNvcnNBbmRTZWxmKTsNCg0KICAgICAgICAgICAgICAgICAgICAvL2Vkb2MgDQogICAgICAgICAgICAgICAgICAgIHZhciBuYXRpdmVOYW1lID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbWFwIGluIG1hcHBpbmcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nW21hcF0gPT0gZURvY1hwYXRoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlTmFtZSA9IG1hcDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZVRlbXBsYXRlID0gRm91bmROb2RlQnlOYW1lKHRlbXBsYXRlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21venUgYnl0IHJvdm5ha2UgeHBhdGh5LCBhbGUgemF1amltYXZ5IGplIGxlbiB0ZW4gcHJlIHNla2NpdQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCAmJiByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNoaWxkTm9kZXNbMF0ubm9kZU5hbWUgIT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICByZXBldGl0aW9uTm9kZSA9IEZvdW5kTm9kZUJ5TmFtZShuYXRpdmVYbWxEb2NOb2RlLCBuYXRpdmVOYW1lKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAocmVwZXRpdGlvbk5vZGVUZW1wbGF0ZSAhPSBudWxsICYmIHJlcGV0aXRpb25Ob2RlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lZE5vZGUgPSByZXBldGl0aW9uTm9kZVRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgcmVwZXRpdGlvbk5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlUmVjdXJzaXZlKHhtbE5vZGUsIGNsb25lZE5vZGUsIHRlbXBsYXRlLCB0cmFuc2xhdGVUeXBlKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZSh4bWxOb2RlLCBuYXRpdmVYbWxEb2NOb2RlLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB2YXIgZWRvY0RvYyA9ICQucGFyc2VYTUwoZWRvY1htbCk7DQogICAgdmFyIG5hdGl2ZURvYyA9ICQucGFyc2VYTUwobmF0aXZlWG1sVGVtcGxhdGUpOw0KICAgIHZhciB0ZW1wbGF0ZSA9ICQucGFyc2VYTUwobmF0aXZlWG1sVGVtcGxhdGUpOw0KICAgIFRyYW5zbGF0ZVJlY3Vyc2l2ZShlZG9jRG9jLmNoaWxkTm9kZXNbMF0sIG5hdGl2ZURvYy5jaGlsZE5vZGVzWzBdLCB0ZW1wbGF0ZSwgdHJhbnNsYXRlVHlwZSk7DQogICAgU29ydFhtbEJ5WFBhdGgobmF0aXZlRG9jLmNoaWxkTm9kZXNbMF0pOw0KDQogICAgcmV0dXJuIEVsZW1lbnRUb1N0cmluZyhuYXRpdmVEb2MpOw0KfQ0KDQovL3ByZWJyYW5lIHogMi4wDQpmdW5jdGlvbiBBZGRNaXNzaW5nRWxlbWVudHMoc291cmNlUm9vdE5vZGUsIGRlc3RpbmF0aW9uUm9vdE5vZGUsIG5vZGVXaXRoQ29udGFpbnMpIHsNCg0KICAgIC8vemlzdGksIGt0b3JlIGNhc3RpIHN0cm9tdSBtYWp1IGNvbnRhaW5zDQogICAgZnVuY3Rpb24gR2V0Q29udGFpbnNJbmZvcm1hdGlvbihub2RlLCBub2RlV2l0aENvbnRhaW5zKSB7DQogICAgICAgIGlmIChub2RlLm5vZGVOYW1lICE9ICIjdGV4dCIpIHsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZVdpdGhDb250YWlucy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIGlmIChub2RlV2l0aENvbnRhaW5zW2tdLm5vZGUgPT0gbm9kZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBjb250YWluc1ZhbHVlOiBub2RlV2l0aENvbnRhaW5zW2tdLmNvbnRhaW5zVmFsdWUsIGNvbnRhaW5zRWxlbWVudFhwYXRoOiBub2RlV2l0aENvbnRhaW5zW2tdLmNvbnRhaW5zRWxlbWVudFhwYXRoIH07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBwb20gPSBHZXRDb250YWluc0luZm9ybWF0aW9uKG5vZGUuY2hpbGROb2Rlc1tpXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICAgICAgaWYgKHBvbSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBwb207DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gR2V0TXVsdGlwbGVFbGVtZW50cyhkZXN0aW5hdGlvblJvb3ROb2RlKSB7DQogICAgICAgIHZhciBtdWx0aXBsZU5hbWVzID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy9uYWpkZW0gdmlhYyBuYXNibmUgdnlza3l0eSBuYSBkYW5laiB1cm92bmkNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhbmNlc3RvcnNBbmRTZWxmID0gQW5jZXN0b3JzQW5kU2VsZihkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICAgICAgdmFyIHhQYXRoU291cmNlID0gR2V0WHBhdGgoYW5jZXN0b3JzQW5kU2VsZik7DQoNCiAgICAgICAgICAgIGlmIChtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXSA9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICBtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXSA9IG5ldyBBcnJheSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBtdWx0aXBsZU5hbWVzW3hQYXRoU291cmNlXS5wdXNoKGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgICAgIH0NCg0KICAgICAgICAvL3Z5YmVyaWVtIGxlbiB0aWUsIGt0b3JlIHNhIHZpYWMga3JhdCBvcGFrdWp1DQogICAgICAgIHZhciBtdWx0aXBsZSA9IG5ldyBBcnJheSgpOw0KICAgICAgICBmb3IgKHZhciBtdWx0aXBsZU5hbWUgaW4gbXVsdGlwbGVOYW1lcykgew0KICAgICAgICAgICAgaWYgKG11bHRpcGxlTmFtZXNbbXVsdGlwbGVOYW1lXS5sZW5ndGggPiAxKSB7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtdWx0aXBsZU5hbWVzW211bHRpcGxlTmFtZV0ubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUucHVzaChtdWx0aXBsZU5hbWVzW211bHRpcGxlTmFtZV1ba10pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBtdWx0aXBsZTsNCiAgICB9DQoNCiAgICAvL3ppc3RpLCBjb250YWlucyBlbGVtZW50eQ0KICAgIGZ1bmN0aW9uIEdldEVsZW1lbnRXaXRoQ29udGFpbnMoZGVzdGluYXRpb25Sb290Tm9kZSwgbm9kZVdpdGhDb250YWlucykgew0KDQogICAgICAgIHZhciBtdWx0aXBsZSA9IEdldE11bHRpcGxlRWxlbWVudHMoZGVzdGluYXRpb25Sb290Tm9kZSk7DQogICAgICAgIHZhciBlbGVtZW50V2l0aENvbnRhaW5zID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy9uYWpkZSBzIGNvbnRhaW5zIGEgdmxvemkgaWNoDQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXVsdGlwbGUubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjb250YWluc0luZm9ybWF0aW9uID0gR2V0Q29udGFpbnNJbmZvcm1hdGlvbihtdWx0aXBsZVtpXSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgICAgICAgICBpZiAoY29udGFpbnNJbmZvcm1hdGlvbiAhPSBudWxsKSB7DQogICAgICAgICAgICAgICAgZWxlbWVudFdpdGhDb250YWlucy5wdXNoKHsgbm9kZTogbXVsdGlwbGVbaV0sIGNvbnRhaW5zVmFsdWU6IGNvbnRhaW5zSW5mb3JtYXRpb24uY29udGFpbnNWYWx1ZSwgY29udGFpbnNFbGVtZW50WHBhdGg6IGNvbnRhaW5zSW5mb3JtYXRpb24uY29udGFpbnNFbGVtZW50WHBhdGggfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZWxlbWVudFdpdGhDb250YWluczsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBGaW5kQWxsTm9kZXMoY2hpbGRyZW5Ob2RlcywgeHBhdGgsIGNvbnRhaW5zVmFsdWUsIHRlbXBsYXRlQ29udGFpbnNYUGF0aCkgew0KICAgICAgICB2YXIgZm91bmROb2RlcyA9IG5ldyBBcnJheSgpOw0KDQogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW5Ob2Rlcy5sZW5ndGg7IGorKykgew0KICAgICAgICAgICAgaWYgKGNoaWxkcmVuTm9kZXNbal0ubm9kZU5hbWUgPT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgYW5jZXN0b3JzQW5kU2VsZiA9IEFuY2VzdG9yc0FuZFNlbGYoY2hpbGRyZW5Ob2Rlc1tqXSk7DQogICAgICAgICAgICB2YXIgeFBhdGhTb3VyY2UgPSBHZXRYcGF0aChhbmNlc3RvcnNBbmRTZWxmKTsNCg0KICAgICAgICAgICAgaWYgKHhwYXRoID09IHhQYXRoU291cmNlKSB7DQogICAgICAgICAgICAgICAgLy9hayBqZSBwcmVkY2hhZHphanVjaSBkZXN0aW5hdGlvbiB0byBpc3RlLCB0YWsgbmVzbWllIHZsb3ppdCBhbGUgYnVkZSBzYSBrbG9ub3ZhdA0KICAgICAgICAgICAgICAgIGlmIChjb250YWluc1ZhbHVlICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kRWxlbWVudCA9IEZpbmROb2RlKGNoaWxkcmVuTm9kZXNbal0sIHRlbXBsYXRlQ29udGFpbnNYUGF0aCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEVsZW1lbnQgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGROb2RlID0gR2V0RmllbGROb2RlKGZvdW5kRWxlbWVudCk7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTm9kZSA9PSBudWxsIHx8IGZpZWxkTm9kZS5ub2RlVmFsdWUuaW5kZXhPZihjb250YWluc1ZhbHVlKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmb3VuZE5vZGVzLnB1c2goY2hpbGRyZW5Ob2Rlc1tqXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZm91bmROb2RlczsNCiAgICB9DQoNCiAgICB2YXIgZmluYWxBcnJheSA9IG5ldyBBcnJheSgpOw0KICAgIHZhciBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb24gPSBuZXcgQXJyYXkoKTsNCg0KICAgIHZhciBlbGVtZW50V2l0aENvbnN0YWlucyA9IEdldEVsZW1lbnRXaXRoQ29udGFpbnMoZGVzdGluYXRpb25Sb290Tm9kZSwgbm9kZVdpdGhDb250YWlucyk7DQogICAgdmFyIG11bHRpcGxlRWxlbWVudHMgPSBHZXRNdWx0aXBsZUVsZW1lbnRzKGRlc3RpbmF0aW9uUm9vdE5vZGUpOw0KDQogICAgdmFyIGFjdHVhbENoaWxkcmVuTm9kZXMgPSBuZXcgQXJyYXkoKTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgew0KICAgICAgICBhY3R1YWxDaGlsZHJlbk5vZGVzLnB1c2goc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSk7DQogICAgfQ0KDQogICAgdmFyIGluZGV4aXMgPSBuZXcgQXJyYXkoKTsNCg0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdGluYXRpb25Sb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGlmIChkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgPT0gIiN0ZXh0Iikgew0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgaXNNdWx0aXBsZSA9IGZhbHNlOw0KICAgICAgICBmb3IgKHZhciBoID0gMDsgaCA8IG11bHRpcGxlRWxlbWVudHMubGVuZ3RoOyBoKyspIHsNCiAgICAgICAgICAgIGlmIChtdWx0aXBsZUVsZW1lbnRzW2hdID09IGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSkgew0KICAgICAgICAgICAgICAgIGlzTXVsdGlwbGUgPSB0cnVlOw0KDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYW5jZXN0b3JzQW5kU2VsZkRlc3RpbmF0aW9uID0gQW5jZXN0b3JzQW5kU2VsZihkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICB2YXIgeFBhdGhEZXN0aW5hdGlvbiA9IEdldFhwYXRoKGFuY2VzdG9yc0FuZFNlbGZEZXN0aW5hdGlvbik7DQoNCiAgICAgICAgaWYgKGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0gPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICBpbmRleGlzW3hQYXRoRGVzdGluYXRpb25dID0gMDsNCiAgICAgICAgfQ0KDQogICAgICAgIGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0rKzsNCg0KICAgICAgICB2YXIgdGVtcGxhdGVDb250YWluc1ZhbHVlID0gbnVsbDsNCiAgICAgICAgdmFyIHRlbXBsYXRlQ29udGFpbnNYUGF0aCA9IG51bGw7DQoNCiAgICAgICAgLy9hayBqZSB0ZW1wbGF0b3Z5IGVsZW1lbnQgb3puYWNlbnksIHplIGJ1ZGUgbWF0IGFqIGNvbnRhaW5zDQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZWxlbWVudFdpdGhDb25zdGFpbnMubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgIGlmIChlbGVtZW50V2l0aENvbnN0YWluc1trXS5ub2RlID09IGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXSkgew0KICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29udGFpbnNWYWx1ZSA9IGVsZW1lbnRXaXRoQ29uc3RhaW5zW2tdLmNvbnRhaW5zVmFsdWU7DQoNCiAgICAgICAgICAgICAgICAvL2FrIGplIGxlbiBuYSBrb25jaSB4cGF0aHUNCiAgICAgICAgICAgICAgICB2YXIgeHBhdGhJbkNvbnRhaW5zQ29uZGl0aW9ucyA9IGVsZW1lbnRXaXRoQ29uc3RhaW5zW2tdLmNvbnRhaW5zRWxlbWVudFhwYXRoOw0KICAgICAgICAgICAgICAgIHZhciBjb25uZWN0b3IgPSAiLyI7DQogICAgICAgICAgICAgICAgaWYgKHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnMgPT0gJy4nKSB7DQogICAgICAgICAgICAgICAgICAgIHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnMgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yID0gIiI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgdGVtcGxhdGVDb250YWluc1hQYXRoID0geFBhdGhEZXN0aW5hdGlvbiArIGNvbm5lY3RvciArIHhwYXRoSW5Db250YWluc0NvbmRpdGlvbnM7DQoNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vbmFqZGUgdnNldGt5IGVsZW1lbnR5LCBrdG9yZSBwcmlzbHVjaGFqdSB0ZW1wbGF0ZQ0KICAgICAgICB2YXIgZm91bmRCdXNpbmVzcyA9IEZpbmRBbGxOb2RlcyhhY3R1YWxDaGlsZHJlbk5vZGVzLCB4UGF0aERlc3RpbmF0aW9uLCB0ZW1wbGF0ZUNvbnRhaW5zVmFsdWUsIHRlbXBsYXRlQ29udGFpbnNYUGF0aCk7DQoNCiAgICAgICAgLy9hayBzYSBqZWRuYSBvIHZhcmlhbnR1LCB6ZSBqZSBlbGVtZW50IG9kbGlzZW55IHBvbW9jb3Uga29uc3RhbnR5LCBuaWUgY29udGFpbnMsIHRhayBzYSB6b2JlcmllIHBvZGxhIGluZGV4dQ0KICAgICAgICBpZiAoaXNNdWx0aXBsZSAmJiB0ZW1wbGF0ZUNvbnRhaW5zWFBhdGggPT0gbnVsbCkgew0KICAgICAgICAgICAgaWYgKGluZGV4aXNbeFBhdGhEZXN0aW5hdGlvbl0gPD0gZm91bmRCdXNpbmVzcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICB2YXIgdGVtcEZvdW5kQnVzaW5lc3MgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgICAgICAgICB0ZW1wRm91bmRCdXNpbmVzcy5wdXNoKGZvdW5kQnVzaW5lc3NbaW5kZXhpc1t4UGF0aERlc3RpbmF0aW9uXSAtIDFdKTsNCiAgICAgICAgICAgICAgICBmb3VuZEJ1c2luZXNzID0gdGVtcEZvdW5kQnVzaW5lc3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgdXNlZE5vZGVzID0gbmV3IEFycmF5KCk7DQoNCiAgICAgICAgLy96aXN0aSwga3RvcmUgbm9keSBzYSBwb3V6aWxpDQogICAgICAgIGZvciAodmFyIGggPSAwOyBoIDwgZm91bmRCdXNpbmVzcy5sZW5ndGg7IGgrKykgew0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBhY3R1YWxDaGlsZHJlbk5vZGVzLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgaWYgKGZvdW5kQnVzaW5lc3NbaF0gPT0gYWN0dWFsQ2hpbGRyZW5Ob2Rlc1trXSkgew0KICAgICAgICAgICAgICAgICAgICB1c2VkTm9kZXMucHVzaChhY3R1YWxDaGlsZHJlbk5vZGVzW2tdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvL3ptYXplIG5vZHksIGt0b3JlIHV6IGJvbGkgcG91eml0ZQ0KICAgICAgICBpZiAodXNlZE5vZGVzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIHZhciBjbG9uZWRBY3R1YWxDaGlsZHJlbk5vZGVzID0gYWN0dWFsQ2hpbGRyZW5Ob2RlczsNCiAgICAgICAgICAgIGFjdHVhbENoaWxkcmVuTm9kZXMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgY2xvbmVkQWN0dWFsQ2hpbGRyZW5Ob2Rlcy5sZW5ndGg7IGwrKykgew0KICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOw0KDQogICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCB1c2VkTm9kZXMubGVuZ3RoOyBtKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZWROb2Rlc1ttXSA9PSBjbG9uZWRBY3R1YWxDaGlsZHJlbk5vZGVzW2xdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQ2hpbGRyZW5Ob2Rlcy5wdXNoKGNsb25lZEFjdHVhbENoaWxkcmVuTm9kZXNbbF0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChmb3VuZEJ1c2luZXNzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZm91bmRCdXNpbmVzcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIGZpbmFsQXJyYXkucHVzaChmb3VuZEJ1c2luZXNzW2tdKTsNCiAgICAgICAgICAgICAgICBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb24ucHVzaChkZXN0aW5hdGlvblJvb3ROb2RlLmNoaWxkTm9kZXNbaV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZmluYWxBcnJheS5wdXNoKGRlc3RpbmF0aW9uUm9vdE5vZGUuY2hpbGROb2Rlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpOw0KICAgICAgICAgICAgZmluYWxFeGlzdGluZ0Rlc3RpbmF0aW9uLnB1c2goZGVzdGluYXRpb25Sb290Tm9kZS5jaGlsZE5vZGVzW2ldKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vZXN0ZSB0cmViYSBkbyBmaW5hbCBhcnJheSBwb3NsYXQgYWogb3N0YXRuZSBuZXByZWpkZW5lIGVsZW1lbnR5DQogICAgaWYgKGZpbmFsQXJyYXkubGVuZ3RoID09IDApIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8vem1heiBjZWxlIHBvbGUNCiAgICB3aGlsZSAoc291cmNlUm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7DQogICAgICAgIHNvdXJjZVJvb3ROb2RlLnJlbW92ZUNoaWxkKHNvdXJjZVJvb3ROb2RlLmNoaWxkTm9kZXNbMF0pOw0KICAgIH0NCg0KICAgIC8vbmFocmFqIGNoaWxkeSBuYW5vdm8NCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbmFsQXJyYXkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgc291cmNlUm9vdE5vZGUuYXBwZW5kQ2hpbGQoZmluYWxBcnJheVtpXSk7DQogICAgfQ0KDQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaW5hbEFycmF5Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgIEFkZE1pc3NpbmdFbGVtZW50cyhmaW5hbEFycmF5W2ldLCBmaW5hbEV4aXN0aW5nRGVzdGluYXRpb25baV0sIG5vZGVXaXRoQ29udGFpbnMpOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gR2V0RW1wdHlOYXRpdmVUZW1wbGF0ZSgpIHsNCg0KICAgIHZhciBmb3JtSWQgPSBHZXRGb3JtSWQoKTsNCiAgICB2YXIgeG1sbnMgPSBHZXRNZXRhZGF0YU5hbWVzcGFjZSgpOw0KICAgIHZhciB4bWwgPSAnPCcgKyBmb3JtSWQgKyB4bWxucyArICc+JzsNCiAgICB2YXIgdXNlZFhtbE5hbWVzID0gbmV3IEFycmF5KCk7DQoNCiAgICBmdW5jdGlvbiBwcm9jZXNzSHRtbCgpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICB2YXIgbmFtZSA9ICduYW1lJzsNCiAgICAgICAgdmFyIGxheW91dFJvdyA9ICdsYXlvdXRSb3cnOw0KICAgICAgICB2YXIgZmlyc3RJbnB1dDsNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgZmlyc3RJbnB1dC5hdHRyKG5hbWUpICsgJz4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaXMoJzppbnB1dCcpKSB7DQogICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOmZpbGUnKSB8fCBlbGVtZW50LmlzKCc6YnV0dG9uJykgfHwgZWxlbWVudC5hdHRyKCdMb29rdXBEZXRhaWxJbmZvJykgPT0gInRydWUiKQ0KICAgICAgICAgICAgICAgIHJldHVybjsNCg0KICAgICAgICAgICAgaWYgKGVsZW1lbnQucGFyZW50KCkuaGFzQ2xhc3MobGF5b3V0Um93KSkNCiAgICAgICAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBhdHRyID0gZWxlbWVudC5hdHRyKG5hbWUpOw0KICAgICAgICAgICAgaWYgKGF0dHIgIT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXR0ci5pbmRleE9mKHNpZ24pOw0KICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAodXNlZFhtbE5hbWVzW2F0dHJdID09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGF0dHIucmVwbGFjZShkaXNhYmxlVmFsaWRhdG9yUHJlZml4LCAiIik7DQogICAgICAgICAgICAgICAgICAgICAgICB4bWwgKz0gJzwnICsgYXR0ciArICc+JyArICc8LycgKyBhdHRyICsgJz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFhtbE5hbWVzW2F0dHJdID0gIiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBlbGVtZW50LmNoaWxkcmVuKCkuZWFjaChwcm9jZXNzSHRtbCk7DQoNCiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MobGF5b3V0Um93KSkgew0KICAgICAgICAgICAgZmlyc3RJbnB1dCA9IGVsZW1lbnQuY2hpbGRyZW4oImlucHV0OmZpcnN0Iik7DQogICAgICAgICAgICBpZiAoZmlyc3RJbnB1dC5hdHRyKG5hbWUpICE9ICdBdHRhY2htZW50cycpIHsNCiAgICAgICAgICAgICAgICB4bWwgKz0gJzwvJyArIGZpcnN0SW5wdXQuYXR0cihuYW1lKSArICc+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgICQoJyNtYWluJykuY2hpbGRyZW4oJ2RpdicpLmVhY2gocHJvY2Vzc0h0bWwpOw0KDQogICAgeG1sICs9ICc8LycgKyBmb3JtSWQgKyAnPic7DQoNCiAgICByZXR1cm4geG1sOw0KfQ0KDQpmdW5jdGlvbiBGaWxsTG9va3VwKGVsZW1lbnQsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpIHsNCiAgICB2YXIgbG9va3VwSXRlbXMgPSBudWxsOw0KICAgIHZhciBsb29rdXBVcmkgPSBHZXRMb29rdXBVcmkoKTsNCg0KICAgICQuYWpheCh7DQogICAgICAgIHR5cGU6ICJHRVQiLA0KICAgICAgICB1cmw6IEdldExvb2t1cFVyaSgpLA0KICAgICAgICBhc3luYzogZmFsc2UNCiAgICB9KS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsNCiAgICAgICAgICAgIGxvb2t1cEl0ZW1zID0gJC5wYXJzZUpTT04oZGF0YS5yZXBsYWNlKCIoIiwgIiIpLnJlcGxhY2UoIik7IiwgIiIpKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KDQogICAgaWYgKGxvb2t1cEl0ZW1zICE9IG51bGwgJiYgbG9va3VwSXRlbXMuYWFEYXRhICE9IG51bGwpIHsNCiAgICAgICAgdmFyIHJhbmRJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxvb2t1cEl0ZW1zLmFhRGF0YS5sZW5ndGgpOw0KICAgICAgICB2YXIgcmFuZExvb2t1cEl0ZW0gPSBsb29rdXBJdGVtcy5hYURhdGFbcmFuZEluZGV4XTsNCg0KICAgICAgICBlbGVtZW50LnZhbChyYW5kTG9va3VwSXRlbVsxXSk7DQogICAgICAgIGxvb2t1cERldGFpbEluZm8udmFsKHJhbmRMb29rdXBJdGVtWzFdKTsNCiAgICAgICAgbG9va3VwRmllbGRWYWx1ZS52YWwocmFuZExvb2t1cEl0ZW1bMF0pOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gRmlsbFNwZWNpZmljSW5wdXQoZWxlbWVudCwgcnVsZXMsIGRhdGEpIHsNCiAgICB2YXIgcnVsZTsNCiAgICB2YXIgZmluYWxWYWx1ZSA9ICIiOw0KICAgIHZhciBySW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogZGF0YS5sZW5ndGgpKTsNCg0KICAgIGZvciAocnVsZSBpbiBydWxlcykgew0KICAgICAgICBpZiAocnVsZXMuaGFzT3duUHJvcGVydHkocnVsZSkpIHsNCiAgICAgICAgICAgIGlmIChydWxlID09ICJkYXRlIikgew0KICAgICAgICAgICAgICAgIHZhciBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpOw0KICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnZGQubW0ueXknLCBuZXcgRGF0ZSgpKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChydWxlLmluZGV4T2YoIlJlZ0V4IikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIiI7DQogICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigiaWQiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVtYWlsIikgIT0gLTENCiAgICAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuc2libGluZ3MoInNwYW4uWFBhdGhDbGFzcyIpLmh0bWwoKS5pbmRleE9mKCJJbnRlcm5ldEFkZHJlc3NbY29udGFpbnMoQWRkcmVzcywnQCcpXS9BZGRyZXNzIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGRhdGFbckluZGV4XSArICJAIiArIGRhdGFbckluZGV4XSArICIuY29tIjsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJvdsO6IGFkcmVzdSIpICE9IC0xDQogICAgICAgICAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIkludGVybmV0QWRkcmVzc1tub3QoY29udGFpbnMoQWRkcmVzcywnQCcpKV0vQWRkcmVzcyIpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gZGF0YVtySW5kZXhdICsgIi5jb20iOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIsSNw61zbG8gdGVsZWbDs251IikgIT0gLTENCiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIlRlbGVwaG9uZUFkZHJlc3MvTnVtYmVyL0Zvcm1hdHRlZE51bWJlciIpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9ICIrNDIxIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSA4OyBpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmROdW1iZXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTApKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJpxI1vIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gNzsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hdHRyKCJ0aXRsZSIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiZGnEjSIpICE9IC0xDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInJvZG7DqSDEjcOtc2xvIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDk7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kTnVtYmVyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDEwKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoInBvxaF0b3bDqSBzbWVyb3ZhY2llIMSNw61zbG8iKSAhPSAtMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50LnNpYmxpbmdzKCJzcGFuLlhQYXRoQ2xhc3MiKS5odG1sKCkuaW5kZXhPZigiRGVsaXZlcnlBZGRyZXNzL1Bvc3RhbENvZGUiKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDQ7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlICs9IHJhbmROdW1iZXI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXR0cigidGl0bGUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImnEjSBkcGgiKSAhPSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIlNLIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gOTsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZE51bWJlciA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX2RlY2ltYWwiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmROdW1iZXIgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTAwKSArIDEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSArPSByYW5kTnVtYmVyOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9maW5hbFZhbHVlID0gInJlZ2V4IjsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChydWxlID09ICJtaW5sZW5ndGgiKSB7DQogICAgICAgICAgICAgICAgdmFyIHJhbmRvbVZhbHVlID0gZGF0YVtySW5kZXhdOw0KICAgICAgICAgICAgICAgIHZhciBtaW5MZW5ndGggPSBwYXJzZUludChydWxlcy5taW5sZW5ndGgpOw0KDQogICAgICAgICAgICAgICAgd2hpbGUgKHJhbmRvbVZhbHVlLmxlbmd0aCA8IG1pbkxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICByYW5kb21WYWx1ZSArPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTApKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHJhbmRvbVZhbHVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHJ1bGUgPT0gIm1heGxlbmd0aCIpIHsNCiAgICAgICAgICAgICAgICB2YXIgcmFuZG9tVmFsdWUgPSBkYXRhW3JJbmRleF07DQogICAgICAgICAgICAgICAgdmFyIG1heExlbmd0aCA9IHBhcnNlSW50KHJ1bGVzLm1heGxlbmd0aCk7DQoNCiAgICAgICAgICAgICAgICBpZiAocmFuZG9tVmFsdWUubGVuZ3RoIDw9IG1heExlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gcmFuZG9tVmFsdWU7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHJhbmRvbVZhbHVlLnN1YnN0cmluZygwLCBtYXhMZW5ndGgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChlbGVtZW50LmF0dHIoInRpdGxlIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJwb8WhdG92w6kgc21lcm92YWNpZSDEjcOtc2xvIikgIT0gLTENCiAgICAgICAgICAgICAgfHwgZWxlbWVudC5zaWJsaW5ncygic3Bhbi5YUGF0aENsYXNzIikuaHRtbCgpLmluZGV4T2YoIkRlbGl2ZXJ5QWRkcmVzcy9Qb3N0YWxDb2RlIikgIT0gLTEpIHsNCiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gIiI7DQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gNDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByYW5kTnVtYmVyID0gTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDEwKSk7DQogICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgKz0gcmFuZE51bWJlcjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBlbGVtZW50LnZhbChmaW5hbFZhbHVlKS5jaGFuZ2UoKTsNCn0NCg0KZnVuY3Rpb24gRmlsbEZvcm0oKSB7DQogICAgLy8gcmFuZG9tIGNsaWNrIHRsYcSNaWRsYSBQcmlkYcWlICAgICAgICAgDQoNCiAgICB2YXIgZWxlbWVudHMgPSAkKCJpbnB1dDpyYWRpbywgaW5wdXQ6Y2hlY2tib3gsIHNlbGVjdCwgaW5wdXQ6dGV4dCwgdGV4dGFyZWEiKTsNCiAgICB2YXIgZGF0YSA9IFsibG9yZW0iLCAiaXBzdW0iLCAiZG9sb3IiLCAic2l0IiwgImFtZXQiLCAiY29uc2VjdGV0dXIiLCAiYWRpcGlzY2luZyIsICJlbGl0IiwgInV0IiwgImFsaXF1YW0iLCAicHVydXMiLCAic2l0IiwgImFtZXQiLCAibHVjdHVzIiwgInZlbmVuYXRpcyIsICJsZWN0dXMiLCAibWFnbmEiLCAiZnJpbmdpbGxhIiwgInVybmEiLCAicG9ydHRpdG9yIiwgInJob25jdXMiLCAiZG9sb3IiLCAicHVydXMiLCAibm9uIiwgImVuaW0iLCAicHJhZXNlbnQiLCAiZWxlbWVudHVtIiwgImZhY2lsaXNpcyIsICJsZW8iLCAidmVsIiwgImZyaW5naWxsYSIsICJlc3QiLCAidWxsYW1jb3JwZXIiLCAiZWdldCIsICJudWxsYSIsICJmYWNpbGlzaSIsICJldGlhbSIsICJkaWduaXNzaW0iLCAiZGlhbSIsICJxdWlzIiwgImVuaW0iLCAibG9ib3J0aXMiLCAic2NlbGVyaXNxdWUiLCAiZmVybWVudHVtIiwgImR1aSIsICJmYXVjaWJ1cyIsICJpbiIsICJvcm5hcmUiLCAicXVhbSIsICJ2aXZlcnJhIiwgIm9yY2kiLCAic2FnaXR0aXMiLCAiZXUiLCAidm9sdXRwYXQiLCAib2RpbyIsICJmYWNpbGlzaXMiLCAibWF1cmlzIiwgInNpdCIsICJhbWV0IiwgIm1hc3NhIiwgInZpdGFlIiwgInRvcnRvciIsICJjb25kaW1lbnR1bSIsICJsYWNpbmlhIiwgInF1aXMiLCAidmVsIiwgImVyb3MiLCAiZG9uZWMiLCAiYWMiLCAib2RpbyIsICJ0ZW1wb3IiLCAib3JjaSIsICJkYXBpYnVzIiwgInVsdHJpY2VzIiwgImluIiwgImlhY3VsaXMiLCAibnVuYyIsICJzZWQiLCAiYXVndWUiLCAibGFjdXMiLCAidml2ZXJyYSIsICJ2aXRhZSIsICJjb25ndWUiLCAiZXUiLCAiY29uc2VxdWF0IiwgImFjIiwgImZlbGlzIiwgImRvbmVjIiwgImV0IiwgIm9kaW8iLCAicGVsbGVudGVzcXVlIiwgImRpYW0iLCAidm9sdXRwYXQiLCAiY29tbW9kbyIsICJzZWQiLCAiZWdlc3RhcyIsICJlZ2VzdGFzIiwgImZyaW5naWxsYSIsICJwaGFzZWxsdXMiLCAiZmF1Y2lidXMiLCAic2NlbGVyaXNxdWUiLCAiZWxlaWZlbmQiLCAiZG9uZWMiLCAicHJldGl1bSIsICJ2dWxwdXRhdGUiLCAic2FwaWVuIiwgIm5lYyIsICJzYWdpdHRpcyIsICJhbGlxdWFtIiwgIm1hbGVzdWFkYSIsICJiaWJlbmR1bSIsICJhcmN1IiwgInZpdGFlIiwgImVsZW1lbnR1bSJdOw0KICAgIHZhciBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7DQoNCiAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIGVsZW1lbnQgPSAkKHRoaXMpOw0KICAgICAgICBpZiAoZWxlbWVudC5pcygiOnZpc2libGUiKSAmJiAhZWxlbWVudC5pcygiOmRpc2FibGVkIikgJiYgZWxlbWVudC5hdHRyKCJyZWFkb25seSIpICE9ICJyZWFkb25seSIpIHsNCiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAncmFkaW8nOiB7DQogICAgICAgICAgICAgICAgICAgIHZhciBlbGVtTmFtZSA9IGVsZW1lbnQuYXR0cigibmFtZSIpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgYWxsUmIgPSAkKCJbbmFtZT0nIiArIGVsZW1OYW1lICsgIiddIik7DQogICAgICAgICAgICAgICAgICAgIGlmICghYWxsUmIuaXMoIjpjaGVja2VkIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGxSYi5sZW5ndGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmIuZXEocmFuZEluZGV4KS5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmRDaGVjayA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygieHNkX3JlcXVpcmVkIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRDaGVjayA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmRDaGVjayAmJiAhZWxlbWVudC5pcygiOmNoZWNrZWQiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGljaygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3Qtb25lJzogew0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pcygiOmJsYW5rIikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gZWxlbWVudC5maW5kKCJvcHRpb24iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5kSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG9wdGlvbnMubGVuZ3RoIC0gMSkpICsgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zLmVxKHJhbmRJbmRleCkudmFsKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbChzZWxlY3RlZE9wdGlvbikuY2hhbmdlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOiB7DQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlzKCI6YmxhbmsiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoInJlbW90ZUxvb2t1cCIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cERldGFpbEluZm8gPSBlbGVtZW50LnNpYmxpbmdzKCIuTG9va3VwRGV0YWlsSW5mbyIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFZhbHVlSWQgPSBlbGVtZW50LmF0dHIoImlkIikgKyAiSXRlbU5hbWUiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXBGaWVsZFZhbHVlID0gJCgiW2lkPSciICsgZmllbGRWYWx1ZUlkICsgIiddIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsTG9va3VwKGVsZW1lbnQsIGxvb2t1cERldGFpbEluZm8sIGxvb2t1cEZpZWxkVmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsU3BlY2lmaWNJbnB1dChlbGVtZW50LCBlbGVtZW50LnJ1bGVzKCksIGRhdGEpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoIjpibGFuayIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZExlbmd0aCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBkYXRhTGVuZ3RoIC0gMSkgKyAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5TdHJpbmcgPSAiIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcmFuZExlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmRJbmRleCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiBkYXRhTGVuZ3RoIC0gMSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuU3RyaW5nID0gZGF0YVtyYW5kSW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlblN0cmluZyArPSAiICIgKyBkYXRhW3JhbmRJbmRleF07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbChnZW5TdHJpbmcpLmNoYW5nZSgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KLyogXV0+ICovDQo8L3NjcmlwdD4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCi8qIDwhW0NEQVRBWyAqLw0KJChkb2N1bWVudCkucmVhZHkoSW5pdE11bHRpcGxlTGluZUxhYmVsU3R5bGUpOw0KDQpmdW5jdGlvbiBJbml0TXVsdGlwbGVMaW5lTGFiZWxTdHlsZSgpIHsNCiAgICAkKGRvY3VtZW50KS5maW5kKCJsYWJlbC5maWVsZExhYmVsLHNwYW4uZmllbGRMYWJlbCIpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWxlbWVudCA9ICQodGhpcyk7DQogICAgICAgIHZhciBsaW5lcyA9IChlbGVtZW50LmhlaWdodCgpIC8gMzQpOw0KICAgICAgICBpZiAobGluZXMgPiAxKSB7DQogICAgICAgICAgICB2YXIgbWFyZ2luQm90dG9tID0gNSAqIChsaW5lcyAtIDEpOw0KICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gZWxlbWVudC5hdHRyKCJzdHlsZSIpICsgIjsgbWFyZ2luLWJvdHRvbTogIiArIG1hcmdpbkJvdHRvbS50b1N0cmluZygpICsgInB4OyI7DQogICAgICAgICAgICBlbGVtZW50LmF0dHIoInN0eWxlIiwgbmV3U3R5bGUpOw0KICAgICAgICB9DQogICAgfSk7DQp9DQovKiBdXT4gKi8NCjwvc2NyaXB0Pg0KDQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJdmFyIHByb2plY3RUeXBlID0gJ1VQVlMnOw0KCQkJCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCgkJCSQoIiNjYW5jZWxGb3JtIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCUNhbmNlbEZvcm0oKTsNCgkJCX0pOw0KDQoJCQkkKCIjdmFsaWRhdGVGb3JtIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCVZhbGlkYXRlRm9ybSgpOw0KCQkJfSk7DQoNCgkJCSQoIiNjbGVhckZvcm0iKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCQkJQ2xlYXJGb3JtKHRoaXMuZm9ybSk7DQoJCQl9KTsNCg0KCQkJJCgiI2xvYWRGb3JtWG1sIikuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkJCUxvYWRGcm9tRmlsZSgpOw0KCQkJfSk7DQoNCgkJCSQoIiNzYXZlVG9YbWwiKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCQkJU2F2ZVhtbEFzKCk7DQoJCQl9KTsNCgkJfSk7DQoJCQ0KCQkNCgkJCQkJLyogPCFbQ0RBVEFbICovDQoJCQ0KCQkNCgkJDQoJCQ0KCQlmdW5jdGlvbiBHZXRFeHRlcm5hbFJlc291cmNlSW5kZXgocmVzb3VyY2V0eXBlKSB7DQogIHN3aXRjaCAocmVzb3VyY2V0eXBlKSB7DQogICAgZGVmYXVsdDoNCiAgICAgIHJldHVybiBudWxsOw0KICB9DQogIHJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gR2V0RXh0ZXJuYWxSZXNvdXJjZShyZXNvdXJjZXR5cGUsIGluZGV4KSB7DQogIHN3aXRjaCAocmVzb3VyY2V0eXBlKSB7DQogICAgZGVmYXVsdDoNCiAgICAgIHJldHVybiBudWxsOw0KICB9DQogIHJldHVybiBudWxsOw0KfQ0KDQoJCWZ1bmN0aW9uIFNldERlZmF1bHRWYWx1ZShrZXksIHZhbHVlKSB7DQogIGlmICh2YWx1ZSA9PSAnJyB8fCBrZXkgPT0gJycpIHsNCiAgICByZXR1cm47DQoJfQ0KfQ0KZnVuY3Rpb24gR2V0RGVmYXVsdFZhbHVlKCkgew0KICB2YXIgcmV0U3RyaW5nID0gJyc7DQogIHJldHVybiByZXRTdHJpbmc7DQp9DQoNCgkJCQlmdW5jdGlvbiBJbml0Q29uZGl0aW9uYWxSdWxlcyhjb250ZXh0LCBzaWQpIHsNCgkJCWlmIChzaWQgPT0gbnVsbCkgew0KDQoJCQkkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7DQokKCJbaWR8PSdaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSddIikubWFzaygiWTk5OSA5OSIsIHsndHJhbnNsYXRpb24nOiB7IFk6IHtwYXR0ZXJuOiAvWyssLV0vLCBvcHRpb25hbDogdHJ1ZX0gfX0pOw0KfSk7DQoNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJfQ0KCQl9DQoJCQkJCQkNCg0KCQl2YXIgdmFsaWRhdG9yT2JqZWN0ID0gbnVsbDsNCgkJDQoJCWZ1bmN0aW9uIEluaXRWYWxpZGF0aW9uKCkgew0KCQkJdmFsaWRhdG9yT2JqZWN0ID0gJCgiI2VGb3JtX2VHb3ZfMDAxIikudmFsaWRhdGUoew0KCQkJCQkJCWVycm9yTGFiZWxDb250YWluZXI6ICQoIiNlcnJvcnNDb250YWluZXIiKSwNCgkJCQl3cmFwcGVyOiAibGkiLA0KCQkJCW9ua2V5dXA6IGZhbHNlLA0KCQkJCW9uY2xpY2s6IGZhbHNlLA0KCQkgICAgICAgIGlnbm9yZTogIi5kaXNhYmxlVmFsaWRhdG9ycyIsDQoJCQkJCQkJCXJ1bGVzOiB7DQoJCQkgIAkJDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6IDUNCn0sDQoNClppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KDQoNClppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KWmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCg0KDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiA2DQp9LA0KDQoNCg0KDQoNCg0KDQoNCg0KDQpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSA6DQp7DQptYXhsZW5ndGg6IDUNCn0sDQoNClppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG9fVGVsZXBob25lQWRkcmVzcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KUm96aG9kIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQp2eXJ1YmVueSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KcG9wbGF0b2sgOg0Kew0KcmVxdWlyZWQ6IHRydWUNCn0sDQoNCnppYWRhbSA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfSwNCg0KWmlhZG9zdERvdm9kIDoNCnsNCnJlcXVpcmVkOiB0cnVlDQp9LA0KDQoNCk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyA6DQp7DQpyZXF1aXJlZDogdHJ1ZQ0KfQ0KCQkJICAJfSwNCgkJCQltZXNzYWdlczogewkJCQ0KCQkJICAgCQkNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogIk1heGltw6FsbmEgZMS6xb5rYSBwb2xvxb5reSAnUFPEjCcgbXVzw60gYnnFpTogNSB6bmFrb3YiDQp9LA0KDQpaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnTWVubycgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCg0KWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdQcmllenZpc2tvJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KWmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0TDoXR1bSBuYXJvZGVuaWEnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIiwNCmRhdGU6ICJQb2xvxb5rYSAnRMOhdHVtIG5hcm9kZW5pYScgbcOhIG5lcGxhdG7DvSBmb3Jtw6F0Ig0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICdPYmVjJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNClppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnVWxpY2EnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KDQpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1PDunAuxI0uJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCg0KDQoNCg0KWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUgOg0Kew0KbWF4bGVuZ3RoOiAiTWF4aW3DoWxuYSBkxLrFvmthIHBvbG/Fvmt5ICdQU8SMJyBtdXPDrSBiecWlOiA2IHpuYWtvdiINCn0sDQoNCg0KDQoNCg0KDQoNCg0KDQoNClppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIDoNCnsNCm1heGxlbmd0aDogIk1heGltw6FsbmEgZMS6xb5rYSBwb2xvxb5reSAnUFPEjCcgbXVzw60gYnnFpTogNSB6bmFrb3YiDQp9LA0KDQpaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnVGVsZWbDs25uZSDEjcOtc2xvJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNClppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnRS1tYWlsb3bDoSBhZHJlc2EnIG11c8OtIGJ5xaUgdnlwbG5lbsOhIg0KfSwNCg0KUm96aG9kIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1JvemhvZG51dMOtbSDEjcOtc2xvJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCnZ5cnViZW55IDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ0JvbCB2eXJ1YmVuw70gbmEgcm9rJyBtdXPDrSBiecWlIHZ5cGxuZW7DoSINCn0sDQoNCnBvcGxhdG9rIDoNCnsNCnJlcXVpcmVkOiAiUG9sb8W+a2EgJ1BvcGxhdG9rIHphIGtvbXVuw6FsbmUgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHkgdm8gdsO9xaFrZSAo4oKsKScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQp6aWFkYW0gOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnxb1pYWRhbSBzcHLDoXZjdSBwb3BsYXRrdSBvIHpuw63FvmVuaWUvb2RwdXN0ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG5lIG9kcGFkeSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQpaaWFkb3N0RG92b2QgOg0Kew0KcmVxdWlyZWQ6ICJQb2xvxb5rYSAnRMO0dm9kIMW+aWFkb3N0aScgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9LA0KDQoNCk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyA6DQp7DQpyZXF1aXJlZDogIlBvbG/FvmthICfFvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEgdiBzw7psYWRlIHMgdXN0YW5vdmVuw61tIMKnIDExIHrDoWtvbmEgxI0uIDEyMi8yMDEzIFouIHouIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29uKSwgcG9za3l0dWplIE1lc3R1IMW9aWxpbmEsIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIHYgdGVqdG8gxb5pYWRvc3RpIGEgamVqIHByw61sb2jDoWNoLCBhIHRvIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHMgdMO9bSwgxb5lIGplIG9wcsOhdm5lbsO9IHRlbnRvIHPDumhsYXMgcMOtc29tbmUgb2R2b2xhxaUgdiBwcsOtcGFkZSBwcmV1a8OhemF0ZcS+bsOpaG8gcG9ydcWhZW5pYSB6w6Frb25hIHpvIHN0cmFueSBwcmV2w6FkemtvdmF0ZcS+YS4gT2R2b2xhbmllIG11c8OtIGJ5xaUgdXJvYmVuw6kgcMOtc29tbmUgYSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DqSBNZXN0dSDFvWlsaW5hLiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIHByZXVrw6F6YXRlxL5uw6lobyDDusSNZWx1IHNwcmFjw7p2YW5pYSBvc29ibsO9Y2ggw7pkYWpvdiBkb3RrbnV0ZWogb3NvYnkuIFByZXbDoWR6a292YXRlxL4gdMO9bXRvIHByZWhsYXN1amUsIMW+ZSBvc29ibsOpIMO6ZGFqZSBkb3RrbnV0ZWogb3NvYnkgYnVkZSBzcHJhY292w6F2YcWlIHBsbmUgdiBzw7psYWRlIHMgdXN0YW5vdmVuaWFtaSB6w6Frb25hLicgbXVzw60gYnnFpSB2eXBsbmVuw6EiDQp9CSAgCQ0KCQkJICAJfQ0KCQkJfSk7DQoJICAJfQ0KCS8qIF1dPiAqLw0KCQkJPC9zY3JpcHQ+DQoJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkJLmluZm9JY29uIHtkaXNwbGF5Om5vbmU7fQ0KLmxvZ28gaW1nIHt3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4O30NCi5MYWJlbEJvbGQgbGFiZWwge2ZvbnQtd2VpZ2h0OiBib2xkO30NCi5WZWNOYXpvdkZybSB7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOiBjZW50ZXI7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9DQouSGVhZGVyTmF6b3ZfaW50ZXJuYWx7d2lkdGg6NTAwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWx7d2lkdGg6MTM1cHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb25faW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGVfaW50ZXJuYWx7d2lkdGg6NTBweDt9LlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFse3dpZHRoOjQwcHg7fS5aaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFse3dpZHRoOjQwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWx7d2lkdGg6MTM1cHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFse3dpZHRoOjkwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHVfaW50ZXJuYWx7d2lkdGg6MTM1cHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbHt3aWR0aDo5MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbHt3aWR0aDo1MHB4O30uWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFse3dpZHRoOjUwcHg7fS5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWx7d2lkdGg6OTBweDt9LlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFse3dpZHRoOjUwcHg7fS56aWFkYW1faW50ZXJuYWx7d2lkdGg6MTUwcHg7fS5aaWFkb3N0RG92b2RfaW50ZXJuYWx7d2lkdGg6ODMwcHg7fS5TcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdF9pbnRlcm5hbHt3aWR0aDoyMDBweDt9DQoJPC9zdHlsZT4NCg0KPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+Cjxtc286Q3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzPg0KPG1zbzplRm9ybURvY0Rlc2NyaXB0aW9uIG1zZHQ6ZHQ9InN0cmluZyI+UHLDoXpkbnkgaHRtbCBmb3JtdWzDoXI8L21zbzplRm9ybURvY0Rlc2NyaXB0aW9uPg0KPG1zbzplRm9ybURvY0lkZW50aWZpZXIgbXNkdDpkdD0ic3RyaW5nIj5mb3JtLjc5OS5odG1sPC9tc286ZUZvcm1Eb2NJZGVudGlmaWVyPg0KPG1zbzplRm9ybURvY0xhbmd1YWdlIG1zZHQ6ZHQ9InN0cmluZyI+c2s8L21zbzplRm9ybURvY0xhbmd1YWdlPg0KPG1zbzplRm9ybURvY1R5cGUgbXNkdDpkdD0ic3RyaW5nIj5DTFNfRl9IVE1MX0ZPUk08L21zbzplRm9ybURvY1R5cGU+DQo8L21zbzpDdXN0b21Eb2N1bWVudFByb3BlcnRpZXM+CjwveG1sPjwhW2VuZGlmXS0tPg0KPC9oZWFkPg0KPGJvZHk+DQoJPG5vc2NyaXB0PjxwIGNsYXNzPSJub3NjcmlwdCI+UHJlIGtvbXBsZXRuw7ogZnVua8SNbm9zxaUgYXBsaWvDoWNpZSBqZSBwb3RyZWJuw6kgcG92b2xpxaUgSmF2YVNjcmlwdDwvcD48L25vc2NyaXB0Pg0KCTxkaXYgaWQ9ImVycm9yc0NvbnRhaW5lckRpdiIgY2xhc3M9ImVycm9yc0NvbnRhaW5lckRpdiI+IDx1bCBpZD0iZXJyb3JzQ29udGFpbmVyIiBjbGFzcz0iZXJyb3JzQ29udGFpbmVyIj48bGkvPjwvdWw+IDwvZGl2Pg0KCTxmb3JtIGlkPSJlRm9ybV9lR292XzAwMSIgYWN0aW9uPSIiPg0KCQk8ZGl2IGlkPSJtYWluIiBjbGFzcz0ibGF5b3V0TWFpbiB1aS13aWRnZXQtY29udGVudCI+CQ0KCQkJCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4MyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZWtjaWFPYmVjIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4MyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjI3IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjEyMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwNzk5NCIgY2xhc3M9ImNlbGwgIGxvZ28iID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbWcgc3JjPSJodHRwOi8vd3d3LnppbGluYS5zay91c2VyZmlsZXMvZXJiMS5qcGciIGFsdD0iIiB0aXRsZT0iIi8+PC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYyOCIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk1IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19Nc1UiICBzdHlsZT0id2lkdGg6NjAwcHg7Ij5NZXN0byDFvWlsaW5hOiBNZXN0c2vDvSDDunJhZCB2IMW9aWxpbmUsIE7DoW1lc3RpZSBvYmV0w60ga29tdW5pem11IDEsIDAxMSAzMSDFvWlsaW5hIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19Nc1UiIG5hbWU9Ik9iZWNfTXNVIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjM0MCIgIGFsdD0iIiB2YWx1ZT0iTWVzdHNrw70gw7pyYWQgdiDFvWlsaW5lLCBOw6FtZXN0aWUgb2JldMOtIGtvbXVuaXptdSAxLCAwMTEgMzEgxb1pbGluYSIgPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDc5OTciIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX0VtYWlsIiAgc3R5bGU9IndpZHRoOjYwMHB4OyI+RS1tYWlsOiBrY19wb2RhdGVsbmFAemlsaW5hLnNrIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjxpbnB1dCBpZD0iT2JlY19FbWFpbCIgbmFtZT0iT2JlY19FbWFpbCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxMDAiICBhbHQ9IiIgdmFsdWU9ImtjX3BvZGF0ZWxuYUB6aWxpbmEuc2siID48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA3OTk2IiBjbGFzcz0iY2VsbCAgTGFiZWxCb2xkIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iT2JlY19XZWIiICBzdHlsZT0id2lkdGg6NjAwcHg7Ij5XRUI6IHd3dy56aWxpbmEuc2sgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX1dlYiIgbmFtZT0iT2JlY19XZWIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSJ3d3cuemlsaW5hLnNrIiA+PC9pbnB1dD4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MjkiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjE2MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwNzk5OSIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfSUNPIiAgc3R5bGU9IndpZHRoOjE2MHB4OyI+ScSMTzogMDAzMjE3OTYgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0lDTyIgbmFtZT0iT2JlY19JQ08iIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIwMDMyMTc5NiIgPjwvaW5wdXQ+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDAiIGNsYXNzPSJjZWxsICBMYWJlbEJvbGQiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJPYmVjX0RJQyIgIHN0eWxlPSJ3aWR0aDoxNjBweDsiPkRJxIw6IDIwMjEzMzk0NzQgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PGlucHV0IGlkPSJPYmVjX0RJQyIgbmFtZT0iT2JlY19ESUMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIyMDIxMzM5NDc0IiA+PC9pbnB1dD4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwNzk5OCIgY2xhc3M9ImNlbGwgIExhYmVsQm9sZCIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9Ik9iZWNfVGVsZWZvbiIgIHN0eWxlPSJ3aWR0aDoxNjBweDsiPlRlbGVmw7NuOiAwNDEgLyA3MDYzIDExMSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiIHN0eWxlPSJkaXNwbGF5OiBub25lIj48aW5wdXQgaWQ9Ik9iZWNfVGVsZWZvbiIgbmFtZT0iT2JlY19UZWxlZm9uIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE1MCIgIGFsdD0iIiB2YWx1ZT0iMDQxIC8gNzA2MyAxMTEiID48L2lucHV0Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkJPGRpdiBpZD0ibGF5b3V0Um93MjI4ODUiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgIG5vY2FwdGlvbiAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VrY2lhSGVhZGVyIiAvPg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg4NSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjMxIiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAwMyIgY2xhc3M9ImNlbGwgIFZlY05hem92RnJtIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgICBzdHlsZT0id2lkdGg6ODUwcHg7Ij7FvWlhZG9zxaUgbyBvZHB1c3RlbmllL3puw63FvmVuaWUgcG9wbGF0a3UgemEga29tdW7DoWxueSBvZHBhZCBhIGRyb2Juw70gc3RhdmVibsO9IG9kcGFkICA8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4NiIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgTmV6b2JyYXpvdmF0SW5mb0lrb251UmVtb3RlTG9va3VwICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0ixb1pYWRhdGXEviAgLSBGeXppY2vDoSBvc29iYSI+xb1pYWRhdGXEviAgLSBGeXppY2vDoSBvc29iYQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4ODYiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzMiIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTYiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkgDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODg4IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICBub2NhcHRpb24gIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9EZXRhaWwiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg4IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzYiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPlRpdHVsIHByZWQgbWVub20gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlRpdHVsIHByZWQgbWVub20iIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mjwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsUHJlZF9QcmVmaXhRdWFsaWZpY2F0aW9uQWZmaXg8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwNjI8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij5NZW5vIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIiBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJNZW5vIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE5IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsUkMiICBzdHlsZT0id2lkdGg6MTI1cHg7Ij5Sb2Ruw6kgxI3DrXNsbyA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RldGFpbFJDIiBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsUkMiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJSb2Ruw6kgxI3DrXNsbyIgaG9kbm90dSB2IHR2YXJlIHMgbG9tw610a29tLjwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzNyIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDIxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+VGl0dWwgemEgbWVub20gPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RldGFpbFRpdHVsWmFfUG9zdGZpeFF1YWxpZmljYXRpb25BZmZpeDwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDA2Mzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVGl0dWwgemEgbWVub20iIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDYzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgIHN0eWxlPSJ3aWR0aDoxMjVweDsiPlByaWV6dmlza28gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIiBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUHJpZXp2aXNrbyIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RldGFpbERhdHVtTmFyb2RlbmlhX0RhdGVPZkJpcnRoIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+RMOhdHVtIG5hcm9kZW5pYSA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgYWx0PSIiIGlkPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiIG5hbWU9IlppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgZGF0ZSBkYXRlcGlja2VyICIgdmFsdWU9IiIgbWF4bGVuZ3RoPSIxNCIgc2l6ZT0iMTYwIiAgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIkTDoXR1bSBuYXJvZGVuaWEiIGhvZG5vdHUgdiB0dmFyZSAiZGXFiC5tZXNpYWMucm9rIiAoIkRELk1NLlJSUlIiKSBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJPC9kaXY+CQ0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDIzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4OSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSI+QWRyZXNhIHRydmFsw6lobyBwb2J5dHUJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg5IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzgiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPsWgdMOhdCA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyNSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiICBzdHlsZT0id2lkdGg6NDVweDsiPk9iZWMgPGVtPio8L2VtPjwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eV9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPYmVjIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI1PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+VWxpY2EgPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjAiICBhbHQ9IiIgdmFsdWU9IiIgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlVsaWNhIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiICBzdHlsZT0id2lkdGg6NzBweDsiPsSMw61zbG8gYnl0dSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2lzbG9CeXR1X2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTM1IiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLEjMOtc2xvIGJ5dHUiIGhvZG5vdHUuPC9zcGFuPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzkiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAyOSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iICBzdHlsZT0id2lkdGg6MjBweDsiPktyYWogPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uX2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIktyYWoiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMwIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgIHN0eWxlPSJ3aWR0aDo2MHB4OyI+xIxhc8WlIG9iY2UgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsSMYXPFpSBvYmNlIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDI4IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij5Tw7pwLsSNLiA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJTw7pwLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDAiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzMiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiAgc3R5bGU9IndpZHRoOjIwcHg7Ij5Pa3JlcyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9rcmVzIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgdGl0bGU9IlZ5YmVydGUgaG9kbm90dSIgY2xhc3M9Ikxvb2t1cEZvcm0iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQo8c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMzIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+UFPEjCA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiIG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjYiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJQU8SMIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDMxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiICBzdHlsZT0id2lkdGg6MjBweDsiPk9yLsSNLiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9yLsSNLiIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzNCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCSANCgkJPGRpdiBpZD0ibGF5b3V0Um93MjI4OTAiIGNsYXNzPSJsYXlvdXRSb3cgdWktdGFicyB1aS13aWRnZXQtY29udGVudCAgICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJBZHJlc2EgcHJlY2hvZG7DqWhvIHBvYnl0dSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+QWRyZXNhIHByZWNob2Ruw6lobyBwb2J5dHUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODkwIiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDEiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDM1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiICBzdHlsZT0id2lkdGg6NDVweDsiPsWgdMOhdCA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzA4NTk8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIsWgdMOhdCIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wODU5PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzNiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiICBzdHlsZT0id2lkdGg6NDVweDsiPk9iZWMgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iZWMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDM3IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij5VbGljYSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJVbGljYSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAzOCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiAgc3R5bGU9IndpZHRoOjcwcHg7Ij7EjMOtc2xvIGJ5dHUgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjEzNSIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIzDrXNsbyBieXR1IiBob2Rub3R1Ljwvc3Bhbj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+PC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQyIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMzkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij5LcmFqIDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJLcmFqIiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb248L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjM8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0MCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiICBzdHlsZT0id2lkdGg6NjBweDsiPsSMYXPFpSBvYmNlIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDEiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiICBzdHlsZT0id2lkdGg6NjBweDsiPlPDunAuxI0uIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiU8O6cC7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQzIiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDoyODBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+T2tyZXMgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5IiBjbGFzcz0ieHNkX3N0cmluZyByZW1vdGVMb29rdXAgWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNDwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0NCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPlBTxIwgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0MiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij5Pci7EjS4gPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlcl9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjUwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPci7EjS4iIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQkJCTxkaXYgaWQ9InJlcGV0aXRpb25Db21tYW5kc2xheW91dFJvdzIyODkwIiBjbGFzcz0ic2VjdGlvblBhZ2VyIj4NCgkJCQkJCQkJPHNwYW4gaWQ9ImFkZFNlY3Rpb25sYXlvdXRSb3cyMjg5MCIgY2xhc3M9ImJ1dHRvbiBhZGRSZW1vdmVTZWN0aW9uIiBvbmNsaWNrPSJhZGRTZWN0aW9uKDAsIDEsIHRoaXMpIiB0aXRsZT0iUHJpZGHFpSBzZWtjaXUgQWRyZXNhIHByZWNob2Ruw6lobyBwb2J5dHUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkiPlByaWRhxaU8L3NwYW4+DQoJCQkJPHNwYW4gaWQ9InJlbW92ZVNlY3Rpb25sYXlvdXRSb3cyMjg5MCIgY2xhc3M9ImJ1dHRvbiBhZGRSZW1vdmVTZWN0aW9uIiBvbmNsaWNrPSJyZW1vdmVTZWN0aW9uKDAsIHRoaXMpIiB0aXRsZT0iT2RvYnJhxaUgc2VrY2l1IEFkcmVzYSBwcmVjaG9kbsOpaG8gcG9ieXR1ICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5PZG9icmHFpTwvc3Bhbj4JDQoJCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigwLCAxLCAnbGF5b3V0Um93MjI4OTAnKSB9KTwvc2NyaXB0Pg0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg4NyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5BZHJlc2EgcHJlIGRvcnXEjWVuaWUgKHZ5cGzFiHRlIGFrIGplIGFkcmVzYSBpbsOhIGFrbyBhZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dSkJCQk8L2Rpdj4NCgkJCTxzcGFuIGNsYXNzPSJhcnJvdyB1aS1pY29uIHVpLWljb24tY2FyYXQtMS1uIj48L3NwYW4+PC9kaXY+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODg3IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzMiIGNsYXNzPSJjb2x1bW4gZmlyc3QiICBzdHlsZT0id2lkdGg6MjkwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDA2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij7FoHTDoXQgPC9sYWJlbD48ZGl2IGNsYXNzPSJmaWVsZENvbnRlbnQiPg0KPGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5X2ludGVybmFsIHRleHRCb3ggdHVybmVkIiB0aXRsZT0iIiAgPjwvaW5wdXQ+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixaB0w6F0IiBob2Rub3R1ICBhbGVibyB2eWJlcnRlIHogcG9udWt5Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPGlucHV0IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvIiB0eXBlPSJoaWRkZW4iIC8+DQo8c3BhbiBjbGFzcz0ibG9va3VwYnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLWJ1dHRvbi10ZXh0LW9ubHkiPlZ5YnJhxaU8L3NwYW4+DQo8ZGl2IHRpdGxlPSJJbmZvIiBjbGFzcz0iTG9va3VwRGV0YWlsIj48ZGl2IGNsYXNzPSJMb29rdXBEZXRhaWxJbmZvVGV4dCI+PC9kaXY+PHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDg1OTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDciIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgIHN0eWxlPSJ3aWR0aDo0NXB4OyI+T2JlYyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0idGV4dCIgIHZhbHVlPSIiIGFsdD0iIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIGNsYXNzPSJ4c2Rfc3RyaW5nIHJlbW90ZUxvb2t1cCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIk9iZWMiIGhvZG5vdHUgIGFsZWJvIHZ5YmVydGUgeiBwb251a3kuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8aW5wdXQgY2xhc3M9Ikxvb2t1cERldGFpbEluZm8iIHR5cGU9ImhpZGRlbiIgLz4NCjxzcGFuIGNsYXNzPSJsb29rdXBidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSI+VnlicmHFpTwvc3Bhbj4NCjxkaXYgdGl0bGU9IkluZm8iIGNsYXNzPSJMb29rdXBEZXRhaWwiPjxkaXYgY2xhc3M9Ikxvb2t1cERldGFpbEluZm9UZXh0Ij48L2Rpdj48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjU8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eTwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyNTwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJ0YWJsZUZpbHRlciI+DQpaYWRhanRlIHRleHQ6DQo8aW5wdXQgY2xhc3M9InRhYmxlRmlsdGVyVGV4dCB1aS1jb3JuZXItYWxsIiB0eXBlPSJ0ZXh0IiAvPg0KPGlucHV0IGNsYXNzPSJGaWx0ZXJCdXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkjEvmFkYcWlIiBhbHQ9IkjEvmFkYcWlIiAvPg0KPC9kaXY+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJkaXNwbGF5IExvb2t1cFRhYmxlIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Lw7NkPC90aD4NCjx0aD5Ib2Rub3RhPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRoPjwvdGg+DQo8dGg+PC90aD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KPC9kaXY+DQo8c3BhbiBjbGFzcz0iZmllbGRJbmZvIj4NCjxzcGFuIGNsYXNzPSJpbmZvSWNvbiB1aS1pY29uIHVpLWljb24taW5mbyI+PC9zcGFuPg0KPC9zcGFuPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIiAgc3R5bGU9IndpZHRoOjQ1cHg7Ij5VbGljYSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiVWxpY2EiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMDkiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiICBzdHlsZT0id2lkdGg6NzBweDsiPsSMw61zbG8gYnl0dSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1X2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTM1IiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICLEjMOtc2xvIGJ5dHUiIGhvZG5vdHUuPC9zcGFuPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2MzQiIGNsYXNzPSJjb2x1bW4gIiAgc3R5bGU9IndpZHRoOjI4MHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxMCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiAgc3R5bGU9IndpZHRoOjIwcHg7Ij5LcmFqIDwvbGFiZWw+PGRpdiBjbGFzcz0iZmllbGRDb250ZW50Ij4NCjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uIiB0eXBlPSJ0ZXh0IiAgdmFsdWU9IiIgYWx0PSIiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbl9pbnRlcm5hbCB0ZXh0Qm94IHR1cm5lZCIgdGl0bGU9IiIgID48L2lucHV0PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+DQo8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS3JhaiIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZVNvdXJjZUlkZW50aWZpZXIiPjwvc3Bhbj48c3BhbiBjbGFzcyA9InJlbW90ZUxvb2t1cENvZGUiPlNVU1JfMDAyMzwvc3Bhbj48L3NwYW4+PC9kaXY+DQo8ZGl2IHRpdGxlPSJWeWJlcnRlIGhvZG5vdHUiIGNsYXNzPSJMb29rdXBGb3JtIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KPHNwYW4gY2xhc3M9Imxvb2t1cENvbmZpZ3VyYXRpb24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHNwYW4gY2xhc3MgPSJsb29rdXBDb21wb25lbnRJZCI+WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUtyYWpfUmVnaW9uPC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDIzPC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9InRhYmxlRmlsdGVyIj4NClphZGFqdGUgdGV4dDoNCjxpbnB1dCBjbGFzcz0idGFibGVGaWx0ZXJUZXh0IHVpLWNvcm5lci1hbGwiIHR5cGU9InRleHQiIC8+DQo8aW5wdXQgY2xhc3M9IkZpbHRlckJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iSMS+YWRhxaUiIGFsdD0iSMS+YWRhxaUiIC8+DQo8L2Rpdj4NCjx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9ImRpc3BsYXkgTG9va3VwVGFibGUiPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkvDs2Q8L3RoPg0KPHRoPkhvZG5vdGE8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGg+PC90aD4NCjx0aD48L3RoPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCjxzcGFuIGNsYXNzPSJmaWVsZEluZm8iPg0KPHNwYW4gY2xhc3M9ImluZm9JY29uIHVpLWljb24gdWktaWNvbi1pbmZvIj48L3NwYW4+DQo8L3NwYW4+DQoJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxMSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiAgc3R5bGU9IndpZHRoOjYwcHg7Ij7EjGFzxaUgb2JjZSA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0IiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAixIxhc8WlIG9iY2UiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwMTIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiAgc3R5bGU9IndpZHRoOjYwcHg7Ij5Tw7pwLsSNLiA8L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyX2ludGVybmFsIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iNTAiICBhbHQ9IiIgdmFsdWU9IiIgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlPDunAuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjYzNSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6MjgwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE0IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiAgc3R5bGU9IndpZHRoOjIwcHg7Ij5Pa3JlcyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZpZWxkQ29udGVudCI+DQo8aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InRleHQiICB2YWx1ZT0iIiBhbHQ9IiIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgY2xhc3M9InhzZF9zdHJpbmcgcmVtb3RlTG9va3VwIFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHlfaW50ZXJuYWwgdGV4dEJveCB0dXJuZWQiIHRpdGxlPSIiICA+PC9pbnB1dD48c3BhbiBjbGFzcz0ibG9va3VwQ29uZmlndXJhdGlvbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48c3BhbiBjbGFzcyA9Imxvb2t1cENvbXBvbmVudElkIj5aaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlU291cmNlSWRlbnRpZmllciI+PC9zcGFuPjxzcGFuIGNsYXNzID0icmVtb3RlTG9va3VwQ29kZSI+U1VTUl8wMDI0PC9zcGFuPjwvc3Bhbj4NCjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJPa3JlcyIgaG9kbm90dSAgYWxlYm8gdnliZXJ0ZSB6IHBvbnVreS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjxpbnB1dCBjbGFzcz0iTG9va3VwRGV0YWlsSW5mbyIgdHlwZT0iaGlkZGVuIiAvPg0KPHNwYW4gY2xhc3M9Imxvb2t1cGJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5Ij5WeWJyYcWlPC9zcGFuPg0KPGRpdiB0aXRsZT0iSW5mbyIgY2xhc3M9Ikxvb2t1cERldGFpbCI+PGRpdiBjbGFzcz0iTG9va3VwRGV0YWlsSW5mb1RleHQiPjwvZGl2PjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPjwvZGl2Pg0KPGRpdiB0aXRsZT0iVnliZXJ0ZSBob2Rub3R1IiBjbGFzcz0iTG9va3VwRm9ybSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxzcGFuIGNsYXNzPSJsb29rdXBDb25maWd1cmF0aW9uIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxzcGFuIGNsYXNzID0ibG9va3VwQ29tcG9uZW50SWQiPlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPa3Jlc19Db3VudHk8L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVTb3VyY2VJZGVudGlmaWVyIj48L3NwYW4+PHNwYW4gY2xhc3MgPSJyZW1vdGVMb29rdXBDb2RlIj5TVVNSXzAwMjQ8L3NwYW4+PC9zcGFuPg0KPGRpdiBjbGFzcz0idGFibGVGaWx0ZXIiPg0KWmFkYWp0ZSB0ZXh0Og0KPGlucHV0IGNsYXNzPSJ0YWJsZUZpbHRlclRleHQgdWktY29ybmVyLWFsbCIgdHlwZT0idGV4dCIgLz4NCjxpbnB1dCBjbGFzcz0iRmlsdGVyQnV0dG9uIHVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiB0eXBlPSJidXR0b24iIHZhbHVlPSJIxL5hZGHFpSIgYWx0PSJIxL5hZGHFpSIgLz4NCjwvZGl2Pg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0iZGlzcGxheSBMb29rdXBUYWJsZSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+S8OzZDwvdGg+DQo8dGg+SG9kbm90YTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0aD48L3RoPg0KPHRoPjwvdGg+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KPHNwYW4gY2xhc3M9ImZpZWxkSW5mbyI+DQo8c3BhbiBjbGFzcz0iaW5mb0ljb24gdWktaWNvbiB1aS1pY29uLWluZm8iPjwvc3Bhbj4NCjwvc3Bhbj4NCgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDE1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhUFNDX1Bvc3RhbENvZGUiICBzdHlsZT0id2lkdGg6MjBweDsiPlBTxIwgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZV9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUFPEjCIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODAxMyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgIHN0eWxlPSJ3aWR0aDoyMHB4OyI+T3IuxI0uIDwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94IFppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXJfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSI1MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiT3IuxI0uIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQoJCTwvZGl2Pg0KCQkJCQk8ZGl2IGlkPSJyZXBldGl0aW9uQ29tbWFuZHNsYXlvdXRSb3cyMjg4NyIgY2xhc3M9InNlY3Rpb25QYWdlciI+DQoJCQkJCQkJCTxzcGFuIGlkPSJhZGRTZWN0aW9ubGF5b3V0Um93MjI4ODciIGNsYXNzPSJidXR0b24gYWRkUmVtb3ZlU2VjdGlvbiIgb25jbGljaz0iYWRkU2VjdGlvbigwLCAxLCB0aGlzKSIgdGl0bGU9IlByaWRhxaUgc2VrY2l1IEFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KSI+UHJpZGHFpTwvc3Bhbj4NCgkJCQk8c3BhbiBpZD0icmVtb3ZlU2VjdGlvbmxheW91dFJvdzIyODg3IiBjbGFzcz0iYnV0dG9uIGFkZFJlbW92ZVNlY3Rpb24iIG9uY2xpY2s9InJlbW92ZVNlY3Rpb24oMCwgdGhpcykiIHRpdGxlPSJPZG9icmHFpSBzZWtjaXUgQWRyZXNhIHByZSBkb3J1xI1lbmllICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpIj5PZG9icmHFpTwvc3Bhbj4JDQoJCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7IGluaXRSZXBldGl0aW9uU2VjdGlvbigwLCAxLCAnbGF5b3V0Um93MjI4ODcnKSB9KTwvc2NyaXB0Pg0KCQkJCQkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDQ1IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJIA0KCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5MSIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Il8xc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsbyIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IktvbnRha3QgLSB0ZWxlZsOzbiI+S29udGFrdCAtIHRlbGVmw7NuCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5MSIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ0IiBjbGFzcz0iY29sdW1uIGZpcnN0IiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA0NiIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiAgc3R5bGU9IndpZHRoOjExNXB4OyI+VGVsZWbDs25uZSDEjcOtc2xvIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0iWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIiBuYW1lPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTAwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJUZWxlZsOzbm5lIMSNw61zbG8iIGhvZG5vdHUsIG9kcG9yw7rEjWFtZSB2IG1lZHppbsOhcm9kbm9tIHR2YXJlICs0MjF4eHguPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDciIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkgDQoJCTxkaXYgaWQ9ImxheW91dFJvdzIyODkyIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iXzJzZWtjaWFaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iS29udGFrdCAtIEUtbWFpbCI+S29udGFrdCAtIEUtbWFpbAkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTIiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NSIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNDgiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiICBzdHlsZT0id2lkdGg6MTE1cHg7Ij5FLW1haWxvdsOhIGFkcmVzYSA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIG5hbWU9IlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIHRpdGxlPSIiIHR5cGU9InRleHQiIGNsYXNzPSJ4c2Rfc3RyaW5nIHRleHRCb3ggIiBzcGVsbGNoZWNrPSJ0cnVlIiBtYXhsZW5ndGg9IjQwMCIgc2l6ZT0iMTkwIiAgYWx0PSIiIHZhbHVlPSIiID48L2lucHV0PjxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5aYWRhanRlIGRvIHBvxL5hICJFLW1haWxvdsOhIGFkcmVzYSIgaG9kbm90dSB2IHR2YXJlIG1lbm9AZG9tw6luYS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxkaXYgaWQ9ImxheW91dFJvdzIyODkzIiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iWmlhZG9zdCIgLz4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJjYXB0aW9uIHVpLXdpZGdldC1oZWFkZXIiPgkJDQoJCQkJPGRpdiBjbGFzcz0iaGVhZGVyY29ycmVjdGlvbiIgdGl0bGU9IsW9aWFkb3PFpSI+xb1pYWRvc8WlCQkJPC9kaXY+DQoJCQk8c3BhbiBjbGFzcz0iYXJyb3cgdWktaWNvbiB1aS1pY29uLWNhcmF0LTEtbiI+PC9zcGFuPjwvZGl2Pg0KCQkJCTxkaXYgaWQ9ImxheW91dFJvd0NvbnRlbnRsYXlvdXRSb3cyMjg5MyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ2IiBjbGFzcz0iY29sdW1uIGZpcnN0IiAgc3R5bGU9IndpZHRoOjQwMHB4OyI+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA1MCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iUm96aG9kIiAgc3R5bGU9IndpZHRoOjEyNXB4OyI+Um96aG9kbnV0w61tIMSNw61zbG8gPGVtPio8L2VtPjwvbGFiZWw+PHNwYW4gY2xhc3M9ImZpZWxkQ29udGVudCI+PGlucHV0IGlkPSJSb3pob2QiIG5hbWU9IlJvemhvZCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCAiIHNwZWxsY2hlY2s9InRydWUiIG1heGxlbmd0aD0iNDAwIiBzaXplPSIxOTAiICBhbHQ9IiIgdmFsdWU9IiIgPjwvaW5wdXQ+PGRpdiBjbGFzcz0iaW5mbyI+PGRpdiBjbGFzcz0iZGlhbG9nLW1vZGFsIiB0aXRsZT0iTsOhcG92ZWRhIj48cD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KcCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KYm9keSB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IA0KLnBfNkFBRDUwNjAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCi5zX0QzRkNCN0I4IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gPC9zdHlsZT48cCBjbGFzcz0icF82QUFENTA2MCI+PHNwYW4gY2xhc3M9InNfRDNGQ0I3QjgiPlphZGFqdGUgZG8gcG/EvmEgIlJvemhvZG51dMOtbSDEjcOtc2xvIiBob2Rub3R1Ljwvc3Bhbj48L3A+PC9wPjwvZGl2PjwvZGl2Pg0KPC9zcGFuPgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY0NyIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NDAwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDUxIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJ2eXJ1YmVueSIgIHN0eWxlPSJ3aWR0aDoxNDBweDsiPkJvbCB2eXJ1YmVuw70gbmEgcm9rIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0idnlydWJlbnkiIG5hbWU9InZ5cnViZW55IiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiQm9sIHZ5cnViZW7DvSBuYSByb2siIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJCTxkaXYgaWQ9ImxheW91dENvbHVtbjQyNjQ4IiBjbGFzcz0iY29sdW1uICIgIHN0eWxlPSJ3aWR0aDo5MDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTIiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGxhYmVsIGNsYXNzPSJmaWVsZExhYmVsIiB0aXRsZT0iIiBmb3I9InBvcGxhdG9rIiAgc3R5bGU9IndpZHRoOjU0MHB4OyI+UG9wbGF0b2sgemEga29tdW7DoWxuZSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeSB2byB2w73FoWtlICjigqwpIDxlbT4qPC9lbT48L2xhYmVsPjxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxpbnB1dCBpZD0icG9wbGF0b2siIG5hbWU9InBvcGxhdG9rIiB0aXRsZT0iIiB0eXBlPSJ0ZXh0IiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0Qm94ICIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjE5MCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiUG9wbGF0b2sgemEga29tdW7DoWxuZSBhIGRyb2Juw6kiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTMiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICAgc3R5bGU9IndpZHRoOjY0MHB4OyI+xb1pYWRhbSBzcHLDoXZjdSBwb3BsYXRrdSBvIHpuw63FvmVuaWUvb2RwdXN0ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG5lIG9kcGFkeSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeSA8ZW0+KjwvZW0+IDxkaXYgY2xhc3M9ImluZm8iPjxkaXYgY2xhc3M9ImRpYWxvZy1tb2RhbCIgdGl0bGU9Ik7DoXBvdmVkYSI+PHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCnAgeyBtYXJnaW4tdG9wOiAwcHg7bWFyZ2luLWJvdHRvbTogMTJweDtsaW5lLWhlaWdodDogMS4xNTsgfSANCmJvZHkgeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSANCi5wXzZBQUQ1MDYwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQouc19EM0ZDQjdCOCB7IGZvbnQtZmFtaWx5OiAnVmVyZGFuYSc7Zm9udC1zaXplOiAxNnB4OyB9IDwvc3R5bGU+PHAgY2xhc3M9InBfNkFBRDUwNjAiPjxzcGFuIGNsYXNzPSJzX0QzRkNCN0I4Ij5WeWJlcnRlIGplZG51IHogbW/Fvm5vc3TDrS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj48L3NwYW4+PGZpZWxkc2V0PjxsZWdlbmQ+PC9sZWdlbmQ+PGRpdiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgemlhZGFtX2ludGVybmFsIj48c3Bhbj48aW5wdXQgaWQ9InppYWRhbSIgbmFtZT0iemlhZGFtIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgemlhZGFtX2ludGVybmFsIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJ6bsOtxb5lbmllICIgdmFsdWU9Inpuw63FvmVuaWUgIiAgID48L2lucHV0PjxsYWJlbCBmb3I9InppYWRhbSIgY2xhc3M9Im9wdGlvbkxhYmVsIj56bsOtxb5lbmllIDwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iemlhZGFtUG9zdGZpeExpc3QxIiBuYW1lPSJ6aWFkYW0iIGNsYXNzPSJ4c2Rfc3RyaW5nIHJhZGlvQnV0dG9uTGlzdCB6aWFkYW1faW50ZXJuYWwiIHRpdGxlPSIiIHR5cGU9InJhZGlvIiBhbHQ9Im9kcHVzdGVuaWUgIiB2YWx1ZT0ib2RwdXN0ZW5pZSAiICAgPjwvaW5wdXQ+PGxhYmVsIGZvcj0iemlhZGFtUG9zdGZpeExpc3QxIiBjbGFzcz0ib3B0aW9uTGFiZWwiPm9kcHVzdGVuaWUgPC9sYWJlbD48L3NwYW4+PC9kaXY+PC9maWVsZHNldD4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NDkiIGNsYXNzPSJjb2x1bW4gIiA+DQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA1NCIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8bGFiZWwgY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiIGZvcj0iWmlhZG9zdERvdm9kIiA+RMO0dm9kIMW+aWFkb3N0aSA8ZW0+KjwvZW0+PC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48dGV4dGFyZWEgaWQ9IlppYWRvc3REb3ZvZCIgbmFtZT0iWmlhZG9zdERvdm9kIiB0aXRsZT0iIiBjbGFzcz0ieHNkX3N0cmluZyB0ZXh0QXJlYSBaaWFkb3N0RG92b2RfaW50ZXJuYWwiIHNwZWxsY2hlY2s9InRydWUiICBjb2xzPSIxMDAiIHJvd3M9IjMiICA+PC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiRMO0dm9kIMW+aWFkb3N0aSIgaG9kbm90dS48L3NwYW4+PC9wPjwvcD48L2Rpdj48L2Rpdj4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA1NSIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgICBzdHlsZT0id2lkdGg6ODAwcHg7Ij5WIHByw61wYWRlLCDFvmUgcG9ka2xhZCAocG92aW5uw6kgcHLDrWxvaHkpIG5pZSBzw7ogdnlzdGF2ZW7DqSB2IHNsb3ZlbnNrb20gYWxlYm8gxI1lc2tvbSBqYXp5a3UsIHBvcGxhdG7DrWsgcHJlZGxvxb7DrSBhaiBwcmVrbGFkIHByw61zbHXFoW7DqWhvIHBvZGtsYWR1LCBwb2Rww61zYW7DqWhvIHBvcGxhdG7DrWtvbS4gIDwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkNCgkJCQk8L2Rpdj4JDQoJCQkJDQoJCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQk8L2Rpdj4NCgkJCTwvZGl2PgkNCgkJCQkJCTxkaXYgaWQ9ImxheW91dFJvdzIyODk0IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQgICAiICAgdGl0bGU9IiIgPg0KCQkJCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2VrY2lhT2NocmFuYU9zb2JueWNoVWRham92IiAvPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+CQkNCgkJCQk8ZGl2IGNsYXNzPSJoZWFkZXJjb3JyZWN0aW9uIiB0aXRsZT0iT2NocmFuYSBvc29ibsO9Y2ggw7pkYWpvdiI+T2NocmFuYSBvc29ibsO9Y2ggw7pkYWpvdgkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTQiIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY1MCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNTciIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPGlucHV0IGlkPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIG5hbWU9Ik9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhcyIgdGl0bGU9IiIgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJ4c2RfYm9vbGVhbiBjaGVja0JveCAiIHZhbHVlPSLFvWlhZGF0ZcS+IGFrbyBkb3RrbnV0w6Egb3NvYmEgdiBzw7psYWRlIHMgdXN0YW5vdmVuw61tIMKnIDExIHrDoWtvbmEgxI0uIDEyMi8yMDEzIFouIHouIG8gb2NocmFuZSBvc29ibsO9Y2ggw7pkYWpvdiBhIG8gem1lbmUgYSBkb3BsbmVuw60gbmlla3RvcsO9Y2ggesOha29ub3YgKMSPYWxlaiBsZW4g4oCeesOha29uKSwgcG9za3l0dWplIE1lc3R1IMW9aWxpbmEsIGFrbyBwcmV2w6FkemtvdmF0ZcS+b3ZpLCBzw7pobGFzIHNvIHNwcmFjb3ZhbsOtbSBvc29ibsO9Y2ggw7pkYWpvdiB1dmVkZW7DvWNoIHYgdGVqdG8gxb5pYWRvc3RpIGEgamVqIHByw61sb2jDoWNoLCBhIHRvIHphIMO6xI1lbG9tIGJlenBlxI1uZWogYSB6w6FtZW51IHZ5bHXEjXVqw7pjZWogaWRlbnRpZmlrw6FjaWUgZG90a251dGVqIG9zb2J5IHMgdMO9bSwgxb5lIGplIG9wcsOhdm5lbsO9IHRlbnRvIHPDumhsYXMgcMOtc29tbmUgb2R2b2xhxaUgdiBwcsOtcGFkZSBwcmV1a8OhemF0ZcS+bsOpaG8gcG9ydcWhZW5pYSB6w6Frb25hIHpvIHN0cmFueSBwcmV2w6FkemtvdmF0ZcS+YS4gT2R2b2xhbmllIG11c8OtIGJ5xaUgdXJvYmVuw6kgcMOtc29tbmUgYSBwcmV1a8OhemF0ZcS+bmUgZG9ydcSNZW7DqSBNZXN0dSDFvWlsaW5hLiBEb2JhIHBsYXRub3N0aSBzw7pobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIHByZXVrw6F6YXRlxL5uw6lobyDDusSNZWx1IHNwcmFjw7p2YW5pYSBvc29ibsO9Y2ggw7pkYWpvdiBkb3RrbnV0ZWogb3NvYnkuIFByZXbDoWR6a292YXRlxL4gdMO9bXRvIHByZWhsYXN1amUsIMW+ZSBvc29ibsOpIMO6ZGFqZSBkb3RrbnV0ZWogb3NvYnkgYnVkZSBzcHJhY292w6F2YcWlIHBsbmUgdiBzw7psYWRlIHMgdXN0YW5vdmVuaWFtaSB6w6Frb25hLiIgYWx0PSIiICAgPjwvaW5wdXQ+PGxhYmVsIGZvcj0iT2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIiBjbGFzcz0iY2hlY2tCb3hMYWJlbCI+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS48L2xhYmVsPjxiciAvPg0KCQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5NyIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgIiAgIHRpdGxlPSIiID4NCgkJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIC8+DQoJCQkJCQkJPGRpdiBjbGFzcz0iY2FwdGlvbiB1aS13aWRnZXQtaGVhZGVyIj4JCQ0KCQkJCTxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJTcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHUiPlNww7Rzb2IgZG9ydcSNZW5pYSB2w71zdHVwdQkJCTwvZGl2Pg0KCQkJPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj48L2Rpdj4NCgkJCQk8ZGl2IGlkPSJsYXlvdXRSb3dDb250ZW50bGF5b3V0Um93MjI4OTciIGNsYXNzPSJjb2x1bW5zIj4NCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY1NCIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgIHN0eWxlPSJ3aWR0aDozMDBweDsiPg0KCQkJCQkJCQkJCQkNCjxkaXYgaWQ9ImxheW91dENlbGwxMDgwNjUiIGNsYXNzPSJjZWxsICIgPgkJDQoJCQkNCgkJPHNwYW4gY2xhc3M9ImZpZWxkTGFiZWwiIHRpdGxlPSIiICA+U3DDtHNvYiBkb3J1xI1lbmlhIHbDvXN0dXB1ICA8ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+VnliZXJ0ZSBqZWRudSB6IG1vxb5ub3N0w60uPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+PC9zcGFuPjxmaWVsZHNldD48bGVnZW5kPjwvbGVnZW5kPjxkaXYgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0ICI+PHNwYW4+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJlRGVzayIgdmFsdWU9ImVEZXNrIiBjaGVja2VkPSJjaGVja2VkIiAgPjwvaW5wdXQ+PGxhYmVsIGZvcj0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCIgY2xhc3M9Im9wdGlvbkxhYmVsIj5lRGVzazwvbGFiZWw+PC9zcGFuPjxzcGFuPjxpbnB1dCBpZD0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cFBvc3RmaXhMaXN0MSIgbmFtZT0iU3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cCIgY2xhc3M9InhzZF9zdHJpbmcgcmFkaW9CdXR0b25MaXN0ICIgdGl0bGU9IiIgdHlwZT0icmFkaW8iIGFsdD0ib3NvYm5lIiB2YWx1ZT0ib3NvYm5lIiAgID48L2lucHV0PjxsYWJlbCBmb3I9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXBQb3N0Zml4TGlzdDEiIGNsYXNzPSJvcHRpb25MYWJlbCI+b3NvYm5lPC9sYWJlbD48L3NwYW4+PHNwYW4+PGlucHV0IGlkPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QyIiBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiBjbGFzcz0ieHNkX3N0cmluZyByYWRpb0J1dHRvbkxpc3QgIiB0aXRsZT0iIiB0eXBlPSJyYWRpbyIgYWx0PSJwb8WhdG91IiB2YWx1ZT0icG/FoXRvdSIgICA+PC9pbnB1dD48bGFiZWwgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwUG9zdGZpeExpc3QyIiBjbGFzcz0ib3B0aW9uTGFiZWwiPnBvxaF0b3U8L2xhYmVsPjwvc3Bhbj48L2Rpdj48L2ZpZWxkc2V0PgkNCgkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCjwvZGl2PgkJCQkJCQkNCgkJCQkJCQ0KCQkJCTwvZGl2PgkNCgkJCQkNCgkJCQk8ZGl2IGlkPSJsYXlvdXRDb2x1bW40MjY1NSIgY2xhc3M9ImNvbHVtbiAiICBzdHlsZT0id2lkdGg6NTUwcHg7Ij4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDY2IiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxsYWJlbCBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgZm9yPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgIHN0eWxlPSJ3aWR0aDoyNzBweDsiPktvbnRha3QgdiBwcsOtcGFkZSBkb3J1xI1lbmlhIG9zb2JuZSAvIHBvxaF0b3UgPC9sYWJlbD48c3BhbiBjbGFzcz0iZmllbGRDb250ZW50Ij48aW5wdXQgaWQ9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0IiBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdCIgdGl0bGU9IiIgdHlwZT0idGV4dCIgY2xhc3M9InhzZF9zdHJpbmcgdGV4dEJveCBTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1S29udGFrdF9pbnRlcm5hbCIgc3BlbGxjaGVjaz0idHJ1ZSIgbWF4bGVuZ3RoPSI0MDAiIHNpemU9IjIwMCIgIGFsdD0iIiB2YWx1ZT0iIiA+PC9pbnB1dD48ZGl2IGNsYXNzPSJpbmZvIj48ZGl2IGNsYXNzPSJkaWFsb2ctbW9kYWwiIHRpdGxlPSJOw6Fwb3ZlZGEiPjxwPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpwIHsgbWFyZ2luLXRvcDogMHB4O21hcmdpbi1ib3R0b206IDEycHg7bGluZS1oZWlnaHQ6IDEuMTU7IH0gDQpib2R5IHsgZm9udC1mYW1pbHk6ICdWZXJkYW5hJztmb250LXNpemU6IDE2cHg7IH0gDQoucF82QUFENTA2MCB7IG1hcmdpbi10b3A6IDBweDttYXJnaW4tYm90dG9tOiAxMnB4O2xpbmUtaGVpZ2h0OiAxLjE1OyB9IA0KLnNfRDNGQ0I3QjggeyBmb250LWZhbWlseTogJ1ZlcmRhbmEnO2ZvbnQtc2l6ZTogMTZweDsgfSA8L3N0eWxlPjxwIGNsYXNzPSJwXzZBQUQ1MDYwIj48c3BhbiBjbGFzcz0ic19EM0ZDQjdCOCI+WmFkYWp0ZSBkbyBwb8S+YSAiS29udGFrdCB2IHByw61wYWRlIGRvcnXEjWVuaWEgb3MiIGhvZG5vdHUuPC9zcGFuPjwvcD48L3A+PC9kaXY+PC9kaXY+DQo8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQk8ZGl2IGlkPSJsYXlvdXRSb3cyMjg5NiIgY2xhc3M9ImxheW91dFJvdyB1aS10YWJzIHVpLXdpZGdldC1jb250ZW50ICAgbm9jYXB0aW9uICIgICB0aXRsZT0iIiA+DQoJCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWtjaWFGb290ZXIiIC8+DQoJCQkJPGRpdiBpZD0ibGF5b3V0Um93Q29udGVudGxheW91dFJvdzIyODk2IiBjbGFzcz0iY29sdW1ucyI+DQoJCQkJDQoJCQkJPGRpdiBpZD0ibGF5b3V0Q29sdW1uNDI2NTMiIGNsYXNzPSJjb2x1bW4gZmlyc3QiID4NCgkJCQkJCQkJCQkJDQo8ZGl2IGlkPSJsYXlvdXRDZWxsMTA4MDYyIiBjbGFzcz0iY2VsbCAiID4JCQ0KCQkJDQoJCTxzcGFuIGNsYXNzPSJmaWVsZENvbnRlbnQiPjxhIGhyZWY9Imh0dHA6Ly93d3cuemlsaW5hLnNrIiBjbGFzcz0ieHNkX3N0cmluZyBoeXBlckxpbmsgIiB0YXJnZXQ9Il9ibGFuayIgPkNvcHlyaWdodCDCqSAyMDE1LCBNZXN0byDFvWlsaW5hIC0gVsWhZXRreSBwcsOhdmEgdnlocmFkZW7DqTwvYT4NCjwvc3Bhbj4JDQoJCTxkaXYgY2xhc3M9ImNsZWFyIj4gPC9kaXY+DQo8L2Rpdj4JCQkJCQkJDQoJCQkJCQkJCQkJCQ0KPGRpdiBpZD0ibGF5b3V0Q2VsbDEwODA2MyIgY2xhc3M9ImNlbGwgIiA+CQkNCgkJCQ0KCQk8c3BhbiBjbGFzcz0iZmllbGRMYWJlbCIgdGl0bGU9IiIgICBzdHlsZT0id2lkdGg6NDAwcHg7Ij5NZXN0byDFvWlsaW5hIC0gTWVzdG8gcyB0dsOhcm91ICA8L3NwYW4+CQ0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KPC9kaXY+CQkJCQkJCQ0KCQkJCQkJDQoJCQkJPC9kaXY+CQ0KCQkJCQ0KCQkJPGRpdiBjbGFzcz0iY2xlYXIiPiA8L2Rpdj4NCgkJPC9kaXY+DQoJCQk8L2Rpdj4JDQoJCQkJCQ0KCQkJPGRpdiBpZD0iYnV0dG9uc1BsYWNlaG9sZGVyIj4NCgkJCQkJCQkJCTxpbnB1dCBpZD0idmFsaWRhdGVGb3JtIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlNrb250cm9sb3ZhxaUiIGFsdD0iU2tvbnRyb2xvdmHFpSIgYWNjZXNza2V5PSJTIiAvPg0KCQkJCQkJCQkJCTxpbnB1dCBpZD0iY2xlYXJGb3JtIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9IlZ5xI1pc3RpIiAgYWx0PSJWecSNaXN0aSIgYWNjZXNza2V5PSJWIiAvPg0KCQkJCQk8aW5wdXQgaWQ9ImxvYWRGb3JtWG1sIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtb25seSIgdmFsdWU9Ik5hxI3DrXRhxaUiICBhbHQ9Ik5hxI3DrXRhxaUiIGFjY2Vzc2tleT0iTiIgLz4NCgkJCQkJPGlucHV0IGlkPSJzYXZlVG9YbWwiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iVWxvxb5pxaUiICBhbHQ9IlVsb8W+acWlIiBhY2Nlc3NrZXk9IlUiIC8+DQoJCQkJCQkJCQk8aW5wdXQgaWQ9ImNhbmNlbEZvcm0iIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ1dHRvbiB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB1aS1idXR0b24tdGV4dC1vbmx5IiB2YWx1ZT0iWnJ1xaFpxaUiICBhbHQ9IlpydcWhacWlIiBhY2Nlc3NrZXk9IloiIC8+CQkJDQoJCQk8L2Rpdj4JCQ0KCQk8L2Rpdj4NCgkJPGRpdiBpZD0ic3RhdHVzRGlhbG9nIiB0aXRsZT0iU3RhdHVzIj4NCgkJCTxpbWcgaWQ9InN0YXR1c0xvYWRlciIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQU1BQUFCZzNBbTFBQUFBQ0dGalZFd0FBQUFKQUFBQUFJUmRvbUVBQUFEYlVFeFVSUUFBQVAvLy83UENycTYrcUx2SXRoTkJBZFhkMHVUcDRzL1l6TUxPdnNqU3hQSHo4TnpqMnZyNyt1M3c3S2U0b1BiNDlxR3ptdW50NkJOQkFaS25pakJZSUY1K1VqbGdLaUZNRUVGbU12VDI5TXpWeUVwdFBML0x1c1RQd0phcWp1WHE1SjJ3bG11SVlLcTdwSU9iZXJmRnNrIiBhbHQ9IsSMYWthanRlIHByb3PDrW0iIC8+DQoJCQk8cCBpZD0ic3RhdHVzTWVzc2FnZSIgY2xhc3M9InN0YXR1c01lc3NhZ2UiPjwvcD4NCgkJPC9kaXY+DQoJCTxkaXYgaWQ9InNhdmVkRm9ybXNDb250YWluZXIiIGNsYXNzPSJsYXlvdXRNYWluIHVpLXdpZGdldC1jb250ZW50IiBzdHlsZT0iZGlzcGxheTpub25lIj4NCgkJICA8ZGl2IGlkPSJzYXZlZEZvcm1zQ29udGFpbmVyUm93IiBjbGFzcz0ibGF5b3V0Um93IHVpLXRhYnMgdWktd2lkZ2V0LWNvbnRlbnQiICB0aXRsZT0iIiA+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJCYXNpYyIgLz4NCgkJCTxkaXYgY2xhc3M9ImNhcHRpb24gdWktd2lkZ2V0LWhlYWRlciI+DQoJCQkgIDxkaXYgY2xhc3M9ImhlYWRlcmNvcnJlY3Rpb24iIHRpdGxlPSJVbG/FvmVuw6kgZm9ybXVsw6FyZSI+VWxvxb5lbsOpIGZvcm11bMOhcmU8L2Rpdj4NCgkJCSAgPHNwYW4gY2xhc3M9ImFycm93IHVpLWljb24gdWktaWNvbi1jYXJhdC0xLW4iPjwvc3Bhbj4NCgkJCTwvZGl2Pg0KCQkJPGRpdiBpZD0ibGF5b3V0Um93U2F2ZWRGb3JtcyIgY2xhc3M9ImNvbHVtbnMiPg0KCQkJICA8ZGl2IGlkPSJsY29sdW1uU2F2ZWRGb3JtcyIgY2xhc3M9ImNvbHVtbiBmaXJzdCIgPg0KCQkJCTxkaXYgaWQ9ImxjZWxsU2F2ZWRGb3JtcyIgY2xhc3M9ImNlbGwiPiAgICAgICAgICAJCQkJICANCgkJCQk8L2Rpdj4JCQkJDQoJCQkgIDwvZGl2Pg0KCQkJICA8ZGl2IGNsYXNzPSJjbGVhciI+IDwvZGl2Pg0KCQkJPC9kaXY+DQoJCSAgPC9kaXY+DQoJCTwvZGl2Pg0KCQk8ZGl2IGlkPSJtdGRfZm9ybU1ldGFEYXRhIiBzdHlsZT0iZGlzcGxheTpub25lIj48c3BhbiBpZD0ibXRkX3ZlcnNpb24iPjEuNDwvc3Bhbj48c3BhbiBpZD0ibXRkX2lkcCI+NTUzNjwvc3Bhbj48c3BhbiBpZD0ibXRkX25hbWVzcGFjZSI+aHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMjE3OTYuQTAwMDAyMjQuMDAwMDAwMDAyLlppYWRvc3RPZHB1c3RlbmllWm5pemVuaWVwb3BsYXRrdVphS09hRFNPX0ZPLzEuNDwvc3Bhbj48L2Rpdj4NCgk8L2Zvcm0+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB4bWw6bGFuZz0iZW4iIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB4bWxuczpmbz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvRm9ybWF0IiB4bWxuczpkID0gImh0dHA6Ly9kb2Nib29rLm9yZy9ucy9kb2Nib29rIiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSIgeG1sbnM6ZXhzbD0iaHR0cDovL2V4c2x0Lm9yZy9jb21tb24iICB4bWxuczplZ29ucD0iaHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMjE3OTYuQTAwMDAyMjQuMDAwMDAwMDAyLlppYWRvc3RPZHB1c3RlbmllWm5pemVuaWVwb3BsYXRrdVphS09hRFNPX0ZPLzEuNCIgZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXM9ImQiIHZlcnNpb249IjEuMCI+DQogIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPg0KICAgIDxmbzpyb290IHhtbG5zOmZvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9Gb3JtYXQiPiAgICAgIA0KCQk8Zm86bGF5b3V0LW1hc3Rlci1zZXQ+DQogICAgPGZvOnNpbXBsZS1wYWdlLW1hc3RlciBtYXN0ZXItbmFtZT0iQTQiDQogICAgICBwYWdlLWhlaWdodD0iODQycHgiIHBhZ2Utd2lkdGg9IjU5NXB4Ig0KICAgICAgbWFyZ2luLXRvcD0iMTBweCIgbWFyZ2luLWJvdHRvbT0iMTBweCINCiAgICAgIG1hcmdpbi1sZWZ0PSIxMHB4IiBtYXJnaW4tcmlnaHQ9IjEwcHgiPg0KICAgICAgPGZvOnJlZ2lvbi1ib2R5IG1hcmdpbi1ib3R0b209IjIwbW0iLz4NCiAgICAgIDxmbzpyZWdpb24tYWZ0ZXIgcmVnaW9uLW5hbWU9ImZvb3RlciIgZXh0ZW50PSIxMG1tIi8+DQogICAgPC9mbzpzaW1wbGUtcGFnZS1tYXN0ZXI+DQogICAgPGZvOnBhZ2Utc2VxdWVuY2UtbWFzdGVyIG1hc3Rlci1uYW1lPSJkb2N1bWVudCI+DQogICAgICA8Zm86cmVwZWF0YWJsZS1wYWdlLW1hc3Rlci1hbHRlcm5hdGl2ZXM+DQogICAgICAgIDxmbzpjb25kaXRpb25hbC1wYWdlLW1hc3Rlci1yZWZlcmVuY2UgbWFzdGVyLXJlZmVyZW5jZT0iQTQiLz4NCiAgICAgIDwvZm86cmVwZWF0YWJsZS1wYWdlLW1hc3Rlci1hbHRlcm5hdGl2ZXM+DQogICAgPC9mbzpwYWdlLXNlcXVlbmNlLW1hc3Rlcj4NCiAgPC9mbzpsYXlvdXQtbWFzdGVyLXNldD4NCiAgPGZvOnBhZ2Utc2VxdWVuY2UgbWFzdGVyLXJlZmVyZW5jZT0iZG9jdW1lbnQiIGZvbnQtZmFtaWx5PSJBcmlhbCI+DQogICAgPGZvOnN0YXRpYy1jb250ZW50IGZsb3ctbmFtZT0iZm9vdGVyIj4NCiAgICAgIDxmbzpibG9jayB0ZXh0LWFsaWduPSJlbmQiPjxmbzpwYWdlLW51bWJlci8+PC9mbzpibG9jaz4NCiAgICA8L2ZvOnN0YXRpYy1jb250ZW50Pg0KICAgICAgICAgIDxmbzpmbG93IGZsb3ctbmFtZT0ieHNsLXJlZ2lvbi1ib2R5Ij4JCQ0KCQkJCQkJPGZvOmJsb2NrIGZvbnQtc2l6ZT0nMjBwdCcgdGV4dC1hbGlnbj0nY2VudGVyJz4wMDEuxb1pYWRvc8WlIG8gb2RwdXN0ZW5pZS96bsOtxb5lbmllIHBvcGxhdGt1IHphIGtvbXVuw6Fsbnkgb2RwYWQgYSBkcm9ibsO9IHN0YXZlYm7DvSBvZHBhZCAoRk8pPC9mbzpibG9jaz48Zm86YmxvY2sgY29sb3I9J3doaXRlJz58PC9mbzpibG9jaz48Zm86YmxvY2svPgoJCQkJCSAgICAgCQkJCQ0KCQkJCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCgkJCTwvZm86Zmxvdz4NCiAgICAgICAgICAgPC9mbzpwYWdlLXNlcXVlbmNlPg0KICAgICAgICAgIDwvZm86cm9vdD4NCiAgICAgICAgIDwveHNsOnRlbXBsYXRlPg0KDQoJCQk8eHNsOnRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+DQogICAgICAgICAgICA8eHNsOnBhcmFtIG5hbWU9InRleHQiLz4NCiAgICAgICAgICAgIDx4c2w6cGFyYW0gbmFtZT0icmVwbGFjZSIvPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJieSIvPg0KICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iY29udGFpbnMoJHRleHQsICRyZXBsYWNlKSI+DQogICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nLWJlZm9yZSgkdGV4dCwkcmVwbGFjZSkiLz4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkYnkiLz4NCiAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPg0KICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0ic3Vic3RyaW5nLWFmdGVyKCR0ZXh0LCRyZXBsYWNlKSIvPg0KICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJHJlcGxhY2UiLz4NCiAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSIkYnkiIC8+DQogICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiR0ZXh0Ii8+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lVHJpbVNlY29uZHMiPg0KCQkJPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQoJCQk8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCgkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDUpIiAvPg0KCQkJPC94c2w6aWY+DQoJCQk8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUaW1lIj4NCgkJCTx4c2w6cGFyYW0gbmFtZT0idGltZSIgLz4NCgkJCTx4c2w6dmFyaWFibGUgbmFtZT0idGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJHRpbWUpIiAvPg0KCQkJPHhzbDppZiB0ZXN0PSIkdGltZVN0cmluZyAhPSAnJyI+DQoJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nKCR0aW1lU3RyaW5nLCAxLCA4KSIgLz4NCgkJCTwveHNsOmlmPg0KCQkJPC94c2w6dGVtcGxhdGU+DQoNCgkJCTx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGUiPg0KCQkJPHhzbDpwYXJhbSBuYW1lPSJkYXRlIiAvPg0KCQkJPHhzbDp2YXJpYWJsZSBuYW1lPSJkYXRlU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZSkiIC8+DQoJCQk8eHNsOmNob29zZT4NCgkJCTx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVN0cmluZyAhPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVN0cmluZyk9MTAgYW5kIHN0cmluZyhudW1iZXIoc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQoJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCA2LCAyKSwgJy4nLCBzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDEsIDQpKSIgLz4NCgkJCTwveHNsOndoZW4+DQoJCQk8eHNsOm90aGVyd2lzZT4NCgkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQoJCQk8L3hzbDpvdGhlcndpc2U+DQoJCQk8L3hzbDpjaG9vc2U+DQoJCQk8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWUiPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCiAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQogICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMikpIiAvPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCg0KCQkJPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWVTZWNvbmQiPg0KICAgICAgICAgICAgPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCiAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQogICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCiAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxOCwgMikpIiAvPg0KICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQogICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICA8L3hzbDp0ZW1wbGF0ZT4NCgkJCQkJCQk8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMSI+DQogIDxmbzp0YWJsZT4NCiAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6U2VrY2lhT2JlYyIgLz4NCiAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhSGVhZGVyIiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpaaWFkb3N0IiAvPg0KICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIC8+DQogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIC8+DQogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYUZvb3RlciIgLz4NCiAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgPC9mbzp0YWJsZS1ib2R5Pg0KICA8L2ZvOnRhYmxlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jayAvPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+TWVzdG8gxb1pbGluYTogTWVzdHNrw70gw7pyYWQgdiDFvWlsaW5lLCBOw6FtZXN0aWUgb2JldMOtIGtvbXVuaXptdSAxLCAwMTEgMzEgxb1pbGluYTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+RS1tYWlsOiBrY19wb2RhdGVsbmFAemlsaW5hLnNrPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5XRUI6IHd3dy56aWxpbmEuc2s8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+ScSMTzogMDAzMjE3OTY8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPkRJxIw6IDIwMjEzMzk0NzQ8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlRlbGVmw7NuOiAwNDEgLyA3MDYzIDExMTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYUhlYWRlciI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIxbW0iPsW9aWFkb3PFpSBvIG9kcHVzdGVuaWUvem7DrcW+ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG55IG9kcGFkIGEgZHJvYm7DvSBzdGF2ZWJuw70gb2RwYWQ8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij7FvWlhZGF0ZcS+ICAtIEZ5emlja8OhIG9zb2JhPC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIuL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwiIC8+DQogICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzIiAvPg0KICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIiAvPg0KICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9Ii4vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiIC8+DQogICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iIC8+DQogICAgICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iLi9lZ29ucDpfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIC8+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgIDwvZm86dGFibGU+DQogICAgPC9mbzpibG9jaz4NCiAgPC9mbzpibG9jaz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+VGl0dWwgcHJlZCBtZW5vbTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5NZW5vPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxNZW5vX0dpdmVuTmFtZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Sb2Ruw6kgxI3DrXNsbzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUkMiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5UaXR1bCB6YSBtZW5vbTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlByaWV6dmlza288L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RldGFpbFByaWV6dmlza29fRmFtaWx5TmFtZSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Ew6F0dW0gbmFyb2RlbmlhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgIDwvZm86dGFibGU+DQogICAgPC9mbzpibG9jaz4NCiAgPC9mbzpibG9jaz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FfUGh5c2ljYWxBZGRyZXNzIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5BZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xaB0w6F0PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5PYmVjPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlVsaWNhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xIzDrXNsbyBieXR1PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPktyYWo8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xIxhc8WlIG9iY2U8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+U8O6cC7EjS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9rcmVzPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5QU8SMPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9yLsSNLjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5BZHJlc2EgcHJlY2hvZG7DqWhvIHBvYnl0dSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xaB0w6F0PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5PYmVjPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9iZWNfTXVuaWNpcGFsaXR5IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlVsaWNhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xIzDrXNsbyBieXR1PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNpc2xvQnl0dSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPktyYWo8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xIxhc8WlIG9iY2U8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+U8O6cC7EjS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9rcmVzPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5QU8SMPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9yLsSNLjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86YmxvY2sgYmFja2dyb3VuZC1jb2xvcj0iYmxhY2siIGNvbG9yPSJ3aGl0ZSIgbWFyZ2luLWxlZnQ9IjNwdCIgbWFyZ2luLXRvcD0iM3B0IiBtYXJnaW4tcmlnaHQ9IjNwdCIgcGFkZGluZy1sZWZ0PSIxcHQiIHBhZGRpbmctdG9wPSIycHQiPkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xaB0w6F0PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdGF0X0NvdW50cnkiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+T2JlYzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+VWxpY2E8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVVsaWNhX1N0cmVldE5hbWUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xIzDrXNsbyBieXR1PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDaXNsb0J5dHUiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5LcmFqPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz7EjGFzxaUgb2JjZTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+U8O6cC7EjS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Pa3JlczwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2tyZXNfQ291bnR5IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlBTxIw8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVBTQ19Qb3N0YWxDb2RlIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPk9yLsSNLjwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8xc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsbyI+DQogIDxmbzpibG9jayBib3JkZXItd2lkdGg9IjAuM3B0IiBib3JkZXItc3R5bGU9InNvbGlkIiBtYXJnaW4tbGVmdD0iMXB0IiBtYXJnaW4tdG9wPSI2cHQiIG1hcmdpbi1yaWdodD0iMXB0Ij4NCiAgICA8Zm86YmxvY2sgbWFyZ2luLWJvdHRvbT0iNnB0Ij4NCiAgICAgIDxmbzpibG9jayBiYWNrZ3JvdW5kLWNvbG9yPSJibGFjayIgY29sb3I9IndoaXRlIiBtYXJnaW4tbGVmdD0iM3B0IiBtYXJnaW4tdG9wPSIzcHQiIG1hcmdpbi1yaWdodD0iM3B0IiBwYWRkaW5nLWxlZnQ9IjFwdCIgcGFkZGluZy10b3A9IjJwdCI+S29udGFrdCAtIHRlbGVmw7NuPC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlRlbGVmw7NubmUgxI3DrXNsbzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6XzJzZWtjaWFaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIj4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5Lb250YWt0IC0gRS1tYWlsPC9mbzpibG9jaz4NCiAgICAgIDxmbzpibG9jayBjb2xvcj0id2hpdGUiPnw8L2ZvOmJsb2NrPg0KICAgICAgPGZvOnRhYmxlPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPkUtbWFpbG92w6EgYWRyZXNhPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICA8L2ZvOnRhYmxlPg0KICAgIDwvZm86YmxvY2s+DQogIDwvZm86YmxvY2s+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86YmxvY2sgYmFja2dyb3VuZC1jb2xvcj0iYmxhY2siIGNvbG9yPSJ3aGl0ZSIgbWFyZ2luLWxlZnQ9IjNwdCIgbWFyZ2luLXRvcD0iM3B0IiBtYXJnaW4tcmlnaHQ9IjNwdCIgcGFkZGluZy1sZWZ0PSIxcHQiIHBhZGRpbmctdG9wPSIycHQiPsW9aWFkb3PFpTwvZm86YmxvY2s+DQogICAgICA8Zm86YmxvY2sgY29sb3I9IndoaXRlIj58PC9mbzpibG9jaz4NCiAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Sb3pob2RudXTDrW0gxI3DrXNsbzwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpSb3pob2QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Cb2wgdnlydWJlbsO9IG5hIHJvazwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDp2eXJ1YmVueSIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPlBvcGxhdG9rIHphIGtvbXVuw6FsbmUgYSBkcm9ibsOpIHN0YXZlYm7DqSBvZHBhZHkgdm8gdsO9xaFrZSAo4oKsKTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsIGJvcmRlci13aWR0aD0iMC42cHQiIGJvcmRlci1zdHlsZT0ic29saWQiIGJhY2tncm91bmQtY29sb3I9IndoaXRlIiBwYWRkaW5nPSIxcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpwb3BsYXRvayIgLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBjb2xvcj0id2hpdGUiPl9fXzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz7FvWlhZGFtIHNwcsOhdmN1IHBvcGxhdGt1IG8gem7DrcW+ZW5pZS9vZHB1c3RlbmllIHBvcGxhdGt1IHphIGtvbXVuw6FsbmUgb2RwYWR5IGEgZHJvYm7DqSBzdGF2ZWJuw6kgb2RwYWR5PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPnpuJiMyMzc7xb5lbmllIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJlZ29ucDp6aWFkYW1bdGV4dCgpPSd6biYjMjM3O8W+ZW5pZSAnXSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEE0OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDp3aGVuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTE7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOm90aGVyd2lzZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPm9kcHVzdGVuaWUgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmNob29zZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVnb25wOnppYWRhbVt0ZXh0KCk9J29kcHVzdGVuaWUgJ10iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBNDs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEExOzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgPGZvOmJsb2NrIG1hcmdpbi10b3A9IjNtbSIgbWFyZ2luLXJpZ2h0PSIzbW0iPg0KICAgICAgICAgICAgICAgIDxmbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPkTDtHZvZCDFvmlhZG9zdGk8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbCBoZWlnaHQ9IjEwMHB4IiBib3JkZXItd2lkdGg9IjAuNnB0IiBib3JkZXItc3R5bGU9InNvbGlkIiBiYWNrZ3JvdW5kLWNvbG9yPSJ3aGl0ZSIgcGFkZGluZz0iMXB0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jayBoeXBoZW5hdGU9InRydWUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9lZ29ucDpaaWFkb3N0RG92b2QiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iMW1tIj5WIHByw61wYWRlLCDFvmUgcG9ka2xhZCAocG92aW5uw6kgcHLDrWxvaHkpIG5pZSBzw7ogdnlzdGF2ZW7DqSB2IHNsb3ZlbnNrb20gYWxlYm8gxI1lc2tvbSBqYXp5a3UsIHBvcGxhdG7DrWsgcHJlZGxvxb7DrSBhaiBwcmVrbGFkIHByw61zbHXFoW7DqWhvIHBvZGtsYWR1LCBwb2Rww61zYW7DqWhvIHBvcGxhdG7DrWtvbS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86YmxvY2sgYmFja2dyb3VuZC1jb2xvcj0iYmxhY2siIGNvbG9yPSJ3aGl0ZSIgbWFyZ2luLWxlZnQ9IjNwdCIgbWFyZ2luLXRvcD0iM3B0IiBtYXJnaW4tcmlnaHQ9IjNwdCIgcGFkZGluZy1sZWZ0PSIxcHQiIHBhZGRpbmctdG9wPSIycHQiPk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3Y8L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS48L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9ImVnb25wOk9jaHJhbmFPc29ibnljaFVkYWpvdlN1aGxhc1t0ZXh0KCk9J8W9aWFkYXRlxL4gYWtvIGRvdGtudXTDoSBvc29iYSB2IHPDumxhZGUgcyB1c3Rhbm92ZW7DrW0gwqcgMTEgesOha29uYSDEjS4gMTIyLzIwMTMgWi4gei4gbyBvY2hyYW5lIG9zb2Juw71jaCDDumRham92IGEgbyB6bWVuZSBhIGRvcGxuZW7DrSBuaWVrdG9yw71jaCB6w6Frb25vdiAoxI9hbGVqIGxlbiDigJ56w6Frb24pLCBwb3NreXR1amUgTWVzdHUgxb1pbGluYSwgYWtvIHByZXbDoWR6a292YXRlxL5vdmksIHPDumhsYXMgc28gc3ByYWNvdmFuw61tIG9zb2Juw71jaCDDumRham92IHV2ZWRlbsO9Y2ggdiB0ZWp0byDFvmlhZG9zdGkgYSBqZWogcHLDrWxvaMOhY2gsIGEgdG8gemEgw7rEjWVsb20gYmV6cGXEjW5laiBhIHrDoW1lbnUgdnlsdcSNdWrDumNlaiBpZGVudGlmaWvDoWNpZSBkb3RrbnV0ZWogb3NvYnkgcyB0w71tLCDFvmUgamUgb3Byw6F2bmVuw70gdGVudG8gc8O6aGxhcyBww61zb21uZSBvZHZvbGHFpSB2IHByw61wYWRlIHByZXVrw6F6YXRlxL5uw6lobyBwb3J1xaFlbmlhIHrDoWtvbmEgem8gc3RyYW55IHByZXbDoWR6a292YXRlxL5hLiBPZHZvbGFuaWUgbXVzw60gYnnFpSB1cm9iZW7DqSBww61zb21uZSBhIHByZXVrw6F6YXRlxL5uZSBkb3J1xI1lbsOpIE1lc3R1IMW9aWxpbmEuIERvYmEgcGxhdG5vc3RpIHPDumhsYXN1IHNhIHZpYcW+ZSBuYSBkb2J1IHRydmFuaWEgcHJldWvDoXphdGXEvm7DqWhvIMO6xI1lbHUgc3ByYWPDunZhbmlhIG9zb2Juw71jaCDDumRham92IGRvdGtudXRlaiBvc29ieS4gUHJldsOhZHprb3ZhdGXEviB0w71tdG8gcHJlaGxhc3VqZSwgxb5lIG9zb2Juw6kgw7pkYWplIGRvdGtudXRlaiBvc29ieSBidWRlIHNwcmFjb3bDoXZhxaUgcGxuZSB2IHPDumxhZGUgcyB1c3Rhbm92ZW5pYW1pIHrDoWtvbmEuJ10iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMDc4OzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTg7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1Ij4NCiAgPGZvOmJsb2NrIGJvcmRlci13aWR0aD0iMC4zcHQiIGJvcmRlci1zdHlsZT0ic29saWQiIG1hcmdpbi1sZWZ0PSIxcHQiIG1hcmdpbi10b3A9IjZwdCIgbWFyZ2luLXJpZ2h0PSIxcHQiPg0KICAgIDxmbzpibG9jayBtYXJnaW4tYm90dG9tPSI2cHQiPg0KICAgICAgPGZvOmJsb2NrIGJhY2tncm91bmQtY29sb3I9ImJsYWNrIiBjb2xvcj0id2hpdGUiIG1hcmdpbi1sZWZ0PSIzcHQiIG1hcmdpbi10b3A9IjNwdCIgbWFyZ2luLXJpZ2h0PSIzcHQiIHBhZGRpbmctbGVmdD0iMXB0IiBwYWRkaW5nLXRvcD0iMnB0Ij5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L2ZvOmJsb2NrPg0KICAgICAgPGZvOmJsb2NrIGNvbG9yPSJ3aGl0ZSI+fDwvZm86YmxvY2s+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+ZURlc2s8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6U3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cFt0ZXh0KCk9J2VEZXNrJ10iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBNDs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmlubGluZSBmb250LWZhbWlseT0iV2luZ2RpbmdzIj4mI3hGMEExOzwvZm86aW5saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5vc29ibmU8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iZWdvbnA6U3Bvc29iRG9ydWNlbmlhVnlzdHVwdVR5cFt0ZXh0KCk9J29zb2JuZSddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTQ7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBMTs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+cG/FoXRvdTwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJlZ29ucDpTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwW3RleHQoKT0ncG/FoXRvdSddIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGZvbnQtZmFtaWx5PSJXaW5nZGluZ3MiPiYjeEYwQTQ7PC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgZm9udC1mYW1pbHk9IldpbmdkaW5ncyI+JiN4RjBBMTs8L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgIDxmbzpibG9jayBtYXJnaW4tdG9wPSIzbW0iIG1hcmdpbi1yaWdodD0iM21tIj4NCiAgICAgICAgICAgICAgICA8Zm86dGFibGU+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY29sdW1uIC8+DQogICAgICAgICAgICAgICAgICA8Zm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgICAgICA8Zm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxmbzpibG9jaz5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0IiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm86aW5saW5lIGNvbG9yPSJ3aGl0ZSI+X19fPC9mbzppbmxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgPC9mbzp0YWJsZT4NCiAgICAgICAgICAgICAgPC9mbzpibG9jaz4NCiAgICAgICAgICAgIDwvZm86dGFibGUtY2VsbD4NCiAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgPC9mbzp0YWJsZT4NCiAgICA8L2ZvOmJsb2NrPg0KICA8L2ZvOmJsb2NrPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFGb290ZXIiPg0KICA8Zm86YmxvY2sgYm9yZGVyLXdpZHRoPSIwLjNwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgbWFyZ2luLWxlZnQ9IjFwdCIgbWFyZ2luLXRvcD0iNnB0IiBtYXJnaW4tcmlnaHQ9IjFwdCI+DQogICAgPGZvOmJsb2NrIG1hcmdpbi1ib3R0b209IjZwdCI+DQogICAgICA8Zm86dGFibGU+DQogICAgICAgIDxmbzp0YWJsZS1jb2x1bW4gLz4NCiAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgPGZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgIDxmbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGwgYm9yZGVyLXdpZHRoPSIwLjZwdCIgYm9yZGVyLXN0eWxlPSJzb2xpZCIgYmFja2dyb3VuZC1jb2xvcj0id2hpdGUiIHBhZGRpbmc9IjFwdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuL2Vnb25wOmZvb3RlckxpbmsiIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxmbzppbmxpbmUgY29sb3I9IndoaXRlIj5fX188L2ZvOmlubGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1jZWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLXJvdz4NCiAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlPg0KICAgICAgICAgICAgICA8L2ZvOmJsb2NrPg0KICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iM21tIiBtYXJnaW4tcmlnaHQ9IjNtbSI+DQogICAgICAgICAgICAgICAgPGZvOnRhYmxlPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNvbHVtbiAvPg0KICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWJvZHk+DQogICAgICAgICAgICAgICAgICAgIDxmbzp0YWJsZS1yb3c+DQogICAgICAgICAgICAgICAgICAgICAgPGZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgICAgICA8Zm86YmxvY2sgbWFyZ2luLXRvcD0iMW1tIj5NZXN0byDFvWlsaW5hIC0gTWVzdG8gcyB0dsOhcm91PC9mbzpibG9jaz4NCiAgICAgICAgICAgICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgICAgICAgICAgIDwvZm86dGFibGUtcm93Pg0KICAgICAgICAgICAgICAgICAgPC9mbzp0YWJsZS1ib2R5Pg0KICAgICAgICAgICAgICAgIDwvZm86dGFibGU+DQogICAgICAgICAgICAgIDwvZm86YmxvY2s+DQogICAgICAgICAgICA8L2ZvOnRhYmxlLWNlbGw+DQogICAgICAgICAgPC9mbzp0YWJsZS1yb3c+DQogICAgICAgIDwvZm86dGFibGUtYm9keT4NCiAgICAgIDwvZm86dGFibGU+DQogICAgPC9mbzpibG9jaz4NCiAgPC9mbzpibG9jaz4NCjwveHNsOnRlbXBsYXRlPg0KCQ0KICAgICAgICA8L3hzbDpzdHlsZXNoZWV0Pg0K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48eHM6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2NoZW1hcy5nb3Yuc2svZm9ybS8wMDMyMTc5Ni5BMDAwMDIyNC4wMDAwMDAwMDIuWmlhZG9zdE9kcHVzdGVuaWVabml6ZW5pZXBvcGxhdGt1WmFLT2FEU09fRk8vMS40IiB4bWxucz0iaHR0cDovL3NjaGVtYXMuZ292LnNrL2Zvcm0vMDAzMjE3OTYuQTAwMDAyMjQuMDAwMDAwMDAyLlppYWRvc3RPZHB1c3RlbmllWm5pemVuaWVwb3BsYXRrdVphS09hRFNPX0ZPLzEuNCI+DQo8eHM6c2ltcGxlVHlwZSBuYW1lPSJ4c2RUZXh0Qm94Ij4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrU3RhdHkiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtPYmNlIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrS3JhamUiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dFBTQyI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjx4czptYXhMZW5ndGggdmFsdWU9IjYiIC8+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2lzZWxuaWtUaXR1bHlQcmVkIj4NCjx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZENpc2VsbmlrVGl0dWx5WmEiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGF0dW0iPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0iUmFkaW9EcnVoVWxhdnkiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkVGV4dEFyZWEiPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+DQo8L3hzOnJlc3RyaWN0aW9uPg0KPC94czpzaW1wbGVUeXBlPg0KPHhzOnNpbXBsZVR5cGUgbmFtZT0ieHNkQ2hlY2tCb3giPg0KPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmJvb2xlYW4iPg0KPC94czpyZXN0cmljdGlvbj4NCjwveHM6c2ltcGxlVHlwZT4NCjx4czpzaW1wbGVUeXBlIG5hbWU9InhzZFJhZGlvU3Bvc29iRG9ydWNlbmlhVnlzdHVwdSI+DQo8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4NCjwveHM6cmVzdHJpY3Rpb24+DQo8L3hzOnNpbXBsZVR5cGU+DQoNCg0KPHhzOmVsZW1lbnQgbmFtZT0iZUZvcm1fZUdvdl8wMDEiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0iU2VrY2lhT2JlYyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9Ik9iZWNfTXNVIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+TWVzdG8gxb1pbGluYTogTWVzdHNrJiMyNTM7ICYjMjUwO3JhZCB2IMW9aWxpbmUsIE4mIzIyNTttZXN0aWUgb2JldCYjMjM3OyBrb211bml6bXUgMSwgMDExIDMxIMW9aWxpbmE8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0VtYWlsIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+RS1tYWlsOiBrY19wb2RhdGVsbmFAemlsaW5hLnNrPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19XZWIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5XRUI6IHd3dy56aWxpbmEuc2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJPYmVjX0lDTyIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPknEjE86IDAwMzIxNzk2PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19ESUMiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EScSMOiAyMDIxMzM5NDc0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iT2JlY19UZWxlZm9uIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VGVsZWYmIzI0MztuOiAwNDEgLyA3MDYzIDExMTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhSGVhZGVyIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uIiBtaW5PY2N1cnM9IjAiPg0KPHhzOmNvbXBsZXhUeXBlPg0KPHhzOnNlcXVlbmNlPg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT0RldGFpbCIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFByZWRfUHJlZml4UXVhbGlmaWNhdGlvbkFmZml4IiB0eXBlPSJ4c2RDaXNlbG5pa1RpdHVseVByZWQiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCBwcmVkIG1lbm9tPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbE1lbm9fR2l2ZW5OYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5NZW5vPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RldGFpbFJDIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+Um9kbiYjMjMzOyDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxUaXR1bFphX1Bvc3RmaXhRdWFsaWZpY2F0aW9uQWZmaXgiIHR5cGU9InhzZENpc2VsbmlrVGl0dWx5WmEiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5UaXR1bCB6YSBtZW5vbTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9EZXRhaWxQcmllenZpc2tvX0ZhbWlseU5hbWUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlByaWV6dmlza288L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRGV0YWlsRGF0dW1OYXJvZGVuaWFfRGF0ZU9mQmlydGgiIHR5cGU9ImRhdHVtIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5EJiMyMjU7dHVtIG5hcm9kZW5pYTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcyIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN0YXRfQ291bnRyeSIgdHlwZT0ieHNkQ2lzZWxuaWtTdGF0eSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsWgdCYjMjI1O3Q8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5PYmVjPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhVWxpY2FfU3RyZWV0TmFtZSIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjCYjMjM3O3NsbyBieXR1PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InhzZENpc2VsbmlrS3JhamUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5LcmFqPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlMmIzI1MDtwLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIiB0eXBlPSJ4c2RUZXh0UFNDIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UFPEjDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYU9yQ19CdWlsZGluZ051bWJlciIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9yLsSNLjwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0ic2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiIHR5cGU9InhzZENpc2VsbmlrU3RhdHkiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FoHQmIzIyNTt0PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiIHR5cGU9InhzZENpc2VsbmlrT2JjZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPk9iZWM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FDaXNsb0J5dHUiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjCYjMjM3O3NsbyBieXR1PC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhS3Jhal9SZWdpb24iIHR5cGU9InhzZENpc2VsbmlrS3JhamUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5LcmFqPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TJiMyNTA7cC7EjS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPa3Jlc19Db3VudHkiIHR5cGU9InhzZENpc2VsbmlrT2tyZXN5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2tyZXM8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dFBTQyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pci7EjS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhU3RhdF9Db3VudHJ5IiB0eXBlPSJ4c2RDaXNlbG5pa1N0YXR5IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xaB0JiMyMjU7dDwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FPYmVjX011bmljaXBhbGl0eSIgdHlwZT0ieHNkQ2lzZWxuaWtPYmNlIiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T2JlYzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+VWxpY2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2lzbG9CeXR1IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+xIwmIzIzNztzbG8gYnl0dTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FLcmFqX1JlZ2lvbiIgdHlwZT0ieHNkQ2lzZWxuaWtLcmFqZSIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPktyYWo8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhQ2FzdE9iY2VfRGlzdHJpY3QiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7EjGFzxaUgb2JjZTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UyYjMjUwO3AuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSIgdHlwZT0ieHNkQ2lzZWxuaWtPa3Jlc3kiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Pa3JlczwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSIgdHlwZT0ieHNkVGV4dFBTQyIgbWluT2NjdXJzPSIwIiBuaWxsYWJsZT0idHJ1ZSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlBTxIw8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+T3IuxI0uPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPS29udGFrdFRlbENpc2xvX1RlbGVwaG9uZUFkZHJlc3MiIHR5cGU9InhzZFRleHRCb3giIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPlRlbGVmJiMyNDM7bm5lIMSNJiMyMzc7c2xvPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJaaWFkYXRlbEZPS29udGFrdEVtYWlsQWRyZXNhIiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5FLW1haWxvdiYjMjI1OyBhZHJlc2E8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPHhzOmVsZW1lbnQgbmFtZT0iWmlhZG9zdCIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjx4czplbGVtZW50IG5hbWU9IlJvemhvZCIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+Um96aG9kbnV0JiMyMzc7bSDEjSYjMjM3O3NsbzwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InZ5cnViZW55IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5Cb2wgdnlydWJlbiYjMjUzOyBuYSByb2s8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJwb3BsYXRvayIgdHlwZT0ieHNkVGV4dEJveCIgbWluT2NjdXJzPSIxIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+UG9wbGF0b2sgemEga29tdW4mIzIyNTtsbmUgYSBkcm9ibiYjMjMzOyBzdGF2ZWJuJiMyMzM7IG9kcGFkeSB2byB2JiMyNTM7xaFrZSAo4oKsKTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InppYWRhbSIgdHlwZT0iUmFkaW9EcnVoVWxhdnkiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPsW9aWFkYW0gc3ByJiMyMjU7dmN1IHBvcGxhdGt1IG8gem4mIzIzNzvFvmVuaWUvb2RwdXN0ZW5pZSBwb3BsYXRrdSB6YSBrb211biYjMjI1O2xuZSBvZHBhZHkgYSBkcm9ibiYjMjMzOyBzdGF2ZWJuJiMyMzM7IG9kcGFkeTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlppYWRvc3REb3ZvZCIgdHlwZT0ieHNkVGV4dEFyZWEiIG1pbk9jY3Vycz0iMSI+DQo8eHM6YW5ub3RhdGlvbj4NCjx4czpkb2N1bWVudGF0aW9uPkQmIzI0NDt2b2Qgxb5pYWRvc3RpPC94czpkb2N1bWVudGF0aW9uPg0KPC94czphbm5vdGF0aW9uPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8eHM6ZWxlbWVudCBuYW1lPSJTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJPY2hyYW5hT3NvYm55Y2hVZGFqb3ZTdWhsYXMiIHR5cGU9InhzZENoZWNrQm94IiBtaW5PY2N1cnM9IjEiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj7FvWlhZGF0ZcS+IGFrbyBkb3RrbnV0JiMyMjU7IG9zb2JhIHYgcyYjMjUwO2xhZGUgcyB1c3Rhbm92ZW4mIzIzNzttICYjMTY3OyAxMSB6JiMyMjU7a29uYSDEjS4gMTIyLzIwMTMgWi4gei4gbyBvY2hyYW5lIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbiYjMjM3OyBuaWVrdG9yJiMyNTM7Y2ggeiYjMjI1O2tvbm92ICjEj2FsZWogbGVuIOKAnnomIzIyNTtrb24pLCBwb3NreXR1amUgTWVzdHUgxb1pbGluYSwgYWtvIHByZXYmIzIyNTtkemtvdmF0ZcS+b3ZpLCBzJiMyNTA7aGxhcyBzbyBzcHJhY292YW4mIzIzNzttIG9zb2JuJiMyNTM7Y2ggJiMyNTA7ZGFqb3YgdXZlZGVuJiMyNTM7Y2ggdiB0ZWp0byDFvmlhZG9zdGkgYSBqZWogcHImIzIzNztsb2gmIzIyNTtjaCwgYSB0byB6YSAmIzI1MDvEjWVsb20gYmV6cGXEjW5laiBhIHomIzIyNTttZW51IHZ5bHXEjXVqJiMyNTA7Y2VqIGlkZW50aWZpayYjMjI1O2NpZSBkb3RrbnV0ZWogb3NvYnkgcyB0JiMyNTM7bSwgxb5lIGplIG9wciYjMjI1O3ZuZW4mIzI1MzsgdGVudG8gcyYjMjUwO2hsYXMgcCYjMjM3O3NvbW5lIG9kdm9sYcWlIHYgcHImIzIzNztwYWRlIHByZXVrJiMyMjU7emF0ZcS+biYjMjMzO2hvIHBvcnXFoWVuaWEgeiYjMjI1O2tvbmEgem8gc3RyYW55IHByZXYmIzIyNTtkemtvdmF0ZcS+YS4gT2R2b2xhbmllIG11cyYjMjM3OyBiecWlIHVyb2JlbiYjMjMzOyBwJiMyMzc7c29tbmUgYSBwcmV1ayYjMjI1O3phdGXEvm5lIGRvcnXEjWVuJiMyMzM7IE1lc3R1IMW9aWxpbmEuIERvYmEgcGxhdG5vc3RpIHMmIzI1MDtobGFzdSBzYSB2aWHFvmUgbmEgZG9idSB0cnZhbmlhIHByZXVrJiMyMjU7emF0ZcS+biYjMjMzO2hvICYjMjUwO8SNZWx1IHNwcmFjJiMyNTA7dmFuaWEgb3NvYm4mIzI1MztjaCAmIzI1MDtkYWpvdiBkb3RrbnV0ZWogb3NvYnkuIFByZXYmIzIyNTtkemtvdmF0ZcS+IHQmIzI1MzttdG8gcHJlaGxhc3VqZSwgxb5lIG9zb2JuJiMyMzM7ICYjMjUwO2RhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdiYjMjI1O3ZhxaUgcGxuZSB2IHMmIzI1MDtsYWRlIHMgdXN0YW5vdmVuaWFtaSB6JiMyMjU7a29uYS48L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCI+DQo8eHM6Y29tcGxleFR5cGU+DQo8eHM6c2VxdWVuY2U+DQo8eHM6ZWxlbWVudCBuYW1lPSJTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1VHlwIiB0eXBlPSJ4c2RSYWRpb1Nwb3NvYkRvcnVjZW5pYVZ5c3R1cHUiIG1pbk9jY3Vycz0iMCIgbmlsbGFibGU9InRydWUiPg0KPHhzOmFubm90YXRpb24+DQo8eHM6ZG9jdW1lbnRhdGlvbj5TcCYjMjQ0O3NvYiBkb3J1xI1lbmlhIHYmIzI1MztzdHVwdTwveHM6ZG9jdW1lbnRhdGlvbj4NCjwveHM6YW5ub3RhdGlvbj4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9IlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVLb250YWt0IiB0eXBlPSJ4c2RUZXh0Qm94IiBtaW5PY2N1cnM9IjAiIG5pbGxhYmxlPSJ0cnVlIj4NCjx4czphbm5vdGF0aW9uPg0KPHhzOmRvY3VtZW50YXRpb24+S29udGFrdCB2IHByJiMyMzc7cGFkZSBkb3J1xI1lbmlhIG9zb2JuZSAvIHBvxaF0b3U8L3hzOmRvY3VtZW50YXRpb24+DQo8L3hzOmFubm90YXRpb24+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNlcXVlbmNlPg0KPC94czpjb21wbGV4VHlwZT4NCjwveHM6ZWxlbWVudD4NCjx4czplbGVtZW50IG5hbWU9InNla2NpYUZvb3RlciIgbWluT2NjdXJzPSIwIj4NCjx4czpjb21wbGV4VHlwZT4NCjx4czpzZXF1ZW5jZT4NCjwveHM6c2VxdWVuY2U+DQo8L3hzOmNvbXBsZXhUeXBlPg0KPC94czplbGVtZW50Pg0KPC94czpzZXF1ZW5jZT4NCjwveHM6Y29tcGxleFR5cGU+DQo8L3hzOmVsZW1lbnQ+DQo8L3hzOnNjaGVtYT4NCg0K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiAgeG1sbnM6ZWdvbnA9Imh0dHA6Ly9zY2hlbWFzLmdvdi5zay9mb3JtLzAwMzIxNzk2LkEwMDAwMjI0LjAwMDAwMDAwMi5aaWFkb3N0T2RwdXN0ZW5pZVpuaXplbmllcG9wbGF0a3VaYUtPYURTT19GTy8xLjQiPg0KPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0IiBpbmRlbnQ9InllcyIgb21pdC14bWwtZGVjbGFyYXRpb249InllcyIvPg0KPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIgLz4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxIj4NCjx4c2w6dGV4dD5lRm9ybV9lR292XzAwMV9GTzwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlNla2NpYU9iZWMiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9iZWM8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfTXNVIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+TWVzdG8gxb1pbGluYTogTWVzdHNrw70gw7pyYWQgdiDFvWlsaW5lLCBOw6FtZXN0aWUgb2JldMOtIGtvbXVuaXptdSAxLCAwMTEgMzEgxb1pbGluYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfRW1haWwiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5FLW1haWw6IGtjX3BvZGF0ZWxuYUB6aWxpbmEuc2s6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2JlYy9lZ29ucDpPYmVjX1dlYiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PldFQjogd3d3LnppbGluYS5zazogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPYmVjL2Vnb25wOk9iZWNfSUNPIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+ScSMTzogMDAzMjE3OTY6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2JlYy9lZ29ucDpPYmVjX0RJQyI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkRJxIw6IDIwMjEzMzk0NzQ6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6U2VrY2lhT2JlYy9lZ29ucDpPYmVjX1RlbGVmb24iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UZWxlZsOzbjogMDQxIC8gNzA2MyAxMTE6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhSGVhZGVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PnNla2NpYUhlYWRlcjogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24iPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsW9aWFkYXRlxL4gIC0gRnl6aWNrw6Egb3NvYmE8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xb1pYWRhdGXEviAgLSBmeXppY2vDoSBvc29iYTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxQcmVkX1ByZWZpeFF1YWxpZmljYXRpb25BZmZpeCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+VGl0dWwgcHJlZCBtZW5vbTogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsTWVub19HaXZlbk5hbWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk1lbm86IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9EZXRhaWwvZWdvbnA6WmlhZGF0ZWxGT0RldGFpbFJDIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Sb2Ruw6kgxI3DrXNsbzogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsVGl0dWxaYV9Qb3N0Zml4UXVhbGlmaWNhdGlvbkFmZml4Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UaXR1bCB6YSBtZW5vbTogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RldGFpbC9lZ29ucDpaaWFkYXRlbEZPRGV0YWlsUHJpZXp2aXNrb19GYW1pbHlOYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5QcmllenZpc2tvOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRGV0YWlsL2Vnb25wOlppYWRhdGVsRk9EZXRhaWxEYXR1bU5hcm9kZW5pYV9EYXRlT2ZCaXJ0aCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+RMOhdHVtIG5hcm9kZW5pYTogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcyI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5BZHJlc2EgdHJ2YWzDqWhvIHBvYnl0dTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FTdGF0X0NvdW50cnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsWgdMOhdDogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2JlYzogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5VbGljYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDaXNsb0J5dHUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PsSMw61zbG8gYnl0dTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+S3JhajogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xIxhc8WlIG9iY2U6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhU3VwQ19Qcm9wZXJ0eVJlZ2lzdHJhdGlvbk51bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+U8O6cC7EjS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9UcnZhbHlQb2J5dEFkcmVzYV9QaHlzaWNhbEFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Pa3JlczogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UFPEjDogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1RydmFseVBvYnl0QWRyZXNhX1BoeXNpY2FsQWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPVHJ2YWx5UG9ieXRBZHJlc2FPckNfQnVpbGRpbmdOdW1iZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9yLsSNLjogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkFkcmVzYSBwcmVjaG9kbsOpaG8gcG9ieXR1ICh2eXBsxYh0ZSBhayBqZSBhZHJlc2EgaW7DoSBha28gYWRyZXNhIHRydmFsw6lobyBwb2J5dHUpPC94c2w6dGV4dD4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhU3RhdF9Db3VudHJ5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD7FoHTDoXQ6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FPYmVjX011bmljaXBhbGl0eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2JlYzogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVVsaWNhX1N0cmVldE5hbWUiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PlVsaWNhOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhQ2lzbG9CeXR1Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD7EjMOtc2xvIGJ5dHU6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYS9lZ29ucDpaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2FLcmFqX1JlZ2lvbiI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+S3JhajogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYUNhc3RPYmNlX0Rpc3RyaWN0Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD7EjGFzxaUgb2JjZTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVN1cENfUHJvcGVydHlSZWdpc3RyYXRpb25OdW1iZXIiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PlPDunAuxI0uOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT2tyZXNfQ291bnR5Ij4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Pa3JlczogPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhL2Vnb25wOlppYWRhdGVsRk9QcmVjaG9kbnlQb2J5dEFkcmVzYVBTQ19Qb3N0YWxDb2RlIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5QU8SMOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPUHJlY2hvZG55UG9ieXRBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT1ByZWNob2RueVBvYnl0QWRyZXNhT3JDX0J1aWxkaW5nTnVtYmVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Pci7EjS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PkFkcmVzYSBwcmUgZG9ydcSNZW5pZSAodnlwbMWIdGUgYWsgamUgYWRyZXNhIGluw6EgYWtvIGFkcmVzYSB0cnZhbMOpaG8gcG9ieXR1KTwveHNsOnRleHQ+DQo8eHNsOmFwcGx5LXRlbXBsYXRlcy8+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYVN0YXRfQ291bnRyeSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xaB0w6F0OiA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhT2JlY19NdW5pY2lwYWxpdHkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9iZWM6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FVbGljYV9TdHJlZXROYW1lIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5VbGljYTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYUNpc2xvQnl0dSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xIzDrXNsbyBieXR1OiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhX0RlbGl2ZXJ5QWRkcmVzcy9lZ29ucDpaaWFkYXRlbEZPRG9ydWNlbmllQWRyZXNhS3Jhal9SZWdpb24iPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PktyYWo6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FDYXN0T2JjZV9EaXN0cmljdCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xIxhc8WlIG9iY2U6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FTdXBDX1Byb3BlcnR5UmVnaXN0cmF0aW9uTnVtYmVyIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Tw7pwLsSNLjogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9rcmVzX0NvdW50eSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T2tyZXM6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOnNla2NpYVppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FfRGVsaXZlcnlBZGRyZXNzL2Vnb25wOlppYWRhdGVsRk9Eb3J1Y2VuaWVBZHJlc2FQU0NfUG9zdGFsQ29kZSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UFPEjDogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVppYWRhdGVsRk9fUGh5c2ljYWxQZXJzb24vZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYV9EZWxpdmVyeUFkZHJlc3MvZWdvbnA6WmlhZGF0ZWxGT0RvcnVjZW5pZUFkcmVzYU9yQ19CdWlsZGluZ051bWJlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+T3IuxI0uOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JiMwOTsnIiAvPjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDppZj4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8iPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+S29udGFrdCAtIHRlbGVmw7NuPC94c2w6dGV4dD4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMXNla2NpYVppYWRhdGVsRk9Lb250YWt0VGVsQ2lzbG8vZWdvbnA6WmlhZGF0ZWxGT0tvbnRha3RUZWxDaXNsb19UZWxlcGhvbmVBZGRyZXNzIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5UZWxlZsOzbm5lIMSNw61zbG86IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFaaWFkYXRlbEZPX1BoeXNpY2FsUGVyc29uL2Vnb25wOl8yc2VrY2lhWmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Lb250YWt0IC0gRS1tYWlsPC94c2w6dGV4dD4NCjx4c2w6YXBwbHktdGVtcGxhdGVzLz4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWdvbnA6ZUZvcm1fZUdvdl8wMDEvZWdvbnA6c2VrY2lhWmlhZGF0ZWxGT19QaHlzaWNhbFBlcnNvbi9lZ29ucDpfMnNla2NpYVppYWRhdGVsRk9Lb250YWt0RW1haWxBZHJlc2EvZWdvbnA6WmlhZGF0ZWxGT0tvbnRha3RFbWFpbEFkcmVzYSI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+RS1tYWlsb3bDoSBhZHJlc2E6IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InRleHQiIHNlbGVjdD0iLiIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSInJiMxMDsnIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJieSIgc2VsZWN0PSInJiMxMzsmIzEwOyYjMDk7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpaaWFkb3N0Ij4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD7FvWlhZG9zxaU8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpaaWFkb3N0L2Vnb25wOlJvemhvZCI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PlJvemhvZG51dMOtbSDEjcOtc2xvOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QvZWdvbnA6dnlydWJlbnkiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Cb2wgdnlydWJlbsO9IG5hIHJvazogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpaaWFkb3N0L2Vnb25wOnBvcGxhdG9rIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+UG9wbGF0b2sgemEga29tdW7DoWxuZSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeSB2byB2w73FoWtlICjigqwpOiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QvZWdvbnA6emlhZGFtIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xb1pYWRhbSBzcHLDoXZjdSBwb3BsYXRrdSBvIHpuw63FvmVuaWUvb2RwdXN0ZW5pZSBwb3BsYXRrdSB6YSBrb211bsOhbG5lIG9kcGFkeSBhIGRyb2Juw6kgc3RhdmVibsOpIG9kcGFkeTogPC94c2w6dGV4dD48eHNsOmNob29zZT48eHNsOndoZW4gdGVzdD0iLj0nem4mIzIzNzvFvmVuaWUgJyI+PHhzbDp0ZXh0PnpuJiMyMzc7xb5lbmllIDwveHNsOnRleHQ+PC94c2w6d2hlbj48eHNsOndoZW4gdGVzdD0iLj0nb2RwdXN0ZW5pZSAnIj48eHNsOnRleHQ+b2RwdXN0ZW5pZSA8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOlppYWRvc3QvZWdvbnA6WmlhZG9zdERvdm9kIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+RMO0dm9kIMW+aWFkb3N0aTogPC94c2w6dGV4dD48eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj48eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSIuIiAvPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJyZXBsYWNlIiBzZWxlY3Q9IicmIzEwOyciIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IicmIzEzOyYjMTA7JiMwOTsmIzA5OyciIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0Pk9jaHJhbmEgb3NvYm7DvWNoIMO6ZGFqb3Y8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpTZWtjaWFPY2hyYW5hT3NvYm55Y2hVZGFqb3YvZWdvbnA6T2NocmFuYU9zb2JueWNoVWRham92U3VobGFzIj4NCjx4c2w6aWYgdGVzdD0iLi90ZXh0KCkiPg0KPHhzbDp0ZXh0PiYjeEE7PC94c2w6dGV4dD4NCjx4c2w6dGV4dD4mIzA5OzwveHNsOnRleHQ+PHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+xb1pYWRhdGXEviBha28gZG90a251dMOhIG9zb2JhIHYgc8O6bGFkZSBzIHVzdGFub3ZlbsOtbSDCpyAxMSB6w6Frb25hIMSNLiAxMjIvMjAxMyBaLiB6LiBvIG9jaHJhbmUgb3NvYm7DvWNoIMO6ZGFqb3YgYSBvIHptZW5lIGEgZG9wbG5lbsOtIG5pZWt0b3LDvWNoIHrDoWtvbm92ICjEj2FsZWogbGVuIOKAnnrDoWtvbiksIHBvc2t5dHVqZSBNZXN0dSDFvWlsaW5hLCBha28gcHJldsOhZHprb3ZhdGXEvm92aSwgc8O6aGxhcyBzbyBzcHJhY292YW7DrW0gb3NvYm7DvWNoIMO6ZGFqb3YgdXZlZGVuw71jaCB2IHRlanRvIMW+aWFkb3N0aSBhIGplaiBwcsOtbG9ow6FjaCwgYSB0byB6YSDDusSNZWxvbSBiZXpwZcSNbmVqIGEgesOhbWVudSB2eWx1xI11asO6Y2VqIGlkZW50aWZpa8OhY2llIGRvdGtudXRlaiBvc29ieSBzIHTDvW0sIMW+ZSBqZSBvcHLDoXZuZW7DvSB0ZW50byBzw7pobGFzIHDDrXNvbW5lIG9kdm9sYcWlIHYgcHLDrXBhZGUgcHJldWvDoXphdGXEvm7DqWhvIHBvcnXFoWVuaWEgesOha29uYSB6byBzdHJhbnkgcHJldsOhZHprb3ZhdGXEvmEuIE9kdm9sYW5pZSBtdXPDrSBiecWlIHVyb2JlbsOpIHDDrXNvbW5lIGEgcHJldWvDoXphdGXEvm5lIGRvcnXEjWVuw6kgTWVzdHUgxb1pbGluYS4gRG9iYSBwbGF0bm9zdGkgc8O6aGxhc3Ugc2Egdmlhxb5lIG5hIGRvYnUgdHJ2YW5pYSBwcmV1a8OhemF0ZcS+bsOpaG8gw7rEjWVsdSBzcHJhY8O6dmFuaWEgb3NvYm7DvWNoIMO6ZGFqb3YgZG90a251dGVqIG9zb2J5LiBQcmV2w6FkemtvdmF0ZcS+IHTDvW10byBwcmVobGFzdWplLCDFvmUgb3NvYm7DqSDDumRhamUgZG90a251dGVqIG9zb2J5IGJ1ZGUgc3ByYWNvdsOhdmHFpSBwbG5lIHYgc8O6bGFkZSBzIHVzdGFub3ZlbmlhbWkgesOha29uYS46IDwveHNsOnRleHQ+PHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj48eHNsOndpdGgtcGFyYW0gbmFtZT0iYm9vbFZhbHVlIiBzZWxlY3Q9Ii4iIC8+PC94c2w6Y2FsbC10ZW1wbGF0ZT4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1Ij4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU8L3hzbDp0ZXh0Pg0KPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG1hdGNoPSJlZ29ucDplRm9ybV9lR292XzAwMS9lZ29ucDpzZWtjaWFTcG9zb2JEb3J1Y2VuaWFWeXN0dXB1L2Vnb25wOlNwb3NvYkRvcnVjZW5pYVZ5c3R1cHVUeXAiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5TcMO0c29iIGRvcnXEjWVuaWEgdsO9c3R1cHU6IDwveHNsOnRleHQ+PHhzbDpjaG9vc2U+PHhzbDp3aGVuIHRlc3Q9Ii49J2VEZXNrJyI+PHhzbDp0ZXh0PmVEZXNrPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdvc29ibmUnIj48eHNsOnRleHQ+b3NvYm5lPC94c2w6dGV4dD48L3hzbDp3aGVuPjx4c2w6d2hlbiB0ZXN0PSIuPSdwb8WhdG91JyI+PHhzbDp0ZXh0PnBvxaF0b3U8L3hzbDp0ZXh0PjwveHNsOndoZW4+PHhzbDpvdGhlcndpc2U+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz48L3hzbDpvdGhlcndpc2U+PC94c2w6Y2hvb3NlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYVNwb3NvYkRvcnVjZW5pYVZ5c3R1cHUvZWdvbnA6U3Bvc29iRG9ydWNlbmlhVnlzdHVwdUtvbnRha3QiPg0KPHhzbDppZiB0ZXN0PSIuL3RleHQoKSI+DQo8eHNsOnRleHQ+JiN4QTs8L3hzbDp0ZXh0Pg0KPHhzbDp0ZXh0PiYjMDk7PC94c2w6dGV4dD48eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5Lb250YWt0IHYgcHLDrXBhZGUgZG9ydcSNZW5pYSBvc29ibmUgLyBwb8WhdG91OiA8L3hzbDp0ZXh0Pjx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJzdHJpbmctcmVwbGFjZS1hbGwiPjx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0ZXh0IiBzZWxlY3Q9Ii4iIC8+PHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2UiIHNlbGVjdD0iJyYjMTA7JyIgLz48eHNsOndpdGgtcGFyYW0gbmFtZT0iYnkiIHNlbGVjdD0iJyYjMTM7JiMxMDsmIzA5OyYjMDk7JyIgLz48L3hzbDpjYWxsLXRlbXBsYXRlPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbWF0Y2g9ImVnb25wOmVGb3JtX2VHb3ZfMDAxL2Vnb25wOnNla2NpYUZvb3RlciI+DQo8eHNsOmlmIHRlc3Q9Ii4vdGV4dCgpIj4NCjx4c2w6dGV4dD4mI3hBOzwveHNsOnRleHQ+DQo8eHNsOnRleHQ+JiMwOTs8L3hzbDp0ZXh0Pjx4c2w6dGV4dD5zZWtjaWFGb290ZXI6IDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRvU2tEYXRlIj4NCjx4c2w6cGFyYW0gbmFtZT0iZGF0ZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJGRhdGUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGRhdGVTdHJpbmcgIT0gJycgYW5kIHN0cmluZy1sZW5ndGgoJGRhdGVTdHJpbmcpPTEwIGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVN0cmluZywgMSwgNCkpKSAhPSAnTmFOJyAiPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImNvbmNhdChzdWJzdHJpbmcoJGRhdGVTdHJpbmcsIDksIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlU3RyaW5nLCAxLCA0KSkiIC8+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGRhdGVTdHJpbmciPjwveHNsOnZhbHVlLW9mPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImJvb2xlYW5DaGVja2JveFRvU3RyaW5nIj4NCjx4c2w6cGFyYW0gbmFtZT0iYm9vbFZhbHVlIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJib29sVmFsdWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRib29sVmFsdWUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICd0cnVlJyAiPg0KPHhzbDp0ZXh0PsOBbm88L3hzbDp0ZXh0Pg0KPC94c2w6d2hlbj4NCjx4c2w6d2hlbiB0ZXN0PSIkYm9vbFZhbHVlU3RyaW5nID0gJ2ZhbHNlJyAiPg0KPHhzbDp0ZXh0Pk5pZTwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDp3aGVuIHRlc3Q9IiRib29sVmFsdWVTdHJpbmcgPSAnMScgIj4NCjx4c2w6dGV4dD7DgW5vPC94c2w6dGV4dD4NCjwveHNsOndoZW4+DQo8eHNsOndoZW4gdGVzdD0iJGJvb2xWYWx1ZVN0cmluZyA9ICcwJyAiPg0KPHhzbDp0ZXh0Pk5pZTwveHNsOnRleHQ+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGJvb2xWYWx1ZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VGltZVRyaW1TZWNvbmRzIj4NCjx4c2w6cGFyYW0gbmFtZT0idGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0idGltZVN0cmluZyIgc2VsZWN0PSJzdHJpbmcoJHRpbWUpIiAvPg0KPHhzbDppZiB0ZXN0PSIkdGltZVN0cmluZyAhPSAnJyI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0ic3Vic3RyaW5nKCR0aW1lU3RyaW5nLCAxLCA1KSIgLz4NCjwveHNsOmlmPg0KPC94c2w6dGVtcGxhdGU+DQo8eHNsOnRlbXBsYXRlIG5hbWU9ImZvcm1hdFRpbWUiPg0KPHhzbDpwYXJhbSBuYW1lPSJ0aW1lIiAvPg0KPHhzbDp2YXJpYWJsZSBuYW1lPSJ0aW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkdGltZSkiIC8+DQo8eHNsOmlmIHRlc3Q9IiR0aW1lU3RyaW5nICE9ICcnIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmcoJHRpbWVTdHJpbmcsIDEsIDgpIiAvPg0KPC94c2w6aWY+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0ic3RyaW5nLXJlcGxhY2UtYWxsIj4NCjx4c2w6cGFyYW0gbmFtZT0idGV4dCIvPg0KPHhzbDpwYXJhbSBuYW1lPSJyZXBsYWNlIi8+DQo8eHNsOnBhcmFtIG5hbWU9ImJ5Ii8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSJjb250YWlucygkdGV4dCwgJHJlcGxhY2UpIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzdWJzdHJpbmctYmVmb3JlKCR0ZXh0LCRyZXBsYWNlKSIvPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRieSIvPg0KPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InN0cmluZy1yZXBsYWNlLWFsbCI+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0idGV4dCIgc2VsZWN0PSJzdWJzdHJpbmctYWZ0ZXIoJHRleHQsJHJlcGxhY2UpIi8+DQo8eHNsOndpdGgtcGFyYW0gbmFtZT0icmVwbGFjZSIgc2VsZWN0PSIkcmVwbGFjZSIvPg0KPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImJ5IiBzZWxlY3Q9IiRieSIgLz4NCjwveHNsOmNhbGwtdGVtcGxhdGU+DQo8L3hzbDp3aGVuPg0KPHhzbDpvdGhlcndpc2U+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHRleHQiLz4NCjwveHNsOm90aGVyd2lzZT4NCjwveHNsOmNob29zZT4NCjwveHNsOnRlbXBsYXRlPg0KPHhzbDp0ZW1wbGF0ZSBuYW1lPSJmb3JtYXRUb1NrRGF0ZVRpbWUiPg0KPHhzbDpwYXJhbSBuYW1lPSJkYXRlVGltZSIgLz4NCjx4c2w6dmFyaWFibGUgbmFtZT0iZGF0ZVRpbWVTdHJpbmciIHNlbGVjdD0ic3RyaW5nKCRkYXRlVGltZSkiIC8+DQo8eHNsOmNob29zZT4NCjx4c2w6d2hlbiB0ZXN0PSIkZGF0ZVRpbWVTdHJpbmchPSAnJyBhbmQgc3RyaW5nLWxlbmd0aCgkZGF0ZVRpbWVTdHJpbmcpPjE4IGFuZCBzdHJpbmcobnVtYmVyKHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpKSkgIT0gJ05hTicgIj4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgOSwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgNiwgMiksICcuJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMSwgNCksJyAnLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxMiwgMiksJzonLCBzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxNSwgMikpIiAvPg0KPC94c2w6d2hlbj4NCjx4c2w6b3RoZXJ3aXNlPg0KPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRkYXRlVGltZVN0cmluZyI+PC94c2w6dmFsdWUtb2Y+DQo8L3hzbDpvdGhlcndpc2U+DQo8L3hzbDpjaG9vc2U+DQo8L3hzbDp0ZW1wbGF0ZT4NCjx4c2w6dGVtcGxhdGUgbmFtZT0iZm9ybWF0VG9Ta0RhdGVUaW1lU2Vjb25kIj4NCjx4c2w6cGFyYW0gbmFtZT0iZGF0ZVRpbWUiIC8+DQo8eHNsOnZhcmlhYmxlIG5hbWU9ImRhdGVUaW1lU3RyaW5nIiBzZWxlY3Q9InN0cmluZygkZGF0ZVRpbWUpIiAvPg0KPHhzbDpjaG9vc2U+DQo8eHNsOndoZW4gdGVzdD0iJGRhdGVUaW1lU3RyaW5nIT0gJycgYW5kIHN0cmluZy1sZW5ndGgoJGRhdGVUaW1lU3RyaW5nKT4xOCBhbmQgc3RyaW5nKG51bWJlcihzdWJzdHJpbmcoJGRhdGVUaW1lU3RyaW5nLCAxLCA0KSkpICE9ICdOYU4nICI+DQo8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDksIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDYsIDIpLCAnLicsIHN1YnN0cmluZygkZGF0ZVRpbWVTdHJpbmcsIDEsIDQpLCcgJywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTIsIDIpLCc6Jywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTUsIDIpLCc6Jywgc3Vic3RyaW5nKCRkYXRlVGltZVN0cmluZywgMTgsIDIpKSIgLz4NCjwveHNsOndoZW4+DQo8eHNsOm90aGVyd2lzZT4NCjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZGF0ZVRpbWVTdHJpbmciPjwveHNsOnZhbHVlLW9mPg0KPC94c2w6b3RoZXJ3aXNlPg0KPC94c2w6Y2hvb3NlPg0KPC94c2w6dGVtcGxhdGU+DQo8L3hzbDpzdHlsZXNoZWV0Pg0KDQo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48cG9zcD48ZmllbGRzPjxmaWVsZD48aWQ+Q2hlY2taRVA8L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48ZmllbGQ+PGlkPlBheW1lbnRPcmRlcjwvaWQ+PHZhbHVlPmZhbHNlPC92YWx1ZT48L2ZpZWxkPjxmaWVsZD48aWQ+RGVsaXZlcnk8L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48ZmllbGQ+PGlkPlNpZ248L2lkPjx2YWx1ZT5mYWxzZTwvdmFsdWU+PC9maWVsZD48L2ZpZWxkcz48b3JjaGVzdHJhdGlvbj48aWQ+MTwvaWQ+PC9vcmNoZXN0cmF0aW9uPjwvcG9zcD4=