diff --git a/auto/gui.files.go b/auto/gui.files.go index a037004a8..53c3f1d76 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -92,7 +92,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["img/logo-text-64.png"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/+x9+3MbN9Lg7/krYH5JLFWJpOQ4/m4dSVuy5CRK/CpJ3lwuldsCZ0AS0XBmDGAkM4r2b7/uxrzfpGhZe/ulKhZJYBrdjUajH0DP/qOTt8cXv757yeZm4R1+sf9oOPxiPGbHQbhUcjY3bOt4mz3Z3XvKfuKXwYS9CNSMcd+FHr5RchKZQGm2pYVgZi7Y8ds3F2enL95fvD07Z1Ppie0RgjvyPEbgNFNCC3Ul3BF7rwULpvCY1EwHkXIEcwJXMPg6C66E8oXLJksYjL0+vRhqs/QEwvKkI3yNw3HDHGidCDYNIkBJ+oTDq9Pjl2/OX9Lwoy+GQ6AKiWMe92cHA+EPmD8b8jA8GOil78Dw/ox+cpCiwPOEOhicJy3HRnkD5nhc64MBdvICfjlAkIK7h18wtr8QhjNnzpUW5mAQmenwfw2yhrkx4VB8iOTVweB/D98fDY+DRciNnHgCwMKIwoenTl8eCHcmcs/5fCEOBldSXIeBMrmu19I18wNXXAEbhvRlBwiXRnJvqB3uiYO90W4FkCu0o2RoZODnYFW68cjMA1Xp4Un/EibOA45Bs3Eiw6SDkOZKTA8GcjEbT/kV/jQKgZmHX+BDRhpPHKaMZH+xmxuc6zcwx29gtK3t29v9se2VDmIBToLAaKN4OHa0HqffRgvpj+CXQYwLSoSeC2EGZQBTwH+sgBnXfNnvCRQ4JYFNTd33x3bGv9ifBO6SHnflVVluXl4B20hmDvfH0G5ZAYuKXQQhm3DFUB7xN59fpWLFr7DF/hka6Bh/dMWURx7MPoAX1E/OOM0hjh9jEANBLLj0hYrboFWHsDoKYwwnCtYu4AZTlrR4wSwYMK0cO5H4dWjERzN89pRmk80FrtyDwTdPBsxK32Bv778HY6AQR0iHC0tjIRA2l64r/OFHPTism/4wfTryco8nDMh9JPWR0kaTh8yXMHdROFPcFaf+NBj54jrHAuoIOsoEoBqWIfDQfklX9MT4yQD4Ef4fhkouuFrSZ71IZNxqCNA9l+l4W9uFcUoMn3nLcI5LgqWfhs5cXCn4G4WDhHlfi4UOv6sBAwLva48bkX0aXnEvgn+F0iADB4Obmzzl2EOb29vB4Xv7K4gcu/kq7v3VbXG2aKCx5UaOqWNPFlkcU+OqIHSDa7/IWR4z578G5X4gxbMZqjiXGx5/yUPpZlUwS3m0P+aFYTNRSYdbCD8qzwaQkmKYnz7hSnMujAGlpHEOV8LFzldpig4TcDmEi6xsRUi6uCh6ofJB4RbZhc08uGanJ13IpEyUV6D41GAVlPU8Msj4XkgH02knxhbcevwDk8JwZXrhAg9D93kHPmcW4qfkIJ8EUT+UYd9RZigWoVl2oH2EMFuQ3h9HXv1iz1ribQs/gGK0e1XDNmP74+b2vVTawC51vcMC31syMBOufSanzBeO0BrU6Xcs5im75spHeyDeCLN9FFX5I4A/lbNTH+2GVKsA4GxXKyDjDRfucO9Jfl/ItQMfhMfo32E8bFGBlfsir13qtT//JqeCC33IZBkkMsLeCOEKF8yDbw5T3jUPgMZDWVGFuSm8mKMVjDyIFG31bM41mLjCZ5pfoUUMxpcfGMYdI6/gCTCkMxtrEeE0xIiZIO1EdjFsjUXQo9z+W5j6ZvSnYIuV9tceO6zdSulPbNKwMPK8eE+/15Vc3vEqIuXBapvKj4OaySz+UPia+5LZfcXFIWaRB1YeyHJJ9AtCnsDDB89EGGgJDtYSnB4AsYWmoSemZjuDULsgnrWth+FMBWCAMOkiv+MRpNDtKyNeRTc3+MgxNmzhp9HpCdhxNIXwVXBjYaIrhn9fAdpVM6lx1RWtBSDG46FOjIiQK3JJ/quAdGKB4I+A3ZfSd8VHxIiMdwASKR2o5ywMpF+VXEAG1nnd6i5162HczV23JIuWWcCi29t2cNliyNnLyFN9LY0ztzw9N9xEGddrUKyajimI4fVcgMUY+Zc+2V/v7YeqTdgXkgZZDAVQfG4/3AES+PBWM5/Hn7pgVSCA/iur9sbxySNtHYSxrZsbhPlOKAdEjs9ETta/2q7Da0WMpVsrY3XonkLXe8G1/nfa14rLt6wX4xWd6JPCKiwsrWRBs2xlk+qnLjfSf87sg+zg4IDt3lbXap/dlDoaPvHSXdt+oX/RV3cxeuTG37VRksS4jlEm8fTr2lR9AzbNuzcvmKjOjStV/jlTHmA3DuumBKP3HvvLOR0ET7sN1IybyLkrndPAA8N4GITC76D3e+p5Z0JPpBIOcm1tehNTdAGOlvdbzL3fR9IH71vWS0pvdsRG6FDLWRc/XioV3Ikd9fh/HjGYecGky2v9AfpwL2f0bJD4GcH+XnpCs78Y9675Ur+JFhOhbm8rGlcawC8efIf9qwHYi6UhYBPpc5S2F5+Dr/Ng0cXWV4HzqbjqIegNMZVgPQieOl4QuUOMRngBL5t0ZbLegjf2dkoe2PqMbehNAbZ6ZeSDz2kZf8h2i3GZ4Bod0sxMTEIP1enLgNx59hBUzeTxFtISu6iVOrQDBoe7HfjsshdtFhIJy72LEQj0ZYfwvOYaXBJam59CeKp2N/KauHwGDtdb3wPb6Veh23nXCOhRCdKb4OFNQuQ7c+Fciq5lfDrzAyUYGNELqTFcru95QiwCOL6++5wUgD3EaekdusH07in67WC73Nk0tPAScOeg5vTnIF7PuRJD7pnOmDj0c9kv0szvQjoNp1HH0J6wvY4BCL/Xu0LQgG5U1WmsuIi9g4nUNQ4oNoQQuT+Dx2oVGvv6a9Z3r0xSvjV7ZbdiCfsYB/EA7HiOKOvWICTRXR8UqvdO23mUZI5ziQe0DWpDSbjNPsaQxONSLBaWSyo4Nua00aXdyY91qMwl+TKh74E4eKiO9LqcMoDaPYtNAZZ+YeaGBbRSOLon4xqi8Nx1iXW92OZFuisr5bp1/kcl99yHPftzlfS5klpSCGcxGJfC8PkgOqZWc+FzIrYYP6fTGXgIyceud4isxzHyVCpzQXEEfTydYVz8t+QUxNb27z2zUU1x8Tj2jcCHCLVn1LtnzHsd7/Pmxk/Od8Qkb5eC3+WAYn3SCYOJObLaw4jA1c4UQ22kcBNxwuYoYaOhsHk39CTuxs7gW6e10GgrwLi+cDA1qH97bALDvccYOJqE6NctBPDAub3Fb1sNfU998gIv8GveFdxusjkaLY4N8K7XHv0+/FR8CyLTn3FvI/MgOGc6d+6j1+y9kZ78k1LI6/NML8H5XYzgT5+Az6eh1uV6Pgm46hKS43fvN0q0E0ZxvqYUeoGvPphminvP925vv1qDG4lVHI8Eox/5fgB+sHj7M3t0wCLQa1PpN6Q8evJtAmbDPFBdIew4onsitYO29pKd48nf7qD2ao51AVvcKBk9pCMHj54M2hiS2Dc5k933gDkphq2Oc/24Je/kUc9xp9OeA9+zPujMU/3Dni9cf03EBxSb/dJ6yhp80lqPtKftnH23py8WAUZWwArReauwzrrIHamg/j3PUpCJRGcpMmOpyWwMzFwoNBv1xg9UWJQL1uRnPUmhhLmmQ9crmpYV4LXnKlqz9Lhk8xt0PNIIGX968juGF5xgEXoCm8uto3/Sdo7u9N7ubs/8/vsQD2qdZPYH24KH1z1lsBH891dAv3iawto3XfBhk6Pd7vnumscpqnHPFpoHh7QBUXvzOZVNnH6orJyO0w8P+3xDD3G6WzL8E3o4PW31snz2cHXKj6zs8XSElu+J6xv3jdbkeB8nqfzM6r7SJ83zSb8rz3fkugpM0bvwEHmAYHJb34MVsGCxALuiK7sB+8ZcBX5fl6pVvro3nLKTle0/n+WIAWCMEtGZl8Qrksdx5/5cqmyPCVtyoAZ1vKTEYxM7GmA/6gscE5EPU2I35+SsqQWPPQkr5h9djlBPPrUbQ3dhlFiKPkf5XnFtmBZibXnVhpsqlxDsOUAdkX31drr1eO9v/737eJsdsuFevcgJCje0S/R6Y+5jLrE+xtMKCJQPOF/i+WAJ/w1fvx66Lvvxx+eLxeDfIjHblKDc5+ul6CgPkuxpnyRLxxujKf9O+bjeFwR75uMQ3l0ycZX7LjZmMi7ebsGf6Byrrr/tJbDN3hEZecKfmbnN0X/ea191QYwyD98ERjoZB+9y9ysX7gF+YKgnxxYcecE9D/QK/Dq6kAuRahDUGs+1BsXxHBChXuzmZqpgL3G9pQ0V4UM0A8Xb1vUCvIHbXrmIS5MiyOSaZMvKR797pF2G9tufP8s9r8IKSC9Ipjf98ecXAaCz6FcAIFEG8VdAUrggOwSgHMbqqADQdKm+eI8+p73jLuTUxCobK1g8HwOJ2gkipcUorZox8oUZV9fGeRRizQo2Zt8HKlo03kftNbKGoWfSzKPJCKzmcTp27pMSMJcag65VQwSvxLMz2+FuiLSwwIFhZoFajt3AidD3iWs0VGMYueZPzhapdVTHlBdRyz31DQ1eIxS2wMtxft8pDt5+BZmOcghzHahLqx/xmBe4dslqst8oCmd7kV7B4DUedcIEjU3LoCIBRfsRKFzQPNi7GIz0PJZUeHycWs9273oMCjel4za5lVS4tBtTkN3DBeN3oTGuOxEMA1w7DBDGAD5Vt+EsVAFYZwt2DVxkS2CNPeUIqLPMeB+B4Bq1BHhfz4XnybhMRKzG98dEcsad+KYrXQNuYI1KuySMSI5r5ejP4JQpT5kp/WmQ8qE61SkbpGbZkKMkRlzu/45WJ7vmqdU2Go2aqLS1LdqIjJIeLTSmUDZBYjrgZihMaiE0EpjUXkjow/IKKd5p2jMmNoV2bKMkok5+M3Kyy+bwHIluI56nJ40YSvcDLDWPqxlgsBS6xFZQL4FOWiwNcV2L3BTRua1T2OyMnEqHlmppstjXC0zgf8dymaHsbNV2tlRze+Q1LCSG/6BZQn7bIvADmBLQTfQVk/K4g97cLJb20ly24WPRnOTGAjSmRo99ZjjBI/8MOg1BNS4mPgdHxdbV+aDGf0foBwlUe2KtwlKiGd2iinpLUgyJz5SObbtNOTGPT8hNPRiAP1ylnboOXcm9IF49Q29Wa2DbxrgIVIORbfug4VyutzN/WrrtS+dOHyHqIGIvP4JhS6uzACi2szPfZP60B9BeMNEdrAFaNvMqtFXM9f1poBZxLSb8OIirZqH0vaRZa0nM4gNJnjh36/UxrLghbWiPn7MM0MinuMHoy/jaHibualpdqcyy5qKsxyfgAWUMg8EtmiC1h3ZlncDei70qz0o/xBITcSypwuGMZFwBSdortxqI0LgmVmmJDWKnAX8lLtBRbUotYyoaEYsDJliB60Mk8QA80T/EQaQLBgOhVxvCSJzKBploWfoUn6vgUFj8ubHSOlewK4d21TeGSmpDsaVJtBP81191ExwqogIwxMIgvp05NCxI5TCyKOpq4A1I6A9ZXApowOJlH9hmOkxA4EbsHDmgqaYfqlP8CEADqhUHqmVL0m0Sd3vUGEepUlq/5FGIt9ZkAPiHv8xhX+Iubf6cqplgpx12KUSIdC9A+dmqgCY9zUsFUYA58BiIUoF6jSfzTRCsQlfDDNL6HaUS27JWi/OI9Q4Cwm/icf9yY5gQQ9/QiulGhiQJsE6QcgOhqcKMFwSXdvWN2KnBmj6R5xIz2bdP0KD99hnVPeQOiiJmmmFiYOHreLaDKQODA9qscNmci96xRq+uSN1E0EOx3DXwohTDaM7HV7VuTyXJ8UwzqUg0KNqVZOgBEXO6uH4w+DFYiPiEW6wXEVSdVuylBrk9W12v7sKqMFT1F55DKdgpeX11bis0+drADo5TFe8KiQJxvEjbaUXDbcR+kaA9aSEBfUbSCYMgp0dgKnE2M72RRTEWolxoaAUaHn0CGqIQA2hEANVFAgztB3w8JVBj/SqstsOo9FaVhk2LHrdpYvTZj5KPK8ifuwRCpEMC5UqN4X+3XSxQSLNB15XUFNdzo/pJbM1UvqTtDFPHHJznEJQKTtBAhs9t+dMUTdQ7Gakwg6FQZJbxyATo0TvMTc+bUnVZkTzcfwZLxs+58KaDPtOaD8bhvdNJ8LHOMqid0ty0Wp6nEBr4ns+3Vl3O+sxxTZ6oXr565TuQFSvY0zXR5F6Vw8oFOXO33fmViDMjRanP7XhfpoU77h5fPofxWiLMvahJ9GJCDR3FBMzx4nHMqV7X7BYg4l3H1tHN7oFvveGMlkNxBbTTRQE2m8EirVmdLhBhYUTvVBbYc525rBMC2ZzJao/dF4L4ScW1bgccez1wB3xFt7vnlb2qT76aJ16XqO0aZ3NuOt4E7XTT8znHuva63GNdvz7ufobQCD+W3P2a1gZ3n8a2JgUZErZ7ld31JaW6dqOMeWgzFE2OOKGhS+q3IgxJbbCGMEGHmXFmrx/nYgKRLz9EYkilBqF7yNHN8A8G4//7Gx/+eTT8P7vDvw3/Ofr9Zm/n2dPbL8eNdgnR2c+hp671jljNVKU+bU1b5tSfYzl14I6NcoL6nNo8AUtrHC5H7HXsw+LvGm1V0JLc81LzlszvRt9xNbSt/2jZS2qOXESVF5zUp7a9Njpw3oVukv86lPo60uvgFAvXqiilkQemy5O89exp5jiTReuBlbZd7zvvJI4z+cooA/i/C9RujbZ3yHlmW8NtasXLXUrTSxS2/rldGMP3li1cqfHPao1A+vluWu4dN/M2PWfbuzVdyXlKHh3ktRz+sIqCIwBFFfev8cmqSs5CWVPNpfXrMm13r7rLsr9Je9nWTH/h98SNzol/HGejml503yQCIcz8b0cJcu/Av5YmizcJ5OSI4VIyErifCy5t/Ws7CXNGGHrAWANL30UxTQvlsX0U/uyiJcHBOC79PLozXzq1VE56K0ohRGb111T3tiYLVXGal2apW29bpPBcnVFSV+WHbent/iu3OERxAT/bTVZmqVfLArUat2mJnpUhpfIAHsvB4NtPbGw8apuV/lOXiCdxX8aN2a5lGOasDfuWaYGXitoMjP6S2ieusJY9/qy/OV5LQb/IDXVtFEpq7RnBOSvWTquEb3KbmK0S134luHmh1OuL7oCcrZiEmaBQBYauzrGpChaolLGWEVvgG0YCPx8C3qHi9OUOWTLmOtb/Gi++p7sGCFkcp4sN2rpo8aqa7+FMcqEYW7W6c1PhuXudaAyixuOziTR23uO8H8OK1ZQLQrsU/ZN4guMXePns+6MLeteW3XNrwqwt+K0yfY1JbT2wxdKoVholAZri5uUhC5OXv3TdceO6iNNG5EQLj1YZDUjXB7I7G6x097nu4rNl8ubl45zwSvMjdKqNasrZhZ2zbzCvt8Lkd95F2JBqL4mNFfj4rg3dXO4lKXjCK7i7FFgwDSKAmGWIWcbjGUZ67RPKJZrcFRXyJmAVkjasQh4WH7TEk2w1nDinhv80bhg+m2ECv44hSdun5cnqTkku2dtC48HBYzvXj3t5Mrbvz0KETU5Mvkeb/9LbNsIkDOWRMaGMeeZFiCeWLCUaNxHORtqkP9hy+HZLBbzQT3Ex/mMzI/S6y+xoea0qbdoHM9IGh/hvMtmtO2Hei8oBsKdMc9/XdpXyQIpe0t79hWTzs14X2Mi3l85b2fvCYJ7CvGXTCvONZ4520Gyybxm9W7wxj0BrhKEiv2U0UxSz6GPciOHBzUZJq1jDxHYj/GsQWezo2FbqZ8LelmD/6WMi/dVPokB7aqCk+2v+8WgmGtVQuVu7LqpZCZWXZ9yXRqo/357oGsIgPYjBPW+ZwpHk4i3t2UIa0sy5DRMu+Ee5iBaMzwSOLD46QthIdybYU0ug5wXXgg455oIWozSVVa8vO7Q5riDgAkCm8/wxUEsLBhufp0mZKb3Ia47XNXjCUrwAcClCwwSdOPlmN4mX7JQec/my8SkEWe4PkOAR3fgMNO6wyDfSqzCx6ZFrIS5X3FWKkjo4fB0PA196bywlGHZ3Kf+4/hZThnTvYfPKcq7dZMqdijtNMn0GL3jG+0tuHrdA4lEadkC6KHSym3bKrWSF09x8TndNatp3pFpVVqQJRfKO+9G96n0qh53T/Gssl0Qh2oxUqh5XyUfVwyrGtktrqdhzzQRUAw3ti6lVwVKS6JqOqqfCmh0m1oaiTFtgBlwJe9Qy1YTJWamaDSs+4pmFH7bvFnroPN4WC1afmy01J9UzPOvPqwtWOJxB18riM7ZG5siUFICZCQq6TqhOnh8fAMDEmd1fHbxspoUPT0jgKS41Wn+wKztz2F+5Y2BnTp7GowTJEYLWCgb3dKAvLj1eTLbmVM7/HOhb80Dfpg7w9a4N/xkO8CUv4m44vafj5gd+eq+iTgun6LKXjW/4nFxXFu7eY7V2V30Th767r2UQDLuJ4mynD66yF5pF+JbuMOhRNvC9pTOw6ofw6SQ9Xspl71RgAmAusw2s62JAiQMZuDVZkMPn3ngApuSZcK5+noSgPE59J1jgPopVCIELC2nY1s/yxbjP+QBkQR7aal5Gjg0FlO6TEefCd+2obyMzC+7IiBTaXRiRofSgc7Tlo8Y+VUl9/85/l0YxMt7gz7aHO2jJ1+UYkX9iw3H0B8k/+xrJtJR7DQ+px5Hvr8bH8lOfJydxr6wsl8Wv4aXtsjIzK489IG7WargU4fjeZPMrAzqd5ry38KiNJ0UGJxc219seK/iv5H9+JnsqtiGA2e9P17QrEhArsg0GHKWj35uQvdckWUDsUQR+s2/iciJ4fqWHZNH+oFeXESTWDn1vlL6DR68DfJ1JDbVJYz+KU1BtVIdppwrlGSr/TqoZTzT9eHHx7pxCUEBHna2gxcWr8w6NHE8+dnxAOvhTse0cSzyxF+AlaqFqWEbtcXPPrazwyH8AC4/8wF8ugkiDVsKAOQZZqGxWnQSerWirnt2bpTpXbHxHC9biUuHPu1P2s1j2uLXm9qr2hCVfkh3p3SlAxnzNYDhoKPpCkJNoYKp0W+NpzXUvtTB2zC2LwTboa+ELRXX2m98q2dOQeKgXtZOw1WZKff5/FbldNcppVYQiFdEQ6YxUbYyTSJxw59JVQWiLXmMdBfr5UizpZWiwRLmnP2dAlHFPAGX0b/oir9WCpEeY0GeNWvXvdw6e5uvn2TI6jlqGeNQhys+O1Pa4u8ult6Q6OvnUjoKZoKoXIFEhgMKFqnfoWabln3GBHB5maV4AMU0zXwqHo1ePYVoYANuj2S6WlExP24cqWBBeVHeHDu3Gc8ZnXPrltFkhm5d+GtJpw2GkvKwEKA5crIRq8758NlNiRje8SL40iFh8lSCagD7wloxfATsoIMMNu/kKwH51W0FkNXVbXsxZes5y6p0SV1JcF7QStJ/lG1E1xR8LAlOrYUJVSJ9nI2Qlm+3vJzhBf7E/tK3tbxuBWCXuQSfHq6dGJ3NoCM37s83o419bX2/dTx3bBFRd2snBl+P1RLWXPk7fin93ZfxGCKwtZk8oNRelxU5tNTFtHczSO5FYvlJmXBvzbUQXZig9cIoXLhLV3PhSqPglUOVXRGWq2r47Irn/MMXkdIIwSrgv4VfODujHI6pNuzXNX4nIvfSCpHuIqqHHVN3cIMRTvPf8G/8dC3Ym1q5tOYpfYoFtxZcj0GsjklqhU6qWhY8nn/GtQBz0Lv1cfTLhUfreBlZFO17a09E56GEqS0/Q6VvhhaWxGGVjZC9ryL2FoVLr82gSROXNO5MXjq1FccmLQlF0YkYQxEQY5nsFKpOyplTDlHswn2nN16xUbPYLVS2FrmPYJoIhQXjy7bNRSG32dYBUJcsBzcQ9OfOfs+HesxAckLlAfh4M8A1ysOO4Zn4w+ObZs8H4cH+ixplqzL31MVGI870Ed5X4EIVd9jgIl3a2vnbg43fsye7eU/YTvwwm7EWgZukF+ew03zHGKySs8EDp5+n+0nS/sOt931HB4cBS2UdcgUC/kGJCkSRZafddBXvJSeTP+aK2gyc+cry1z35QfFrbQ5l5pNjRR7xRe/byF3buzBfA19q+kaskGDsvInMJe5EDn+u6vRA+O5fuPKhF6QUw3MV40Vx6MqwF8AOYFhJAzCLlao3VpQo1xMcZo4rKdGX+/gQLmI5NYRGD8jhxF9Bl7ESKRf0MvObKAXV28qfkbj03XkuwmoC5F0hUXQfLiFAg5/HdVqoWzNkSlMZ5BDCueC2iFxGehz0LQHU0kPIPIYwEarnPfdGPqfmPDcsmV6vad7yIrnAVFokOpuaazuUqRuYxnXHH81rBNLdocuPbIvGF2vizwIPtewTLcGytwB8CTF7PFF9Q+vYVtEYcT43ywx1Wt5SfsPgxjFvCeh0VisOXh0QDdCLNJHIuhaFhL8F1kRzc+zHoyY+gCEs/tI18wn2JIjAXQQgmtOgxOFYUGM2CYOYJqoIfjrUPhvpyOAuAA+nn5lH3iN5z23EVsnOl9y3XxxRNcbgzB7Mn+zz2VNQ8/DfAakSenfrOSmP+Ef0RjTFW4WEOenBY/N484FN2DJPh457BXhl3pTHBy3CNQnLFlfDcCTC49EvL7O7AslSwOl2uInahJH7y+SrDg8J8FU24Gp/5YJUtYH8XYryge9nwZzkRxgMrrNwraWmbAxQB232t+b+SRkX++ANXMBG5Lw1DrrrAcM2CCfKHjtf1kf3+03kzSbtDmmorWzvdwoX0CDMB7wasVB4SVcDK5HvL8rEDXYBXC9NQHilRl5nZhV+0A4awsdZNTFtCI15eGf1hT6tRr8OOB4aphr3Do0O08kWPwf/4EAm1HNs/wyej3dE33Q+lXB3/occZizufI51iy27jR91BXBiWOoBPRS8lA5POLID3/w8AAP//AQAA//8f8AgKZaoAAA==") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["index.html"] = bs diff --git a/cmd/syncthing/tls.go b/cmd/syncthing/tls.go index e46e8079e..fdf1204f4 100644 --- a/cmd/syncthing/tls.go +++ b/cmd/syncthing/tls.go @@ -5,6 +5,7 @@ package main import ( + "bytes" "crypto/rand" "crypto/rsa" "crypto/sha256" @@ -13,8 +14,10 @@ import ( "crypto/x509/pkix" "encoding/binary" "encoding/pem" + "io" "math/big" mr "math/rand" + "net" "os" "path/filepath" "time" @@ -73,3 +76,48 @@ func newCertificate(dir string, prefix string) { pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}) keyOut.Close() } + +type DowngradingListener struct { + net.Listener + TLSConfig *tls.Config +} + +type WrappedConnection struct { + io.Reader + net.Conn +} + +func NewDowngradingListener(address string, config *tls.Config) (net.Listener, error) { + listener, err := net.Listen("tcp", address) + if err != nil { + return nil, err + } + return &DowngradingListener{listener, config}, nil +} + +func (listener *DowngradingListener) Accept() (net.Conn, error) { + connection, err := listener.Listener.Accept() + + if err != nil { + return nil, err + } + + var peek [1]byte + _, err = io.ReadFull(connection, peek[:]) + if err != nil { + return nil, err + } + + jointReader := io.MultiReader(bytes.NewReader(peek[:]), connection) + wrapper := &WrappedConnection{jointReader, connection} + + // TLS handshake starts with ASCII SYN + if peek[0] == 22 { + return tls.Server(wrapper, listener.TLSConfig), nil + } + return wrapper, nil +} + +func (c *WrappedConnection) Read(b []byte) (n int, err error) { + return c.Reader.Read(b) +} diff --git a/gui/index.html b/gui/index.html index ac4009126..a063818b1 100644 --- a/gui/index.html +++ b/gui/index.html @@ -716,6 +716,7 @@
  • groupcache/lru, Copyright © 2013 Google Inc.
  • juju/ratelimit, Copyright © 2014 Canonical Ltd.
  • syndtr/goleveldb, Copyright © 2012, Suryandaru Triandana
  • +
  • BenLubar/Rnoadm/maybetls, Copyright © 2013 The Rnoadm Authors.
  • vitrun/qart, Copyright © The Go Authors.
  • AngularJS, Copyright © 2010-2014 Google, Inc.
  • Bootstrap, Copyright © 2011-2014 Twitter, Inc.