FORMULARIO DE CONTACTO

“¡No dudes en consultarnos! Nos encantará resolver todas tus cuestiones, sin el menor compromiso”

PCEtLSBOb3RlIDoKICAgLSBZb3UgY2FuIG1vZGlmeSB0aGUgZm9udCBzdHlsZSBhbmQgZm9ybSBzdHlsZSB0byBzdWl0IHlvdXIgd2Vic2l0ZS4gCiAgIC0gQ29kZSBsaW5lcyB3aXRoIGNvbW1lbnRzIERvIG5vdCByZW1vdmUgdGhpcyBjb2RlIGFyZSByZXF1aXJlZCBmb3IgdGhlIGZvcm0gdG8gd29yayBwcm9wZXJseSwgbWFrZSBzdXJlIHRoYXQgeW91IGRvIG5vdCByZW1vdmUgdGhlc2UgbGluZXMgb2YgY29kZS4gCiAgIC0gVGhlIE1hbmRhdG9yeSBjaGVjayBzY3JpcHQgY2FuIG1vZGlmaWVkIGFzIHRvIHN1aXQgeW91ciBidXNpbmVzcyBuZWVkcy4gCiAgIC0gSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IHRlc3QgdGhlIG1vZGlmaWVkIGZvcm0gYmVmb3JlIGdvaW5nIGxpdmUuLS0+CjxkaXYgaWQ9J2NybVdlYlRvRW50aXR5Rm9ybScgY2xhc3M9J3pjd2ZfbGJsVG9wQm90dG9tIGNybVdlYlRvRW50aXR5Rm9ybScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6ICM2NjdCOUE7Y29sb3I6ICNGRkZGRkY7bWF4LXdpZHRoOiAxMDAlOyc+CiAgPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAnPgogICA8TUVUQSBIVFRQLUVRVUlWID0nY29udGVudC10eXBlJyBDT05URU5UPSd0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCc+CiAgIDxmb3JtIGFjdGlvbj0naHR0cHM6Ly9jcm0uem9oby5jb20vY3JtL1dlYlRvTGVhZEZvcm0nIG5hbWU9V2ViVG9MZWFkczQ5MTg0MzAwMDAzOTgyMzAxMSBtZXRob2Q9J1BPU1QnIG9uU3VibWl0PSdqYXZhc2NyaXB0OmRvY3VtZW50LmNoYXJzZXQ9IlVURi04IjsgcmV0dXJuIGNoZWNrTWFuZGF0b3J5NDkxODQzMDAwMDM5ODIzMDExKCknIGFjY2VwdC1jaGFyc2V0PSdVVEYtOCc+CiA8aW5wdXQgdHlwZT0ndGV4dCcgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIG5hbWU9J3huUXNqc2RwJyB2YWx1ZT0nNzNjMWM4MDZjOGFiMzEwYzZlZWIzMWM2MjRiYjMxY2FkOTEzNjNhMGE1YWZiZjhmOTM0YzA1ZTBiYjgwM2E4Nic+PC9pbnB1dD4gCiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd6Y19nYWQnIGlkPSd6Y19nYWQnIHZhbHVlPScnPjwvaW5wdXQ+IAogPGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSdkaXNwbGF5Om5vbmU7JyBuYW1lPSd4bUl3dExEJyB2YWx1ZT0nMTc2NzJiOTU1N2NhZDdjMTgzODIxMWY5MDRkMTQzODgzZWY0YmFkYmQ0ZDg1NTYwZWEwMTk0YjQ4ZWYwYmFiMic+PC9pbnB1dD4gCiA8aW5wdXQgdHlwZT0ndGV4dCcgIHN0eWxlPSdkaXNwbGF5Om5vbmU7JyBuYW1lPSdhY3Rpb25UeXBlJyB2YWx1ZT0nVEdWaFpITT0nPjwvaW5wdXQ+CiA8aW5wdXQgdHlwZT0ndGV4dCcgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIG5hbWU9J3JldHVyblVSTCcgdmFsdWU9J2h0dHBzJiN4M2E7JiN4MmY7JiN4MmY7d3d3LmljZXMtc3BhaW4uY29tJiN4MmY7Z3JhY2lhcy1wb3ItY29udGFjdGFyJiN4MmY7JyA+IDwvaW5wdXQ+CgkgPCEtLSBEbyBub3QgcmVtb3ZlIHRoaXMgY29kZS4gLS0+CjxzdHlsZT4KaHRtbCxib2R5ewoJbWFyZ2luOiAwcHg7Cn0KI2NybVdlYlRvRW50aXR5Rm9ybS56Y3dmX2xibFRvcEJvdHRvbSB7Cgl3aWR0aDoxMDAlOwoJcGFkZGluZzogMjVweDsKCW1hcmdpbjogMCBhdXRvOwoJYm94LXNpemluZzogYm9yZGVyLWJveDsKCWJvcmRlci1yYWRpdXM6IDMwcHg7Cn0KI2NybVdlYlRvRW50aXR5Rm9ybS56Y3dmX2xibFRvcEJvdHRvbSAqIHsKCWJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KI2NybVdlYlRvRW50aXR5Rm9ybXt0ZXh0LWFsaWduOiBsZWZ0O30KI2NybVdlYlRvRW50aXR5Rm9ybSAqIHsKCWRpcmVjdGlvbjogbHRyOwp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl90aXRsZSB7Cgl3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CglwYWRkaW5nOiAwcHggNnB4IDEwcHg7Cglmb250LXdlaWdodDogYm9sZDsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2ZsZCBpbnB1dFt0eXBlPXRleHRdLCAuemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2ZsZCB0ZXh0YXJlYSB7Cgl3aWR0aDogMTAwJTsKCWJvcmRlcjogMXB4IHNvbGlkICNjMGM2Y2MgIWltcG9ydGFudDsKCXJlc2l6ZTogdmVydGljYWw7Cglib3JkZXItcmFkaXVzOiAycHg7CglmbG9hdDogbGVmdDsKYmFja2dyb3VuZC1jb2xvcjogI0ZDRTY3RjsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2xhYiB7Cgl3aWR0aDogMzAlOwoJd29yZC1icmVhazogYnJlYWstd29yZDsKCXBhZGRpbmc6IDBweCA2cHggMHB4OwoJbWFyZ2luLXJpZ2h0OiAxMHB4OwoJbWFyZ2luLXRvcDogNXB4OwoJcGFkZGluZy1ib3R0b206IDRweDsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2ZsZCB7Cgl3aWR0aDogMTAwJTsKCXBhZGRpbmc6IDBweCA2cHggMHB4OwoJcG9zaXRpb246IHJlbGF0aXZlOwoJbWFyZ2luLXRvcDogNXB4Owp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9wcml2YWN5e3BhZGRpbmc6IDZweDt9Ci56Y3dmX2xibFRvcEJvdHRvbSAud2ZybV9mbGRfZHBObntkaXNwbGF5OiBub25lO30KLmRJQntkaXNwbGF5OiBpbmxpbmUtYmxvY2s7fQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2ZsZF9zbHQgewoJd2lkdGg6IDEwMCU7Cglib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJYmFja2dyb3VuZDogI2ZmZjsKCWJvcmRlci1yYWRpdXM6IDRweDsKCWZvbnQtc2l6ZTogMTVweDsKCWZsb2F0OiBsZWZ0OwoJcmVzaXplOiB2ZXJ0aWNhbDsKCXBhZGRpbmc6IDJweCA1cHg7Cn0KLnpjd2ZfbGJsVG9wQm90dG9tIC56Y3dmX3JvdzphZnRlciwgLnpjd2ZfbGJsVG9wQm90dG9tIC56Y3dmX2NvbF9mbGQ6YWZ0ZXIgewoJY29udGVudDogJyc7CglkaXNwbGF5OiB0YWJsZTsKCWNsZWFyOiBib3RoOwp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9jb2xfaGVscCB7CglmbG9hdDogbGVmdDsKCW1hcmdpbi1sZWZ0OiA3cHg7Cglmb250LXNpemU6IDE1cHg7CgltYXgtd2lkdGg6IDM1JTsKCXdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KLnpjd2ZfbGJsVG9wQm90dG9tIC56Y3dmX2hlbHBfaWNvbiB7CgljdXJzb3I6IHBvaW50ZXI7Cgl3aWR0aDogMTZweDsKCWhlaWdodDogMTZweDsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCWJhY2tncm91bmQ6ICNmZmY7Cglib3JkZXI6IDFweCBzb2xpZCAjYzBjNmNjOwoJY29sb3I6ICNjMWMxYzE7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXNpemU6IDExcHg7CglsaW5lLWhlaWdodDogMTZweDsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJYm9yZGVyLXJhZGl1czogNTAlOwp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9yb3cge21hcmdpbjogMTVweCAwcHg7fQouemN3Zl9sYmxUb3BCb3R0b20gLmZvcm1zdWJtaXQgewoJbWFyZ2luLXJpZ2h0OiA1cHg7CgljdXJzb3I6IHBvaW50ZXI7Cgljb2xvcjogdmFyKC0tYmFzZUNvbG9yKTsKCWZvbnQtc2l6ZTogMTVweDsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfcHJpdmFjeV90eHQgewoJd2lkdGg6IDkwJTsKCWNvbG9yOiByZ2IoMCwgMCwgMCk7Cglmb250LXNpemU6IDE1cHg7Cglmb250LWZhbWlseTogVmVyZGFuYTsKCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCXZlcnRpY2FsLWFsaWduOiB0b3A7Cgljb2xvcjogdmFyKC0tYmFzZUNvbG9yKTsKCXBhZGRpbmctdG9wOiAycHg7CgltYXJnaW4tbGVmdDogNnB4Owp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9idXR0b24gewoJZm9udC1zaXplOiAxNXB4OwoJY29sb3I6ICMzMDVCOUE7Cglib3JkZXI6IDFweCBzb2xpZCAjYzBjNmNjOwoJcGFkZGluZzogM3B4IDlweDsKCWJvcmRlci1yYWRpdXM6IDRweDsKCWN1cnNvcjogcG9pbnRlcjsKCW1heC13aWR0aDogMTIwcHg7CglvdmVyZmxvdzogaGlkZGVuOwoJdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cgl3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl90b29sdGlwX292ZXJ7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLnpjd2ZfbGJsVG9wQm90dG9tIC56Y3dmX3Rvb2x0aXBfY3RuewoJcG9zaXRpb246IGFic29sdXRlOwoJYmFja2dyb3VuZDogI2RlZGVkZTsKCXBhZGRpbmc6IDNweCA2cHg7Cgl0b3A6IDNweDsKCWJvcmRlci1yYWRpdXM6IDRweDt3b3JkLWJyZWFrOiBicmVhay13b3JkOwoJbWluLXdpZHRoOiAxMDBweDsKCW1heC13aWR0aDogMTUwcHg7Cgljb2xvcjogdmFyKC0tYmFzZUNvbG9yKTsKCXotaW5kZXg6IDEwMDsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY2tib3h7CglmbG9hdDogbGVmdDsKfQouemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfZmlsZXsKCXdpZHRoOiAzNSU7Cglib3gtc2l6aW5nOiBib3JkZXItYm94OwoJZmxvYXQ6IGxlZnQ7Cn0KLmNsZWFyQjphZnRlcnsKCWNvbnRlbnQ6Jyc7CglkaXNwbGF5OiBibG9jazsKCWNsZWFyOiBib3RoOwp9CkBtZWRpYSBhbGwgIHsKCS56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9jb2xfbGFiLCAuemN3Zl9sYmxUb3BCb3R0b20gLnpjd2ZfY29sX2ZsZCB7CgkJd2lkdGg6IGF1dG87CgkJZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsKCX0KCS56Y3dmX2xibFRvcEJvdHRvbSAuemN3Zl9jb2xfaGVscCB7d2lkdGg6IDQwJTt9Cn0KPC9zdHlsZT4KPGRpdiBjbGFzcz0nemN3Zl9yb3cnPjxkaXYgY2xhc3M9J3pjd2ZfY29sX2xhYicgc3R5bGU9J2ZvbnQtc2l6ZToxNXB4OyBmb250LWZhbWlseTogVmVyZGFuYTsnPjxsYWJlbCBmb3I9J0NvbXBhbnknPk5vbWJyZSB5IGFwZWxsaWRvcyBkZWwgcHJvZ2VuaXRvci9hPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPio8L3NwYW4+PC9sYWJlbD48L2Rpdj48ZGl2IGNsYXNzPSd6Y3dmX2NvbF9mbGQnPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nQ29tcGFueScgbmFtZT0nQ29tcGFueScgbWF4bGVuZ3RoPScyMDAnPjwvaW5wdXQ+PGRpdiBjbGFzcz0nemN3Zl9jb2xfaGVscCc+PC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9J3pjd2Zfcm93Jz48ZGl2IGNsYXNzPSd6Y3dmX2NvbF9sYWInIHN0eWxlPSdmb250LXNpemU6MTVweDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Jz48bGFiZWwgZm9yPSdMYXN0X05hbWUnPk5vbWJyZSB5IGFwZWxsaWRvcyBkZWwgZXN0dWRpYW50ZTxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Jz4qPC9zcGFuPjwvbGFiZWw+PC9kaXY+PGRpdiBjbGFzcz0nemN3Zl9jb2xfZmxkJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J0xhc3RfTmFtZScgbmFtZT0nTGFzdCBOYW1lJyBtYXhsZW5ndGg9JzgwJz48L2lucHV0PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2hlbHAnPjwvZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSd6Y3dmX3Jvdyc+PGRpdiBjbGFzcz0nemN3Zl9jb2xfbGFiJyBzdHlsZT0nZm9udC1zaXplOjE1cHg7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyc+PGxhYmVsIGZvcj0nTEVBRENGODInPkZlY2hhIGRlIG5hY2ltaWVudG8gZGVsIGVzdHVkaWFudGU8c3BhbiBzdHlsZT0nY29sb3I6cmVkOyc+Kjwvc3Bhbj48L2xhYmVsPjwvZGl2PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2ZsZCc+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdMRUFEQ0Y4MicgbmFtZT0nTEVBRENGODInIG1heGxlbmd0aD0nMjAnIGZ0eXBlPSdkYXRlJyBwbGFjZWhvbGRlcj0nREQvTU0vWVlZWScgdHBsaWQ9JzQ5MTg0MzAwMDAzOTgyMzAxMUxFQURDRjgyJyBvbmZvY3VzPSdmb3JtQ2FsZW5kZXIuc3RFdihldmVudCk7Zm9ybUNhbGVuZGVyLmNyZWF0ZUNhbGVuZGFyKHRoaXMpOycgYXV0b2NvbXBsZXRlPSdvZmYnPjwvaW5wdXQ+PGRpdiBpZD0ndGVtcGxhdGU0OTE4NDMwMDAwMzk4MjMwMTFMRUFEQ0Y4MicgIG9uY2xpY2s9J2Zvcm1DYWxlbmRlci5zdEV2KGV2ZW50KTsnICBjbGFzcz0ndGVtcENhbERpdic+PC9kaXY+PGRpdiBjbGFzcz0nemN3Zl9jb2xfaGVscCc+PC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9J3pjd2Zfcm93Jz48ZGl2IGNsYXNzPSd6Y3dmX2NvbF9sYWInIHN0eWxlPSdmb250LXNpemU6MTVweDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Jz48bGFiZWwgZm9yPSdMRUFEQ0Y2Jz5FLW1haWw8c3BhbiBzdHlsZT0nY29sb3I6cmVkOyc+Kjwvc3Bhbj48L2xhYmVsPjwvZGl2PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2ZsZCc+PGlucHV0IHR5cGU9J3RleHQnIGZ0eXBlPSdlbWFpbCcgaWQ9J0xFQURDRjYnIG5hbWU9J0xFQURDRjYnIG1heGxlbmd0aD0nMTAwJz48L2lucHV0PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2hlbHAnPjwvZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSd6Y3dmX3Jvdyc+PGRpdiBjbGFzcz0nemN3Zl9jb2xfbGFiJyBzdHlsZT0nZm9udC1zaXplOjE1cHg7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyc+PGxhYmVsIGZvcj0nTEVBRENGNTQnPlRlbMOpZm9ubzxzcGFuIHN0eWxlPSdjb2xvcjpyZWQ7Jz4qPC9zcGFuPjwvbGFiZWw+PC9kaXY+PGRpdiBjbGFzcz0nemN3Zl9jb2xfZmxkJz48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J0xFQURDRjU0JyBuYW1lPSdMRUFEQ0Y1NCcgbWF4bGVuZ3RoPSc5Jz48L2lucHV0PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2hlbHAnPjwvZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSd6Y3dmX3Jvdyc+PGRpdiBjbGFzcz0nemN3Zl9jb2xfbGFiJyBzdHlsZT0nZm9udC1zaXplOjE1cHg7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyc+PGxhYmVsIGZvcj0nTEVBRENGMTIxJz5Qcm92aW5jaWE8c3BhbiBzdHlsZT0nY29sb3I6cmVkOyc+Kjwvc3Bhbj48L2xhYmVsPjwvZGl2PjxkaXYgY2xhc3M9J3pjd2ZfY29sX2ZsZCc+PHNlbGVjdCBjbGFzcz0nemN3Zl9jb2xfZmxkX3NsdCcgaWQ9J0xFQURDRjEyMScgbmFtZT0nTEVBRENGMTIxJyAgPgoJCQk8b3B0aW9uIHZhbHVlPSctTm9uZS0nPi1Ob25lLTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdBbGF2YSc+QWxhdmE8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nQWxiYWNldGUnPkFsYmFjZXRlPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0FsaWNhbnRlJz5BbGljYW50ZTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdBbG1lciZpYWN1dGU7YSc+QWxtZXImaWFjdXRlO2E8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nQXN0dXJpYXMnPkFzdHVyaWFzPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0F2aWxhJz5BdmlsYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdCYWRham96Jz5CYWRham96PC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0JhcmNlbG9uYSc+QmFyY2Vsb25hPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0J1cmdvcyc+QnVyZ29zPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0NhY2VyZXMnPkNhY2VyZXM8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nQ2FkaXonPkNhZGl6PC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0NhbnRhYnJpYSc+Q2FudGFicmlhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0Nhc3RlbGxvbic+Q2FzdGVsbG9uPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0NldXRhJz5DZXV0YTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdDaXVkYWQmI3gyMDtSZWFsJz5DaXVkYWQgUmVhbDwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdDb3Jkb2JhJz5Db3Jkb2JhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0N1ZW5jYSc+Q3VlbmNhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0dlcm9uYSc+R2Vyb25hPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0dyYW5hZGEnPkdyYW5hZGE8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nR3VhZGFsYWphcmEnPkd1YWRhbGFqYXJhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0d1aXB1emNvYSc+R3VpcHV6Y29hPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0h1ZWx2YSc+SHVlbHZhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0h1ZXNjYSc+SHVlc2NhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0lzbGFzJiN4MjA7QmFsZWFyZXMnPklzbGFzIEJhbGVhcmVzPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0phZW4nPkphZW48L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nTGEmI3gyMDtDb3J1Jm50aWxkZTthJz5MYSBDb3J1Jm50aWxkZTthPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0xhJiN4MjA7UmlvamEnPkxhIFJpb2phPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0xhcyYjeDIwO1BhbG1hcyc+TGFzIFBhbG1hczwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdMZW9uJz5MZW9uPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0xsZWlkYSc+TGxlaWRhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J0x1Z28nPkx1Z288L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nTWFkcmlkJz5NYWRyaWQ8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nTWFsYWdhJz5NYWxhZ2E8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nTWVsaWxsYSc+TWVsaWxsYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdNdXJjaWEnPk11cmNpYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdOYXZhcnJhJz5OYXZhcnJhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J09yZW5zZSc+T3JlbnNlPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1BhbGVuY2lhJz5QYWxlbmNpYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdQb250ZXZlZHJhJz5Qb250ZXZlZHJhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1NhbGFtYW5jYSc+U2FsYW1hbmNhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1NhbnRhJiN4MjA7Q3J1eiYjeDIwO2RlJiN4MjA7VGVuZXJpZmUnPlNhbnRhIENydXogZGUgVGVuZXJpZmU8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nU2Vnb3ZpYSc+U2Vnb3ZpYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdTZXZpbGxhJz5TZXZpbGxhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1NvcmlhJz5Tb3JpYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdUYXJyYWdvbmEnPlRhcnJhZ29uYTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdUZXJ1ZWwnPlRlcnVlbDwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdUb2xlZG8nPlRvbGVkbzwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdWYWxlbmNpYSc+VmFsZW5jaWE8L29wdGlvbj4KCQkJPG9wdGlvbiB2YWx1ZT0nVmFsbGFkb2xpZCc+VmFsbGFkb2xpZDwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdWaXpjYXlhJz5WaXpjYXlhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1phbW9yYSc+WmFtb3JhPC9vcHRpb24+CgkJCTxvcHRpb24gdmFsdWU9J1phcmFnb3phJz5aYXJhZ296YTwvb3B0aW9uPgoJCQk8b3B0aW9uIHZhbHVlPSdPdHJvcyc+T3Ryb3M8L29wdGlvbj4KCQk8L3NlbGVjdD48ZGl2IGNsYXNzPSd6Y3dmX2NvbF9oZWxwJz48L2Rpdj48L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0nemN3Zl9yb3cnPjxkaXYgY2xhc3M9J3pjd2ZfY29sX2xhYicgc3R5bGU9J2ZvbnQtc2l6ZToxNXB4OyBmb250LWZhbWlseTogVmVyZGFuYTsnPjxsYWJlbCBmb3I9J0Rlc2NyaXB0aW9uJz5Db21lbnRhcmlvPC9sYWJlbD48L2Rpdj48ZGl2IGNsYXNzPSd6Y3dmX2NvbF9mbGQnPjx0ZXh0YXJlYSBpZD0nRGVzY3JpcHRpb24nIG5hbWU9J0Rlc2NyaXB0aW9uJz48L3RleHRhcmVhPjxkaXYgY2xhc3M9J3pjd2ZfY29sX2hlbHAnPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J3pjd2Zfcm93Jz48ZGl2IGNsYXNzPSd6Y3dmX3ByaXZhY3knPjxkaXYgY2xhc3M9J2RJQiB2YXQnIGFsaWduPSdsZWZ0Jz48ZGl2IGNsYXNzPSdkaXNwbGF5UHVycG9zZSAgZjEzJz48bGFiZWwgY2xhc3M9J25ld0N1c3RvbWNoa2JveC1tZCBkSUIgdzEwMHBlcic+PGlucHV0IGF1dG9jb21wbGV0ZT0nb2ZmJyBpZD0ncHJpdmFjeVRvb2w0OTE4NDMwMDAwMzk4MjMwMTEnIHR5cGU9J2NoZWNrYm94JyBuYW1lPSdwcml2YWN5VG9vbCcgb25jbGljaz0nZGlzYWJsZUVycjQ5MTg0MzAwMDAzOTgyMzAxMSgpJz48L2xhYmVsPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2RJQiB6Y3dmX3ByaXZhY3lfdHh0JyBzdHlsZT0nZm9udC1zaXplOiAxNXB4O2ZvbnQtZmFtaWx5OlZlcmRhbmE7Y29sb3I6ICNGRkZGRkY7Jz5BY2VwdG8gbGEgPGEgaHJlZj0naHR0cHM6Ly93d3cuaWNlcy1zcGFpbi5jb20vcG9saXRpY2EtZGUtcHJpdmFjaWRhZC8nIHRpdGxlPSdodHRwczovL3d3dy5pY2VzLXNwYWluLmNvbS9wb2xpdGljYS1kZS1wcml2YWNpZGFkLycgdGFyZ2V0PSdfYmxhbmsnPlBvbMOtdGljYSBkZSBwcml2YWNpZGFkPC9hPi48L2Rpdj4gPGRpdiAgaWQ9J3ByaXZhY3lFcnI0OTE4NDMwMDAwMzk4MjMwMTEnIHN0eWxlPSdmb250LXNpemU6MTJweDtjb2xvcjpyZWQ7cGFkZGluZy1sZWZ0OiA1cHg7dmlzaWJpbGl0eTpoaWRkZW47Jz5BY2VwdGUgcG9yIGZhdm9yPC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0nemN3Zl9yb3cnPjxkaXYgY2xhc3M9J3pjd2ZfY29sX2xhYic+PC9kaXY+PGRpdiBjbGFzcz0nemN3Zl9jb2xfZmxkJz48aW5wdXQgdHlwZT0nc3VibWl0JyBpZD0nZm9ybXN1Ym1pdCcgY2xhc3M9J2Zvcm1zdWJtaXQgemN3Zl9idXR0b24nIHZhbHVlPSdFbnZpYXInIHRpdGxlPSdFbnZpYXInPjxpbnB1dCB0eXBlPSdyZXNldCcgY2xhc3M9J3pjd2ZfYnV0dG9uJyBuYW1lPSdyZXNldCcgdmFsdWU9J1Jlc3RhYmxlY2VyJyB0aXRsZT0nUmVzdGFibGVjZXInPjwvZGl2PjwvZGl2Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+dmFyIGZvcm1DYWxlbmRlcj17dXNlclBhdHRlcm46J1lZWVktTU0tREQnLGN1cnJEYXRlT2JqOnZvaWQgMCxjdXJyTW9udGg6dm9pZCAwLGN1cnJZZWFyOnZvaWQgMCxjdXJyRGF0ZTp2b2lkIDAsY3Vyck1vbnRoRW5kOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sbW9udGhOYW1lOnZvaWQgMCxkYXlzOnZvaWQgMCxkaXNwbGF5UGFuZWw6dm9pZCAwLGlzSGlkZVRvZGF5OnZvaWQgMCxjYWxEZWZDb2xvcjonIzUxNUNDQicsd2Vla2RheXM6ezE6J1N1bmRheScsMjonTW9uZGF5JywzOidUdWVzZGF5Jyw0OidXZWRuZXNkYXknLDU6J1RodXJzZGF5Jyw2OidGcmlkYXknLDc6J1NhdHVyZGF5J30sbW9udGhzOnsxOidKYW51YXJ5JywyOidGZWJydWFyeScsMzonTWFyY2gnLDQ6J0FwcmlsJyw1OidNYXknLDY6J0p1bmUnLDc6J0p1bHknLDg6J0F1Z3VzdCcsOTonU2VwdGVtYmVyJywxMDonT2N0b2JlcicsMTE6J05vdmVtYmVyJywxMjonRGVjZW1iZXInfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5tb250aE5hbWU9W3todG1sOidKYW51YXJ5Jyx2YWx1ZTowfSx7aHRtbDonRmVicnVhcnknLHZhbHVlOjF9LHtodG1sOidNYXJjaCcsdmFsdWU6Mn0se2h0bWw6J0FwcmlsJyx2YWx1ZTozfSx7aHRtbDonTWF5Jyx2YWx1ZTo0fSx7aHRtbDonSnVuZScsdmFsdWU6NX0se2h0bWw6J0p1bHknLHZhbHVlOjZ9LHtodG1sOidBdWd1c3QnLHZhbHVlOjd9LHtodG1sOidTZXB0ZW1iZXInLHZhbHVlOjh9LHtodG1sOidPY3RvYmVyJyx2YWx1ZTo5fSx7aHRtbDonTm92ZW1iZXInLHZhbHVlOjEwfSx7aHRtbDonRGVjZW1iZXInLHZhbHVlOjExfV0sdGhpcy5kYXlzPVsnc3N1bmRheScsJ3Ntb25kYXknLCdzdHVlc2RheScsJ3N3ZWRuZXNkYXknLCdzdGh1cnNkYXknLCdzZnJpZGF5Jywnc3NhdHVyZGF5J10sdGhpcy5kYXlOYW1lc1Nob3J0PVsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J10sdGhpcy5kYXlzQmFzZWRPblByZWZlcm5jZT1bJ3NzdW5kYXknLCdzbW9uZGF5Jywnc3R1ZXNkYXknLCdzd2VkbmVzZGF5Jywnc3RodXJzZGF5Jywnc2ZyaWRheScsJ3NzYXR1cmRheSddO3ZhciBlPXRoaXMuZGF5c0Jhc2VkT25QcmVmZXJuY2VbMF07dGhpcy5kYXlzQmFzZWRPblByZWZlcm5jZS5zaGlmdCgxKSx0aGlzLmRheXNCYXNlZE9uUHJlZmVybmNlLnB1c2goZSk7dmFyIHQ9dGhpcy5kYXlOYW1lc1Nob3J0WzBdO3RoaXMuZGF5TmFtZXNTaG9ydC5zaGlmdCgxKSx0aGlzLmRheU5hbWVzU2hvcnQucHVzaCh0KSx0aGlzLmN1cnJEYXRlT2JqPW5ldyBEYXRlLHRoaXMuY3Vyck1vbnRoPXRoaXMuY3VyckRhdGVPYmouZ2V0TW9udGgoKSx0aGlzLmN1cnJZZWFyPXRoaXMuY3VyckRhdGVPYmouZ2V0RnVsbFllYXIoKSx0aGlzLmN1cnJZZWFyPDFlMyYmKHRoaXMuY3VyclllYXIrPTE5MDApLHRoaXMuY3VyckRhdGU9dGhpcy5jdXJyRGF0ZU9iai5nZXREYXRlKCl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGhOYW1lW3RoaXMuY3Vyck1vbnRoXS5odG1sKycgJyt0aGlzLmN1cnJZZWFyfSxjcmVhdGVDYWxlbmRhcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGVtcENhbERpdicpLGE9dC5sZW5ndGgscj0wO3I8YTtyKyspe3ZhciBuPXRbcl0uc3R5bGU7J2Jsb2NrJz09PW4uZGlzcGxheSYmKG4uZGlzcGxheT0nbm9uZScpfXRoaXMuY2FsZW5kYXJOb2RlPWUsdGhpcy51c2VyUGF0dGVybj10aGlzLmNhbGVuZGFyTm9kZS5wbGFjZWhvbGRlcjt2YXIgcz10aGlzLmNhbGVuZGFyTm9kZS52YWx1ZSxpPSExO2lmKHMpe3ZhciBsPWRhdGVGb3JtYXRDb252ZXJ0LnZhbGlkYXRlKHMsdGhpcy51c2VyUGF0dGVybik7bCYmKHRoaXMuY3VyckRhdGU9bC5nZXREYXRlKCksdGhpcy5jdXJyTW9udGg9bC5nZXRNb250aCgpLHRoaXMuY3VyclllYXI9bC5nZXRGdWxsWWVhcigpLHRoaXMuY3VyclllYXI8MWUzJiYodGhpcy5jdXJyWWVhcj1OdW1iZXIodGhpcy5jdXJyWWVhcikrMTkwMCkpfWVsc2UgaT0hMCxmb3JtQ2FsZW5kZXIuaW5pdCgpO3RoaXMubW9udGhOYW1lfHxmb3JtQ2FsZW5kZXIuaW5pdCgpLHRoaXMuY3JlYXRlRGF0ZVBpY2tlcih0aGlzLmN1cnJEYXRlLHRoaXMuY3Vyck1vbnRoLHRoaXMuY3VyclllYXIsaSwhMSl9LGNyZWF0ZURhdGVQaWNrZXI6ZnVuY3Rpb24oZSx0LGEscixuKXsxPT09dGhpcy5jdXJyTW9udGgmJih0aGlzLmN1cnJNb250aEVuZFsxXT10aGlzLmN1cnJZZWFyJTQwMD09MHx8dGhpcy5jdXJyWWVhciU0PT0wJiZ0aGlzLmN1cnJZZWFyJTEwMCE9MD8yOToyOCk7dmFyIHM9bmV3IERhdGUoYSx0LDEpLGk9NixsPXRoaXMuZGF5c0Jhc2VkT25QcmVmZXJuY2UuaW5kZXhPZih0aGlzLmRheXNbcy5nZXREYXkoKV0pKzE7aT0zMT09PXRoaXMuY3Vyck1vbnRoRW5kW3RdJiZsPj02fHwzMD09PXRoaXMuY3Vyck1vbnRoRW5kW3RdJiY3PT09bD83OjI4PT09dGhpcy5jdXJyTW9udGhFbmRbdF0mJjE9PT1sPzU6Njt2YXIgZD10aGlzLmdldFRpdGxlKGUsYSx0KSxvPXRoaXMuZGF5TmFtZXNTaG9ydCxoPSc8ZGl2IGlkPVwnY2FsZW5EaXZcJz48aSBpZD1cJ2NhbEFycm93XCcgc3R5bGU9XCdkaXNwbGF5Om5vbmU7XCcgY2xhc3M9XCdkSUIgU29jaWFsQXJyb3dcJz48L2k+PGRpdj48ZGl2Pic7aCs9JzxkaXYgY2xhc3M9XCd0eHQtY3RyXCc+PHNwYW4gY2xhc3M9XCdjYWxOYXYgZElCIHZhbSB5ZWFyTmF2TGZ0XCcgb25jbGljaz1cJ2Zvcm1DYWxlbmRlci51cGRhdGVEYXRlUGlja2VyKGV2ZW50LHVuZGVmaW5lZCwgLTEpXCc+PGkgY2xhc3M9XCdhcnJvdyBsZWZ0IG1STWludXMyXCc+PC9pPjxpIGNsYXNzPVwnYXJyb3cgbGVmdFwnPjwvaT48L3NwYW4+PHNwYW4gY2xhc3M9XCdjYWxOYXYgZExmdCBkSUIgdmFtXCcgb25DbGljaz1cJ2Zvcm1DYWxlbmRlci51cGRhdGVEYXRlUGlja2VyKGV2ZW50LC0xKVwnIGlkPVwncG1cJz48aSBjbGFzcz1cJ2Fycm93IGxlZnRcJz48L2k+PC9zcGFuPjxzcGFuIGNsYXNzPVwnc0NhbE1vblwnPicrZCsnPC9zcGFuPjxzcGFuIGNsYXNzPVwnY2FsTmF2IGRSZ3QgdmFtXCcgb25DbGljayA9XCdmb3JtQ2FsZW5kZXIudXBkYXRlRGF0ZVBpY2tlcihldmVudCwxKVwnIGlkPVwnbm1cJz48aSBjbGFzcz1cJ2Fycm93IHJpZ2h0XCc+PC9pPjwvc3Bhbj48c3BhbiBjbGFzcz1cJ2NhbE5hdiBkSUIgdmFtIHllYXJOYXZSZ3RcJyBvbmNsaWNrPVwnZm9ybUNhbGVuZGVyLnVwZGF0ZURhdGVQaWNrZXIoZXZlbnQsdW5kZWZpbmVkLCAxKVwnPjxpIGNsYXNzPVwnYXJyb3cgcmlnaHRcJz48L2k+PGkgY2xhc3M9XCdhcnJvdyByaWdodCBtTE1pbnVzMlwnPjwvaT48L3NwYW4+PC9kaXY+JyxoKz0nPHRhYmxlICBjbGFzcz1cJ2NhbERheVwnICBpZCA9XCd3ZWVrRGF5c1wnIHN0eWxlPVwnY29sb3I6IzhiOWFiOTsgZm9udC1zaXplOjhweDsgbWFyZ2luLWxlZnQ6MFwnPjx0cj4gPHRoPicrb1swXSsnPC90aD4gPHRoPicrb1sxXSsnPC90aD48dGg+JytvWzJdKyc8L3RoPjx0aD4nK29bM10rJzwvdGg+IDx0aD4nK29bNF0rJzwvdGg+IDx0aD4nK29bNV0rJzwvdGg+IDx0aD4nK29bNl0rJzwvdGg+PC90cj48L3RhYmxlPicsaCs9JzwvZGl2PicsaCs9Jzx0YWJsZSBpZD1cJ2NhbEhlYWRlclwnIGNsYXNzPVwnY2FsRGF5XCcgc3R5bGU9XCdtYXJnaW4tbGVmdDowOyBtYXJnaW4tdG9wOi01cHg7XCcgd2lkdGg9XCcxMDAlXCcgY2VsbHNwYWNpbmc9XCcwXCcgY2VsbHBhZGRpbmc9XCcwXCcgYm9yZGVyPVwnMFwnID4nO3ZhciBjPScnLHU9bmV3IERhdGUseT1hfHx1LmdldEZ1bGxZZWFyKCksdj1lfHx1LmdldERhdGUoKSxnPXZvaWQgMD09PXQ/dS5nZXRNb250aCgpOnQsbT11LmdldE1vbnRoKCkscD11LmdldEZ1bGxZZWFyKCk7dS5nZXREYXRlKCk7bT09PXQmJmE9PT1wJiYoYz0nIHN0eWxlPVwnZGlzcGxheTpub25lXCcnKTtmb3IodmFyIGYsRCxNLGI9cy5nZXREYXkoKTsxIT09Yjspcy5zZXREYXRlKHMuZ2V0RGF0ZSgpLTEpLGI9cy5nZXREYXkoKTtmb3IodmFyIHg9MTt4PD1pO3grKyl7aCs9Jzx0cj4nO2Zvcih2YXIgWT0xO1k8ODtZKyspe2Y9cy5nZXRNb250aCgpLEQ9cy5nZXRGdWxsWWVhcigpLE09cy5nZXREYXRlKCksRCsnLScrKHBhcnNlSW50KGYpKzEpKyctJytNO3ZhciBGPSdjZGF0ZSBsdC1ncmF5JztpZihNPT09diYmRD09PXkmJmY9PT1nJiYoRj0nY2RhdGUgbHQtZ3JheScpLGY9PT1nJiYoRj0nY2RhdGUnKSwociYmTT09PXYmJm09PT1nJiZwPT09eXx8IW4mJk09PT12JiZmPT09ZyYmRD09PXkpJiYoRj0nc2VsJyksbil7dmFyIGs9ZGF0ZUZvcm1hdENvbnZlcnQudmFsaWRhdGUodGhpcy5jYWxlbmRhck5vZGUudmFsdWUsZm9ybUNhbGVuZGVyLnVzZXJQYXR0ZXJuKTtrJiZNPT09ay5nZXREYXRlKCkmJmY9PT1rLmdldE1vbnRoKCkmJkQ9PT1rLmdldEZ1bGxZZWFyKCkmJihGPSdzZWwnKX1oKz0nPHRkIGNsYXNzPVwnJytGKydcJyBvbkNsaWNrPVwnZm9ybUNhbGVuZGVyLmRpc3BsYXlTZWxlY3RlZERhdGUoXCInK00rJyAnK2YrJyAnK0QrJ1wiKVwnPicrTSsnPC90ZD4nLHMuc2V0RGF0ZShzLmdldERhdGUoKSsxKX1oKz0nPC90cj4nfWgrPSc8L3RhYmxlPicsaCs9JzxkaXY+Jyx0aGlzLmlzSGlkZVRvZGF5fHwoaCs9JzxkaXYgaWQ9XCdjYWxCdG5zXCcgY2xhc3M9XCdwVDE1IHBCMTUgZkxcJz48YScrYysnIGNsYXNzPVwnY1AgZkxcJyBocmVmPVwnamF2YXNjcmlwdDo7XCcgaWQ9XCd0b2RheUJ0blwnIG9uY2xpY2s9XCdmb3JtQ2FsZW5kZXIuZGlzcGxheVNlbGVjdGVkRGF0ZShcInRvZGF5XCIpXCc+VG9kYXk8L2E+JyksaCs9JzwvZGl2PicsaCs9JzwvZGl2PicsaCs9JzwvZGl2PjwvZGl2Pic7dmFyIEM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlJyt0aGlzLmNhbGVuZGFyTm9kZS5nZXRBdHRyaWJ1dGUoJ3RwbGlkJykpO0MuaW5uZXJIVE1MPWgsQy5zdHlsZS5kaXNwbGF5PSdibG9jayd9LGRpc3BsYXlTZWxlY3RlZERhdGU6ZnVuY3Rpb24oZSx0KXtpZighdCl0PXRoaXMuY2FsZW5kYXJOb2RlO2lmKCd0b2RheSc9PT1lKXt2YXIgYT1uZXcgRGF0ZTtlPWEuZ2V0RGF0ZSgpKycgJythLmdldE1vbnRoKCkrJyAnK2EuZ2V0RnVsbFllYXIoKX1lPWUuc3BsaXQoJyAnKTt2YXIgcj1kYXRlRm9ybWF0Q29udmVydC5jb252ZXJ0Rm9ybWF0KG5ldyBEYXRlKGVbMl0sZVsxXSxlWzBdKSx0aGlzLnVzZXJQYXR0ZXJuKTt0LnZhbHVlPXIsdC5mb2N1cygpLHQucGxhY2Vob2xkZXI9dGhpcy51c2VyUGF0dGVybixmb3JtQ2FsZW5kZXIuY2xvc2VEYXRlUGlja2VyKCksdC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsZnVuY3Rpb24oZSl7Zm9ybUNhbGVuZGVyLmNhbGVuZGFyTm9kZT10aGlzO3ZhciB0PXRoaXMudmFsdWUsYT1kYXRlRm9ybWF0Q29udmVydC52YWxpZGF0ZSh0LGZvcm1DYWxlbmRlci51c2VyUGF0dGVybik7aWYoYSl7dmFyIHI9e307ci5kYXRlPWEuZ2V0RGF0ZSgpLHIubW9udGg9YS5nZXRNb250aCgpLHIueWVhcj1hLmdldEZ1bGxZZWFyKCksZm9ybUNhbGVuZGVyLnVwZGF0ZURhdGVQaWNrZXIoZSx2b2lkIDAsdm9pZCAwLHIpfX0pLHQuYmx1cigpfSxjbG9zZURhdGVQaWNrZXI6ZnVuY3Rpb24oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVtcGxhdGUnK3RoaXMuY2FsZW5kYXJOb2RlLmdldEF0dHJpYnV0ZSgndHBsaWQnKSkuc3R5bGUuZGlzcGxheT0nbm9uZSd9LHVwZGF0ZURhdGVQaWNrZXI6ZnVuY3Rpb24oZSx0LGEscil7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlJyt0aGlzLmNhbGVuZGFyTm9kZS5nZXRBdHRyaWJ1dGUoJ3RwbGlkJykpO3ImJih0aGlzLmN1cnJEYXRlPXIuZGF0ZSx0aGlzLmN1cnJNb250aD1yLm1vbnRoLHRoaXMuY3VyclllYXI9ci55ZWFyKSx2b2lkIDAhPT10PzE9PT10PzExPT09dGhpcy5jdXJyTW9udGg/KHRoaXMuY3Vyck1vbnRoPTAsdGhpcy5jdXJyWWVhcisrKTp0aGlzLmN1cnJNb250aCsrOjA9PT10aGlzLmN1cnJNb250aD8odGhpcy5jdXJyTW9udGg9MTEsdGhpcy5jdXJyWWVhci0tKTp0aGlzLmN1cnJNb250aC0tOnZvaWQgMCE9PWEmJih0aGlzLmN1cnJZZWFyPXBhcnNlSW50KHRoaXMuY3VyclllYXIpK2EpLHRoaXMuY3JlYXRlRGF0ZVBpY2tlcih0aGlzLmN1cnJEYXRlLHRoaXMuY3Vyck1vbnRoLHRoaXMuY3VyclllYXIsITEsITApLG4uc3R5bGUuZGlzcGxheT0nYmxvY2snfSxzdEV2OmZ1bmN0aW9uKGUpe2V8fChlPXdpbmRvdy5ldmVudCksZSYmKGUuY2FuY2VsQnViYmxlPSEwLGUuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpKX19O3dpbmRvdy5vbmNsaWNrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RlbXBDYWxEaXYnKSx0PWUubGVuZ3RoLGE9MDthPHQ7YSsrKXt2YXIgcj1lW2FdO2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0cGxpZD1cJycrci5pZC5yZXBsYWNlKCd0ZW1wbGF0ZScsJycpKydcJ10nKSlyZXR1cm47dmFyIG49ZVthXS5zdHlsZTsnYmxvY2snPT09bi5kaXNwbGF5JiYobi5kaXNwbGF5PSdub25lJyl9fTt2YXIgZGF0ZUZvcm1hdENvbnZlcnQ9e3Nob3J0TW9uOlsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWF5JywnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ10sbG9uZ01vbjpbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ10sZGF5QXJyOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sd29kOjEsbG06J3VzZXJkYXRlJyxfZGF0ZU9iajp2b2lkIDAsbExpbWl0OjgwLGZvcm1hdHM6W3t2YWw6J1lZWVknLHR5cGU6J3llYXInLHJlZ2V4Oi9cZHs0fS8sbGVuOjR9LHt2YWw6J0dHR0cnLHR5cGU6J3llYXInLHJlZ2V4Oi9cZHs0fS8sbGVuOjQsaXNXRUc6ITB9LHt2YWw6J2dnZ2cnLHR5cGU6J3llYXInLHJlZ2V4Oi9cZHs0fS8sbGVuOjQsaXNXRUc6ITB9LHt2YWw6J1lZJyx0eXBlOid5ZWFyJyxyZWdleDovXGR7Mn0vLGxlbjoyfSx7dmFsOidHRycsdHlwZToneWVhcicscmVnZXg6L1xkezJ9LyxsZW46Mixpc1dFRzohMH0se3ZhbDonZ2cnLHR5cGU6J3llYXInLHJlZ2V4Oi9cZHsyfS8sbGVuOjIsaXNXRUc6ITB9LHt2YWw6J01NTU0nLHR5cGU6J21vbnRoJyxyZWdleDovW0Etel17Myx9Lyxsb25nOiEwLHN0cjohMCxhcnJheTpbJ0phbnVhcnknLCdGZWJydWFyeScsJ01hcmNoJywnQXByaWwnLCdNYXknLCdKdW5lJywnSnVseScsJ0F1Z3VzdCcsJ1NlcHRlbWJlcicsJ09jdG9iZXInLCdOb3ZlbWJlcicsJ0RlY2VtYmVyJ119LHt2YWw6J01NTScsc3RyOiEwLHR5cGU6J21vbnRoJyxyZWdleDovW0Etel17Myx9LyxhcnJheTpbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddfSx7dmFsOidNbycsc3VmZjohMCx0eXBlOidtb250aCcscmVnZXg6L1xkezEsMn0oPz1zdHxuZHxyZHx0aCkvLG1heDoxMn0se3ZhbDonTU0nLHR5cGU6J21vbnRoJyxyZWdleDovXGR7Mn0vLGxlbjoyLG1heDoxMixhbHQ6ITB9LHt2YWw6J00nLHR5cGU6J21vbnRoJyxyZWdleDovXGR7MSwyfS8sbWF4OjEyfSx7dmFsOidEREREJyx0eXBlOidkYXRlJyxyZWdleDovXGR7M30vLGxlbjozLHllYXI6ITB9LHt2YWw6J0RERG8nLHR5cGU6J2RhdGUnLHN1ZmY6ITAscmVnZXg6L1xkezEsM30oPz1zdHxuZHxyZHx0aCkvLGxlbjozLHllYXI6ITAsaWdub3JlOi9cZHszfSg/PXN0fG5kfHJkfHRoKS99LHt2YWw6J0RERCcsdHlwZTonZGF0ZScscmVnZXg6L1xkezEsM30vLHllYXI6ITAsaWdub3JlOi9cZHszfS99LHt2YWw6J0RvJyx0eXBlOidkYXRlJyxzdWZmOiEwLHJlZ2V4Oi9cZHsxLDJ9KD89c3R8bmR8cmR8dGgpL30se3ZhbDonREQnLHR5cGU6J2RhdGUnLHJlZ2V4Oi9cZHsyfS8sbGVuOjIsYWx0OiEwfSx7dmFsOidEJyx0eXBlOidkYXRlJyxyZWdleDovXGR7MSwyfS99LHt2YWw6J2RkZGQnLHR5cGU6J2xvbmdkYXRlJyxyZWdleDovW0Etel17Myx9Lyxsb25nOiEwLHN0cjohMCxhcnJheTpbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J119LHt2YWw6J2RkZCcsdHlwZTonbG9uZ2RhdGUnLHJlZ2V4Oi9bQS16XXszfS8sc3RyOiEwLGFycmF5OlsnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J119LHt2YWw6J2RkJyx0eXBlOidsb25nZGF0ZScscmVnZXg6L1tBLXpdezJ9LyxzdHI6ITAsYXJyYXk6WydTdScsJ01vJywnVHUnLCdXZScsJ1RoJywnRnInLCdTYSddfSx7dmFsOidkbycsdHlwZTonbG9uZ2RhdGUnLHJlZ2V4Oi9cZHsxfSg/PXN0fG5kfHJkfHRoKS8sc3VmZjohMH0se3ZhbDonZCcsdHlwZTonbG9uZ2RhdGUnLHJlZ2V4Oi9cZHsxfS99XSxwYXJzZUZvcm1hdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgYSxyPXRoaXMuZm9ybWF0cyxuPVtdLHM9ci5sZW5ndGgsaT0wO2k8cztpKyspe3ZhciBsPXJbaV07aWYoIWUubGVuZ3RoKWJyZWFrO2lmKGUuaW5kZXhPZihsLnZhbCk+LTEpe2lmKHQmJmwuYWx0KXthPSEwO2NvbnRpbnVlfWEmJihsLnZhbD1yW2ktMV0udmFsLGw9cltpLTFdKSxhPSExLG4ucHVzaCh7Zm9ybWF0OmwsaW5kZXg6ZS5pbmRleE9mKGwudmFsKX0pLGU9ZS5yZXBsYWNlKGwudmFsLE1hdGgucG93KDEwLGwudmFsLmxlbmd0aC0xKSksaS0tfWVsc2U7fXJldHVybiBuLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pbmRleC10LmluZGV4fSl9LGNvbnZlcnRGb3JtYXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kYXRlT2JqPWU7dmFyIGE9dGhpcy5fZGF0ZU9iaixyPXRoaXMucGFyc2VGb3JtYXQodCwhMCksbj17fSxzPXtkYXRlOmEuZ2V0RGF0ZSgpLG1vbnRoOmEuZ2V0TW9udGgoKSx5ZWFyOmEuZ2V0RnVsbFllYXIoKSxkYXk6YS5nZXREYXkoKX07dD10aGlzLmZtUmVwbGFjZSh0LnJlcGxhY2UoL3t7fH19L2csJycpLHIpO2Zvcih2YXIgaT1yLmxlbmd0aCxsPTA7bDxpO2wrKyl7dmFyIGQ9cltsXS5mb3JtYXQ7c3dpdGNoKGQudHlwZSl7Y2FzZSdkYXRlJzp0PXQucmVwbGFjZShkLnZhbCt0aGlzLmxtLHRoaXMuY3JjdExlbmd0aChkLnllYXI/dGhpcy50b3RkYXRlKHMubW9udGgsdGhpcy5pc0xlYXAocy55ZWFyKSxzLmRhdGUpOnMuZGF0ZSxkLmxlbixkLnN1ZmYpKTticmVhaztjYXNlJ21vbnRoJzp0PWQuc3RyP3QucmVwbGFjZShkLnZhbCt0aGlzLmxtLGQuYXJyYXlbcy5tb250aF0pOnQucmVwbGFjZShkLnZhbCt0aGlzLmxtLHRoaXMuY3JjdExlbmd0aChzLm1vbnRoKzEsZC5sZW4sZC5zdWZmKSk7YnJlYWs7Y2FzZSd5ZWFyJzp0PXQucmVwbGFjZShkLnZhbCt0aGlzLmxtLDI9PT1kLmxlbj90aGlzLmNyY3RMZW5ndGgocy55ZWFyJTEwMCwyKTo0PT09KHMueWVhcisnJykubGVuZ3RoP3MueWVhcjp0aGlzLmNyY3RMZW5ndGgocy55ZWFyLDQpKSxuLnllYXI9bi55ZWFyfHxbXSxuLnllYXIucHVzaChkKTticmVhaztjYXNlJ2RheSc6Y2FzZSd3ZWVrJzpuLmZsYWc9ITAsbltkLnR5cGVdPW5bZC50eXBlXXx8W10sbltkLnR5cGVdLnB1c2goZCk7YnJlYWs7Y2FzZSdsb25nZGF0ZSc6dD1kLnN0cj90LnJlcGxhY2UoZC52YWwrdGhpcy5sbSxkLmFycmF5W3MuZGF5XSk6dC5yZXBsYWNlKGQudmFsK3RoaXMubG0sdGhpcy5jcmN0TGVuZ3RoKHMuZGF5LG51bGwsZC5zdWZmKSl9fXJldHVybiB0LnJlcGxhY2UoL3t7fH19L2csJycpfSxmbVJlcGxhY2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGE9MCxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWU9ZS5zbGljZSgwLHRbbl0uaW5kZXgrYSkrdFtuXS5mb3JtYXQudmFsK3RoaXMubG0rZS5zbGljZSh0W25dLmluZGV4K2ErdFtuXS5mb3JtYXQudmFsLmxlbmd0aCksYSs9ODtyZXR1cm4gZX0sdG90ZGF0ZTpmdW5jdGlvbihlLHQsYSl7Zm9yKHZhciByPTAsbj0wO248ZTtuKyspcis9dGhpcy5kYXlBcnJbbl0sdCYmMT09PW4mJihyKz0xKTtyZXR1cm4gcisoYXx8MCl9LGNyY3RMZW5ndGg6ZnVuY3Rpb24oZSx0LGEpe3ZhciByPScnO2lmKGEmJihyPXRoaXMubnRoY29udihlKSksdCl7ZT1lLnRvU3RyaW5nKCk7Zm9yKHZhciBuPTE7bjx0O24rKyllLmxlbmd0aDw9biYmKGU9JzAnK2UpfXJldHVybiBlK3J9LG50aGNvbnY6ZnVuY3Rpb24oZSl7aWYoZT4zJiZlPDIxKXJldHVybid0aCc7c3dpdGNoKGUlMTApe2Nhc2UgMTpyZXR1cm4nc3QnO2Nhc2UgMjpyZXR1cm4nbmQnO2Nhc2UgMzpyZXR1cm4ncmQnO2RlZmF1bHQ6cmV0dXJuJ3RoJ319LGlzTGVhcDpmdW5jdGlvbihlKXtyZXR1cm4gMj09PShlKz0nJykubGVuZ3RoJiYoZT10aGlzLmdldENvcnJlY3RZZWFyKHBhcnNlSW50KGUpKSksKGU9cGFyc2VJbnQoZSkpJTQ9PTAmJmUlMTAwIT0wfHxlJTQwMD09MH0sZ2V0Q29ycmVjdFllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSsnJztpZihlPXBhcnNlSW50KGUpLDI9PT10Lmxlbmd0aCl7dmFyIGE9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHI9cGFyc2VJbnQoYS8xMDApLG49YSUxMDAscz0obi10aGlzLmxMaW1pdCsxMDApJTEwMDtlPW4+cz9lPHM/cisxKycnK3RoaXMuY3JjdExlbmd0aChlLDIpOnIrJycrdGhpcy5jcmN0TGVuZ3RoKGUsMik6ZTxzP3IrJycrdGhpcy5jcmN0TGVuZ3RoKGUsMik6ci0xKycnK3RoaXMuY3JjdExlbmd0aChlLDIpfXJldHVybiBlfSx2YWxGb3JtYXQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIGE9e30scj1uZXcgRGF0ZSgobmV3IERhdGUpLmdldEZ1bGxZZWFyKCksMCksbj10aGlzLnBhcnNlRm9ybWF0KHQsITApLHM9ZSxpPXQ9dC5yZXBsYWNlKC97e3x9fS9nLCcnKSxsPW4ubGVuZ3RoLGQ9MDtkPGw7ZCsrKXt2YXIgbyxoPW5bZF0uZm9ybWF0O3N3aXRjaChoLnR5cGUpe2Nhc2UnZGF0ZSc6Y2FzZSd5ZWFyJzpjYXNlJ3dlZWsnOmNhc2UnZGF5JzpoLnJlZ2V4LnRlc3QoZSk/KG89J3llYXInPT09aC50eXBlP2UubWF0Y2goaC5yZWdleClbaC5tYXRjaHx8MF06cGFyc2VJbnQoZS5tYXRjaChoLnJlZ2V4KVtoLm1hdGNofHwwXSksYVtoLnR5cGVdPW8sZT10aGlzLnJlcGxhY2VWYWwoZSxoLnJlZ2V4LGguc3VmZikscz10aGlzLnJlcGxhY2VWYWwocyxoLnJlZ2V4LGguc3VmZixoLnZhbCksaC55ZWFyJiYoYS5kYXRlPWdldERheShhLmRhdGUpLmRheSkpOmEueWVhciYmYS53ZWVrPyhhW2gudHlwZV09dGhpcy53b2QsdD10LnJlcGxhY2UoaC52YWwsJycpLGk9aS5yZXBsYWNlKGgudmFsLCcnKSk6YVtoLnR5cGVdPSdJbnZhbGlkJywvZGF0ZS9pLnRlc3QoaC50eXBlKSYmMD09PWFbaC50eXBlXSYmKGFbaC50eXBlXT0nSW52YWxpZCcpO2JyZWFrO2Nhc2UnbW9udGgnOmgucmVnZXgudGVzdChlKT8obz10aGlzLmdldE1vbnRoKGUubWF0Y2goaC5yZWdleClbMF0saC5zdWZmLGguc3RyLGgubG9uZyksYS5tb250aD1vLnZhbCxlPXRoaXMucmVwbGFjZVZhbChlLG8ubW9ufHxoLnJlZ2V4LGguc3VmZikscz10aGlzLnJlcGxhY2VWYWwocyxvLm1vbnx8aC5yZWdleCxoLnN1ZmYsaC52YWwpKTphLm1vbnRoPSdJbnZhbGlkJyxhLm1vbnRoPDAmJihhLm1vbnRoPSdJbnZhbGlkJyk7YnJlYWs7Y2FzZSdsb25nZGF0ZSc6aC5yZWdleC50ZXN0KGUpJiYobz1oLnN0cj90aGlzLmZpbmRWYWwoaC5hcnJheSxlLm1hdGNoKGgucmVnZXgpWzBdKTpwYXJzZUludChlLm1hdGNoKGgucmVnZXgpWzBdKSxhLmxvbmdkYXRlPXRoaXMuaXNEZWYoby5pbmRleCk/by5pbmRleDpvLGU9dGhpcy5yZXBsYWNlVmFsKGUsby5tb258fG8saC5zdWZmKSxzPXRoaXMucmVwbGFjZVZhbChzLG8ubW9ufHxvLGguc3VmZixoLnZhbCkpfXQ9dC5yZXBsYWNlKGgudmFsRm9ybXx8aC52YWwsJycpfWlmKHRoaXMuaXNEZWYoYS5sb25nZGF0ZSkmJmEuZGF5JiZhLmRheSE9PWEubG9uZ2RhdGU/ci5zZXRGdWxsWWVhcignSW52YWxpZCcpOnRoaXMuaXNEZWYoYS55ZWFyKSYmci5zZXRGdWxsWWVhcih0aGlzLmdldENvcnJlY3RZZWFyKGEueWVhcikpLHRoaXMuaXNEZWYoYS5tb250aCkmJnIuc2V0TW9udGgoYS5tb250aCksdGhpcy5pc0RlZihhLmRhdGUpJiZyLnNldERhdGUoYS5kYXRlPD10aGlzLmRheUFycltyLmdldE1vbnRoKCldKygxPT09ci5nZXRNb250aCgpJiZ0aGlzLmlzTGVhcChyLmdldEZ1bGxZZWFyKCkpPzE6MCk/YS5kYXRlOidJbnZhbGlkJyksdGhpcy5faXNDb3JyZWN0Rm9ybWF0PWUubGVuZ3RoPT09dC5sZW5ndGgmJmk9PT1zJiZ0aGlzLnZhbGlkYXRlKHIpKXJldHVybiByfSx2YWxpZGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBhPWUuY29uc3RydWN0b3I7aWYoYT09PURhdGUpcmV0dXJuIHRoaXMuX2RhdGVPYmo9ZSwnSW52YWxpZCBEYXRlJyE9PWUudG9TdHJpbmcoKTtpZihhPT09U3RyaW5nJiZ0KXt2YXIgcj10aGlzLnZhbEZvcm1hdChlLHQpO3JldHVybiByJiZ0aGlzLl9pc0NvcnJlY3RGb3JtYXQmJih0aGlzLl9mb3JtYXQ9dCkscn19LHJlcGxhY2VWYWw6ZnVuY3Rpb24oZSx0LGEscil7cmV0dXJuIGU9ZS5yZXBsYWNlKHQscnx8JycpLGEmJihlPWUucmVwbGFjZSgvc3R8bmR8cmR8dGgvLCcnKSksZX0sZ2V0TW9udGg6ZnVuY3Rpb24oZSx0LGEscil7dmFyIG47aWYoYSl7dmFyIHM9dGhpcy5maW5kVmFsKHI/dGhpcy5sb25nTW9uOnRoaXMuc2hvcnRNb24sZSk7bj1zLm1vbixlPXMuaW5kZXgsKCFufHxlPjExKSYmKGU9J0ludmFsaWQnKX1lbHNlKGU9cGFyc2VJbnQoZSktMSk+MTEmJihlPSdJbnZhbGlkJyk7cmV0dXJue3ZhbDplLG1vbjpufX0sZmluZFZhbDpmdW5jdGlvbihlLHQpe3ZhciBhLHIsbj1lLmxlbmd0aDtmb3Iocj0wO3I8bjtyKyspaWYobmV3IFJlZ0V4cChlW3JdKS50ZXN0KHQpKXthPWVbcl07YnJlYWt9cmV0dXJue21vbjphLGluZGV4OnJ9fSxpc0RlZjpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZX19Ozwvc2NyaXB0Pgo8c3R5bGU+CiNjYWxlbkRpdntwYWRkaW5nOjEwcHg7ZGlzcGxheTp0YWJsZTsgd2lkdGg6IDE5NXB4O2ZvbnQtZmFtaWx5OiBoZWx2ZXRpY2Esc2Fucy1zZXJpZiAhaW1wb3J0YW50O30KLmNhbE5hdnt3aWR0aDoyMHB4OyBoZWlnaHQ6MTVweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7IHRvcDo0cHg7IGN1cnNvcjpwb2ludGVyfQojY2FsZW5EaXYgLmNhbE5hdiB7d2lkdGg6MTVweDt9CiNjYWxlbkRpdiAueWVhck5hdkxmdCB7cmlnaHQ6MTBweDt9CiNjYWxlbkRpdiAueWVhck5hdlJndCB7bGVmdDoxMHB4O30KI2NhbGVuRGl2IC5kTGZ0IHtyaWdodDo1cHg7IH0KI2NhbGVuRGl2IC5kUmd0IHtsZWZ0OjVweDt9Ci5kTGZ0e3JpZ2h0OjEwcHg7b3BhY2l0eTowLjg7IH0KLmRSZ3R7bGVmdDoxMHB4O29wYWNpdHk6MC44O30KLnllYXJOYXZMZnR7cmlnaHQ6MTVweDsgfQoueWVhck5hdlJndHtsZWZ0OjE1cHg7b3BhY2l0eTowLjY7fQojY2FsZW5EaXYgdGFibGUuY2FsRGF5IHtib3JkZXItc3BhY2luZzo2cHg7IG1hcmdpbi10b3A6MH0KI2NhbGVuRGl2IHRhYmxlLmNhbERheSB0ZHsgcGFkZGluZzozcHggNHB4OyBmb250LXNpemU6MTFweH0KI2NhbGVuRGl2IHRhYmxlLmNhbERheSB0aCB7cGFkZGluZzogMCAzcHg7Zm9udC1zaXplOiAxMXB4O3BhZGRpbmctcmlnaHQ6IDA7cGFkZGluZy1sZWZ0OiAxcHg7Y29sb3I6ICM4ODg7d2lkdGg6IDIycHg7Y3Vyc29yOiBkZWZhdWx0O2JvcmRlci1yYWRpdXM6IDNweDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IG5vcm1hbDt9CiNjYWxlbkRpdiAjd2Vla0RheXN7bWFyZ2luLXRvcDogMTBweDttYXJnaW4tYm90dG9tOiA1cHg7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNjMGM2Y2M7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjMGM2Y2M7Ym9yZGVyLXNwYWNpbmc6IDVweDttYXJnaW4tbGVmdDogMDtjb2xvcjogIzhiOWFiOTt9CiNjYWxlbkRpdiAuc0NhbE1vbiB7Y3Vyc29yOiBkZWZhdWx0O2Rpc3BsYXk6IGlubGluZS1ibG9jaztjb2xvcjogIzg4ODt3aWR0aDogMTEwcHg7Zm9udC1zaXplOiAxMnB4O30KdGFibGUuY2FsRGF5IHRkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U4ZThlODt9CnRhYmxlLmNhbERheXsgY29sb3I6IzIyMjsgbWFyZ2luLWxlZnQ6LTEwcHg7IGJvcmRlci1zcGFjaW5nOjEycHg7fQp0YWJsZS5jYWxEYXkgdGQsIHRhYmxlLmNhbERheSB0aHsgZm9udC1zaXplOiB2YXIoLS1jcm0tZXh0cmEtbWVkaXVtLWZvbnQtc2l6ZSk7IGN1cnNvcjpkZWZhdWx0O2JvcmRlci1yYWRpdXM6M3B4OyB0ZXh0LWFsaWduOmNlbnRlcjsgIHBhZGRpbmc6M3B4IDVweDsgZm9udC1mYW1pbHk6IGhlbHZldGljYSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7IH0KdGFibGUuY2FsRGF5IHRkLnNlbCx0YWJsZS5jYWxEYXkgdGQuc2VsOmhvdmVye2NvbG9yOiNmZmY7IGJhY2tncm91bmQ6I2IzYjNiMzsgYm9yZGVyLXJhZGl1czozcHg7fQp0YWJsZS5jYWxEYXkgdGQubm9OdW0sdGFibGUuY2FsRGF5IHRkLmx0LWdyYXl7Y29sb3I6I2MxYzFjMTt9Ci52cHZsLCAudHh0LWN0ciB7dGV4dC1hbGlnbjogY2VudGVyO30KI2NhbEJ0bnMgYSwgLmx5dGVDYWxCdG5zIC5seXRlQ2FsQ3VycmVudERhdGUgYSB7Y29sb3I6IHZhcigtLWxpbmtDb2xvcik7Zm9udC1zaXplOiAxNHB4O3RleHQtZGVjb3JhdGlvbjogbm9uZTt9CiNjYWxlbkRpdiAjY2FsQnRucyB7d2lkdGg6IDE4M3B4O21hcmdpbi1sZWZ0OiAxMHB4O2JvcmRlci10b3A6IDA7Zm9udC1zaXplOiAxMXB4O3BhZGRpbmc6IDNweCAwIDEycHghaW1wb3J0YW50O30KLmFycm93IHtib3JkZXI6IHNvbGlkICM2NjY7Ym9yZGVyLXdpZHRoOiAwIDFweCAxcHggMDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7aGVpZ2h0OiA2cHg7d2lkdGg6IDZweDt9CiNjYWxlbkRpdiAucmlnaHQge3RyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO30KI2NhbGVuRGl2IC5sZWZ0IHt0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZyk7fQoubUxNaW51czJ7bWFyZ2luLWxlZnQ6IC0ycHg7fQoubVJNaW51czJ7bWFyZ2luLXJpZ2h0OiAtMnB4O30KLnZhbXt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO30KLnRlbXBDYWxEaXZ7ZGlzcGxheTogbm9uZTttYXJnaW46IDA7cG9zaXRpb246IGFic29sdXRlO3otaW5kZXg6IDEwMDA7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgYm9yZGVyOiAxcHggc29saWQgI2MwYzZjYzsgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4zKTtib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4zKTsgYm9yZGVyLXRvcDogMDt0b3A6IDIwcHg7fTwvc3R5bGU+Cgk8c2NyaXB0PgoJCWZ1bmN0aW9uIHByaXZhY3lBbGVydDQ5MTg0MzAwMDAzOTgyMzAxMSgpCgkJewoJCQl2YXIgcHJpdmFjeVRvb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpdmFjeVRvb2w0OTE4NDMwMDAwMzk4MjMwMTEnKTsKCQkJdmFyIHByaXZhY3lFcnIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpdmFjeUVycjQ5MTg0MzAwMDAzOTgyMzAxMScpOwoJCQlpZihwcml2YWN5VG9vbCAhPXVuZGVmaW5lZCAmJiAhcHJpdmFjeVRvb2wuY2hlY2tlZCApCgkJCXsKCQkJCXByaXZhY3lFcnIuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7CgkJCQlwcml2YWN5VG9vbC5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0KCQlmdW5jdGlvbiBkaXNhYmxlRXJyNDkxODQzMDAwMDM5ODIzMDExKCkKCQl7CgkJCXZhciBwcml2YWN5VG9vbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcml2YWN5VG9vbDQ5MTg0MzAwMDAzOTgyMzAxMScpOwoJCQl2YXIgcHJpdmFjeUVyciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcml2YWN5RXJyNDkxODQzMDAwMDM5ODIzMDExJyk7CgkJCWlmKHByaXZhY3lUb29sICE9dW5kZWZpbmVkICYmIHByaXZhY3lUb29sLmNoZWNrZWQgJiYgcHJpdmFjeUVyciAhPXVuZGVmaW5lZCApCgkJCXsKCQkJCXByaXZhY3lFcnIuc3R5bGUudmlzaWJpbGl0eT0naGlkZGVuJzsKCQkJfQoJCX0KCWZ1bmN0aW9uIHZhbGlkYXRlRW1haWw0OTE4NDMwMDAwMzk4MjMwMTEoKQoJewoJCXZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbJ1dlYlRvTGVhZHM0OTE4NDMwMDAwMzk4MjMwMTEnXTsKCQl2YXIgZW1haWxGbGQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmdHlwZT1lbWFpbF0nKTsKCQl2YXIgaTsKCQlmb3IgKGkgPSAwOyBpIDwgZW1haWxGbGQubGVuZ3RoOyBpKyspCgkJewoJCQl2YXIgZW1haWxWYWwgPSBlbWFpbEZsZFtpXS52YWx1ZTsKCQkJaWYoKGVtYWlsVmFsLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykpLmxlbmd0aCE9MCApCgkJCXsKCQkJCXZhciBhdHBvcz1lbWFpbFZhbC5pbmRleE9mKCdAJyk7CgkJCQl2YXIgZG90cG9zPWVtYWlsVmFsLmxhc3RJbmRleE9mKCcuJyk7CgkJCQlpZiAoYXRwb3M8MSB8fCBkb3Rwb3M8YXRwb3MrMiB8fCBkb3Rwb3MrMj49ZW1haWxWYWwubGVuZ3RoKQoJCQkJewoJCQkJCWFsZXJ0KCdJbnRyb2R1emNhIHVuYSBkaXJlY2Npw7NuIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkYS4gJyk7CgkJCQkJZW1haWxGbGRbaV0uZm9jdXMoKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CglmdW5jdGlvbiB2YWxpZGF0ZURhdGVGb3JtYXQ0OTE4NDMwMDAwMzk4MjMwMTEoKQoJewoJCXZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbJ1dlYlRvTGVhZHM0OTE4NDMwMDAwMzk4MjMwMTEnXTsKCQl2YXIgZGF0ZUZsZHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmdHlwZT1kYXRlXScpOwoJCXZhciBpOwoJCWZvciAoaSA9IDA7IGkgPCBkYXRlRmxkcy5sZW5ndGg7IGkrKykKCQl7CgkJCXZhciBkYXRlRmxkID0gZGF0ZUZsZHNbaV07CgkJCXZhciB1c3JQdHJuID0gZGF0ZUZsZC5wbGFjZWhvbGRlcjsKCQkJdmFyIGRhdGVWYWwgPSBkYXRlRmxkLnZhbHVlOwoJCQlpZihkYXRlVmFsLnRyaW0oKSAhPSAnJyl7CgkJCQl2YXIgdmFsZCA9IGRhdGVGb3JtYXRDb252ZXJ0LnZhbGlkYXRlKGRhdGVWYWwsdXNyUHRybik7CgkJCQlpZighdmFsZCl7CgkJCQkJYWxlcnQoJ0VzY3JpYmEgdW5hIGZlY2hhIHbDoWxpZGEgJyk7CgkJCQkJZGF0ZUZsZC5mb2N1cygpOwoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCiAJICBmdW5jdGlvbiBjaGVja01hbmRhdG9yeTQ5MTg0MzAwMDAzOTgyMzAxMSgpIHsKCQl2YXIgbW5kRmlsZWRzID0gbmV3IEFycmF5KCdDb21wYW55JywnTGFzdCBOYW1lJywnTEVBRENGNicsJ0xFQURDRjU0JywnTEVBRENGODInLCdMRUFEQ0YxMjEnKTsKCQl2YXIgZmxkTGFuZ1ZhbCA9IG5ldyBBcnJheSgnTm9tYnJlXHgyMHlceDIwYXBlbGxpZG9zXHgyMGRlbFx4MjBwcm9nZW5pdG9yXHgyRmEnLCdOb21icmVceDIweVx4MjBhcGVsbGlkb3NceDIwZGVsXHgyMGVzdHVkaWFudGUnLCdFXHgyRG1haWwnLCdUZWxceEU5Zm9ubycsJ0ZlY2hhXHgyMGRlXHgyMG5hY2ltaWVudG9ceDIwZGVsXHgyMGVzdHVkaWFudGUnLCdQcm92aW5jaWEnKTsKCQlmb3IoaT0wO2k8bW5kRmlsZWRzLmxlbmd0aDtpKyspIHsKCQkgIHZhciBmaWVsZE9iaj1kb2N1bWVudC5mb3Jtc1snV2ViVG9MZWFkczQ5MTg0MzAwMDAzOTgyMzAxMSddW21uZEZpbGVkc1tpXV07CgkJICBpZihmaWVsZE9iaikgewoJCQlpZiAoKChmaWVsZE9iai52YWx1ZSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSkubGVuZ3RoPT0wKSB7CgkJCSBpZihmaWVsZE9iai50eXBlID09J2ZpbGUnKQoJCQkJeyAKCQkJCSBhbGVydCgnU2VsZWNjaW9uZSB1biBhcmNoaXZvIHBhcmEgY2FyZ2FyLicpOyAKCQkJCSBmaWVsZE9iai5mb2N1cygpOyAKCQkJCSByZXR1cm4gZmFsc2U7CgkJCQl9IAoJCQlhbGVydChmbGRMYW5nVmFsW2ldICsnIG5vIHB1ZWRlIGVzdGFyIHZhY8Otby4nKTsgCiAgIAkgICAJICAJICBmaWVsZE9iai5mb2N1cygpOwogICAJICAgCSAgCSAgcmV0dXJuIGZhbHNlOwoJCQl9ICBlbHNlIGlmKGZpZWxkT2JqLm5vZGVOYW1lPT0nU0VMRUNUJykgewogIAkgICAJICAgCSBpZihmaWVsZE9iai5vcHRpb25zW2ZpZWxkT2JqLnNlbGVjdGVkSW5kZXhdLnZhbHVlPT0nLU5vbmUtJykgewoJCQkJYWxlcnQoZmxkTGFuZ1ZhbFtpXSArJyBubyBwdWVkZSBzZXIgbnVsby4nKTsgCgkJCQlmaWVsZE9iai5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQkgICB9CgkJCX0gZWxzZSBpZihmaWVsZE9iai50eXBlID09J2NoZWNrYm94Jyl7CiAJIAkgCSBpZihmaWVsZE9iai5jaGVja2VkID09IGZhbHNlKXsKCQkJCWFsZXJ0KCdQbGVhc2UgYWNjZXB0ICAnK2ZsZExhbmdWYWxbaV0pOwoJCQkJZmllbGRPYmouZm9jdXMoKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJICAgfSAKCQkJIH0gCgkJCSB0cnkgewoJCQkgICAgIGlmKGZpZWxkT2JqLm5hbWUgPT0gJ0xhc3QgTmFtZScpIHsKCQkJCW5hbWUgPSBmaWVsZE9iai52YWx1ZTsKIAkgCSAJICAgIH0KCQkJfSBjYXRjaCAoZSkge30KCQkgICAgfQoJCX0KCQlpZighdmFsaWRhdGVFbWFpbDQ5MTg0MzAwMDAzOTgyMzAxMSgpKXtyZXR1cm4gZmFsc2U7fQoJCQoJCWlmKCFwcml2YWN5QWxlcnQ0OTE4NDMwMDAwMzk4MjMwMTEoKSl7cmV0dXJuIGZhbHNlO30KCQkKCQlpZighdmFsaWRhdGVEYXRlRm9ybWF0NDkxODQzMDAwMDM5ODIzMDExKCkpe3JldHVybiBmYWxzZTt9CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNybVdlYlRvRW50aXR5Rm9ybSAuZm9ybXN1Ym1pdCcpLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTsKCX0KCmZ1bmN0aW9uIHRvb2x0aXBTaG93NDkxODQzMDAwMDM5ODIzMDExKGVsKXsKCXZhciB0b29sdGlwID0gZWwubmV4dEVsZW1lbnRTaWJsaW5nOwoJdmFyIHRvb2x0aXBEaXNwbGF5ID0gdG9vbHRpcC5zdHlsZS5kaXNwbGF5OwoJaWYodG9vbHRpcERpc3BsYXkgPT0gJ25vbmUnKXsKCQl2YXIgYWxsVG9vbHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3pjd2ZfdG9vbHRpcF9vdmVyJyk7CgkJZm9yKGk9MDsgaTxhbGxUb29sdGlwLmxlbmd0aDsgaSsrKXsKCQkJYWxsVG9vbHRpcFtpXS5zdHlsZS5kaXNwbGF5PSdub25lJzsKCQl9CgkJdG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCX1lbHNlewoJCXRvb2x0aXAuc3R5bGUuZGlzcGxheT0nbm9uZSc7Cgl9Cn0KPC9zY3JpcHQ+Cgk8IS0tIERvIG5vdCByZW1vdmUgdGhpcyAtLS0gQW5hbHl0aWNzIFRyYWNraW5nIGNvZGUgc3RhcnRzIC0tPjxzY3JpcHQgaWQ9J3dmX2FuYWwnIHNyYz0naHR0cHM6Ly9jcm0uem9ob3B1YmxpYy5jb20vY3JtL1dlYkZvcm1BbmFseXRpY3NTZXJ2ZVNlcnZsZXQ/cmlkPTE3NjcyYjk1NTdjYWQ3YzE4MzgyMTFmOTA0ZDE0Mzg4M2VmNGJhZGJkNGQ4NTU2MGVhMDE5NGI0OGVmMGJhYjJnaWQ3M2MxYzgwNmM4YWIzMTBjNmVlYjMxYzYyNGJiMzFjYWQ5MTM2M2EwYTVhZmJmOGY5MzRjMDVlMGJiODAzYTg2Z2lkODg1ZTNjMTA0NWJkOWJkY2M5MWJkZjMwZjgyYjU2OTZnaWQxNGY0ZWMxNjQzMWUwNjg2MTUwZGFhNDNmMzIxMDUxMyZ0dz02MTY5MGI5NmMxZDA0NzFiNjM4ZjMxNDI2ZjM4ZTY4YWE2N2ZiN2VkNmRhODZmMzJkYzEwYWQ4MTdmZTU1YTBhJz48L3NjcmlwdD48IS0tIERvIG5vdCByZW1vdmUgdGhpcyAtLS0gQW5hbHl0aWNzIFRyYWNraW5nIGNvZGUgZW5kcy4gLS0+PC9mb3JtPgo8L2Rpdj4=