import base64
data = "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+TG9naW4gLSBHZXRGb3VuZExvY2FsPC90aXRsZT4KICAgIDwhLS0gcmVDQVBUQ0hBIHYzIOKAlCBsb2FkcyBpbnZpc2libHksIG5vIHdpZGdldCBzaG93biB0byB0aGUgdXNlciAtLT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/cmVuZGVyPXt7IGNvbmZpZy5nZXQoJ1JFQ0FQVENIQV9TSVRFX0tFWScsICcnKSB9fSI+PC9zY3JpcHQ+CiAgICA8c3R5bGU+CiAgICAgICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogICAgICAgIGh0bWwsIGJvZHkgeyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyB9CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxZTNhOGEgMCUsICMwZjE3MmEgMTAwJSk7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5sb2dpbi13cmFwcGVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHggMzJweDsKICAgICAgICB9CiAgICAgICAgLmxvZ28gewogICAgICAgICAgICBmb250LXNpemU6IDI4cHg7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7CiAgICAgICAgICAgIGNvbG9yOiAjMWUzYThhOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIC5sb2dvIHNwYW4geyBjb2xvcjogIzBkOTQ4ODsgfQogICAgICAgIGgxIHsKICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogOTAwOwogICAgICAgICAgICBjb2xvcjogIzBmMTcyYTsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIC5zdWJ0aXRsZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgY29sb3I6ICM0NzU1Njk7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjhweDsKICAgICAgICB9CiAgICAgICAgLyogRmxhc2ggbWVzc2FnZXMgKi8KICAgICAgICAuZmxhc2gtbWVzc2FnZXMgeyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmZsYXNoIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIH0KICAgICAgICAuZmxhc2gtc3VjY2VzcyB7IGJhY2tncm91bmQ6ICNmMGZkZjQ7IGNvbG9yOiAjMTY2NTM0OyBib3JkZXI6IDFweCBzb2xpZCAjYmJmN2QwOyB9CiAgICAgICAgLmZsYXNoLWVycm9yICAgeyBiYWNrZ3JvdW5kOiAjZmVmMmYyOyBjb2xvcjogIzk5MWIxYjsgYm9yZGVyOiAxcHggc29saWQgI2ZlY2FjYTsgfQogICAgICAgIC5mbGFzaC13YXJuaW5nIHsgYmFja2dyb3VuZDogI2ZmZmJlYjsgY29sb3I6ICM5MjQwMGU7IGJvcmRlcjogMXB4IHNvbGlkICNmZGU2OGE7IH0KICAgICAgICAuZmxhc2gtaW5mbyAgICB7IGJhY2tncm91bmQ6ICNlZmY2ZmY7IGNvbG9yOiAjMWU0MGFmOyBib3JkZXI6IDFweCBzb2xpZCAjYmZkYmZlOyB9CiAgICAgICAgLyogRm9ybSAqLwogICAgICAgIC5mb3JtLWdyb3VwIHsgbWFyZ2luLWJvdHRvbTogMTZweDsgfQogICAgICAgIGxhYmVsIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgY29sb3I6ICMwZjE3MmE7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIH0KICAgICAgICBpbnB1dFt0eXBlPSJlbWFpbCJdLCBpbnB1dFt0eXBlPSJwYXNzd29yZCJdIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2UyZThmMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOwogICAgICAgICAgICBjb2xvcjogIzBmMTcyYTsKICAgICAgICB9CiAgICAgICAgaW5wdXRbdHlwZT0iZW1haWwiXTpmb2N1cywgaW5wdXRbdHlwZT0icGFzc3dvcmQiXTpmb2N1cyB7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzBkOTQ4ODsKICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDEzLCAxNDgsIDEzNiwgMC4xKTsKICAgICAgICB9CiAgICAgICAgLmZvcmdvdC1wYXNzd29yZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAjMGQ5NDg4OwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbjogMjBweCAwIDI0cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB9CiAgICAgICAgYnV0dG9uIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzFlM2E4YSAwJSwgIzBmMTcyYSAxMDAlKTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMzAsIDU4LCAxMzgsIDAuMyk7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDMwLCA1OCwgMTM4LCAwLjQpOwogICAgICAgIH0KICAgICAgICBidXR0b246ZGlzYWJsZWQgeyBvcGFjaXR5OiAwLjc7IGN1cnNvcjogbm90LWFsbG93ZWQ7IHRyYW5zZm9ybTogbm9uZTsgfQogICAgICAgIC5kaXZpZGVyIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luOiAxNHB4IDA7CiAgICAgICAgfQogICAgICAgIC5kaXZpZGVyLWxpbmUgeyBmbGV4OiAxOyBoZWlnaHQ6IDFweDsgYmFja2dyb3VuZDogI2UyZThmMDsgfQogICAgICAgIC5kaXZpZGVyLXRleHQgeyBwYWRkaW5nOiAwIDEwcHg7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6ICM0NzU1Njk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0KICAgICAgICAuc2lnbnVwLWxpbmsgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAxNHB4OwogICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2UyZThmMDsKICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgICBjb2xvcjogIzMzNDE1NTsKICAgICAgICB9CiAgICAgICAgLnNpZ251cC1saW5rIGEgeyBjb2xvcjogIzFlM2E4YTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogNzAwOyB9CiAgICAgICAgLnNpZ251cC1saW5rIGE6aG92ZXIgeyBjb2xvcjogIzBkOTQ4ODsgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImxvZ2luLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ28iPkdldEZvdW5kPHNwYW4+TG9jYWw8L3NwYW4+PC9kaXY+CiAgICAgICAgPGgxPldlbGNvbWUgQmFjazwvaDE+CiAgICAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj5NYW5hZ2UgeW91ciBkaWdpdGFsIHN0b3JlZnJvbnQ8L3A+CgogICAgICAgIDwhLS0gRmxhc2ggbWVzc2FnZXMgKGVycm9ycywgd2FybmluZ3MsIGNvbmZpcm1hdGlvbnMpIC0tPgogICAgICAgIHslIHdpdGggbWVzc2FnZXMgPSBnZXRfZmxhc2hlZF9tZXNzYWdlcyh3aXRoX2NhdGVnb3JpZXM9dHJ1ZSkgJX0KICAgICAgICAgIHslIGlmIG1lc3NhZ2VzICV9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsYXNoLW1lc3NhZ2VzIj4KICAgICAgICAgICAgICB7JSBmb3IgY2F0ZWdvcnksIG1lc3NhZ2UgaW4gbWVzc2FnZXMgJX0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsYXNoIGZsYXNoLXt7IGNhdGVnb3J5IH19Ij57eyBtZXNzYWdlIH19PC9kaXY+CiAgICAgICAgICAgICAgeyUgZW5kZm9yICV9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgeyUgZW5kaWYgJX0KICAgICAgICB7JSBlbmR3aXRoICV9CgogICAgICAgIDxmb3JtIGlkPSJsb2dpbi1mb3JtIiBtZXRob2Q9IlBPU1QiIG5vdmFsaWRhdGU+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNzcmZfdG9rZW4iIHZhbHVlPSJ7eyBjc3JmX3Rva2VuKCkgfX0iPgogICAgICAgICAgICA8IS0tIHJlQ0FQVENIQSB2MyB0b2tlbiDigJQgcG9wdWxhdGVkIGJ5IEphdmFTY3JpcHQgYmVmb3JlIHRoZSBmb3JtIHN1Ym1pdHMgLS0+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJyZWNhcHRjaGFfdG9rZW4iIG5hbWU9InJlY2FwdGNoYV90b2tlbiIgdmFsdWU9IiI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVtYWlsIj5FbWFpbDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZW1haWwiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJ5b3VAZXhhbXBsZS5jb20iIHJlcXVpcmVkPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icGFzc3dvcmQiPlBhc3N3b3JkPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgaWQ9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IuKAouKAouKAouKAouKAouKAouKAouKAoiIgcmVxdWlyZWQ+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGEgaHJlZj0ie3sgdXJsX2ZvcignYXV0aC5mb3Jnb3RfcGFzc3dvcmQnKSB9fSIgY2xhc3M9ImZvcmdvdC1wYXNzd29yZCI+Rm9yZ290IHBhc3N3b3JkPzwvYT4KCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBpZD0ibG9naW4tYnRuIj5Mb2dpbjwvYnV0dG9uPgogICAgICAgIDwvZm9ybT4KCiAgICAgICAgPGRpdiBjbGFzcz0iZGl2aWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdmlkZXItbGluZSI+PC9kaXY+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXZpZGVyLXRleHQiPm9yPC9zcGFuPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXZpZGVyLWxpbmUiPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaWdudXAtbGluayI+CiAgICAgICAgICAgIERvbid0IGhhdmUgYW4gYWNjb3VudD8gPGEgaHJlZj0ie3sgdXJsX2ZvcignYXV0aC5zaWdudXAnKSB9fSI+U2lnbiB1cDwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgLy8gcmVDQVBUQ0hBIHYzIOKAlCBpbnRlcmNlcHQgZm9ybSBzdWJtaXQsIGdldCBpbnZpc2libGUgdG9rZW4sIHRoZW4gc3VibWl0CiAgICAgICAgY29uc3QgU0lURV9LRVkgPSAne3sgY29uZmlnLmdldCgiUkVDQVBUQ0hBX1NJVEVfS0VZIiwgIiIpIH19JzsKICAgICAgICBjb25zdCBmb3JtICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLWZvcm0nKTsKICAgICAgICBjb25zdCBidG4gICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZ2luLWJ0bicpOwoKICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSAnVmVyaWZ5aW5nLi4uJzsKCiAgICAgICAgICAgIGdyZWNhcHRjaGEucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBncmVjYXB0Y2hhLmV4ZWN1dGUoU0lURV9LRVksIHsgYWN0aW9uOiAnbG9naW4nIH0pLnRoZW4oZnVuY3Rpb24odG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVjYXB0Y2hhX3Rva2VuJykudmFsdWUgPSB0b2tlbjsKICAgICAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K"
with open('templates/auth/login.html', 'wb') as f:
    f.write(base64.b64decode(data))
print('Done - login.html written correctly')
