[
  {
    "path": ".all-contributorsrc",
    "content": "{\n  \"files\": [\n    \"README.md\",\n    \"README.zh-CN.md\",\n    \"README.ru-RU.md\",\n    \"README.ko-KR.md\",\n    \"README.it-IT.md\",\n    \"README.de-DE.md\",\n    \"README.id-ID.md\",\n    \"README.ja-JP.md\",\n    \"README.pt-BR.md\",\n    \"README.es-ES.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"contributors\": [\n    {\n      \"login\": \"mezner\",\n      \"name\": \"Russell Myers\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/184085?v=4\",\n      \"profile\": \"http://www.russellmyers.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ehwarren\",\n      \"name\": \"Austin Warren\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/3991658?v=4\",\n      \"profile\": \"http://www.morwire.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Drachenkaetzchen\",\n      \"name\": \"Felicia Hummel\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/162974?v=4\",\n      \"profile\": \"https://github.com/Drachenkaetzchen\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"mikemaccana\",\n      \"name\": \"Mike MacCana\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/172594?v=4\",\n      \"profile\": \"https://github.com/mikemaccana\",\n      \"contributions\": [\n        \"test\",\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"yxuko\",\n      \"name\": \"Yacine Kanzari\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/1786317?v=4\",\n      \"profile\": \"https://github.com/yxuko\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"BBJip\",\n      \"name\": \"BBJip\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/32908927?v=4\",\n      \"profile\": \"https://github.com/BBJip\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Futagirl\",\n      \"name\": \"Futagirl\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/33533958?v=4\",\n      \"profile\": \"https://github.com/Futagirl\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"levrik\",\n      \"name\": \"Levin Rickert\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/9491603?v=4\",\n      \"profile\": \"https://www.levrik.io\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"kwonoj\",\n      \"name\": \"OJ Kwon\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/1210596?v=4\",\n      \"profile\": \"https://kwonoj.github.io\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Domain\",\n      \"name\": \"domain\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/903197?v=4\",\n      \"profile\": \"https://github.com/Domain\",\n      \"contributions\": [\n        \"plugin\",\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"kbjr\",\n      \"name\": \"James Brumond\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/195127?v=4\",\n      \"profile\": \"http://www.jbrumond.me\",\n      \"contributions\": [\n        \"plugin\"\n      ]\n    },\n    {\n      \"login\": \"Tyriar\",\n      \"name\": \"Daniel Imms\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/2193314?v=4\",\n      \"profile\": \"http://www.growingwiththeweb.com\",\n      \"contributions\": [\n        \"code\",\n        \"plugin\",\n        \"test\"\n      ]\n    },\n    {\n      \"login\": \"baflo\",\n      \"name\": \"Florian Bachmann\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/834350?v=4\",\n      \"profile\": \"https://github.com/baflo\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"mischah\",\n      \"name\": \"Michael Kühnel\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/441011?v=4\",\n      \"profile\": \"http://michael-kuehnel.de\",\n      \"contributions\": [\n        \"code\",\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"NieLeben\",\n      \"name\": \"Tilmann Meyer\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/47182955?v=4\",\n      \"profile\": \"https://github.com/NieLeben\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"PMExtra\",\n      \"name\": \"PM Extra\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/11289158?v=4\",\n      \"profile\": \"http://www.jubeat.net\",\n      \"contributions\": [\n        \"bug\"\n      ]\n    },\n    {\n      \"login\": \"IgnusG\",\n      \"name\": \"Jonathan\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/6438760?v=4\",\n      \"profile\": \"https://jjuhas.keybase.pub//\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"hammster\",\n      \"name\": \"Hans Koch\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1093709?v=4\",\n      \"profile\": \"https://hans-koch.me\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ThePuzzlemaker\",\n      \"name\": \"Dak Smyth\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/12666617?v=4\",\n      \"profile\": \"http://thepuzzlemaker.info\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"yfwz100\",\n      \"name\": \"Wang Zhi\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/983211?v=4\",\n      \"profile\": \"http://yfwz100.github.io\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"jack1142\",\n      \"name\": \"jack1142\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/6032823?v=4\",\n      \"profile\": \"https://github.com/jack1142\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"hdougie\",\n      \"name\": \"Howie Douglas\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/450799?v=4\",\n      \"profile\": \"https://github.com/hdougie\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ckaczor\",\n      \"name\": \"Chris Kaczor\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/180906?v=4\",\n      \"profile\": \"https://chriskaczor.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"boxmein\",\n      \"name\": \"Johannes Kadak\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/358714?v=4\",\n      \"profile\": \"https://www.boxmein.net\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"LeSeulArtichaut\",\n      \"name\": \"LeSeulArtichaut\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/38361244?v=4\",\n      \"profile\": \"https://github.com/LeSeulArtichaut\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"CyrilTaylor\",\n      \"name\": \"Cyril Taylor\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/12631466?v=4\",\n      \"profile\": \"https://github.com/CyrilTaylor\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"nstefanou\",\n      \"name\": \"nstefanou\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/51129173?v=4\",\n      \"profile\": \"https://github.com/nstefanou\",\n      \"contributions\": [\n        \"code\",\n        \"plugin\"\n      ]\n    },\n    {\n      \"login\": \"orin220444\",\n      \"name\": \"orin220444\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/30747229?v=4\",\n      \"profile\": \"https://github.com/orin220444\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Goobles\",\n      \"name\": \"Gobius Dolhain\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/8776771?v=4\",\n      \"profile\": \"https://github.com/Goobles\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"3l0w\",\n      \"name\": \"Gwilherm Folliot\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/37798980?v=4\",\n      \"profile\": \"https://github.com/3l0w\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"dimitory\",\n      \"name\": \"Dmitry Pronin\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/475955?v=4\",\n      \"profile\": \"https://github.com/Dimitory\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"JonathanBeverley\",\n      \"name\": \"Jonathan Beverley\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/20328966?v=4\",\n      \"profile\": \"https://github.com/JonathanBeverley\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"zend\",\n      \"name\": \"Zenghai Liang\",\n      \"avatar_url\": \"https://avatars1.githubusercontent.com/u/25160?v=4\",\n      \"profile\": \"https://github.com/zend\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"matishadow\",\n      \"name\": \"Mateusz Tracz\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/9083085?v=4\",\n      \"profile\": \"https://about.me/matishadow\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"pinpins\",\n      \"name\": \"pinpin\",\n      \"avatar_url\": \"https://avatars3.githubusercontent.com/u/36234677?v=4\",\n      \"profile\": \"https://zergpool.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"TakuroOnoda\",\n      \"name\": \"Takuro Onoda\",\n      \"avatar_url\": \"https://avatars0.githubusercontent.com/u/1407926?v=4\",\n      \"profile\": \"https://github.com/TakuroOnoda\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"frauhottelmann\",\n      \"name\": \"frauhottelmann\",\n      \"avatar_url\": \"https://avatars2.githubusercontent.com/u/902705?v=4\",\n      \"profile\": \"https://github.com/frauhottelmann\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"VectorKappa\",\n      \"name\": \"Piotr Patalong\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/29167842?v=4\",\n      \"profile\": \"http://patalong.pl\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"clarkwang\",\n      \"name\": \"Clark Wang\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/157076?v=4\",\n      \"profile\": \"https://github.com/clarkwang\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"iamchating\",\n      \"name\": \"iamchating\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/7088153?v=4\",\n      \"profile\": \"https://github.com/iamchating\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"starxg\",\n      \"name\": \"starxg\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/34997494?v=4\",\n      \"profile\": \"https://github.com/starxg\",\n      \"contributions\": [\n        \"plugin\"\n      ]\n    },\n    {\n      \"login\": \"lambdalisue\",\n      \"name\": \"Alisue\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/546312?v=4\",\n      \"profile\": \"http://hashnote.net/\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"ydcool\",\n      \"name\": \"Dominic Yin\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5668295?v=4\",\n      \"profile\": \"https://github.com/ydcool\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"bdr99\",\n      \"name\": \"Brandon Rothweiler\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/2292715?v=4\",\n      \"profile\": \"https://github.com/bdr99\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"logicmachine123\",\n      \"name\": \"Logic Machine\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/63876444?v=4\",\n      \"profile\": \"https://git.io/JnP49\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"cypherbits\",\n      \"name\": \"cypherbits\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/10424900?v=4\",\n      \"profile\": \"https://github.com/cypherbits\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"KingMob\",\n      \"name\": \"Matthew Davidson\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/946421?v=4\",\n      \"profile\": \"https://modulolotus.net\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"al-wi\",\n      \"name\": \"Alexander Wiedemann\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/11092199?v=4\",\n      \"profile\": \"https://github.com/al-wi\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"BoYeonJang\",\n      \"name\": \"장보연\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/59506394?v=4\",\n      \"profile\": \"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"Me1onRind\",\n      \"name\": \"zZ\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/19531270?v=4\",\n      \"profile\": \"https://github.com/Me1onRind\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"tainoNZ\",\n      \"name\": \"Aaron Davison\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/49261322?v=4\",\n      \"profile\": \"https://github.com/tainoNZ\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"composer404\",\n      \"name\": \"Przemyslaw Kozik\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/58251560?v=4\",\n      \"profile\": \"https://github.com/composer404\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"highfredo\",\n      \"name\": \"Alfredo Arellano de la Fuente\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5951524?v=4\",\n      \"profile\": \"https://github.com/highfredo\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"NessunKim\",\n      \"name\": \"MH Kim\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/12974079?v=4\",\n      \"profile\": \"https://github.com/NessunKim\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"jaimeadf\",\n      \"name\": \"Marmota\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/40345645?v=4\",\n      \"profile\": \"https://discord.gg/4c5EVTBhtp\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"TENX-S\",\n      \"name\": \"Ares Andrew\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/40336192?v=4\",\n      \"profile\": \"https://ares.zone\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"gkor\",\n      \"name\": \"George Korsnick\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/780052?v=4\",\n      \"profile\": \"https://usual.io/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"uluhonolulu\",\n      \"name\": \"Artem Smirnov\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/872764?v=4\",\n      \"profile\": \"https://about.me/ulu\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"nevotheless\",\n      \"name\": \"Tim Kopplow\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/779797?v=4\",\n      \"profile\": \"https://github.com/nevotheless\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"mrthock\",\n      \"name\": \"mrthock\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/88901709?v=4\",\n      \"profile\": \"https://github.com/mrthock\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"lrottach\",\n      \"name\": \"Lukas Rottach\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/50323692?v=4\",\n      \"profile\": \"https://github.com/lrottach\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"boonkerz\",\n      \"name\": \"boonkerz\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/277321?v=4\",\n      \"profile\": \"https://github.com/boonkerz\",\n      \"contributions\": [\n        \"code\",\n        \"translation\"\n      ]\n    },\n    {\n      \"login\": \"milotype\",\n      \"name\": \"Milo Ivir\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/43657314?v=4\",\n      \"profile\": \"https://github.com/milotype\",\n      \"contributions\": [\n        \"translation\"\n      ]\n    },\n    {\n      \"login\": \"JasonCubic\",\n      \"name\": \"JasonCubic\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/8921015?v=4\",\n      \"profile\": \"https://github.com/JasonCubic\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"MaxWaldorf\",\n      \"name\": \"MaxWaldorf\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/15877853?v=4\",\n      \"profile\": \"https://github.com/MaxWaldorf\",\n      \"contributions\": [\n        \"infra\"\n      ]\n    },\n    {\n      \"login\": \"mwz\",\n      \"name\": \"Michael Wizner\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1190768?v=4\",\n      \"profile\": \"https://github.com/mwz\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"mgrulich\",\n      \"name\": \"Martin\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/781036?v=4\",\n      \"profile\": \"https://github.com/mgrulich\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"piersandro\",\n      \"name\": \"Piersandro Guerrera\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/19996309?v=4\",\n      \"profile\": \"https://github.com/piersandro\",\n      \"contributions\": [\n        \"doc\",\n        \"translation\"\n      ]\n    },\n    {\n      \"login\": \"0x973\",\n      \"name\": \"0x973\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/19320096?v=4\",\n      \"profile\": \"https://github.com/0x973\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Allenator\",\n      \"name\": \"Allenator\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/11794943?v=4\",\n      \"profile\": \"https://github.com/Allenator\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"microhobby\",\n      \"name\": \"Matheus Castello\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/2633321?v=4\",\n      \"profile\": \"http://microhobby.com.br/blog\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Jai-JAP\",\n      \"name\": \"Jai A P\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/78354625?v=4\",\n      \"profile\": \"https://github.com/Jai-JAP\",\n      \"contributions\": [\n        \"platform\"\n      ]\n    },\n    {\n      \"login\": \"ysc3839\",\n      \"name\": \"Richard Yu\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/12028138?v=4\",\n      \"profile\": \"https://blog.ysc3839.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"artu-ole\",\n      \"name\": \"artu-ole\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/15938416?v=4\",\n      \"profile\": \"https://github.com/artu-ole\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"TimaGribanov\",\n      \"name\": \"Timofey Gribanov\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/48593815?v=4\",\n      \"profile\": \"https://timagribanov.github.io/\",\n      \"contributions\": [\n        \"doc\",\n        \"translation\"\n      ]\n    },\n    {\n      \"login\": \"ChristianBingman\",\n      \"name\": \"Christian Bingman\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/42191425?v=4\",\n      \"profile\": \"https://git.christianbingman.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Ox0400\",\n      \"name\": \"zhipeng\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5310853?v=4\",\n      \"profile\": \"http://zhangzhipeng2023.cn/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"woodmeal\",\n      \"name\": \"woodmeal\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/104011197?v=4\",\n      \"profile\": \"https://github.com/woodmeal\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"MagicLike\",\n      \"name\": \"MagicLike\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/82117109?v=4\",\n      \"profile\": \"https://magiclike.codeberg.page/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"hisamafahri\",\n      \"name\": \"Hisam Fahri\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/65691613?v=4\",\n      \"profile\": \"https://github.com/hisamafahri\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"LiangchengJ\",\n      \"name\": \"Liangcheng Juves\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/48881023?v=4\",\n      \"profile\": \"https://liangchengj.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"attet\",\n      \"name\": \"Atte Timonen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1911416?v=4\",\n      \"profile\": \"https://github.com/attet\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"joaompinto\",\n      \"name\": \"João Pinto\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1143125?v=4\",\n      \"profile\": \"https://www.linkedin.com/in/joaolmpinto/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"Qiming-Liu\",\n      \"name\": \"Alan\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/68600416?v=4\",\n      \"profile\": \"https://github.com/Qiming-Liu\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"74th\",\n      \"name\": \"Atsushi Morimoto\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1060011?v=4\",\n      \"profile\": \"https://74th.tech/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"aarles\",\n      \"name\": \"Arles\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5369096?v=4\",\n      \"profile\": \"https://arles.red/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"six2dez\",\n      \"name\": \"six2dez\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/24670991?v=4\",\n      \"profile\": \"https://pentestbook.six2dez.com/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"CandiceJoy\",\n      \"name\": \"Candice\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/8854890?v=4\",\n      \"profile\": \"https://github.com/CandiceJoy\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"kingrowen\",\n      \"name\": \"Rowen Willabus\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/13178700?v=4\",\n      \"profile\": \"https://github.com/kingrowen\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"HengY1Sky\",\n      \"name\": \"HengY1Coding✨\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/98681454?v=4\",\n      \"profile\": \"https://hengy1.top/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"FrancisHG\",\n      \"name\": \"Francis Gelderloos\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1611626?v=4\",\n      \"profile\": \"https://github.com/FrancisHG\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"astromasoud\",\n      \"name\": \"astromasoud\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/18737721?v=4\",\n      \"profile\": \"https://github.com/astromasoud\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"Spirit55555\",\n      \"name\": \"Anders G. Jørgensen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/2357565?v=4\",\n      \"profile\": \"https://spirit55555.dk/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"djradon\",\n      \"name\": \"Dave Richardson\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/5224156?v=4\",\n      \"profile\": \"https://github.com/djradon\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"tpberntsen\",\n      \"name\": \"Thomas Peter Berntsen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/922318?v=4\",\n      \"profile\": \"https://twitter.com/tpberntsen\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"eltociear\",\n      \"name\": \"Ikko Ashimine\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/22633385?v=4\",\n      \"profile\": \"https://bandism.net/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"giejqf\",\n      \"name\": \"giejqf\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/9211230?v=4\",\n      \"profile\": \"https://github.com/giejqf\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"LacazeThomas\",\n      \"name\": \"Thomas LACAZE\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/19855907?v=4\",\n      \"profile\": \"https://github.com/LacazeThomas\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"princemaple\",\n      \"name\": \"Po Chen\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1329716?v=4\",\n      \"profile\": \"https://pochen.me/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"mzmznasipadang\",\n      \"name\": \"Victor Chandra\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/41635105?v=4\",\n      \"profile\": \"https://victorchandra.carrd.co/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"daniel347x\",\n      \"name\": \"Dan Nissenbaum\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/309746?v=4\",\n      \"profile\": \"https://github.com/daniel347x\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"DunklerPhoenix\",\n      \"name\": \"RogueThorn\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1261305?v=4\",\n      \"profile\": \"https://github.com/DunklerPhoenix\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"spenserblack\",\n      \"name\": \"Spenser Black\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/8546709?v=4\",\n      \"profile\": \"http://spenserblack.github.io\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"zuedev\",\n      \"name\": \"Alex\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/24614929?v=4\",\n      \"profile\": \"https://github.com/zuedev\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"HengY1Cola\",\n      \"name\": \"HengY1Coding✨\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/98681454?v=4\",\n      \"profile\": \"https://hengy1.top/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"dcarrero\",\n      \"name\": \"David Carrero\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/195768?v=4\",\n      \"profile\": \"https://www.stackscale.com/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"zhoro\",\n      \"name\": \"Andrii Zhovtiak\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1105687?v=4\",\n      \"profile\": \"https://github.com/zhoro\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"JohnMasoner\",\n      \"name\": \"Mason Ma\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/42313377?v=4\",\n      \"profile\": \"https://github.com/JohnMasoner\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"ntimo\",\n      \"name\": \"Timo\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/6145026?v=4\",\n      \"profile\": \"https://github.com/ntimo\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"EvinRWatson\",\n      \"name\": \"Evin Watson\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/24227251?v=4\",\n      \"profile\": \"https://www.linkedin.com/in/evinwatson/\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"deulizealand\",\n      \"name\": \"Hendra Juli\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/15981200?v=4\",\n      \"profile\": \"https://t.me/hendrjl\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"wkricowski\",\n      \"name\": \"Wellinton Kricowski\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/36803521?v=4\",\n      \"profile\": \"https://github.com/wkricowski\",\n      \"contributions\": [\n        \"financial\",\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"almzau\",\n      \"name\": \"Allan\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/29115846?v=4\",\n      \"profile\": \"https://github.com/almzau\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"BenjaminBrandmeier\",\n      \"name\": \"Benjamin Brandmeier\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/17959794?v=4\",\n      \"profile\": \"https://oidamo.de\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"patric1025\",\n      \"name\": \"patric1025\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/65654040?v=4\",\n      \"profile\": \"https://github.com/patric1025\",\n      \"contributions\": [\n        \"translation\"\n      ]\n    },\n    {\n      \"login\": \"hermitpopcorn\",\n      \"name\": \"hermitpopcorn\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/16042129?v=4\",\n      \"profile\": \"https://github.com/hermitpopcorn\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"joshuatz\",\n      \"name\": \"Joshua Tzucker\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/17817563?v=4\",\n      \"profile\": \"https://joshuatz.com/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"luxifr\",\n      \"name\": \"luxifr\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/665715?v=4\",\n      \"profile\": \"https://github.com/luxifr\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"ukulanne\",\n      \"name\": \"Anne Summers\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/28586666?v=4\",\n      \"profile\": \"https://github.com/ukulanne\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"Clem-Fern\",\n      \"name\": \"Clem\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/20025949?v=4\",\n      \"profile\": \"https://github.com/Clem-Fern\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"elizabeth-dev\",\n      \"name\": \"Elizabeth Martín Campos\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/13015727?v=4\",\n      \"profile\": \"https://github.com/elizabeth-dev\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"siccous\",\n      \"name\": \"Tomáš Hruška\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/7812885?v=4\",\n      \"profile\": \"https://github.com/siccous\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"karaketir16\",\n      \"name\": \"Osman Karaketir\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/27349806?v=4\",\n      \"profile\": \"https://github.com/karaketir16\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"CryptoGnome\",\n      \"name\": \"Crypto Gnome\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/33667144?v=4\",\n      \"profile\": \"https://www.gnomegarden.io/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"rbukovansky\",\n      \"name\": \"Richard Bukovansky\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1004491?v=4\",\n      \"profile\": \"https://github.com/rbukovansky\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"pseudocc\",\n      \"name\": \"catlas\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/85104110?v=4\",\n      \"profile\": \"https://github.com/pseudocc\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"Kapocsi\",\n      \"name\": \"Thomas Kapocsi\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/84490604?v=4\",\n      \"profile\": \"http://kapocsi.ca\",\n      \"contributions\": [\n        \"doc\"\n      ]\n    },\n    {\n      \"login\": \"dylhack\",\n      \"name\": \"Dylan Hackworth\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/27179786?v=4\",\n      \"profile\": \"https://dylhack.dev/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"echo304\",\n      \"name\": \"Sangboak Lee\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/16456651?v=4\",\n      \"profile\": \"https://github.com/echo304\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"qyecst\",\n      \"name\": \"qyecst\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/13901864?v=4\",\n      \"profile\": \"https://github.com/qyecst\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"DehanLUO\",\n      \"name\": \"Han\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/53093688?v=4\",\n      \"profile\": \"https://github.com/DehanLUO\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"wljince007\",\n      \"name\": \"wljince007\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/88243938?v=4\",\n      \"profile\": \"https://github.com/wljince007\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"FeroTheFox\",\n      \"name\": \"fero\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/52982404?v=4\",\n      \"profile\": \"https://github.com/FeroTheFox\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"siebsie23\",\n      \"name\": \"Sibren\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/25083973?v=4\",\n      \"profile\": \"https://siebsie23.nl/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"nwalser\",\n      \"name\": \"Nathaniel Walser\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/33339996?v=4\",\n      \"profile\": \"https://www.nathaniel-walser.com\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"aaronhuggins\",\n      \"name\": \"Aaron Huggins\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/16567111?v=4\",\n      \"profile\": \"https://github.com/aaronhuggins\",\n      \"contributions\": [\n        \"design\"\n      ]\n    },\n    {\n      \"login\": \"zKXDEX\",\n      \"name\": \"KDex\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/66271780?v=4\",\n      \"profile\": \"https://zkxdex.github.io/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"kimbob13\",\n      \"name\": \"ChangHwan Kim\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/26755098?v=4\",\n      \"profile\": \"https://github.com/kimbob13\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ashneilson\",\n      \"name\": \"Ash Neilson\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/35913512?v=4\",\n      \"profile\": \"https://github.com/ashneilson\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"cfs4819\",\n      \"name\": \"Chen Fansong\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/53071761?v=4\",\n      \"profile\": \"https://github.com/cfs4819\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"Mxmilu666\",\n      \"name\": \"Mxmilu\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/82694310?v=4\",\n      \"profile\": \"https://5k.work/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"C41M50N\",\n      \"name\": \"Charles Buffington\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/29805363?v=4\",\n      \"profile\": \"https://cbuff.dev\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"GeminiLn\",\n      \"name\": \"Yu Qin\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/12425057?v=4\",\n      \"profile\": \"https://github.com/GeminiLn\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"fireblue\",\n      \"name\": \"fireblue\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/1034929?v=4\",\n      \"profile\": \"https://github.com/fireblue\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"marko1616\",\n      \"name\": \"marko1616\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/45327989?v=4\",\n      \"profile\": \"https://github.com/marko1616\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"SelfHosted-Club\",\n      \"name\": \"SelfHosted\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/128927132?v=4\",\n      \"profile\": \"https://www.selfhosted.sg/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"xhiroga\",\n      \"name\": \"Hiroaki Ogasawara\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/13391129?v=4\",\n      \"profile\": \"http://hiroga.hatenablog.com/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"geodic\",\n      \"name\": \"geodic\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/64704703?v=4\",\n      \"profile\": \"https://github.com/geodic\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"pfoundation\",\n      \"name\": \"P Foundation\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/80860929?v=4\",\n      \"profile\": \"https://p.foundation/\",\n      \"contributions\": [\n        \"financial\"\n      ]\n    },\n    {\n      \"login\": \"et304383\",\n      \"name\": \"et304383\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/2693414?v=4\",\n      \"profile\": \"https://github.com/et304383\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"ajkrj\",\n      \"name\": \"ajkrj\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/210226755?v=4\",\n      \"profile\": \"https://github.com/ajkrj\",\n      \"contributions\": [\n        \"code\"\n      ]\n    },\n    {\n      \"login\": \"leoberbert\",\n      \"name\": \"Leonardo Berbert\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/u/16724862?v=4\",\n      \"profile\": \"https://www.linkedin.com/in/leoberbert/\",\n      \"contributions\": [\n        \"code\"\n      ]\n    }\n  ],\n  \"contributorsPerLine\": 7,\n  \"projectName\": \"tabby\",\n  \"projectOwner\": \"Eugeny\",\n  \"repoType\": \"github\",\n  \"repoHost\": \"https://github.com\",\n  \"commitConvention\": \"none\",\n  \"skipCi\": true,\n  \"commitType\": \"docs\"\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = LF\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.sln]\nindent_style = tab\n# TODO Determine if there is a preferred tab width for this file type\n\n# Programming/Scripts\n[*.{js,ts}]\nindent_style = space\nindent_size = 4\n\n[*.cpp]\nindent_style = tab\n# TODO Determine if there is a preferred tab width for this file type\n\n# Markup\n[*.pug]\nindent_style = space\nindent_size = 4\n\n# Stylesheets\n[*.scss]\nindent_style = space\nindent_size = 4\n\n# Data Files\n[*.json]\nindent_style = space\nindent_size = 2\n\n[*.{yaml,yml}]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".eslintrc.yml",
    "content": "settings:\n  import/parsers:\n    '@typescript-eslint/parser': ['.ts']\n  import/resolver:\n    typescript:\n      project:\n      - tsconfig.json\n      - tabby-*/tsconfig.json\n    node: true\n\nenv:\n  browser: true\n  es6: true\n  node: true\n  commonjs: true\n\noverrides:\n- files: '*.mjs'\n  plugins:\n    - 'import'\n  parserOptions:\n    sourceType: module\n    ecmaVersion: latest\n\n- files: '*.ts'\n  parser: '@typescript-eslint/parser'\n  parserOptions:\n    project:\n    - tsconfig.json\n    - '*/tsconfig.typings.json'\n  extends:\n    - 'plugin:@typescript-eslint/all'\n    - plugin:import/recommended\n    - plugin:import/typescript\n  plugins:\n    - '@typescript-eslint'\n    - import\n  rules:\n    '@typescript-eslint/semi':\n    - error\n    - never\n    '@typescript-eslint/indent':\n    - error\n    - 4\n    '@typescript-eslint/explicit-member-accessibility':\n    - error\n    - accessibility: no-public\n      overrides:\n        parameterProperties: explicit\n    '@typescript-eslint/no-require-imports': off\n    '@typescript-eslint/no-parameter-properties': off\n    '@typescript-eslint/explicit-function-return-type': off\n    '@typescript-eslint/no-explicit-any': off\n    '@typescript-eslint/no-magic-numbers': off\n    '@typescript-eslint/member-delimiter-style': off\n    '@typescript-eslint/promise-function-async': off\n    '@typescript-eslint/require-array-sort-compare': off\n    '@typescript-eslint/no-floating-promises': off\n    '@typescript-eslint/prefer-readonly': off\n    '@typescript-eslint/require-await': off\n    '@typescript-eslint/strict-boolean-expressions': off\n    '@typescript-eslint/no-misused-promises':\n    - error\n    - checksVoidReturn: false\n    '@typescript-eslint/typedef': off\n    '@typescript-eslint/consistent-type-imports': off\n    '@typescript-eslint/sort-type-union-intersection-members': off\n    '@typescript-eslint/no-use-before-define':\n    - error\n    - classes: false\n    no-duplicate-imports: error\n    array-bracket-spacing:\n    - error\n    - never\n    block-scoped-var: error\n    brace-style: off\n    '@typescript-eslint/brace-style':\n    - error\n    - 1tbs\n    - allowSingleLine: true\n    computed-property-spacing:\n    - error\n    - never\n    comma-dangle: off\n    '@typescript-eslint/comma-dangle':\n    - error\n    - always-multiline\n    curly: error\n    eol-last: error\n    eqeqeq:\n    - error\n    - smart\n    max-depth:\n    - 1\n    - 5\n    max-statements:\n    - 1\n    - 80\n    no-multiple-empty-lines: error\n    no-mixed-spaces-and-tabs: error\n    no-trailing-spaces: error\n    '@typescript-eslint/no-unused-vars':\n      - error\n      - vars: all\n        args: after-used\n        argsIgnorePattern: ^_\n    no-undef: error\n    no-var: error\n    object-curly-spacing: off\n    '@typescript-eslint/object-curly-spacing':\n    - error\n    - always\n    quote-props:\n    - warn\n    - as-needed\n    - keywords: true\n      numbers: true\n    quotes: off\n    '@typescript-eslint/quotes':\n    - error\n    - single\n    - allowTemplateLiterals: true\n    '@typescript-eslint/no-confusing-void-expression':\n    - error\n    - ignoreArrowShorthand: true\n    '@typescript-eslint/no-non-null-assertion': off\n    '@typescript-eslint/no-unnecessary-condition':\n    - error\n    - allowConstantLoopConditions: true\n    '@typescript-eslint/restrict-template-expressions': off\n    '@typescript-eslint/prefer-readonly-parameter-types': off\n    '@typescript-eslint/no-unsafe-member-access': off\n    '@typescript-eslint/no-unsafe-call': off\n    '@typescript-eslint/no-unsafe-return': off\n    '@typescript-eslint/no-unsafe-assignment': off\n    '@typescript-eslint/naming-convention': off\n    '@typescript-eslint/lines-between-class-members':\n    - error\n    - always\n    - exceptAfterSingleLine: true\n    '@typescript-eslint/dot-notation': off\n    '@typescript-eslint/no-implicit-any-catch': off\n    '@typescript-eslint/member-ordering': off\n    '@typescript-eslint/no-var-requires': off\n    '@typescript-eslint/no-unsafe-argument': off\n    '@typescript-eslint/restrict-plus-operands': off\n    '@typescript-eslint/space-infix-ops': off\n    '@typescript-eslint/no-type-alias':\n    - error\n    - allowAliases: in-unions-and-intersections\n      allowLiterals: always\n      allowCallbacks: always\n    '@typescript-eslint/sort-type-constituents': off\n    '@typescript-eslint/parameter-properties':\n    - error\n    - prefer: parameter-property\n    'import/no-named-as-default-member': off\n    '@typescript-eslint/consistent-type-exports': off\n    '@typescript-eslint/consistent-generic-constructors': off\n    'keyword-spacing': off\n    '@typescript-eslint/keyword-spacing': off\n    '@typescript-eslint/class-methods-use-this': off\n    '@typescript-eslint/lines-around-comment': off\n    '@typescript-eslint/no-redundant-type-constituents': off # broken\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: eugeny\nopen_collective: tabby\nko_fi: eugeny\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!--\n# RULES:\n\n* **ENGLISH ONLY** - this issue tracker is English-only. Please respect the people who take time to help you with your problems.\n* Search existing issues first: https://github.com/Eugeny/tabby/issues\n-->\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue-report.md",
    "content": "---\nname: Issue report\nabout: Report a problem\ntitle: ''\nlabels: 'T: Bug'\nassignees: ''\n\n---\n\n<!--\n# READ CAREFULLY:\n\n* **ENGLISH ONLY** - this issue tracker is English-only. Please respect the people who take time to help you with your problems.\n* Search existing issues first: https://github.com/Eugeny/tabby/issues\n* Test with the latest Tabby version: https://github.com/Eugeny/tabby/releases\n* Disable third-party plugins.\n-->\n\n**Describe the problem**:\n[A clear and concise description of what the bug is.]\n\n**To Reproduce**:\n[Steps to reproduce the behavior]\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: npm\n  directory: \"/\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/app\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-core\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-settings\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-terminal\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-local\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-community-color-schemes\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-electron\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-web\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-plugin-manager\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: npm\n  directory: \"/tabby-ssh\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n- package-ecosystem: github-actions\n  directory: \"/\"\n  schedule:\n    interval: daily\n    time: \"04:00\"\n  open-pull-requests-limit: 20\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 180\n# Number of days of inactivity before a stale issue is closed\ndaysUntilClose: 90\n# Issues with these labels will never be considered stale\nexemptLabels:\n  - \"T: Enhancement\"\n  - \"S: Confirmed\"\n# Label to use when marking an issue as stale\nstaleLabel: \"S: Stale\"\n# Comment to post when marking an issue as stale. Set to `false` to disable\nmarkComment: >\n  This issue has been automatically marked as stale because it has not had\n  recent activity. It will be closed in two weeks unless you comment.\n\n  Thank you for your contributions.\n# Comment to post when closing a stale issue. Set to `false` to disable\ncloseComment: false\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Package-Build\non: [push, pull_request]\njobs:\n  Lint:\n    runs-on: ubuntu-24.04\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n\n    - name: Installing Node\n      uses: actions/setup-node@v4.4.0\n      with:\n        node-version: 22\n\n    - name: Install deps\n      run: |\n        sudo apt-get update && sudo apt-get install -y libfontconfig1-dev\n        npm i -g yarn\n        cd app\n        yarn\n        cd ..\n        rm app/node_modules/.yarn-integrity\n        yarn\n\n    - name: Build typings\n      run: yarn run build:typings\n\n    - name: Lint\n      run: yarn run lint\n\n  macOS-Build:\n    runs-on: macos-15\n    needs: Lint\n    strategy:\n      matrix:\n        include:\n          - arch: x86_64\n            rust_triple: x86_64-apple-darwin\n          - arch: arm64\n            rust_triple: aarch64-apple-darwin\n      fail-fast: false\n\n    env:\n      ARCH: ${{matrix.arch}}\n      RUST_TARGET_TRIPLE: ${{matrix.rust_triple}}\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n\n    - name: Installing Node\n      uses: actions/setup-node@v4.4.0\n      with:\n        node-version: 22\n\n    - run: rustup target add ${{matrix.rust_triple}}\n\n    - name: Install deps\n      run: |\n        yarn --network-timeout 1000000\n      env:\n        ARCH: ${{matrix.arch}}\n\n    - name: Webpack\n      run: yarn run build\n\n    - name: Prepackage plugins\n      run: scripts/prepackage-plugins.mjs\n      env:\n        ARCH: ${{matrix.arch}}\n\n    - run: sed -i '' 's/updateInfo = await/\\/\\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js\n\n    # Work around electron-builder beta bug\n    - run: ln -s ../../node_modules/electron app/node_modules\n\n    - name: Build and sign packages\n      run: scripts/build-macos.mjs\n      if: github.event_name == 'push' && (github.ref_protected || startsWith(github.ref, 'refs/tags'))\n      env:\n        ARCH: ${{matrix.arch}}\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}\n        CSC_LINK: ${{ secrets.CSC_LINK }}\n        CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}\n        APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}\n        APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}\n        APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}\n        USE_HARD_LINKS: false\n        # DEBUG: electron-builder,electron-builder:*\n\n    - name: Build packages without signing\n      run: scripts/build-macos.mjs\n      if: \"! (github.event_name == 'push' && (github.ref_protected || startsWith(github.ref, 'refs/tags')))\"\n      env:\n        ARCH: ${{matrix.arch}}\n        # DEBUG: electron-builder,electron-builder:*\n\n    - name: Upload symbols\n      run: |\n        sudo npm install -g @sentry/cli --unsafe-perm\n        ./scripts/sentry-upload.mjs\n      env:\n        SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}\n        SENTRY_ORG: ${{ secrets.SENTRY_ORG }}\n        SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}\n\n    - name: Package artifacts\n      run: |\n        mkdir artifact-dmg\n        mv dist/*.dmg artifact-dmg/\n        mkdir artifact-zip\n        mv dist/*.zip artifact-zip/\n\n    - uses: actions/upload-artifact@master\n      name: Upload DMG\n      with:\n        name: macOS .dmg (${{matrix.arch}})\n        path: artifact-dmg\n\n    - uses: actions/upload-artifact@master\n      name: Upload ZIP\n      with:\n        name: macOS .zip (${{matrix.arch}})\n        path: artifact-zip\n\n  Linux-Build:\n    runs-on: ${{matrix.os}}\n    needs: Lint\n    strategy:\n      matrix:\n        include:\n          - build-arch: x64\n            arch: amd64\n            rust_triple: x86_64-unknown-linux-gnu\n            os: ubuntu-24.04\n          - build-arch: arm64\n            arch: arm64\n            rust_triple: aarch64-unknown-linux-gnu\n            triplet: aarch64-linux-gnu-\n            os: ubuntu-24.04-arm\n          - build-arch: arm\n            arch: armhf\n            rust_triple: arm-unknown-linux-gnueabihf\n            triplet: arm-linux-gnueabihf-\n            os: ubuntu-24.04\n      fail-fast: false\n\n    env:\n      CC: ${{matrix.triplet}}gcc\n      CXX: ${{matrix.triplet}}g++\n      ARCH: ${{matrix.build-arch}}\n      npm_config_arch: ${{matrix.build-arch}}\n      npm_config_target_arch: ${{matrix.build-arch}}\n      RUST_TARGET_TRIPLE: ${{matrix.rust_triple}}\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n\n    - name: Install Node\n      uses: actions/setup-node@v4.4.0\n      with:\n        node-version: 22\n\n    - name: Install FPM\n      run: |\n        sudo gem install fpm\n\n    - run: rustup target add ${{matrix.rust_triple}}\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install libfontconfig1-dev libarchive-tools zsh crossbuild-essential-${{matrix.arch}}\n\n    - name: Setup tar to run as root\n      run: sudo chmod u+s \"$(command -v tar)\"\n      if: matrix.build-arch == 'arm'\n\n    - name: Download cached sysroot\n      uses: actions/cache@v3\n      id: dl-cached-sysroot\n      if: matrix.build-arch == 'arm'\n      with:\n        key: sysroot-${{matrix.build-arch}}\n        path: /${{matrix.build-arch}}-sysroot\n\n    - name: Setup crossbuild sysroot\n      run: |\n        sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y\n        sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/\n        sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file=\"$0\"; dir=$(dirname \"$file\"); target=$(readlink \"$0\"); prefix=$(dirname \"$dir\" | sed 's@[^/]*@\\.\\.@g'); newtarget=\"$prefix$target\"; ln -snf $newtarget $file' {} \\; ;\n      if: matrix.build-arch == 'arm' && steps.dl-cached-sysroot.outputs.cache-hit != 'true'\n\n    - name: Setup env to use ${{matrix.build-arch}} sysroot\n      run: |\n        echo \"CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/\" >> $GITHUB_ENV\n        echo \"CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/\" >> $GITHUB_ENV\n        echo \"LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/\" >> $GITHUB_ENV\n\n        [[ ${npm_config_arch} == 'arm' ]] && echo \"npm_config_arch=armv7l\" >> $GITHUB_ENV\n\n        if [[ ${{matrix.arch}} == 'armhf' ]]; then\n          echo \"PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/\" >> $GITHUB_ENV\n        elif [[ ${{matrix.arch}} == 'arm64' ]]; then\n          echo \"PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/\" >> $GITHUB_ENV\n        fi\n      if: matrix.build-arch == 'arm'\n\n    - name: Install npm_modules (native)\n      run: |\n        npm i -g yarn node-gyp\n        yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}}\n\n    - name: Webpack (${{matrix.arch}})\n      run: yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}\n\n    - name: Prepackage plugins (${{matrix.arch}})\n      run: scripts/prepackage-plugins.mjs\n\n    - name: Build packages (${{matrix.arch}})\n      run: scripts/build-linux.mjs\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}\n        USE_HARD_LINKS: false\n        USE_SYSTEM_FPM: true\n        # DEBUG: electron-builder,electron-builder:*\n\n    - name: Build web resources (amd64 only)\n      run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'\n      if: matrix.build-arch == 'x64'\n\n    - name: Upload symbols (amd64 only)\n      run: |\n        sudo npm install -g @sentry/cli --unsafe-perm\n        ./scripts/sentry-upload.mjs\n      if: matrix.build-arch == 'x64'\n      env:\n        SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}\n        SENTRY_ORG: ${{ secrets.SENTRY_ORG }}\n        SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}\n\n    - name: Upload packages to packagecloud.io\n      uses: TykTechnologies/packagecloud-action@main\n      if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')\n      env:\n        PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }}\n      with:\n        repo: 'eugeny/tabby'\n        dir: 'dist'\n        rpmvers: 'el/9 el/8 ol/6 ol/7'\n        debvers: 'ubuntu/bionic ubuntu/focal ubuntu/hirsute ubuntu/impish ubuntu/jammy ubuntu/kinetic ubuntu/noble ubuntu/oracular debian/jessie debian/stretch debian/buster debian/bullseye debian/bookworm debian/trixie debian/forky debian/duke debian/testing debian/unstable debian/sid'\n\n    - uses: actions/upload-artifact@master\n      name: Upload AppImage (${{matrix.arch}})\n      with:\n        name: Linux AppImage (${{matrix.arch}})\n        path: dist/*.AppImage\n\n    - uses: actions/upload-artifact@master\n      name: Upload DEB (${{matrix.arch}})\n      with:\n        name: Linux DEB (${{matrix.arch}})\n        path: dist/*.deb\n\n    - uses: actions/upload-artifact@master\n      name: Upload RPM (${{matrix.arch}})\n      with:\n        name: Linux RPM (${{matrix.arch}})\n        path: dist/*.rpm\n\n    - uses: actions/upload-artifact@master\n      name: Upload Pacman Package (${{matrix.arch}})\n      with:\n        name: Linux Pacman (${{matrix.arch}})\n        path: dist/*.pacman\n\n    - uses: actions/upload-artifact@master\n      name: Upload Linux tarball (${{matrix.arch}})\n      with:\n        name: Linux tarball (${{matrix.arch}})\n        path: dist/*.tar.gz\n\n    - uses: actions/upload-artifact@master\n      name: Upload web tarball (amd64 only)\n      with:\n        name: Web tarball\n        path: tabby-web.tar.gz\n      if: matrix.build-arch == 'x64'\n\n  Windows-Build:\n    runs-on: windows-latest\n    needs: Lint\n    strategy:\n      matrix:\n        include:\n          - arch: x64\n            rust_triple: x86_64-pc-windows-msvc\n          - arch: arm64\n            rust_triple: aarch64-pc-windows-msvc\n      fail-fast: false\n\n    env:\n      RUST_TARGET_TRIPLE: ${{matrix.rust_triple}}\n      ARCH: ${{matrix.arch}}\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n\n    - name: Code signing with Software Trust Manager\n      uses: digicert/ssm-code-signing@v1.1.1\n      if: github.event_name == 'push' && (startsWith(github.ref, 'refs/tags'))\n      env:\n        FORCE_DOWNLOAD_TOOLS: 'true'\n\n    - name: Installing Node\n      uses: actions/setup-node@v4.4.0\n      with:\n        node-version: 22\n\n    - run: npm i -g npx\n    - run: rustup target add ${{matrix.rust_triple}}\n\n    - name: Update node-gyp\n      run: |\n        npm install --global node-gyp@10.2.0\n        npm prefix -g | % {npm config set node_gyp \"$_\\node_modules\\node-gyp\\bin\\node-gyp.js\"}\n\n    - name: Build\n      shell: powershell\n      run: |\n        npm i -g yar node-gyp\n        yarn --network-timeout 1000000\n        yarn run build\n        node scripts/prepackage-plugins.mjs\n      env:\n        ARCH: ${{matrix.arch}}\n\n    - name: Decode certificate\n      if: github.event_name == 'push' && (startsWith(github.ref, 'refs/tags'))\n      env:\n        SM_CLIENT_CERT_FILE_B64: ${{ secrets.SM_CLIENT_CERT_FILE_B64 }}\n      run: |\n        SM_CLIENT_CERT_FILE=$RUNNER_TEMP/certificate.p12\n        echo \"$SM_CLIENT_CERT_FILE_B64\" | base64 --decode > $SM_CLIENT_CERT_FILE\n        echo \"SM_CLIENT_CERT_FILE=$SM_CLIENT_CERT_FILE\" >> \"$GITHUB_ENV\"\n      shell: bash\n\n    - name: Build and sign packages\n      if: github.event_name == 'push' && (startsWith(github.ref, 'refs/tags'))\n      shell: powershell\n      run: |\n        Get-FileHash $env:SM_CLIENT_CERT_FILE -Algorithm MD5\n        smksp_registrar.exe list\n        smctl.exe healthcheck\n        smctl.exe keypair ls\n        smctl windows certsync --keypair-alias $env:SM_KEYPAIR_ALIAS\n        smctl.exe certificate ls\n        C:\\Windows\\System32\\certutil.exe -csp \"DigiCert Signing Manager KSP\" -key -user\n        smksp_cert_sync.exe\n\n        # not used but necessary for electron-builder to run\n        $env:WIN_CSC_LINK=$env:SM_CLIENT_CERT_FILE\n        $env:WIN_CSC_KEY_PASSWORD=$env:SM_CLIENT_CERT_PASSWORD\n\n        node scripts/build-windows.mjs\n      env:\n        ARCH: ${{matrix.arch}}\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}\n        SM_CLIENT_CERT_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}\n        SM_PUBLISHER_NAME: ${{ secrets.SM_PUBLISHER_NAME }}\n        SM_API_KEY: ${{ secrets.SM_API_KEY }}\n        SM_HOST: ${{ vars.SM_HOST }}\n        SM_CODE_SIGNING_CERT_SHA1_HASH: ${{ vars.SM_CODE_SIGNING_CERT_SHA1_HASH }}\n        SM_KEYPAIR_ALIAS: ${{ vars.SM_KEYPAIR_ALIAS }}\n        # DEBUG: electron-builder,electron-builder:*\n\n    - name: Build packages without signing\n      run: node scripts/build-windows.mjs\n      if: \"! (github.event_name == 'push' && (startsWith(github.ref, 'refs/tags')))\"\n      env:\n        ARCH: ${{matrix.arch}}\n\n    - name: Upload symbols\n      run: |\n        npm install @sentry/cli\n        node scripts/sentry-upload.mjs\n      env:\n        SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}\n        SENTRY_ORG: ${{ secrets.SENTRY_ORG }}\n        SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}\n\n    - name: Package artifacts\n      run: |\n        mkdir artifact-setup\n        mv dist/*-setup-*.exe artifact-setup/\n        mkdir artifact-portable\n        mv dist/*-portable-*.zip artifact-portable/\n\n    - uses: actions/upload-artifact@master\n      name: Upload installer\n      with:\n        name: Windows installer (${{matrix.arch}})\n        path: artifact-setup\n\n    - uses: actions/upload-artifact@master\n      name: Upload portable build\n      with:\n        name: Windows portable build (${{matrix.arch}})\n        path: artifact-portable\n"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "content": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# You may wish to alter this file to override the set of languages analyzed,\n# or to provide custom queries or build logic.\n#\n# ******** NOTE ********\n# We have attempted to detect the languages in your repository. Please check\n# the `language` matrix defined below to confirm you have the correct set of\n# supported CodeQL languages.\n#\nname: \"CodeQL\"\n\non:\n  push:\n    branches: [ master ]\n  pull_request:\n    # The branches below must be a subset of the branches above\n    branches: [ master ]\n  schedule:\n    - cron: '26 7 * * 4'\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: ubuntu-latest\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'javascript' ]\n        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]\n        # Learn more about CodeQL language support at https://git.io/codeql-language-support\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v2\n      with:\n        languages: ${{ matrix.language }}\n        # If you wish to specify custom queries, you can do so here or in a config file.\n        # By default, queries listed here will override any specified in a config file.\n        # Prefix the list here with \"+\" to use these queries and those in the config file.\n        # queries: ./path/to/local/query, your-org/your-repo/queries@main\n\n    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).\n    # If this step fails, then you should remove it and run the build manually (see below)\n    - name: Autobuild\n      uses: github/codeql-action/autobuild@v2\n\n    # ℹ️ Command-line programs to run using the OS shell.\n    # 📚 https://git.io/JvXDl\n\n    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines\n    #    and modify them (or add more) to build your code if your project\n    #    uses a compiled language\n\n    #- run: |\n    #   make bootstrap\n    #   make release\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v2\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "name: Docs\non: push\njobs:\n  build:\n    runs-on: ubuntu-latest\n    if: ${{ github.actor != 'dependabot[bot]' }}\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n\n    - name: Installing Node\n      uses: actions/setup-node@v4.4.0\n      with:\n        node-version: 22\n\n    - name: Build\n      run: |\n        sudo apt update && sudo apt install libfontconfig1-dev\n        yarn cache clean\n        cd app\n        yarn\n        cd ..\n        rm app/node_modules/.yarn-integrity\n        yarn\n        yarn run build:typings\n        yarn run docs\n\n      env:\n        DOCS_PRIVATE_KEY: ${{ secrets.DOCS_PRIVATE_KEY }}\n\n    - uses: FirebaseExtended/action-hosting-deploy@v0\n      with:\n        repoToken: '${{ secrets.GITHUB_TOKEN }}'\n        firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_TABBY_DOCS }}'\n        channelId: live\n        projectId: tabby-docs\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "---\nname: \"tagged-release\"\n\non:\n  push:\n    tags:\n      - \"v*\"\n\njobs:\n  tagged-release:\n    name: \"Tagged Release\"\n    runs-on: \"ubuntu-latest\"\n\n    steps:\n      - uses: \"marvinpinto/action-automatic-releases@latest\"\n        with:\n          repo_token: \"${{ secrets.GITHUB_TOKEN }}\"\n          prerelease: false\n          draft: true\n"
  },
  {
    "path": ".gitignore",
    "content": "app/node_modules\napp/assets/webpack\n\nnode_modules\n\nbuild/files.wxs\ndist\n*/dist\n*/typings\n*.tsbuildinfo\n\n*.xcworkspacedata\n*.xcuserstate\n*.wixpdb\n\n.DS_Store\n.DS_Store?\n\ncoverage\n.nyc_output\nnpm-debug.log\n\nbuiltin-plugins\npackage-lock.json\nyarn-error.log\n\ndocs/api\n.travis.ssh.key\n*.code-workspace\n.idea/\n\n.electron-symbols\nsentry.properties\nsentry-symbols.js\n\n*.psd\n\ncrowdin.yml\n.crowdin.env\n"
  },
  {
    "path": ".mergify.yml",
    "content": "pull_request_rules:\n  - name: automatic merge on CI success and review\n    conditions:\n    - \"status-success=Windows Build / Build\"\n    - \"status-success=macOS Build / Build\"\n    - \"status-success=Linux Build / Build\"\n    - \"status-success=continuous-integration/appveyor/pr\"\n    - \"#approved-reviews-by>=1\"\n    - \"#changes-requested-reviews-by=0\"\n    - base=master\n    actions:\n      merge:\n        method: merge\n        strict: true\n"
  },
  {
    "path": ".pug-lintrc.js",
    "content": "module.export = {\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"node\",\n            \"request\": \"launch\",\n            \"name\": \"Electron: Main\",\n            \"protocol\": \"inspector\",\n            \"runtimeExecutable\": \"${workspaceFolder}/node_modules/.bin/electron\",\n            \"env\": {\n                \"TABBY_DEV\": \"1\"\n            },\n            \"runtimeArgs\": [\n                \"--remote-debugging-port=9223\",\n                \"app\"\n            ],\n            \"windows\": {\n                \"runtimeExecutable\": \"${workspaceFolder}/node_modules/.bin/electron.cmd\"\n            }\n        },\n        {\n            \"name\": \"Electron: Renderer\",\n            \"type\": \"pwa-chrome\",\n            \"request\": \"attach\",\n            \"port\": 9223,\n            \"webRoot\": \"${workspaceFolder}\",\n            \"timeout\": 30000\n        }\n    ],\n    \"compounds\": [\n        {\n            \"name\": \"Electron: All\",\n            \"configurations\": [\n                \"Electron: Main\",\n                \"Electron: Renderer\"\n            ]\n        }\n    ]\n}\n"
  },
  {
    "path": ".well-known/funding-manifest-urls",
    "content": "https://null.page/funding.json\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at e@ajenti.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "HACKING.md",
    "content": "# Some background\n\nTabby is an Electron app, with the frontend written in Typescript with the help of Angular framework. It's built using Webpack.\n\n# Getting started\n\nFirst of all, clone this repository.\n\n# Install Dependencies\n- [Node.js](https://nodejs.org/en/download/) **version 15 or newer*\n- [Yarn](https://yarnpkg.com/)\n\nFirst, from within the `tabby` directory install the dependencies via yarn:\n\n```\n# macOS & Windows:\nyarn\n```\n\n```\n# Linux (Debian/Ubuntu here as an example)\nsudo apt install libfontconfig-dev libsecret-1-dev libarchive-tools libnss3 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 cmake\nyarn\n```\n\n_⚠️Note: If you forked this repository, you may need to pull down the tags from this repository before installing node modules. `git pull --tags upstream master`_\n\nBuild Tabby:\n\n```\nyarn run build\n```\n\nStart Tabby\n\n```\nyarn start\n```\n\n# Building an installer\n\nTo build an installer, first complete a \"normal\" build as described above and then run:\n\n```\nnode scripts/prepackage-plugins.mjs\n\nnode scripts/build-windows.mjs\n# or\nnode scripts/build-linux.mjs\n# or\nnode scripts/build-macos.mjs\n```\n\nThe artifacts will be produced in the `dist` folder.\n\n# Project layout\n```\ntabby\n├─ app                                  # Electron app, just the bare essentials\n|  ├─ src                               # Electron renderer code\n|  └─ main.js                           # Electron main entry point\n├─ build\n├─ clink                                # Clink distribution, for Windows\n├─ scripts                              # Maintenance scripts\n├─ tabby-community-color-schemes     # Plugin that provides color schemes\n├─ tabby-core                        # Plugin that provides base UI and tab management\n├─ tabby-electron                    # Plugin that provides Electron-specific functions\n├─ tabby-local                       # Plugin that provides local shells and profiles\n├─ tabby-plugin-manager              # Plugin that installs other plugins\n├─ tabby-settings                    # Plugin that provides the settings tab\n├─ tabby-terminal                    # Plugin that provides terminal tabs\n└─ tabby-web                         # Plugin that provides web-specific functions\n```\n\n# Plugin layout\n```\ntabby-pluginname\n├─ src                                  # Typescript code\n|  ├─ components                        # Angular components\n|  |  ├─ foo.component.ts               # Code\n|  |  ├─ foo.component.scss             # Styles\n|  |  └─ foo.component.pug              # Template\n|  ├─ services                          # Angular services\n|  |  └─ foo.service.ts\n|  ├─ api.ts                            # Publicly exported API\n|  └─ index.ts                          # Module entry point\n├─ package.json\n├─ tsconfig.json\n└─ webpack.config.js\n```\n\n# Plugins\n\nThe app will load all plugins from the source checkout in the dev mode, from the user's plugins directory at all times (click `Open Plugins Directory` under `Settings` > `Plugins`) and from the directory specified by the `TABBY_PLUGINS` environment var.\n\nOnly modules whose `package.json` file contains a `tabby-plugin` keyword will be loaded.\n\nIf you're currently in your plugin's directory, start Tabby as `TABBY_PLUGINS=$(pwd) tabby --debug`\n\nA plugin should only provide a default export, which should be a `NgModule` class (or a `NgModuleWithDependencies` where applicable). This module will be injected as a dependency to the app's root module.\n\n```javascript\nimport { NgModule } from '@angular/core'\n\n@NgModule()\nexport default class MyModule {\n  constructor () {\n    console.log('Angular engaged, cap\\'n.')\n  }\n}\n```\n\nPlugins provide functionality by exporting singular or multi providers:\n\n\n```javascript\nimport { NgModule, Injectable } from '@angular/core'\nimport { ToolbarButtonProvider, ToolbarButton } from 'tabby-core'\n\n@Injectable()\nexport class MyButtonProvider extends ToolbarButtonProvider {\n    provide (): ToolbarButton[] {\n        return [{\n            icon: 'star',\n            title: 'Foobar',\n            weight: 10,\n            click: () => {\n                alert('Woohoo!')\n            }\n        }]\n    }\n}\n\n@NgModule({\n    providers: [\n        { provide: ToolbarButtonProvider, useClass: MyButtonProvider, multi: true },\n    ],\n})\nexport default class MyModule { }\n```\n\n\nSee `tabby-core/src/api.ts`, `tabby-settings/src/api.ts`, `tabby-local/src/api.ts` and `tabby-terminal/src/api.ts` for the available extension points.\n\nAlso check out [the example plugin](https://github.com/Eugeny/tabby-clippy).\n\nPublish your plugin on NPM with a `tabby-plugin` keyword to make it appear in the Plugin Manager.\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 Tabby Developers\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.de-DE.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n<p  align=\"center\">\n<a  href=\"https://github.com/Eugeny/tabby/releases/latest\"><img  alt=\"Alle GitHub Releases\"  src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a>     <a  href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img  src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a>     <a  href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img  alt=\"Matrix\"  src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a  href=\"https://translate.tabby.sh/\"><img  alt=\"Übersetzen\"  src=\"https://shields.io/badge/Übersetzen-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a>     <a  href=\"https://twitter.com/eugeeeeny\"><img  alt=\"Twitter\"  src=\"https://shields.io/badge/Abonnieren-Nachrichten-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Downloads:\n\n* [Neueste Version](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-basiert](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-basiert](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Neueste nightly Version](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p  align=\"center\">\nDiese README ist auch verfügbar in: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (ehemals **Terminus**) ist ein äußerst konfigurierbarer Terminalemulator, SSH- und serieller Client für Windows, macOS und Linux\n\n* Integrierter SSH- und Telnet-Client und Verbindungsmanager\n* Integriertes serielles Terminal\n* Theming und Farbschemata\n* Vollständig konfigurierbare Tastenkombinationen und Multi-Akkord-Tastenkombinationen\n* Geteilte Fenster\n* Merkt sich deine Tabs\n* Unterstützung für PowerShell (und PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder und CMD\n* Direkte Dateiübertragung von/zu SSH-Sitzungen über Zmodem\n* Vollständige Unicode-Unterstützung, einschließlich Zeichen mit doppelter Breite\n* Kein Abbruch bei schnell ablaufenden Ausgaben\n* Richtiges Shell-Erlebnis unter Windows, einschließlich Tabulator-Vervollständigung (über Clink)\n* Integrierter verschlüsselter Container für SSH-Secrets und Konfiguration\n* SSH-, SFTP- und Telnet-Client verfügbar als [Web-App](https://tabby.sh/app) (auch [selbstgehostet](https://github.com/Eugeny/tabby-web)).\n\n# Inhaltsverzeichnis <!-- omit in toc -->\n\n- [Was Tabby ist und was nicht](#what-tabby-is-and-isnt)\n- [Terminal-Funktionen](#terminal-features)\n- [SSH Client](#ssh-client)\n- [Serielles Terminal](#serial-terminal)\n- [Portabel](#portable)\n- [Plugins](#plugins)\n- [Themen](#themes)\n- [Beitragen](#contributing)\n\n<a  name=\"about\"></a>\n\n# Was Tabby ist und was nicht\n\n**Tabby ist** eine Alternative zu Windows Standard-Terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app und iTerm\n\n**Tabby ist weder** eine neue Shell noch ein MinGW- oder Cygwin-Ersatz. Sie ist auch nicht gerade sparsam - wenn die RAM-Nutzung von Bedeutung ist, solltest Du [Conemu](https://conemu.github.io) oder [Alacritty](https://github.com/jwilm/alacritty) in Betracht ziehen.\n\n<a  name=\"terminal\"></a>\n\n# Terminal-Funktionen\n\n![](docs/readme-terminal.png)\n\n* Ein VT220-Terminal + verschiedene Erweiterungen\n* Mehrere verschachtelte, geteilte Fenster\n* Tabs auf jeder Seite des Fensters\n* Optional andockbares Fenster mit einem globalen Spawn-Hotkey (\"Quake-Konsole\")\n* Fortschrittserkennung\n* Benachrichtigung bei Prozessabschluss\n* Einfügen in Klammern, mehrzeilige Einfügewarnungen\n* Schriftart-Ligaturen\n* Benutzerdefinierte Shell-Profile\n* Optionales RMB-Einfügen und Kopieren bei Auswahl (PuTTY-Stil)\n\n<a  name=\"ssh\"></a>\n\n# SSH Client\n\n![](docs/readme-ssh.png)\n\n* SSH2-Client mit einem Verbindungsmanager\n* X11 und Portweiterleitung\n* Automatisches Jump-Host-Management\n* Agent-Weiterleitung (inkl. Pageant und Windows-eigenem OpenSSH-Agent)\n* Anmeldeskripte\n\n<a  name=\"serial\"></a>\n\n# Serielles Terminal\n\n* Gespeicherte Verbindungen\n* Unterstützung von Readline-Eingaben\n* Optionale hexadezimale Byte-für-Byte-Eingabe und Hexdump-Ausgabe\n* Newline-Konvertierung\n* Automatische Wiederverbindung\n\n<a  name=\"portable\"></a>\n\n# Portabel\n\nTabby läuft als portable Anwendung unter Windows, wenn Sie einen `data`-Ordner am selben Ort erstellen, an dem sich auch `Tabby.exe` befindet.\n\n<a  name=\"plugins\"></a>\n\n# Plugins\n\nPlugins und Themen können direkt aus der Ansicht \"Einstellungen\" in Tabby installiert werden.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - Verbindung zu Docker-Containern\n* [title-control](https://github.com/kbjr/terminus-title-control) - ermöglicht die Änderung des Titels der Terminal-Tabs durch Angabe eines Präfixes, Suffixes und/oder zu entfernender Strings\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - schnelles Senden von Befehlen an eine oder alle Terminal-Tabs\n* [save-output](https://github.com/Eugeny/tabby-save-output) - speichert Terminalausgaben in einer Datei\n* [sync-config](https://github.com/starxg/terminus-sync-config) - synchronisiert die Konfiguration mit Gist oder Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - ein Beispiel-Plugin, das einen die ganze Zeit nervt\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - ermöglicht das Erstellen eigener Workspace-Profile auf Basis der angegebenen Konfiguration\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - öffnet den Standard-Systembrowser mit einem Text, der aus dem Tabby Tab ausgewählt wurde\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - Öffnet ein SFTP-Tab für SSH-Verbindungen ähnlich wie SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - In-App-Web-Authentifizierungspopups (Hauptsächlich für die in-Browser-Authentifizierung von Warpgate entwickelt)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Leistungsstarke Model Context Protocol Server-Integration für Tabby, die sich nahtlos mit KI-Assistenten über MCP-Clients wie Cursor und Windsurf verbindet und Ihren Terminal-Workflow mit intelligenten KI-Funktionen verbessert.\n\n<a  name=\"themes\"></a>\n\n# Themen\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - ein von Hyper inspiriertes Thema\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - das entspannte Thema für Tabby\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Sponsoren <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) bietet kostenloses Debian/RPM-Repository-Hosting an\n\n<a  name=\"contributing\"></a>\n\n# Beitragen\n\nPull Requests und Plugins sind willkommen!\n\nSiehe [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) und [API docs](https://docs.tabby.sh/) für Informationen über den Aufbau des Projekts und ein sehr kurzes Tutorial zur Plugin-Entwicklung.\n\n---\n\n<a  name=\"contributors\"></a>\n\nDank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nDieses Projekt folgt der [all-contributors](https://github.com/all-contributors/all-contributors) Spezifikation. Beiträge jeglicher Art sind willkommen!\n"
  },
  {
    "path": "README.es-ES.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"Todas las revisiones en GitHub\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Descargas:\n\n* [Última versión](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositorios](https://packagecloud.io/eugeny/tabby): [Basado en Debian/Ubuntu](https://packagecloud.io/eugeny/tabby/install#bash-deb), [basado en RPM](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Última versión nocturna](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nEste fichero README está disponible en: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (anteriormente **Terminus**) es un emulador de terminal, SSH y cliente serie altamente configurable parar Windows, macOS y Linux\n\n* Cliente y gestor de conexiones SSH y Telnet integrados\n* Terminal serie integrado\n* Esquemas de colores y temas\n* Totalmente configurable con atajos y atajos múltiples\n* Paneles divididos\n* Recuerda tus pestañas\n* Soporte para PowerShell (y PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder y CMD\n* Transferencia de ficheros directa desde/a sesiones SSH via Zmodem\n* Soporte completo Unicode incluyendo caracteres dobles\n* No se bloquea con las salidas rápidas\n* Experiencia adecuada del shell en Windows, incluyendo la finalización de pestañas (via Clink)\n* Contenedor encriptado integrado para los secretos SSH y la configuración\n* Cliente SSH, SFTP y Telnet disponible como [aplicación web](https://tabby.sh/app) (incluso [auto-alojada](https://github.com/Eugeny/tabby-web)).\n\n# Contenidos <!-- omit in toc -->\n\n- [¿Qué es Tabby y que no es?](#what-tabby-is-and-isnt)\n- [Características de Terminal](#terminal-features)\n- [Cliente SSH](#ssh-client)\n- [Terminal Serie](#serial-terminal)\n- [Portable](#portable)\n- [Plugins](#plugins)\n- [Temas](#themes)\n- [Contribuciones](#contributing)\n\n<a name=\"about\"></a>\n\n# ¿Qué es Tabby y que no es?\n\n* **Tabby es** una alternativa al terminal estándar de Windows (cohost), PowerShell ISE, PuTTY, macOS Terminal.app e iTerm\n\n* **Tabby no es** un nuevo shell o un sustituto de MinGW o de Cygwin. Tampo es ligero - si el uso de RAM es importante, considera [Conemu](https://conemu.github.io) o [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Características de Terminal\n\n![](docs/readme-terminal.png)\n\n* Un terminal VT220 + varias extensiones\n* Múltiples paneles divididos anidados\n* Pestañas en cualquier lado de la ventana\n* Ventana acoplable opcional con una tecla de acceso directo global (\"consola de Quake\")\n* Detección del progreso\n* Notificación de la finalización del proceso\n* Pegar entre corchetes, avisos de pegar multilínea\n* Tipos de letra ligados\n* Perfiles personalizados en el shell\n* Opción de pegar y copiar al seleccionar RMB (estilo PuTTY)\n\n<a name=\"ssh\"></a>\n\n# Cliente SSH\n\n![](docs/readme-ssh.png)\n\n* Cliente SSH2 con gestor de conexiones\n* X11 y reenvío de puertos\n* Gestión de host de salto automático\n* Reenvío de agentes (incluido el agente de Pageant y el agente OpenSSH nativo de Windows)\n* Scripts de inicio de sesión\n\n<a name=\"serial\"></a>\n\n# Terminal Serie\n\n* Conexiones guardadas\n* Soporte de entrada de línea de lectura\n* Entrada hexagonal byte a byte y salida hexdump opcionales\n* Conversión de la nueva línea\n* Reconexión automática\n\n<a name=\"portable\"></a>\n\n# Portable\n\nTabby se ejecutará como una aplicación portátil en Windows, si crea una carpeta `data` en la misma ubicación donde se encuentra `Tabby.exe`.\n\n<a name=\"plugins\"></a>\n\n# Plugins\n\nLos plugins y los temas se pueden instalar directamente desde la vista de Configuración dentro de Tabby.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - conectarse a los contenedores Docker\n* [title-control](https://github.com/kbjr/terminus-title-control) - permite modificar el título de las pestañas de los terminales proporcionando un prefijo, un sufijo y/o cadenas a eliminar\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - enviar rápidamente comandos a una o a todas las pestañas del terminal\n* [save-output](https://github.com/Eugeny/tabby-save-output) - registrar la salida del terminal en un archivo\n* [sync-config](https://github.com/starxg/terminus-sync-config) - sincronizar la configuración con Gist o Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - un ejemplo de plugin que te molesta todo el tiempo\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite crear perfiles de espacio de trabajo personalizados basados en la configuración dada\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre el navegador del sistema por defecto con un texto seleccionado en la pestaña de Tabby's\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - abre una pestaña sftp para la conexión ssh como SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - Ventanas emergentes de autenticación web dentro de la app (Construidas principalmente para la autenticación en el navegador de warpgate)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Potente integración del servidor de Protocolo de Contexto de Modelo para Tabby que se conecta sin problemas con asistentes de IA a través de clientes MCP como Cursor y Windsurf, mejorando tu flujo de trabajo en terminal con capacidades inteligentes de IA.\n<a name=\"themes\"></a>\n\n# Temas\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - Tema inspirado en Hyper\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - El tema relajado para Tabby\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Patrocinadores <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) ha proporcionado alojamiento gratuito de repositorios Debian/RPM\n\n[![](https://user-images.githubusercontent.com/161476/193406404-1784f40c-eaba-44d0-af11-d8bd35517382.png)](https://keygen.sh/?via=eugene)\n\n[**keygen**](https://keygen.sh/?via=eugene) ha proporcionado alojamiento gratuito para la liberación y la actualización automática\n\n<a name=\"contributing\"></a>\n# Contribuciones\n\n¡Solicitudes de Pull y plugins son bienvenidas!\n\nMira [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) y [documentación API](https://docs.tabby.sh/) para obtener información sobre el diseño del proyecto y un breve tutorial de desarrollo de plugins.\n\n---\n<a name=\"contributors\"></a>\n\nGracias a estas maravillosas personas ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nEste proyecto sigue la especificación [all-contributors](https://github.com/all-contributors/all-contributors). ¡Las contribuciones de cualquier tipo son bienvenidas!.\n"
  },
  {
    "path": "README.id-ID.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Downloads:\n\n* [Rilis Terbaru](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nThis README is also available in: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (sebelumnya **Terminus**) adalah emulator terminal, SSH, dan klien serial yang sangat dapat dikonfigurasi untuk Windows, macOS, dan Linux\n\n* Integrasi SSH dan klien Telnet dan Koneksi Manager\n* Integrasi terminal serial\n* Tema dan skema warna\n* Pintasan yang dapat dikonfigurasi sepenuhnya dan pintasan multi-chord\n* Panel yang bisa dipisahkan\n* Mengingat tab anda\n* Mendukung PowerShell (dan PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder dan CMD\n* File transfer secara langsung dari/ke sesi SSH melalui Zmodem\n* Mendukung Unicode termasuk karakter double-width\n* Tidak tersendat dengan output yang tampil dengan cepat\n* Pengalaman shell yang tepat di Windows termasuk penyelesaian tab (melalui Clink)\n* Terintegrasi dengan wadah terenkripsi untuk rahasia dan konfigurasi SSH\n* SSH, SFTP dan klien Telnet tersedia sebagai [aplikasi web](https://tabby.sh/app) (dan juga [self-hosted](https://github.com/Eugeny/tabby-web)).\n\n# Contents <!-- omit in toc -->\n\n- [Apa itu Tabby dan bukan Tabby](#what-tabby-is-and-isnt)\n- [Fitur Terminal](#terminal-features)\n- [SSH Client](#ssh-client)\n- [Serial Terminal](#serial-terminal)\n- [Portabel](#portable)\n- [Plugins](#plugins)\n- [Tema](#themes)\n- [Kontribusi](#contributing)\n\n<a name=\"about\"></a>\n\n# Apa itu Tabby dan bukan Tabby\n\n* **Tabby adalah** sebuah alternatif untuk terminal standar Windows' (conhost), PowerShell ISE, PuTTY, macOS Terminal.app dan iTerm\n\n* **Tabby bukan** shell yang baru atau pengganti MinGW atau Cygwin. Dan bukan aplikasi ringan - jika mengutamakan penggunaan RAM, mungkin boleh mencoba [Conemu](https://conemu.github.io) atau [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Fitur terminal\n\n![](docs/readme-terminal.png)\n\n* Terminal VT220  + berbagai macam ekstensi\n* Beberapa pembagian panel\n* Tab di sisi mana pun dari jendela\n* Jendela dockable opsional dengan hotkey spawn global (\"Quake console\")\n* Deteksi Progres\n* Notifikasi saat proses telah selesai\n* Tempel tanda kurung, peringatan tempel multiline\n* Pengikat font\n* Kustom profil shell\n* Opsional tempel RMB dan copy-on select (PuTTY style)\n\n<a name=\"ssh\"></a>\n\n# Klien SSH\n\n![](docs/readme-ssh.png)\n\n* Klien SSH2 dengan manajemen koneksi\n* X11 dan port forwarding\n* Otomatis berpindah host management\n* Agent forwarding (termasuk Pageant dan Windows native OpenSSH Agent)\n* Login scripts\n\n<a name=\"serial\"></a>\n\n# Serial Terminal\n\n* Koneksi yang disimpan\n* Support Readline input\n* Opsional hex byte-by-byte input dan hexdump output\n* Konversi Newline\n* Rekoneksi secara otomatis\n\n<a name=\"portable\"></a>\n\n# Portabel\n\nTabby tetap bisa berjalan sebagai aplikasi portabel di Windows, jika anda membuat folder `data` di tempat yang sama dengan `Tabby.exe`.\n\n<a name=\"plugins\"></a>\n\n# Plugins\n\nTema dan Plugin bisa langsung di install dari Pengaturan di dalam Tabby.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - untuk koneksi ke Docker containers\n* [title-control](https://github.com/kbjr/terminus-title-control) - memperbolehkan untuk mengganti judul di tab terminal dengan menyediakan prefix, suffix, dan/atau strings untuk di buang\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - kirimkan perintah ke satu atau semua tab terminal dengan cepat\n* [save-output](https://github.com/Eugeny/tabby-save-output) - merekam output terminal ke suatu file\n* [sync-config](https://github.com/starxg/terminus-sync-config) - sinkronisasi konfigurasi ke Gist atau Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - suatu contoh plugin yang akan mengganggu anda setiap saat\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - memperbolehkan membuat kustom profil workspace dari konfigurasi yang diberikan\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - membuka browser default dengan text yang dipilih dari Tab Tabby\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - membuka tab sftp untuk koneksi ssh seperti SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - Pop-up otentikasi web di dalam aplikasi (Dibangun terutama untuk otentikasi in-browser warpgate)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Integrasi server Model Context Protocol yang kuat untuk Tabby yang terhubung secara mulus dengan asisten AI melalui klien MCP seperti Cursor dan Windsurf, meningkatkan alur kerja terminal Anda dengan kemampuan AI yang cerdas.\n<a name=\"themes\"></a>\n\n# Tema\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - inspirasi dari tema Hyper\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - Tabby, tapi lebih santuy\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Sponsors <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) telah menyediakan hosting gratis untuk Debian/RPM Repisitory\n\n<a name=\"contributing\"></a>\n# Kontribusi\n\nPull requests dan plugins dipersilahkan!\n\nLihat [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) dan [API docs](https://docs.tabby.sh/) untuk informasi lebih lajut tentang project ini, dan tutorial singkat untuk plugin.\n\n---\n<a name=\"contributors\"></a>\n\nTerima kasih kepada mereka yang telah membantu ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nProject ini mengikuti semua spesifikasi dari [all-contributors](https://github.com/all-contributors/all-contributors). Kontribusi akan sangat diterima!\n"
  },
  {
    "path": "README.it-IT.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Downloads:\n\n* [Ultima versione](https://github.com/Eugeny/tabby/releases/latest)\n* [Repository](https://packagecloud.io/eugeny/tabby): [Pacchetto Debian/Ubuntu](https://packagecloud.io/eugeny/tabby/install#bash-deb), [Pachetto RPM](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Ultima edizione nightly](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nQuesto README è disponibile anche in: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n\n----\n\n[**Tabby**](https://tabby.sh) (precedentemente **Terminus**) è un emulatore di terminale, SSH e client seriale altamente configurabile per Windows, macOS e Linux\n\n* Client SSH e Telnet integrato con gestore delle connessioni\n* Terminale seriale integrato\n* Temi e combinazioni di colori\n* Scorciatoie completamente configurabili e scorciatoie multi-tasto\n* Divisibile in pannelli\n* Ricorda le schede aperte\n* Supporto PowerShell (e PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder e CMD\n* Trasferimento file diretto da/a sessioni SSH tramite Zmodem\n* Pieno supporto Unicode inclusi caratteri a doppia larghezza\n* Non si blocca su output a flusso rapido\n* Proper shell experience on Windows including tab completion (via Clink)\n* Integrated encrypted container for SSH secrets and configuration\n* Esperienza shell studiaat per Windows incluso il completamento delle schede (tramite Clink)\n* Contenitore crittografato integrato per chiavi SSH e file di configurazione\n* Client SSH, SFTP e Telnet disponibile come [web app](https://tabby.sh/app) (anche [self-hosted](https://github.com/Eugeny/tabby-web)).\n\n# Contenuti <!-- omit in toc -->\n\n- [Cosa è e cosa non è Tabby](#cosa-è-e-cosa-non-è-tabby)\n- [Caratteristiche del Terminale](#caratteristiche-del-terminale)\n- [Client SSH](#client-ssh)\n- [Terminale Seriale](#terminale-seriale)\n- [Portabilità](#portabilità)\n- [Plugin](#plugin)\n- [Temi](#temi)\n- [Partecipazione](#partecipazione)\n\n<a name=\"about\"></a>\n\n# Cosa è e cosa non è Tabby\n\n* **Tabby è** un'alternativa al terminale standard di Windows (conhost), PowerShell ISE, PuTTY, macOS Terminal.app e iTerm\n\n* **Tabby non è** una nuova shell o un'alternativa a MinGW o Cygwin. Non è nemmeno leggero: se l'utilizzo della RAM è importante, considera [Conemu](https://conemu.github.io) o [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Caratteristiche del Terminale\n\n![](docs/readme-terminal.png)\n\n* Un terminale VT220 + vari estensioni\n* Suddivisione in pannelli\n* Schede su qualsiasi lato della finestra\n* Finestra agganciabile opzionale con un tasto di scelta rapida (\"Quake console\")\n* Rilevamento del progresso\n* Notifica al completamento del processo\n* Incolla tra parentesi e avvisi di incollaggio multilinea\n* Legature dei caratteri\n* Profili shell personalizzati\n* Incolla RMB e copia su selezione opzionale (in stile PuTTY)\n\n<a name=\"ssh\"></a>\n# Client SSH\n\n![](docs/readme-ssh.png)\n\n* Client SSH2 con un gestore di connessioni\n* X11 e port forwarding\n* Gestione automatica dell'host di salto\n* Inoltro dell'agente (incluso Pageant e l'agente OpenSSH nativo di Windows)\n* Script di accesso\n\n<a name=\"serial\"></a>\n# Terminale Seriale\n\n* Connessioni salvate\n* Supporto per l'input Readline\n* Input esadecimale byte per byte opzionale e output hexdump\n* Conversione nuova riga\n* Riconnessione automatica\n\n<a name=\"portable\"></a>\n# Portabilità\n\nTabby può essere eseguito come app portatile su Windows, se crei una cartella `data` nella stessa posizione in cui si trova `Tabby.exe`.\n\n<a name=\"plugins\"></a>\n# Plugin\n\nI plugin e i temi possono essere installati direttamente dalla vista Impostazioni all'interno di Tabby.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - connessione ai container Docker\n* [title-control](https://github.com/kbjr/terminus-title-control) - consente di modificare il titolo delle schede del terminale fornendo un prefisso, un suffisso e/o stringhe da rimuovere\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - invia rapidamente comandi a una o tutte le schede del terminale\n* [save-output](https://github.com/Eugeny/tabby-save-output) - registra l'output del terminale in un file\n* [sync-config](https://github.com/starxg/terminus-sync-config) - sincronizza la configurazione con Gist o Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - un esempio di plugin che ti infastidisce tutto il tempo\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - consente di creare profili di spazio di lavoro personalizzati basati sulla configurazione fornita\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - apre il browser di sistema predefinito con un testo selezionato dalla scheda di Tabby\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - apre una scheda SFTP per la connessione SSH come SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - Popup di autenticazione web in-app (costruito principalmente per l'autenticazione in-browser di Warpgate)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Potente integrazione del server Model Context Protocol per Tabby che si connette perfettamente con assistenti AI attraverso client MCP come Cursor e Windsurf, migliorando il tuo flusso di lavoro del terminale con capacità AI intelligenti.\n<a name=\"themes\"></a>\n# Temi\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - a Hyper inspired theme\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - the Relaxed theme for Tabby\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Sponsor <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) ha fornito gratuitamente un hosting per i repository Debian/RPM\n\n<a name=\"contributing\"></a>\n# Partecipazione\n\nRichieste pull e plugin sono i benvenuti!\n\nVedi [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) e la [documentazione API](https://docs.tabby.sh/) per informazioni su come è strutturato il progetto e un brevissimo tutorial sullo sviluppo dei plugin.\n\n---\n<a name=\"contributors\"></a>\n\nGrazie a queste persone meravigliose ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nQuesto progetto segue le specifiche [all-contributors](https://github.com/all-contributors/all-contributors). Contributi di qualsiasi genere sono ben accetti!\n"
  },
  {
    "path": "README.ja-JP.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n\n---\n\n\n> 👋 リモート環境の管理に困ってませんか？ [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。\n\n\n----\n\n### ダウンロード:\n\n* [最新のリリース](https://github.com/Eugeny/tabby/releases/latest)\n* [リポジトリ](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu向け](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM向け](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [最新の開発ビルド版](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nこのREADMEは次の言語でもご覧いただけます: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh)(旧**Terminus**)は、Windows、macOS、Linux向けの高度なカスタマイズに対応した端末エミュレータ、SSH、シリアルコンソールです\n\n* SSH、Telnetクライアントと接続マネージャーの統合\n* シリアルコンソールの統合\n* テーマと配色のカスタマイズ\n* 自由なショートカットのカスタマイズと複数キー入力にも対応\n* ペイン分割に対応\n* タブの保存機能\n* PowerShell（または PS Core）やWSL、Git-Bash、Cygwin、MSYS2、Cmder、CMDに対応\n* Zmodemを介したSSHセッションへの直接ファイル転送\n* 全角文字を含むUnicodeの完全対応\n* 大量の出力にも止まることはありません\n* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)\n* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載\n* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)としても利用できます ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)\n\n# コンテンツ <!-- omit in toc -->\n\n- [Tabbyとは](#tabbyとは)\n- [ターミナル機能](#ターミナル機能)\n- [SSHクライアント](#sshクライアント)\n- [シリアルコンソール](#シリアルコンソール)\n- [ポータブル機能](#ポータブル機能)\n- [プラグイン](#プラグイン)\n- [テーマ](#テーマ)\n- [コントリビュート](#コントリビュート)\n\n<a name=\"about\"></a>\n\n# Tabbyとは\n\n* **Tabbyは**Windows 標準のターミナル（conhost）、PowerShell ISE、PuTTY、macOSのTerminal.appおよびiTermの代替となるアプリケーションです。\n\n* **Tabby**は新しいシェル**でもなければ**、MinGWやCygwinの置き換え**でもありません**。また、軽量**でもありません**。RAMの使用量を重視するのではあれば、[Conemu](https://conemu.github.io)や[Alacritty](https://github.com/jwilm/alacritty)の利用をお勧めします。\n\n<a name=\"terminal\"></a>\n\n# ターミナル機能\n\n![](docs/readme-terminal.png)\n\n* VT220ターミナル＋各種拡張機能\n* 複数ネストされたペイン分割に対応\n* ウィンドウ内に自由に配置可能なタブ\n* グローバルホットキーで呼び出せるドックウィンドウ機能（\"Quakeコンソール\"）\n* 進行状況の検出\n* プロセス完了時の通知\n* ブラケットペーストや複数行のペーストの警告機能\n* 合字フォントの対応\n* シェルプロファイルの自由なカスタマイズ\n* RMBペーストと選択時の自動コピー機能（PuTTYスタイル）の対応\n\n<a name=\"ssh\"></a>\n\n# SSHクライアント\n\n![](docs/readme-ssh.png)\n\n* SSH2クライアントと接続マネージャー\n* X11とポートフォワーディング\n* 自動ジャンプサーバー管理\n* エージェント転送（PageantとWindows標準OpenSSHエージェントを含む）\n* ログインスクリプト\n\n<a name=\"serial\"></a>\n\n# シリアルコンソール\n\n* 接続の保存機能\n* 行単位入力の対応\n* 16進バイト入力および16進ダンプ出力の対応\n* 改行コードの変換\n* 自動再接続\n\n<a name=\"portable\"></a>\n\n# ポータブル機能\n\nWindows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。\n\n<a name=\"plugins\"></a>\n\n# プラグイン\n\nプラグインやテーマは、Tabby内の設定画面から直接インストールすることができます。\n\n* [docker](https://github.com/Eugeny/tabby-docker) - Dockerコンテナに接続することができます\n* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます\n* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます\n* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGiteeで設定ファイルを同期することができます\n* [clippy](https://github.com/Eugeny/tabby-clippy) - プラグインの作例として、いつも厄介なあいつが出てくるプラグイン\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを既定ブラウザで開くことができます。\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - SecureCRTのようにSSH接続のSFTPタブを開く\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - アプリ内ウェブ認証ポップアップ（主にwarpgateのブラウザ認証用に構築）\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - TabbyのためのパワフルなModel Context Protocolサーバー統合機能で、CursorやWindsurfなどのMCPクライアントを通じてAIアシスタントとシームレスに接続し、インテリジェントなAI機能によってターミナルワークフローを強化します。\n<a name=\"themes\"></a>\n\n# テーマ\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - Hyperをイメージしたテーマ\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - Tabby向けのRelaxedテーマ\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# スポンサー <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています\n\n[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)\n\n[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています\n\n<a name=\"contributing\"></a>\n# コントリビュート\n\nプルリクエストやプラグインは大歓迎です!\n\nプロジェクトの構成や、非常に簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)および、[API docs](https://docs.tabby.sh/)を参照してください。\n\n---\n<a name=\"contributors\"></a>\n\n以下の素晴らしい方々([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝いたします:\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nこのプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします！\n"
  },
  {
    "path": "README.ko-KR.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### 다운로드:\n\n* [Latest release](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nThis README is also available in: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n**Tabby** (구 **Terminus**)는 Windows, macOS 및 Linux용으로 뛰어난 구성의 터미널 에뮬레이터, SSH 및 시리얼 클라이언트입니다.\n\n* 통합 SSH 클라이언트 및 연결 관리자\n* 통합 시리얼 터미널\n* 테마 및 색 구성표\n* 전체 구성이 가능한 단축키 및 다중 코드 단축키\n* 창 분할\n* 이전 탭 사용을 기억\n* PowerShell (및 PS Core), WSL, Git-Bash, Cygwin, Cmder 및 CMD 지원\n* Zmodem을 통한 SSH 세션 간의 직접 파일 전송\n* 2바이트 문자를 포함한 전체 유니코드 지원\n* 빠르게 출력되는 것에 대해 휩쓸리지 않음\n* 탭 완성을 포함한 Windows에서의 적절한 셸 환경 (Clink을 통해)\n* SSH 시크릿 및 구성을 위한 통합 암호화 컨테이너\n\n# 목차 <!-- omit in toc -->\n\n- [Tabby는 무엇인가](#tabby는-무엇인가)\n- [터미널 기능](#터미널-기능)\n- [SSH 클라이언트](#ssh-클라이언트)\n- [시리얼 터미널](#시리얼-터미널)\n- [포터블](#포터블)\n- [플러그인](#플러그인)\n- [테마](#테마)\n- [기여](#기여)\n\n<a name=\"about\"></a>\n\n# Tabby는 무엇인가\n\n* **Tabby는** Windows의 표준 터미널 (conhost), PowerShell ISE, PuTTY 또는 iTerm의 대안 프로그램입니다.\n\n* **Tabby는** 새로운 셸이나 MinGW 또는 Cygwin을 대체하지 **않습니다**. 가볍지도 않습니다. - RAM 사용량이 중요한 경우, [Conemu](https://conemu.github.io) 또는 [Alacritty](https://github.com/jwilm/alacritty)를 고려하십시오.\n\n<a name=\"terminal\"></a>\n\n# 터미널 기능\n\n![](docs/readme-terminal.png)\n\n* A VT220 터미널 + 다양한 확장\n* 여러 개의 분할 창 중첩\n* 모든 측면에 탭이 위치함\n* 전역 스폰 단축키가 있는 도킹 가능한 윈도우 (\"Quake console\")\n* 진행률 탐지\n* 프로세스 완료 시 알림\n* 괄호 붙여넣기, 여러 줄 붙여넣기 경고\n* 폰트 합자(ligatures)\n* 커스텀 셸 프로필\n* RMB 붙여넣기 및 복사 선택 옵션 (PuTTY 스타일)\n\n<a name=\"ssh\"></a>\n# SSH 클라이언트\n\n![](docs/readme-ssh.png)\n\n* 연결 관리자가 있는 SSH2 클라이언트\n* X11 및 포트 포워딩\n* 자동 jump 호스트 관리\n* 에이전트 전달 (Pageant 및 Windows 기본 OpenSSH 에이전트 포함)\n* 로그인 스크립트\n\n<a name=\"serial\"></a>\n# 시리얼 터미널\n\n* 연결 저장\n* Readline 입력 지원\n* 선택적 hex byte별 입력 및 hexdump 출력\n* 개행 변환\n* 자동 재접속\n\n<a name=\"portable\"></a>\n# 포터블\n\n`Tabby.exe`가 있는 동일한 위치에 `data` 폴더를 생성하면 Windows에서 Tabby가 포터블 앱으로 실행됩니다.\n\n<a name=\"plugins\"></a>\n# 플러그인\n\n플러그인과 테마는 Tabby 내부의 설정에서 직접 설치할 수 있습니다.\n\n* [clickable-links](https://github.com/Eugeny/tabby-clickable-links) - 터미널의 경로 및 URL을 클릭 가능하게\n* [docker](https://github.com/Eugeny/tabby-docker) - Docker 컨테이너에 연결\n* [title-control](https://github.com/kbjr/terminus-title-control) - 접두사, 접미사 및/또는 문자열 제거를 제공하여 터미널 탭의 제목을 수정\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 하나 또는 모든 터미널 탭에 신속한 명령 전송\n* [save-output](https://github.com/Eugeny/tabby-save-output) - 터미널 출력을 파일에 기록\n* [sync-config](https://github.com/starxg/terminus-sync-config) - 구성을 Gist 또는 Gitee에 동기화\n* [clippy](https://github.com/Eugeny/tabby-clippy) - 항상 당신을 귀찮게 하는 예제 플러그인\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 주어진 구성을 기반으로 사용자 정의 작업 공간 프로필을 생성할 수 있습니다\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby의 탭에서 선택한 텍스트로 기본 시스템 브라우저를 엽니다\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - SecureCRT와 유사하게 SSH 연결에 대한 SFTP 탭을 엽니다.\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - 앱 내 웹 인증 팝업 (주로 warpgate 브라우저 인증을 위해 구축)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Cursor 및 Windsurf와 같은 MCP 클라이언트를 통해 AI 어시스턴트와 원활하게 연결되는 Tabby용 강력한 모델 컨텍스트 프로토콜 서버 통합으로, 지능형 AI 기능으로 터미널 워크플로우를 향상시킵니다.\n<a name=\"themes\"></a>\n# 테마\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - Hyper에서 영감을 받은 테마\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - Tabby를 위해 여유로움을 제공하는 테마\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# 스폰서 <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io)가 무료 Debian/RPM 저장소 호스팅을 제공하였습니다.\n\n<a name=\"contributing\"></a>\n# 기여\n\nPull requests and plugins are welcome!\n\n프로젝트 배치 방법에 대한 자세한 내용과 매우 간단한 플러그인 개발 튜토리얼은 [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) 및 [API docs](https://docs.tabby.sh/)를 참조하십시오.\n\n---\n<a name=\"contributors\"></a>\n\n여기 있는 멋진 사람들에게 진심으로 감사합니다. ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\n이 프로젝트는 [모든 기여자](https://github.com/all-contributors/all-contributors)의 규격을 따릅니다. 어떠한 종류의 기여도 모두 환영합니다!\n\n<img src=\"https://ga-beacon.appspot.com/UA-3278102-18/github/readme\" width=\"1\"/>\n"
  },
  {
    "path": "README.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://discord.gg/Vn7BjmzhtF\"><img alt=\"Discord\" src=\"https://img.shields.io/discord/1280890060195233934?style=for-the-badge&color=blue&logo=discord&logoColor=white&label=Discord\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n---\n\n\n> 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it.\n\n----\n\n### Downloads:\n\n* [Latest release](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nThis README is also available in: <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows 10, macOS and Linux\n\n* Integrated SSH and Telnet client and connection manager\n* Integrated serial terminal\n* Theming and color schemes\n* Fully configurable shortcuts and multi-chord shortcuts\n* Split panes\n* Remembers your tabs\n* PowerShell (and PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder and CMD support\n* Direct file transfer from/to SSH sessions via Zmodem\n* Full Unicode support including double-width characters\n* Doesn't choke on fast-flowing outputs\n* Proper shell experience on Windows including tab completion (via Clink)\n* Integrated encrypted container for SSH secrets and configuration\n* SSH, SFTP and Telnet client available as a [web app](https://tabby.sh/app) (also [self-hosted](https://github.com/Eugeny/tabby-web)).\n\n# Contents <!-- omit in toc -->\n\n- [What Tabby is and isn't](#what-tabby-is-and-isnt)\n- [Terminal features](#terminal-features)\n- [SSH Client](#ssh-client)\n- [Serial Terminal](#serial-terminal)\n- [Portable](#portable)\n- [Plugins](#plugins)\n- [Themes](#themes)\n- [Contributing](#contributing)\n\n<a name=\"about\"></a>\n\n# What Tabby is and isn't\n\n* **Tabby is** an alternative to Windows' standard terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app and iTerm\n\n* **Tabby is not** a new shell or a MinGW or Cygwin replacement. Neither is it lightweight - if RAM usage is of importance, consider [Conemu](https://conemu.github.io) or [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Terminal features\n\n![](docs/readme-terminal.png)\n\n* A VT220 terminal + various extensions\n* Multiple nested split panes\n* Tabs on any side of the window\n* Optional dockable window with a global spawn hotkey (\"Quake console\")\n* Progress detection\n* Notification on process completion\n* Bracketed paste, multiline paste warnings\n* Font ligatures\n* Custom shell profiles\n* Optional RMB paste and copy-on select (PuTTY style)\n\n<a name=\"ssh\"></a>\n\n# SSH Client\n\n![](docs/readme-ssh.png)\n\n* SSH2 client with a connection manager\n* X11 and port forwarding\n* Automatic jump host management\n* Agent forwarding (incl. Pageant and Windows native OpenSSH Agent)\n* Login scripts\n\n<a name=\"serial\"></a>\n\n# Serial Terminal\n\n* Saved connections\n* Readline input support\n* Optional hex byte-by-byte input and hexdump output\n* Newline conversion\n* Automatic reconnection\n\n<a name=\"portable\"></a>\n\n# Portable\n\nTabby will run as a portable app on Windows, if you create a `data` folder in the same location where `Tabby.exe` lives.\n\n<a name=\"plugins\"></a>\n\n# Plugins\n\nPlugins and themes can be installed directly from the Settings view inside Tabby.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - connect to Docker containers\n* [title-control](https://github.com/kbjr/terminus-title-control) - allows modifying the title of the terminal tabs by providing a prefix, suffix, and/or strings to be removed\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - quickly send commands to one or all terminal tabs\n* [save-output](https://github.com/Eugeny/tabby-save-output) - record terminal output into a file\n* [sync-config](https://github.com/starxg/terminus-sync-config) - sync the config to Gist or Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - an example plugin which annoys you all the time\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - allows creating custom workspace profiles based on the given config\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - opens default system browser with a text selected from the Tabby's tab\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT\n* [background](https://github.com/moemoechu/tabby-background) - change Tabby background image and more...\n* [highlight](https://github.com/moemoechu/tabby-highlight) - Tabby terminal keyword highlight plugin\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - In-app web authentication popups (Built primarily for warpgate in-browser auth)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Powerful Model Context Protocol server integration for Tabby that seamlessly connects with AI assistants through MCP clients like Cursor and Windsurf, enhancing your terminal workflow with intelligent AI capabilities.\n\n<a name=\"themes\"></a>\n\n# Themes\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - a Hyper inspired theme\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - the Relaxed theme for Tabby\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n* [catppuccin](https://github.com/catppuccin/tabby) - Soothing pastel theme for Tabby\n* [noctis](https://github.com/aaronhuggins/tabby-colors-noctis) - color themes inspired by Noctis VS Code theme\n\n# Sponsors <!-- omit in toc -->\n\n<a href=\"https://packagecloud.io\"><img src=\"https://assets-production.packagecloud.io/assets/logo_v1-d5895e7b89b2dee19030e85515fd0f91d8f3b37c82d218a6531fc89c2b1b613c.png\" width=\"200\"></a>\n\n[**packagecloud**](https://packagecloud.io) has provided free Debian/RPM repository hosting\n\n[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)\n\n[**keygen**](https://keygen.sh/?via=eugene) has provided free release & auto-update hosting\n\n<a href=\"https://iqhive.com/\"><img src=\"https://iqhive.com/img/icons/logo.svg\" width=\"200\"></a>\n\n[**IQ Hive**](https://iqhive.com) is providing financial support for the project development\n\n\n<a name=\"contributing\"></a>\n# Contributing\n\nPull requests and plugins are welcome!\n\nSee [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) and [API docs](https://docs.tabby.sh/) for information of how the project is laid out, and a very brief plugin development tutorial.\n\n---\n<a name=\"contributors\"></a>\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind are welcome!\n"
  },
  {
    "path": "README.pl-PL.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"Wszystkie wydania na GitHubie\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=POBRANIA&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Przetłumacz\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n---\n\n\n> 👋 Zarządzasz zdalnymi środowiskami? Rzuć okiem na [WarpGate, inteligentny serwer typu bastion SSH/HTTP/MySQL](https://github.com/warp-tech/warpgate), świetnie współdziała z Tabby, pokochasz go!\n\n> 👋 [Tabby-Web](https://github.com/Eugeny/tabby-web) poszukuje sponsorów. Nie jestem w stanie pokryć kosztów hostowania całej infrastruktury, jeśli jesteś zainteresowany wsparciem, proszę [skontakuj się ze mną!](https://twitter.com/eugeeeeny)\n\n\n----\n\n### Pobieranie:\n\n* [Ostatnie wydania](https://github.com/Eugeny/tabby/releases/latest)\n* [Repozytoria](https://packagecloud.io/eugeny/tabby): [Systemy Debian/Ubuntu](https://packagecloud.io/eugeny/tabby/install#bash-deb), [Środowiska RPM](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Ostatnie wydania developerskie](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nTen plik README jest również dostępny w językach: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">🇧🇷 Português</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (formalnie **Terminus**) to wysoce konfigurowalny emulator konsoli, SSH oraz klienta konsoli szeregowej na systemy Windows 10, macOS oraz Linux\n\n* Zintegrowany klient SSH i Telnet oraz menedżer sesji\n* Zintegrowany klient terminala szeregowego\n* Motywy and palety kolorów\n* W pełni konfigurowalne skróty klawiszowe\n* Dzielenie ekranu\n* Zapamiętywanie okien z poprzednich sesji\n* PowerShell (oraz PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder i wsparcie dla CMD\n* Bezpośredni transfer plików sesji SSH przez Zmodem\n* Pełne wsparcie dla znaków Unicode wraz z podwójnymi znakami\n* Nie zawieszanie się przy szybko wyświetlanych wynikach\n* Pełne doświadczenie powłoki na systemie Windows zawierającej podpowiedzi (przez Clink)\n* Zintegrowany zaszyfrowany kontener na klucze SSH i jego konfigurację\n* Klient SSH, SFTP oraz Telnet dostępny jako [aplikacja webowa](https://tabby.sh/app) (również jako [własna instacja](https://github.com/Eugeny/tabby-web)).\n\n# Spis treści <!-- omit in toc -->\n\n- [Czym jest, a czym nie jest Tabby](#what-tabby-is-and-isnt)\n- [Funkcje konsoli](#terminal-features)\n- [Klient SSH](#ssh-client)\n- [Konsola szeregowa](#serial-terminal)\n- [Wersja przenośna](#portable)\n- [Wtyczki](#plugins)\n- [Motywy i palety kolorów](#themes)\n- [Współtworzenie](#contributing)\n\n<a name=\"about\"></a>\n\n# Czym jest, a czym nie jest Tabby\n\n* **Tabby jest** alternatywą dla standardowej konsoli Windows (conhost), PowerShell ISE, PuTTY, Terminal.app oraz iTerm z macOS\n\n* **Tabby nie jest** nową powłoką lub zamiennikiem dla MinGW czy Cygwin. Nie jest również zatrważająco szybki - jeśli ważne jest dla Ciebie użycie pamięci RAM, rozważ użycie [Conemu](https://conemu.github.io) lub [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Funkcje konsoli\n\n![](docs/readme-terminal.png)\n\n* Konsola VT220 + wiele rozszerzeń\n* Wiele nakładających się podzielonych okien\n* Okna na każdej stronie ekranu\n* Opcjonalne dokowanie okna za pomocą skrótu (\"Quake console\")\n* Wykrywanie postępu (Pasek)\n* Powiadomienia przy ukończeniu procesu podczas postępu\n* Wklejanie z nawiasami, ostrzeżenie przy wielu liniach\n* Wsparcie różnych czcionek\n* Niestandardowe profile powłoki\n* Opcjonalne wklejanie PPM oraz kopiowanie na zaznaczeniu (Styl PuTTY)\n\n<a name=\"ssh\"></a>\n\n# Klient SSH\n\n![](docs/readme-ssh.png)\n\n* Klient SSH2 z zarządzaniem połączeń\n* X11 oraz przekierowywanie portów\n* Automatyczne przejście między hostami\n* Przekierowanie agenta (Pageant oraz Windowsowy natywny \"OpenSSH Agent\")\n* Skrypty logowania\n\n<a name=\"serial\"></a>\n\n# Konsola Szeregowa\n\n* Zapisane połączenia\n* Wczytywanie danych wejścia linii\n* Opcjonalna konwersja danych wejścia i wyjścia na szesnastkowe \"byte-by-byte\"\n* Konwersja na nową linię\n* Automatyczne połączenie po rozłączeniu\n\n<a name=\"portable\"></a>\n\n# Wersja przenośna\n\nTabby będzie uruchamiał się jako aplikacja przenośna, tylko wtedy, kiedy utworzysz folder `data` w tej samej lokacji, w której znajduje się `Tabby.exe`.\n\n<a name=\"plugins\"></a>\n\n# Wtyczki\n\nWtyczki (jak i motywy) mogą być instalowane bezpośrednio z widoku ustawień w środku aplikacji Tabby.\n\n* [docker](https://github.com/Eugeny/tabby-docker) - połączenie z kontenerami Docker\n* [title-control](https://github.com/kbjr/terminus-title-control) - pozwala na zmienianie tytułu konsoli jako prefiks, sufiks lub/albo tekst do usunięcia\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - szybko wysyłaj komendy z jednej konsoli do wielu\n* [save-output](https://github.com/Eugeny/tabby-save-output) - zapisuj dane wyjściowe do pliku\n* [sync-config](https://github.com/starxg/terminus-sync-config) - synchronizuj konfigurację przez Gista lub Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - przykładowa wtyczka, która zwyczajnie denerwuje\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - pozwala na utworzenie niestandardowego profilu pracy w aplikacji odpowiednio do konfiguracji\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - otwiera domyślną przeglądarkę z zaznaczonym tekstem w oknie Tabby\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - otwiera okno z połączeniem SFTP dla połączeń SSH jak SecureCRT\n* [background](https://github.com/moemoechu/tabby-background) - zmień tło Tabby oraz wiele więcej\n* [highlight](https://github.com/moemoechu/tabby-highlight) - Tabby terminal keyword highlight plugin\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - okienka autoryzacji wewnątrz konsoli (Zbudowany głównie pod autoryzację projektu Warpgate w przeglądarce)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Potężna integracja serwera Model Context Protocol dla Tabby, która bezproblemowo łączy się z asystentami AI poprzez klientów MCP, takich jak Cursor i Windsurf, usprawniając przepływ pracy w terminalu dzięki inteligentnym możliwościom AI.\n\n<a name=\"themes\"></a>\n\n# Motywy i palety kolorów\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - Motyw zainspirowany konsolą \"Hyper\"\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - Motyw \"pełnej relaksacji\"\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox) - Motyw zainspirowany konsolą \"Hyper\" (kolejny)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10) - Motyw zainspirowany Microsoftem\n* [altair](https://github.com/yxuko/terminus-altair) - Motwy autorstwa Yacine Kanzari\n* [catppuccin](https://github.com/catppuccin/tabby) - Paleta pastelowa dla Tabby\n* [noctis](https://github.com/aaronhuggins/tabby-colors-noctis) - Paleta kolorów zainspirowana motywem Noctis z VS Code\n\n# Sponsorzy <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) zapewnia darmowe utrzymanie repozytorium Debian/RPM\n\n[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)\n\n[**keygen**](https://keygen.sh/?via=eugene) zapewnia darmowe wydawanie oraz automatycznie utrzymywanie strony\n\n<a name=\"contributing\"></a>\n# Współtworzenie\n\nPull requesty and dodawanie nowych wtyczek jest mile widziane!\n\nZobacz plik [HAKOWANIE.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) oraz [Dokumentację API](https://docs.tabby.sh/), aby poznać, jak projekt jest prowadzony wraz ze wstępnym poradnikiem jak tworzyć wtyczki.\n\n---\n<a name=\"contributors\"></a>\n\nDziękujemy wszystkim osobom współtworzącym ten projekt ([emotki są specjalizacją](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nTen projekt podlega specyfikacji [dla współautorów](https://github.com/all-contributors/all-contributors). Wszelkiego rodzaju przyczynianie się do rozwoju jest tu mile widziane!\n"
  },
  {
    "path": "README.pt-BR.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Downloads:\n\n* [Última versão](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositórios](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Última compilação nightly](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nEsse README também está disponível em: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (anteriormente **Terminus**) é um emulador de terminal, SSH e serial client altamente configurável para Windows, macOS e Linux.\n\n* Cliente e gerenciador de conexões SSH e Telnet integrado\n* Terminal serial integrado\n* Temas e esquemas de cores\n* Atalhos e atalhos multiplos totalmente configuravéis\n* Divisor de painéis\n* Recupera as guias da ultima execução\n* Suporte para PowerShell (e PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder e CMD\n* Transferência direta de arquivos de/para sessões SSH via Zmodem\n* Suporte total para Unicode, incluindo caracteres de largura dupla\n* Não trava com saídas de fluxo rápido\n* Experiência de shell adequada no Windows, incluindo preenchimento de guia (via Clink)\n* Contêiner criptografado integrado para as chaves SSH e configurações\n* SSH, SFTP e Cliente Telnet disponível como [aplicação web](https://tabby.sh/app) (também em [hospedagem local](https://github.com/Eugeny/tabby-web)).\n\n# Conteúdo <!-- omit in toc -->\n\n- [O que é Tabby e o que não é](#what-tabby-is-and-isnt)\n- [Recursos do Terminal](#terminal-features)\n- [Cliente SSH](#ssh-client)\n- [Terminal Serial](#serial-terminal)\n- [Portátil](#portable)\n- [Plugins](#plugins)\n- [Temas](#themes)\n- [Contribuições](#contributing)\n\n<a name=\"about\"></a>\n\n# O que é Tabby e o que não é\n\n* **Tabby é** uma alternativa ao terminal padrão do Windows (conhost), PowerShell ISE, PuTTY, macOS Terminal.app e iTerm\n\n* **Tabby não é** um novo shell ou um substituto do MinGW ou Cygwin. Também não é leve - se o uso de RAM for importante, considere usar o [Conemu](https://conemu.github.io) ou [Alacritty](https://github.com/jwilm/alacritty)\n\n<a name=\"terminal\"></a>\n\n# Recursos do Terminal\n\n![](docs/readme-terminal.png)\n\n* Um terminal VT220 + várias extensões\n* Múltiplos painéis divididos aninhados\n* Guias em qualquer lado da janela\n* Opção de minimizar para a barra de tarefas com uma tecla de atalho global (\"Quake console\")\n* Detecção de progresso\n* Notificação da conclusão do processo\n* Colar entre colchetes, avisos de colagem de várias linhas\n* Ligadura tipográfica\n* Perfis shell personalizados\n* Opção de selecionar para copiar e colar com o botão direto do mouse (RMB) igual ao Putty\n\n<a name=\"ssh\"></a>\n\n# Cliente SSH\n\n![](docs/readme-ssh.png)\n\n* Cliente SSH2 com gerenciador de conexões\n* X11 e redirecionamento de portas (port forwarding)\n* Gerenciamento de host de saldo automatico (Jump Host)\n* Encaminhamento de agente (incl. Pageant e agente OpenSSH nativo do Windows)\n* Scripts de Login\n\n<a name=\"serial\"></a>\n\n# Terminal Serial\n\n* Salva as Conexões\n* Suporte de entrada de linha\n* Opões de saida em hex, byte a byte e hexdump\n* Conversão de nova linha\n* Reconexão automatica\n\n<a name=\"portable\"></a>\n\n# Portátil\n\nTabby será executado como um aplicativo portátil no Windows, se você criar uma pasta chamada 'data' no mesmo local do executável 'Tabby.exe'\n\n<a name=\"plugins\"></a>\n\n# Plugins\n\nPlugins e temas podem ser instalados durante a execução na pagina de configurações > plugins\n\n* [docker](https://github.com/Eugeny/tabby-docker) - conecta aos conteiners Docker\n* [title-control](https://github.com/kbjr/terminus-title-control) - permite modificar o título das guias do terminal fornecendo um prefixo, sufixo e/ou strings a serem removidos\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - envie comandos rapidamente para uma ou todas as guias do terminal\n* [save-output](https://github.com/Eugeny/tabby-save-output) - gravar a saída do terminal em um arquivo\n* [sync-config](https://github.com/starxg/terminus-sync-config) - sincronizar a configuração com Gist ou Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - um plugin de exemplo que te incomoda o tempo todo\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite criar perfis de espaço de trabalho personalizados com base na configuração fornecida\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre o navegador padrão do sistema com um texto selecionado na guia do Tabby\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - abre uma guia SFTP para conexão SSH como o SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - pop-ups de autenticação web dentro do aplicativo (Construído principalmente para autenticação in-browser do warpgate)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Integração poderosa do servidor Model Context Protocol para Tabby que se conecta perfeitamente com assistentes de IA através de clientes MCP como Cursor e Windsurf, aprimorando seu fluxo de trabalho no terminal com recursos inteligentes de IA.\n<a name=\"themes\"></a>\n\n# Temas\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype)\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus)\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Patrocinadores <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) forneceu hospedagem gratuita de repositório Debian/RPM\n\n[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)\n\n[**keygen**](https://keygen.sh/?via=eugene) forneceu hospedagem gratuita para liberação e atualização automática\n\n<a name=\"contributing\"></a>\n# Contribuições\n\nPull requests e plugins são bem-vindos!\n\nConsulte os documentos [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) e [API docs](https://docs.tabby.sh/) para obter informações sobre como o projeto foi estruturado e um breve tutorial de desenvolvimento de plug-in.\n\n---\n<a name=\"contributors\"></a>\n\nObrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nEste projeto segue a especificação [all-contributors](https://github.com/all-contributors/all-contributors). Contribuições de qualquer tipo são bem vindas!\n"
  },
  {
    "path": "README.ru-RU.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### Загрузки:\n\n* [Последняя версия](https://github.com/Eugeny/tabby/releases/latest)\n* [Репозитории](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Последний nightly-билд](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\nЭтот README также доступен на: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.zh-CN.md\">:cn: 简体中文</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (ранее **Terminus**) — широко конфигурируемый эмулятор терминала, SSH- и COM-клиент для Windows, macOS и Linux:\n\n* Встроенный SSH- и Telnet-клиент и менеджер подключений;\n* Встроенный последовательный терминал;\n* Темы и цветовые схемы;\n* Полностью настраиваемые сочетания клавиш;\n* Панели;\n* Запоминание вкладок;\n* Поддержка PowerShell (and PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder и CMD;\n* Прямая передача файлов из и в SSH-сессии через Zmodem;\n* Полная поддержка Unicode, включая символы двойной ширины;\n* Не задыхается при быстром выводе;\n* Полноценный опыт работы с shell на Windows, включая дополнение слов и команд по Tab (при помощи Clink);\n* Встроенное защищённое хранилище для SSH-ключей и настроек;\n* SSH-, SFTP- и Telnet-клиент доступен как [веб-приложение](https://tabby.sh/app) (также для [самостоятелньного хостинга](https://github.com/Eugeny/tabby-web)).\n\n# Содержание <!-- omit in toc -->\n\n- [Правда и ложь про Tabby](#правда-и-ложь-про-tabby)\n- [Функции терминала](#функции-терминала)\n- [SSH-клиент](#ssh-клиент)\n- [Терминал последовательного порта](#терминал-последовательного-порта)\n- [Портативность](#портативность)\n- [Плагины](#плагины)\n- [Темы](#темы)\n- [Внести свой вклад](#внести-свой-вклад)\n\n<a name=\"about\"></a>\n\n# Правда и ложь про Tabby\n\n* **Правда:** Tabby — это альтернатива стандартному терминалу Windows (conhost), PowerShell ISE, PuTTY, macOS Terminal.app и iTerm.\n\n* **Ложь:** Tabby — это не новая оболочка или замена MinGW или Cygwin. Также он нелёгок — если потребление ОЗУ крайне важно для вас, лучше взгляните на [Conemu](https://conemu.github.io) или [Alacritty](https://github.com/jwilm/alacritty).\n\n<a name=\"terminal\"></a>\n\n# Функции терминала\n\n![](docs/readme-terminal.png)\n\n* Терминал VT220 + различные дополнения;\n* Деление окна на несколько панелей;\n* Вкладки на любой стороне окна;\n* Опционально закрепляемое окно с глобальной горячей клавишей для вызова («Quake console»);\n* Определение прогресса выполняемого процесса;\n* Уведомления о завершении процессов;\n* Защита от выполнения команд при вставке, предупреждения о вставке нескольких строк;\n* Лигатуры шрифтов;\n* Пользовательские профили оболочки;\n* Опциональная ПКМ-вставка и копирование при выделении (в стиле PuTTY).\n\n<a name=\"ssh\"></a>\n# SSH-клиент\n\n![](docs/readme-ssh.png)\n\n* SSH2-клиент с менеджером соединений;\n* Проброс портов и X11;\n* Управление автоматическими джамп-хостами;\n* Проброс агента (включая Pageant и встроеный в Windows OpenSSH Agent);\n* Скрипты для входа.\n\n<a name=\"serial\"></a>\n# Терминал последовательного порта\n\n* Сохранение соединений;\n* Поддержка ввода readline;\n* Опциональный побатный ввод HEX и вывод hexdump;\n* Преобразование newline;\n* Автоматическое восстановление соединения.\n\n<a name=\"portable\"></a>\n# Портативность\n\nНа Windows Tabby будет работать в портативном режиме, если создать папку `data` там же, где расположен файл `Tabby.exe`.\n\n<a name=\"plugins\"></a>\n# Плагины\n\nПлагины и темы можно установить напрямую из Настроек Tabby.\n\n* [clickable-links](https://github.com/Eugeny/tabby-clickable-links) — делает пути и URL в терминале гиперссылками;\n* [docker](https://github.com/Eugeny/tabby-docker) — подключения к Docker-контейнерам;\n* [title-control](https://github.com/kbjr/terminus-title-control) — позволяет изменять названия вкладок, добавляя префиксы, суффиксы и позволяя удалять строки;\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) — быстро передаёт команды в одну или все вкладки терминала;\n* [save-output](https://github.com/Eugeny/tabby-save-output) — запись вывода терминала в файл;\n* [sync-config](https://github.com/starxg/terminus-sync-config) — синхронизация конфига в Gist или Gitee;\n* [clippy](https://github.com/Eugeny/tabby-clippy) — плагин-пример, который постоянно будет вас бесить;\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) — позволяет создавать пользовательские профили рабочего окружения на основе конфига;\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) — открывает браузер по умолчанию с текстом, выделенном во вкладке Tabby.\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - открывает sftp вкладку для ssh соединения, похож на SecureCRT\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - Встроенные всплывающие окна веб-аутентификации (Основано в основном для аутентификации в браузере warpgate)\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - Мощная интеграция сервера протокола Model Context Protocol для Tabby, которая беспрепятственно соединяется с ИИ-ассистентами через MCP-клиенты, такие как Cursor и Windsurf, улучшая рабочий процесс в терминале с помощью интеллектуальных возможностей искусственного интеллекта.\n<a name=\"themes\"></a>\n# Темы\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) — тема, вдохновлённая Hyper;\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) — тема Relaxed для Tabby;\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox);\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10);\n* [altair](https://github.com/yxuko/terminus-altair).\n\n# Спонсоры <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) предоставил бесплатный хостинг для Debian/RPM репозитория.\n\n<a name=\"contributing\"></a>\n# Внести свой вклад\n\nPull-запросы и плагины приветствуются!\n\nВзгляните на [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) и [API docs](https://docs.tabby.sh/), чтобы понять, как устроен проект, и ради очень краткого туториала по созданию плагинов.\n\n---\n<a name=\"contributors\"></a>\n\nОгромное спасибо этим прекрасным людям ([описание эмодзи](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nДанный проект следует заветам [all-contributors](https://github.com/all-contributors/all-contributors). Любые созидатели приветствуются!\n\n<img src=\"https://ga-beacon.appspot.com/UA-3278102-18/github/readme\" width=\"1\"/>\n"
  },
  {
    "path": "README.zh-CN.md",
    "content": "[![](docs/readme.png)](https://tabby.sh)\n\n\n<p align=\"center\">\n  <a href=\"https://github.com/Eugeny/tabby/releases/latest\"><img alt=\"GitHub All Releases\" src=\"https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge\"></a> &nbsp; <a href=\"https://nightly.link/Eugeny/tabby/workflows/build/master\"><img src=\"https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge\"/></a> &nbsp; <a href=\"https://matrix.to/#/#tabby-general:matrix.org\"><img alt=\"Matrix\" src=\"https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta\"></a> &nbsp <a href=\"https://translate.tabby.sh/\"><img alt=\"Translate\" src=\"https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff\"></a> &nbsp; <a href=\"https://twitter.com/eugeeeeny\"><img alt=\"Twitter\" src=\"https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://ko-fi.com/J3J8KWTF\">\n    <img src=\"https://cdn.ko-fi.com/cdn/kofi3.png?v=2\" width=\"150\">\n  </a>\n</p>\n\n----\n\n### 下载\n\n* [Latest release](https://github.com/Eugeny/tabby/releases/latest)\n* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)\n* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)\n\n<br/>\n<p align=\"center\">\n本 README 还适用于以下语言: <a  href=\"./README.md\">:gb: English</a> · <a  href=\"./README.es-ES.md\">:es: Spanish</a> · <a  href=\"./README.ru-RU.md\">:ru: Русский</a> · <a  href=\"./README.ko-KR.md\">:kr: 한국어</a> · <a  href=\"./README.it-IT.md\">:it: Italiano</a> · <a href=\"./README.de-DE.md\">:de: Deutsch</a> · <a href=\"./README.ja-JP.md\">:jp: 日本語</a> · <a href=\"./README.id-ID.md\">:id: Bahasa Indonesia</a> · <a href=\"./README.pt-BR.md\">:brazil: Português</a> · <a href=\"./README.pl-PL.md\">:poland: Polski</a>\n</p>\n\n----\n\n[**Tabby**](https://tabby.sh) (前身是 **Terminus**) 是一个可高度配置的终端模拟器和 SSH 或串口客户端，支持 Windows，macOS 和 Linux\n\n* 集成 SSH，Telnet 客户端和连接管理器\n* 集成串行终端\n* 定制主题和配色方案\n* 完全可配置的快捷键和多键快捷键\n* 分体式窗格\n* 自动保存标签页\n* 支持 PowerShell（和 PS Core）、WSL、Git-Bash、Cygwin、MSYS2、Cmder 和 CMD\n* 在 SSH 会话中通过 Zmodem 进行直接文件传输\n* 完整的 Unicode 支持，包括双角字符\n* 不会因快速的输出而卡住\n* Windows 上舒适的 shell 体验，包括 tab 自动补全（通过 Clink）\n* 为 SSH secrets 和设置集成了加密容器\n* SSH、SFTP 和 Telnet 客户端可用作 [Web 应用](https://tabby.sh/app)（也可[托管](https://github.com/Eugeny/tabby-web)）\n\n# 目录 <!-- omit in toc -->\n\n- [Tabby是什么](#tabby是什么)\n- [终端特性](#终端特性)\n- [SSH 客户端](#ssh-客户端)\n- [串行终端](#串行终端)\n- [便携式应用](#便携式应用)\n- [插件](#插件)\n- [主题](#主题)\n- [贡献](#贡献)\n\n<a name=\"about\"></a>\n\n# Tabby是什么\n\n* **Tabby 是** Windows 标准终端 (conhost)、PowerShell ISE、PuTTY、macOS Terminal.app 和 iTerm 的替代品\n\n* **Tabby 不是**一个全新的 shell，也不是 MinGW 或 Cygwin 的替代品。它也不是轻量级的 - 如果你对内存的占用很敏感，请考虑 [Conemu](https://conemu.github.io) 或 [Alacritty](https://github.com/jwilm/alacritty)\n<a name=\"terminal\"></a>\n\n# 终端特性\n\n![](docs/readme-terminal.png)\n\n* 一个 VT220 终端 + 各种插件\n* 多个嵌套的拆分窗格\n* 可以将标签页设置在窗口的任意一侧\n* 带有全局生成热键的可选可停靠窗口（“Quake console”）\n* 进度检测\n* 流程完成通知\n* 带括号的粘贴，多行粘贴提示\n* 连体字\n* 自定义 shell 配置文件\n* 可选的 RMB 粘贴和复制选择（PuTTY 风格）\n\n<a name=\"ssh\"></a>\n# SSH 客户端\n\n![](docs/readme-ssh.png)\n\n* 带有连接管理器的 SSH2 客户端\n* X11和端口转发\n* 自动跳转主机管理\n* 代理转发（包括 Pageant 和 Windows 原生 OpenSSH 代理）\n* 登录脚本\n\n<a name=\"serial\"></a>\n# 串行终端\n\n* 保存连接\n* 逐行读取的输入支持\n* 可选的十六进制逐字节输入和十六进制转储输出\n* 换行转换\n* 自动重连\n\n<a name=\"portable\"></a>\n# 便携式应用\n\n如果在 Tabby.exe 所在的目录创建一个名为`data`文件夹，Tabby 将可以在 Windows 上作为便携式的应用程序运行。\n\n<a name=\"plugins\"></a>\n# 插件\n\n插件和主题可以直接在 Tabby 设置中安装。\n\n* [clickable-links](https://github.com/Eugeny/tabby-clickable-links) - 使终端中的路径和 URL 可点击\n* [docker](https://github.com/Eugeny/tabby-docker) - 连接 Docker 容器\n* [title-control](https://github.com/kbjr/terminus-title-control) - 允许通过提供要删除的前缀、后缀和/或字符串来修改标签页的标题\n* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 快速向一个或所有标签页发送命令\n* [save-output](https://github.com/Eugeny/tabby-save-output) - 将终端输出记录到文件中\n* [sync-config](https://github.com/starxg/terminus-sync-config) - 将配置同步到 Gist 或 Gitee\n* [clippy](https://github.com/Eugeny/tabby-clippy) - 一个可以一直烦你的示例插件\n* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 允许根据给定的配置创建自定义工作区配置文件\n* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - 从 Tabby 标签页带有选中的文本来打开系统默认浏览器\n* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - 为ssh连接打开类似SecureCRT的sftp标签页\n* [web-auth-handler](https://github.com/Jazzmoon/tabby-web-auth-handler) - 应用内网页认证弹出窗口（主要为warpgate浏览器认证而建）\n* [mcp-server](https://github.com/thuanpham582002/tabby-mcp-server) - 为 Tabby 提供强大的模型上下文协议服务器集成，可通过 Cursor 和 Windsurf 等 MCP 客户端无缝连接 AI 助手，利用智能 AI 功能增强您的终端工作流程。\n<a name=\"themes\"></a>\n# 主题\n\n* [hype](https://github.com/Eugeny/tabby-theme-hype) - 受 Hyper 启发的主题\n* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - 为 Tabby 打造的 Relaxed 主题\n* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)\n* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)\n* [altair](https://github.com/yxuko/terminus-altair)\n\n# Sponsors <!-- omit in toc -->\n\n[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)\n\n[**packagecloud**](https://packagecloud.io) 提供了免费的 Debian/RPM 存储库托管\n\n<a name=\"contributing\"></a>\n# 贡献\n\n欢迎提交 PR 和插件！\n\n请参阅 [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) 和 [API 文档](https://docs.tabby.sh/) 以获取有关项目布局的信息以及非常简短的插件开发教程。\n\n---\n<a name=\"contributors\"></a>\n\n感谢这些人，他们棒极了！([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.russellmyers.com\"><img src=\"https://avatars2.githubusercontent.com/u/184085?v=4?s=100\" width=\"100px;\" alt=\"Russell Myers\"/><br /><sub><b>Russell Myers</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mezner\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.morwire.com\"><img src=\"https://avatars1.githubusercontent.com/u/3991658?v=4?s=100\" width=\"100px;\" alt=\"Austin Warren\"/><br /><sub><b>Austin Warren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ehwarren\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Drachenkaetzchen\"><img src=\"https://avatars1.githubusercontent.com/u/162974?v=4?s=100\" width=\"100px;\" alt=\"Felicia Hummel\"/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mikemaccana\"><img src=\"https://avatars2.githubusercontent.com/u/172594?v=4?s=100\" width=\"100px;\" alt=\"Mike MacCana\"/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mikemaccana\" title=\"Tests\">⚠️</a> <a href=\"#design-mikemaccana\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/yxuko\"><img src=\"https://avatars1.githubusercontent.com/u/1786317?v=4?s=100\" width=\"100px;\" alt=\"Yacine Kanzari\"/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yxuko\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/BBJip\"><img src=\"https://avatars2.githubusercontent.com/u/32908927?v=4?s=100\" width=\"100px;\" alt=\"BBJip\"/><br /><sub><b>BBJip</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BBJip\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Futagirl\"><img src=\"https://avatars2.githubusercontent.com/u/33533958?v=4?s=100\" width=\"100px;\" alt=\"Futagirl\"/><br /><sub><b>Futagirl</b></sub></a><br /><a href=\"#design-Futagirl\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.levrik.io\"><img src=\"https://avatars3.githubusercontent.com/u/9491603?v=4?s=100\" width=\"100px;\" alt=\"Levin Rickert\"/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=levrik\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://kwonoj.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/1210596?v=4?s=100\" width=\"100px;\" alt=\"OJ Kwon\"/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kwonoj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Domain\"><img src=\"https://avatars2.githubusercontent.com/u/903197?v=4?s=100\" width=\"100px;\" alt=\"domain\"/><br /><sub><b>domain</b></sub></a><br /><a href=\"#plugin-Domain\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Domain\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jbrumond.me\"><img src=\"https://avatars1.githubusercontent.com/u/195127?v=4?s=100\" width=\"100px;\" alt=\"James Brumond\"/><br /><sub><b>James Brumond</b></sub></a><br /><a href=\"#plugin-kbjr\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.growingwiththeweb.com\"><img src=\"https://avatars0.githubusercontent.com/u/2193314?v=4?s=100\" width=\"100px;\" alt=\"Daniel Imms\"/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Code\">💻</a> <a href=\"#plugin-Tyriar\" title=\"Plugin/utility libraries\">🔌</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=Tyriar\" title=\"Tests\">⚠️</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/baflo\"><img src=\"https://avatars2.githubusercontent.com/u/834350?v=4?s=100\" width=\"100px;\" alt=\"Florian Bachmann\"/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=baflo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://michael-kuehnel.de\"><img src=\"https://avatars2.githubusercontent.com/u/441011?v=4?s=100\" width=\"100px;\" alt=\"Michael Kühnel\"/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mischah\" title=\"Code\">💻</a> <a href=\"#design-mischah\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NieLeben\"><img src=\"https://avatars3.githubusercontent.com/u/47182955?v=4?s=100\" width=\"100px;\" alt=\"Tilmann Meyer\"/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NieLeben\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://www.jubeat.net\"><img src=\"https://avatars3.githubusercontent.com/u/11289158?v=4?s=100\" width=\"100px;\" alt=\"PM Extra\"/><br /><sub><b>PM Extra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/issues?q=author%3APMExtra\" title=\"Bug reports\">🐛</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://jjuhas.keybase.pub//\"><img src=\"https://avatars1.githubusercontent.com/u/6438760?v=4?s=100\" width=\"100px;\" alt=\"Jonathan\"/><br /><sub><b>Jonathan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=IgnusG\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hans-koch.me\"><img src=\"https://avatars0.githubusercontent.com/u/1093709?v=4?s=100\" width=\"100px;\" alt=\"Hans Koch\"/><br /><sub><b>Hans Koch</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hammster\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://thepuzzlemaker.info\"><img src=\"https://avatars3.githubusercontent.com/u/12666617?v=4?s=100\" width=\"100px;\" alt=\"Dak Smyth\"/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://yfwz100.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/983211?v=4?s=100\" width=\"100px;\" alt=\"Wang Zhi\"/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=yfwz100\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/jack1142\"><img src=\"https://avatars0.githubusercontent.com/u/6032823?v=4?s=100\" width=\"100px;\" alt=\"jack1142\"/><br /><sub><b>jack1142</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=jack1142\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hdougie\"><img src=\"https://avatars1.githubusercontent.com/u/450799?v=4?s=100\" width=\"100px;\" alt=\"Howie Douglas\"/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hdougie\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://chriskaczor.com\"><img src=\"https://avatars2.githubusercontent.com/u/180906?v=4?s=100\" width=\"100px;\" alt=\"Chris Kaczor\"/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ckaczor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.boxmein.net\"><img src=\"https://avatars1.githubusercontent.com/u/358714?v=4?s=100\" width=\"100px;\" alt=\"Johannes Kadak\"/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boxmein\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LeSeulArtichaut\"><img src=\"https://avatars1.githubusercontent.com/u/38361244?v=4?s=100\" width=\"100px;\" alt=\"LeSeulArtichaut\"/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CyrilTaylor\"><img src=\"https://avatars0.githubusercontent.com/u/12631466?v=4?s=100\" width=\"100px;\" alt=\"Cyril Taylor\"/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=CyrilTaylor\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nstefanou\"><img src=\"https://avatars3.githubusercontent.com/u/51129173?v=4?s=100\" width=\"100px;\" alt=\"nstefanou\"/><br /><sub><b>nstefanou</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nstefanou\" title=\"Code\">💻</a> <a href=\"#plugin-nstefanou\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/orin220444\"><img src=\"https://avatars3.githubusercontent.com/u/30747229?v=4?s=100\" width=\"100px;\" alt=\"orin220444\"/><br /><sub><b>orin220444</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=orin220444\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Goobles\"><img src=\"https://avatars3.githubusercontent.com/u/8776771?v=4?s=100\" width=\"100px;\" alt=\"Gobius Dolhain\"/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Goobles\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/3l0w\"><img src=\"https://avatars2.githubusercontent.com/u/37798980?v=4?s=100\" width=\"100px;\" alt=\"Gwilherm Folliot\"/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=3l0w\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Dimitory\"><img src=\"https://avatars0.githubusercontent.com/u/475955?v=4?s=100\" width=\"100px;\" alt=\"Dmitry Pronin\"/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dimitory\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JonathanBeverley\"><img src=\"https://avatars1.githubusercontent.com/u/20328966?v=4?s=100\" width=\"100px;\" alt=\"Jonathan Beverley\"/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=JonathanBeverley\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zend\"><img src=\"https://avatars1.githubusercontent.com/u/25160?v=4?s=100\" width=\"100px;\" alt=\"Zenghai Liang\"/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zend\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/matishadow\"><img src=\"https://avatars0.githubusercontent.com/u/9083085?v=4?s=100\" width=\"100px;\" alt=\"Mateusz Tracz\"/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=matishadow\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zergpool.com\"><img src=\"https://avatars3.githubusercontent.com/u/36234677?v=4?s=100\" width=\"100px;\" alt=\"pinpin\"/><br /><sub><b>pinpin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=pinpins\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/TakuroOnoda\"><img src=\"https://avatars0.githubusercontent.com/u/1407926?v=4?s=100\" width=\"100px;\" alt=\"Takuro Onoda\"/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TakuroOnoda\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/frauhottelmann\"><img src=\"https://avatars2.githubusercontent.com/u/902705?v=4?s=100\" width=\"100px;\" alt=\"frauhottelmann\"/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=frauhottelmann\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://patalong.pl\"><img src=\"https://avatars.githubusercontent.com/u/29167842?v=4?s=100\" width=\"100px;\" alt=\"Piotr Patalong\"/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href=\"#design-VectorKappa\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/clarkwang\"><img src=\"https://avatars.githubusercontent.com/u/157076?v=4?s=100\" width=\"100px;\" alt=\"Clark Wang\"/><br /><sub><b>Clark Wang</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=clarkwang\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/iamchating\"><img src=\"https://avatars.githubusercontent.com/u/7088153?v=4?s=100\" width=\"100px;\" alt=\"iamchating\"/><br /><sub><b>iamchating</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=iamchating\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/starxg\"><img src=\"https://avatars.githubusercontent.com/u/34997494?v=4?s=100\" width=\"100px;\" alt=\"starxg\"/><br /><sub><b>starxg</b></sub></a><br /><a href=\"#plugin-starxg\" title=\"Plugin/utility libraries\">🔌</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hashnote.net/\"><img src=\"https://avatars.githubusercontent.com/u/546312?v=4?s=100\" width=\"100px;\" alt=\"Alisue\"/><br /><sub><b>Alisue</b></sub></a><br /><a href=\"#design-lambdalisue\" title=\"Design\">🎨</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ydcool\"><img src=\"https://avatars.githubusercontent.com/u/5668295?v=4?s=100\" width=\"100px;\" alt=\"Dominic Yin\"/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ydcool\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/bdr99\"><img src=\"https://avatars.githubusercontent.com/u/2292715?v=4?s=100\" width=\"100px;\" alt=\"Brandon Rothweiler\"/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href=\"#design-bdr99\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.io/JnP49\"><img src=\"https://avatars.githubusercontent.com/u/63876444?v=4?s=100\" width=\"100px;\" alt=\"Logic Machine\"/><br /><sub><b>Logic Machine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=logicmachine123\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cypherbits\"><img src=\"https://avatars.githubusercontent.com/u/10424900?v=4?s=100\" width=\"100px;\" alt=\"cypherbits\"/><br /><sub><b>cypherbits</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cypherbits\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://modulolotus.net\"><img src=\"https://avatars.githubusercontent.com/u/946421?v=4?s=100\" width=\"100px;\" alt=\"Matthew Davidson\"/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=KingMob\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/al-wi\"><img src=\"https://avatars.githubusercontent.com/u/11092199?v=4?s=100\" width=\"100px;\" alt=\"Alexander Wiedemann\"/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=al-wi\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375\"><img src=\"https://avatars.githubusercontent.com/u/59506394?v=4?s=100\" width=\"100px;\" alt=\"장보연\"/><br /><sub><b>장보연</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BoYeonJang\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Me1onRind\"><img src=\"https://avatars.githubusercontent.com/u/19531270?v=4?s=100\" width=\"100px;\" alt=\"zZ\"/><br /><sub><b>zZ</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Me1onRind\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/tainoNZ\"><img src=\"https://avatars.githubusercontent.com/u/49261322?v=4?s=100\" width=\"100px;\" alt=\"Aaron Davison\"/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=tainoNZ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/composer404\"><img src=\"https://avatars.githubusercontent.com/u/58251560?v=4?s=100\" width=\"100px;\" alt=\"Przemyslaw Kozik\"/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href=\"#design-composer404\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/highfredo\"><img src=\"https://avatars.githubusercontent.com/u/5951524?v=4?s=100\" width=\"100px;\" alt=\"Alfredo Arellano de la Fuente\"/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=highfredo\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/NessunKim\"><img src=\"https://avatars.githubusercontent.com/u/12974079?v=4?s=100\" width=\"100px;\" alt=\"MH Kim\"/><br /><sub><b>MH Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=NessunKim\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://discord.gg/4c5EVTBhtp\"><img src=\"https://avatars.githubusercontent.com/u/40345645?v=4?s=100\" width=\"100px;\" alt=\"Marmota\"/><br /><sub><b>Marmota</b></sub></a><br /><a href=\"#design-jaimeadf\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://ares.zone\"><img src=\"https://avatars.githubusercontent.com/u/40336192?v=4?s=100\" width=\"100px;\" alt=\"Ares Andrew\"/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TENX-S\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://usual.io/\"><img src=\"https://avatars.githubusercontent.com/u/780052?v=4?s=100\" width=\"100px;\" alt=\"George Korsnick\"/><br /><sub><b>George Korsnick</b></sub></a><br /><a href=\"#financial-gkor\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://about.me/ulu\"><img src=\"https://avatars.githubusercontent.com/u/872764?v=4?s=100\" width=\"100px;\" alt=\"Artem Smirnov\"/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href=\"#financial-uluhonolulu\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/nevotheless\"><img src=\"https://avatars.githubusercontent.com/u/779797?v=4?s=100\" width=\"100px;\" alt=\"Tim Kopplow\"/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href=\"#financial-nevotheless\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mrthock\"><img src=\"https://avatars.githubusercontent.com/u/88901709?v=4?s=100\" width=\"100px;\" alt=\"mrthock\"/><br /><sub><b>mrthock</b></sub></a><br /><a href=\"#financial-mrthock\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/lrottach\"><img src=\"https://avatars.githubusercontent.com/u/50323692?v=4?s=100\" width=\"100px;\" alt=\"Lukas Rottach\"/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href=\"#financial-lrottach\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/boonkerz\"><img src=\"https://avatars.githubusercontent.com/u/277321?v=4?s=100\" width=\"100px;\" alt=\"boonkerz\"/><br /><sub><b>boonkerz</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=boonkerz\" title=\"Code\">💻</a> <a href=\"#translation-boonkerz\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/milotype\"><img src=\"https://avatars.githubusercontent.com/u/43657314?v=4?s=100\" width=\"100px;\" alt=\"Milo Ivir\"/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href=\"#translation-milotype\" title=\"Translation\">🌍</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JasonCubic\"><img src=\"https://avatars.githubusercontent.com/u/8921015?v=4?s=100\" width=\"100px;\" alt=\"JasonCubic\"/><br /><sub><b>JasonCubic</b></sub></a><br /><a href=\"#design-JasonCubic\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/MaxWaldorf\"><img src=\"https://avatars.githubusercontent.com/u/15877853?v=4?s=100\" width=\"100px;\" alt=\"MaxWaldorf\"/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href=\"#infra-MaxWaldorf\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mwz\"><img src=\"https://avatars.githubusercontent.com/u/1190768?v=4?s=100\" width=\"100px;\" alt=\"Michael Wizner\"/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mwz\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/mgrulich\"><img src=\"https://avatars.githubusercontent.com/u/781036?v=4?s=100\" width=\"100px;\" alt=\"Martin\"/><br /><sub><b>Martin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mgrulich\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/piersandro\"><img src=\"https://avatars.githubusercontent.com/u/19996309?v=4?s=100\" width=\"100px;\" alt=\"Piersandro Guerrera\"/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=piersandro\" title=\"Documentation\">📖</a> <a href=\"#translation-piersandro\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/0x973\"><img src=\"https://avatars.githubusercontent.com/u/19320096?v=4?s=100\" width=\"100px;\" alt=\"0x973\"/><br /><sub><b>0x973</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=0x973\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Allenator\"><img src=\"https://avatars.githubusercontent.com/u/11794943?v=4?s=100\" width=\"100px;\" alt=\"Allenator\"/><br /><sub><b>Allenator</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Allenator\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://microhobby.com.br/blog\"><img src=\"https://avatars.githubusercontent.com/u/2633321?v=4?s=100\" width=\"100px;\" alt=\"Matheus Castello\"/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=microhobby\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Jai-JAP\"><img src=\"https://avatars.githubusercontent.com/u/78354625?v=4?s=100\" width=\"100px;\" alt=\"Jai A P\"/><br /><sub><b>Jai A P</b></sub></a><br /><a href=\"#platform-Jai-JAP\" title=\"Packaging/porting to new platform\">📦</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://blog.ysc3839.com\"><img src=\"https://avatars.githubusercontent.com/u/12028138?v=4?s=100\" width=\"100px;\" alt=\"Richard Yu\"/><br /><sub><b>Richard Yu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ysc3839\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/artu-ole\"><img src=\"https://avatars.githubusercontent.com/u/15938416?v=4?s=100\" width=\"100px;\" alt=\"artu-ole\"/><br /><sub><b>artu-ole</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=artu-ole\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://timagribanov.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/48593815?v=4?s=100\" width=\"100px;\" alt=\"Timofey Gribanov\"/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=TimaGribanov\" title=\"Documentation\">📖</a> <a href=\"#translation-TimaGribanov\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://git.christianbingman.com\"><img src=\"https://avatars.githubusercontent.com/u/42191425?v=4?s=100\" width=\"100px;\" alt=\"Christian Bingman\"/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ChristianBingman\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://zhangzhipeng2023.cn/\"><img src=\"https://avatars.githubusercontent.com/u/5310853?v=4?s=100\" width=\"100px;\" alt=\"zhipeng\"/><br /><sub><b>zhipeng</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Ox0400\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/woodmeal\"><img src=\"https://avatars.githubusercontent.com/u/104011197?v=4?s=100\" width=\"100px;\" alt=\"woodmeal\"/><br /><sub><b>woodmeal</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=woodmeal\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://magiclike.codeberg.page/\"><img src=\"https://avatars.githubusercontent.com/u/82117109?v=4?s=100\" width=\"100px;\" alt=\"MagicLike\"/><br /><sub><b>MagicLike</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=MagicLike\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hisamafahri\"><img src=\"https://avatars.githubusercontent.com/u/65691613?v=4?s=100\" width=\"100px;\" alt=\"Hisam Fahri\"/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hisamafahri\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://liangchengj.com\"><img src=\"https://avatars.githubusercontent.com/u/48881023?v=4?s=100\" width=\"100px;\" alt=\"Liangcheng Juves\"/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LiangchengJ\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/attet\"><img src=\"https://avatars.githubusercontent.com/u/1911416?v=4?s=100\" width=\"100px;\" alt=\"Atte Timonen\"/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=attet\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/joaolmpinto/\"><img src=\"https://avatars.githubusercontent.com/u/1143125?v=4?s=100\" width=\"100px;\" alt=\"João Pinto\"/><br /><sub><b>João Pinto</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=joaompinto\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Qiming-Liu\"><img src=\"https://avatars.githubusercontent.com/u/68600416?v=4?s=100\" width=\"100px;\" alt=\"Alan\"/><br /><sub><b>Alan</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Qiming-Liu\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://74th.tech/\"><img src=\"https://avatars.githubusercontent.com/u/1060011?v=4?s=100\" width=\"100px;\" alt=\"Atsushi Morimoto\"/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href=\"#financial-74th\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://arles.red/\"><img src=\"https://avatars.githubusercontent.com/u/5369096?v=4?s=100\" width=\"100px;\" alt=\"Arles\"/><br /><sub><b>Arles</b></sub></a><br /><a href=\"#financial-aarles\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pentestbook.six2dez.com/\"><img src=\"https://avatars.githubusercontent.com/u/24670991?v=4?s=100\" width=\"100px;\" alt=\"six2dez\"/><br /><sub><b>six2dez</b></sub></a><br /><a href=\"#financial-six2dez\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/CandiceJoy\"><img src=\"https://avatars.githubusercontent.com/u/8854890?v=4?s=100\" width=\"100px;\" alt=\"Candice\"/><br /><sub><b>Candice</b></sub></a><br /><a href=\"#financial-CandiceJoy\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kingrowen\"><img src=\"https://avatars.githubusercontent.com/u/13178700?v=4?s=100\" width=\"100px;\" alt=\"Rowen Willabus\"/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href=\"#financial-kingrowen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Sky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FrancisHG\"><img src=\"https://avatars.githubusercontent.com/u/1611626?v=4?s=100\" width=\"100px;\" alt=\"Francis Gelderloos\"/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href=\"#financial-FrancisHG\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/astromasoud\"><img src=\"https://avatars.githubusercontent.com/u/18737721?v=4?s=100\" width=\"100px;\" alt=\"astromasoud\"/><br /><sub><b>astromasoud</b></sub></a><br /><a href=\"#financial-astromasoud\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://spirit55555.dk/\"><img src=\"https://avatars.githubusercontent.com/u/2357565?v=4?s=100\" width=\"100px;\" alt=\"Anders G. Jørgensen\"/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href=\"#financial-Spirit55555\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/djradon\"><img src=\"https://avatars.githubusercontent.com/u/5224156?v=4?s=100\" width=\"100px;\" alt=\"Dave Richardson\"/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href=\"#financial-djradon\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://twitter.com/tpberntsen\"><img src=\"https://avatars.githubusercontent.com/u/922318?v=4?s=100\" width=\"100px;\" alt=\"Thomas Peter Berntsen\"/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href=\"#financial-tpberntsen\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://bandism.net/\"><img src=\"https://avatars.githubusercontent.com/u/22633385?v=4?s=100\" width=\"100px;\" alt=\"Ikko Ashimine\"/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=eltociear\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/giejqf\"><img src=\"https://avatars.githubusercontent.com/u/9211230?v=4?s=100\" width=\"100px;\" alt=\"giejqf\"/><br /><sub><b>giejqf</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=giejqf\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/LacazeThomas\"><img src=\"https://avatars.githubusercontent.com/u/19855907?v=4?s=100\" width=\"100px;\" alt=\"Thomas LACAZE\"/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=LacazeThomas\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://pochen.me/\"><img src=\"https://avatars.githubusercontent.com/u/1329716?v=4?s=100\" width=\"100px;\" alt=\"Po Chen\"/><br /><sub><b>Po Chen</b></sub></a><br /><a href=\"#financial-princemaple\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://victorchandra.carrd.co/\"><img src=\"https://avatars.githubusercontent.com/u/41635105?v=4?s=100\" width=\"100px;\" alt=\"Victor Chandra\"/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=mzmznasipadang\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/daniel347x\"><img src=\"https://avatars.githubusercontent.com/u/309746?v=4?s=100\" width=\"100px;\" alt=\"Dan Nissenbaum\"/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href=\"#financial-daniel347x\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DunklerPhoenix\"><img src=\"https://avatars.githubusercontent.com/u/1261305?v=4?s=100\" width=\"100px;\" alt=\"RogueThorn\"/><br /><sub><b>RogueThorn</b></sub></a><br /><a href=\"#financial-DunklerPhoenix\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://spenserblack.github.io\"><img src=\"https://avatars.githubusercontent.com/u/8546709?v=4?s=100\" width=\"100px;\" alt=\"Spenser Black\"/><br /><sub><b>Spenser Black</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=spenserblack\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zuedev\"><img src=\"https://avatars.githubusercontent.com/u/24614929?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/><br /><sub><b>Alex</b></sub></a><br /><a href=\"#financial-zuedev\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://hengy1.top/\"><img src=\"https://avatars.githubusercontent.com/u/98681454?v=4?s=100\" width=\"100px;\" alt=\"HengY1Coding✨\"/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href=\"#financial-HengY1Cola\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.stackscale.com/\"><img src=\"https://avatars.githubusercontent.com/u/195768?v=4?s=100\" width=\"100px;\" alt=\"David Carrero\"/><br /><sub><b>David Carrero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=dcarrero\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/zhoro\"><img src=\"https://avatars.githubusercontent.com/u/1105687?v=4?s=100\" width=\"100px;\" alt=\"Andrii Zhovtiak\"/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zhoro\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/JohnMasoner\"><img src=\"https://avatars.githubusercontent.com/u/42313377?v=4?s=100\" width=\"100px;\" alt=\"Mason Ma\"/><br /><sub><b>Mason Ma</b></sub></a><br /><a href=\"#financial-JohnMasoner\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ntimo\"><img src=\"https://avatars.githubusercontent.com/u/6145026?v=4?s=100\" width=\"100px;\" alt=\"Timo\"/><br /><sub><b>Timo</b></sub></a><br /><a href=\"#financial-ntimo\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/evinwatson/\"><img src=\"https://avatars.githubusercontent.com/u/24227251?v=4?s=100\" width=\"100px;\" alt=\"Evin Watson\"/><br /><sub><b>Evin Watson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=EvinRWatson\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://t.me/hendrjl\"><img src=\"https://avatars.githubusercontent.com/u/15981200?v=4?s=100\" width=\"100px;\" alt=\"Hendra Juli\"/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=deulizealand\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wkricowski\"><img src=\"https://avatars.githubusercontent.com/u/36803521?v=4?s=100\" width=\"100px;\" alt=\"Wellinton Kricowski\"/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href=\"#financial-wkricowski\" title=\"Financial\">💵</a> <a href=\"https://github.com/Eugeny/tabby/commits?author=wkricowski\" title=\"Documentation\">📖</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/almzau\"><img src=\"https://avatars.githubusercontent.com/u/29115846?v=4?s=100\" width=\"100px;\" alt=\"Allan\"/><br /><sub><b>Allan</b></sub></a><br /><a href=\"#design-almzau\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://oidamo.de\"><img src=\"https://avatars.githubusercontent.com/u/17959794?v=4?s=100\" width=\"100px;\" alt=\"Benjamin Brandmeier\"/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/patric1025\"><img src=\"https://avatars.githubusercontent.com/u/65654040?v=4?s=100\" width=\"100px;\" alt=\"patric1025\"/><br /><sub><b>patric1025</b></sub></a><br /><a href=\"#translation-patric1025\" title=\"Translation\">🌍</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/hermitpopcorn\"><img src=\"https://avatars.githubusercontent.com/u/16042129?v=4?s=100\" width=\"100px;\" alt=\"hermitpopcorn\"/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=hermitpopcorn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://joshuatz.com/\"><img src=\"https://avatars.githubusercontent.com/u/17817563?v=4?s=100\" width=\"100px;\" alt=\"Joshua Tzucker\"/><br /><sub><b>Joshua Tzucker</b></sub></a><br /><a href=\"#financial-joshuatz\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/luxifr\"><img src=\"https://avatars.githubusercontent.com/u/665715?v=4?s=100\" width=\"100px;\" alt=\"luxifr\"/><br /><sub><b>luxifr</b></sub></a><br /><a href=\"#financial-luxifr\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ukulanne\"><img src=\"https://avatars.githubusercontent.com/u/28586666?v=4?s=100\" width=\"100px;\" alt=\"Anne Summers\"/><br /><sub><b>Anne Summers</b></sub></a><br /><a href=\"#financial-ukulanne\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/Clem-Fern\"><img src=\"https://avatars.githubusercontent.com/u/20025949?v=4?s=100\" width=\"100px;\" alt=\"Clem\"/><br /><sub><b>Clem</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Clem-Fern\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/elizabeth-dev\"><img src=\"https://avatars.githubusercontent.com/u/13015727?v=4?s=100\" width=\"100px;\" alt=\"Elizabeth Martín Campos\"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=elizabeth-dev\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/siccous\"><img src=\"https://avatars.githubusercontent.com/u/7812885?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Hruška\"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siccous\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/karaketir16\"><img src=\"https://avatars.githubusercontent.com/u/27349806?v=4?s=100\" width=\"100px;\" alt=\"Osman Karaketir\"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=karaketir16\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.gnomegarden.io/\"><img src=\"https://avatars.githubusercontent.com/u/33667144?v=4?s=100\" width=\"100px;\" alt=\"Crypto Gnome\"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href=\"#financial-CryptoGnome\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/rbukovansky\"><img src=\"https://avatars.githubusercontent.com/u/1004491?v=4?s=100\" width=\"100px;\" alt=\"Richard Bukovansky\"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href=\"#financial-rbukovansky\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/pseudocc\"><img src=\"https://avatars.githubusercontent.com/u/85104110?v=4?s=100\" width=\"100px;\" alt=\"catlas\"/><br /><sub><b>catlas</b></sub></a><br /><a href=\"#financial-pseudocc\" title=\"Financial\">💵</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://kapocsi.ca\"><img src=\"https://avatars.githubusercontent.com/u/84490604?v=4?s=100\" width=\"100px;\" alt=\"Thomas Kapocsi\"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Kapocsi\" title=\"Documentation\">📖</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://dylhack.dev/\"><img src=\"https://avatars.githubusercontent.com/u/27179786?v=4?s=100\" width=\"100px;\" alt=\"Dylan Hackworth\"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href=\"#financial-dylhack\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/echo304\"><img src=\"https://avatars.githubusercontent.com/u/16456651?v=4?s=100\" width=\"100px;\" alt=\"Sangboak Lee\"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=echo304\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/qyecst\"><img src=\"https://avatars.githubusercontent.com/u/13901864?v=4?s=100\" width=\"100px;\" alt=\"qyecst\"/><br /><sub><b>qyecst</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=qyecst\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/DehanLUO\"><img src=\"https://avatars.githubusercontent.com/u/53093688?v=4?s=100\" width=\"100px;\" alt=\"Han\"/><br /><sub><b>Han</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=DehanLUO\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/wljince007\"><img src=\"https://avatars.githubusercontent.com/u/88243938?v=4?s=100\" width=\"100px;\" alt=\"wljince007\"/><br /><sub><b>wljince007</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=wljince007\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/FeroTheFox\"><img src=\"https://avatars.githubusercontent.com/u/52982404?v=4?s=100\" width=\"100px;\" alt=\"fero\"/><br /><sub><b>fero</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=FeroTheFox\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://siebsie23.nl/\"><img src=\"https://avatars.githubusercontent.com/u/25083973?v=4?s=100\" width=\"100px;\" alt=\"Sibren\"/><br /><sub><b>Sibren</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=siebsie23\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.nathaniel-walser.com\"><img src=\"https://avatars.githubusercontent.com/u/33339996?v=4?s=100\" width=\"100px;\" alt=\"Nathaniel Walser\"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=nwalser\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/aaronhuggins\"><img src=\"https://avatars.githubusercontent.com/u/16567111?v=4?s=100\" width=\"100px;\" alt=\"Aaron Huggins\"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href=\"#design-aaronhuggins\" title=\"Design\">🎨</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://zkxdex.github.io/\"><img src=\"https://avatars.githubusercontent.com/u/66271780?v=4?s=100\" width=\"100px;\" alt=\"KDex\"/><br /><sub><b>KDex</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=zKXDEX\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/kimbob13\"><img src=\"https://avatars.githubusercontent.com/u/26755098?v=4?s=100\" width=\"100px;\" alt=\"ChangHwan Kim\"/><br /><sub><b>ChangHwan Kim</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=kimbob13\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ashneilson\"><img src=\"https://avatars.githubusercontent.com/u/35913512?v=4?s=100\" width=\"100px;\" alt=\"Ash Neilson\"/><br /><sub><b>Ash Neilson</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ashneilson\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/cfs4819\"><img src=\"https://avatars.githubusercontent.com/u/53071761?v=4?s=100\" width=\"100px;\" alt=\"Chen Fansong\"/><br /><sub><b>Chen Fansong</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=cfs4819\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://5k.work/\"><img src=\"https://avatars.githubusercontent.com/u/82694310?v=4?s=100\" width=\"100px;\" alt=\"Mxmilu\"/><br /><sub><b>Mxmilu</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=Mxmilu666\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://cbuff.dev\"><img src=\"https://avatars.githubusercontent.com/u/29805363?v=4?s=100\" width=\"100px;\" alt=\"Charles Buffington\"/><br /><sub><b>Charles Buffington</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=C41M50N\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/GeminiLn\"><img src=\"https://avatars.githubusercontent.com/u/12425057?v=4?s=100\" width=\"100px;\" alt=\"Yu Qin\"/><br /><sub><b>Yu Qin</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=GeminiLn\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/fireblue\"><img src=\"https://avatars.githubusercontent.com/u/1034929?v=4?s=100\" width=\"100px;\" alt=\"fireblue\"/><br /><sub><b>fireblue</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=fireblue\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/marko1616\"><img src=\"https://avatars.githubusercontent.com/u/45327989?v=4?s=100\" width=\"100px;\" alt=\"marko1616\"/><br /><sub><b>marko1616</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=marko1616\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.selfhosted.sg/\"><img src=\"https://avatars.githubusercontent.com/u/128927132?v=4?s=100\" width=\"100px;\" alt=\"SelfHosted\"/><br /><sub><b>SelfHosted</b></sub></a><br /><a href=\"#financial-SelfHosted-Club\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"http://hiroga.hatenablog.com/\"><img src=\"https://avatars.githubusercontent.com/u/13391129?v=4?s=100\" width=\"100px;\" alt=\"Hiroaki Ogasawara\"/><br /><sub><b>Hiroaki Ogasawara</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=xhiroga\" title=\"Code\">💻</a></td>\n    </tr>\n    <tr>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/geodic\"><img src=\"https://avatars.githubusercontent.com/u/64704703?v=4?s=100\" width=\"100px;\" alt=\"geodic\"/><br /><sub><b>geodic</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=geodic\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://p.foundation/\"><img src=\"https://avatars.githubusercontent.com/u/80860929?v=4?s=100\" width=\"100px;\" alt=\"P Foundation\"/><br /><sub><b>P Foundation</b></sub></a><br /><a href=\"#financial-pfoundation\" title=\"Financial\">💵</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/et304383\"><img src=\"https://avatars.githubusercontent.com/u/2693414?v=4?s=100\" width=\"100px;\" alt=\"et304383\"/><br /><sub><b>et304383</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=et304383\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://github.com/ajkrj\"><img src=\"https://avatars.githubusercontent.com/u/210226755?v=4?s=100\" width=\"100px;\" alt=\"ajkrj\"/><br /><sub><b>ajkrj</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=ajkrj\" title=\"Code\">💻</a></td>\n      <td align=\"center\" valign=\"top\" width=\"14.28%\"><a href=\"https://www.linkedin.com/in/leoberbert/\"><img src=\"https://avatars.githubusercontent.com/u/16724862?v=4?s=100\" width=\"100px;\" alt=\"Leonardo Berbert\"/><br /><sub><b>Leonardo Berbert</b></sub></a><br /><a href=\"https://github.com/Eugeny/tabby/commits?author=leoberbert\" title=\"Code\">💻</a></td>\n    </tr>\n  </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\n本项目遵循 [all-contributors](https://github.com/all-contributors/all-contributors) 规范。 欢迎任何形式的贡献！\n"
  },
  {
    "path": "app/dev-app-update.yml",
    "content": "owner: eugeny\nrepo: tabby\nprovider: github\nupdaterCacheDirName: tabby-updater\n"
  },
  {
    "path": "app/index.pug",
    "content": "doctype html\nhtml.tabby\n    head\n        meta(charset='UTF-8')\n        base(href='index.html')\n        script.\n            console.timeStamp('index')\n            window.nodeRequire = require\n        script(src='./preload.js')\n        script(src='./bundle.js', defer)\n        style.\n            body { transition: 0.5s background; }\n    body\n        style#custom-css\n        root\n        app-root\n            .preload-logo\n                div\n                    .tabby-logo\n                    h1.tabby-title Tabby\n                        sup α\n                    .progress\n                        .bar(style='width: 0%')\n"
  },
  {
    "path": "app/lib/app.ts",
    "content": "import { app, ipcMain, Menu, Tray, shell, screen, globalShortcut, MenuItemConstructorOptions, WebContents } from 'electron'\nimport promiseIpc from 'electron-promise-ipc'\nimport * as remote from '@electron/remote/main'\nimport { exec } from 'mz/child_process'\nimport * as path from 'path'\nimport * as fs from 'fs'\nimport { Subject, throttleTime } from 'rxjs'\n\nimport { saveConfig } from './config'\nimport { Window, WindowOptions } from './window'\nimport { pluginManager } from './pluginManager'\nimport { PTYManager } from './pty'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch (_) { }\n\nexport class Application {\n    private tray?: Tray\n    private ptyManager = new PTYManager()\n    private windows: Window[] = []\n    private globalHotkey$ = new Subject<void>()\n    private quitRequested = false\n    userPluginsPath: string\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    constructor (private configStore: any) {\n        remote.initialize()\n        this.useBuiltinGraphics()\n        this.ptyManager.init(this)\n\n        ipcMain.handle('app:save-config', async (event, config) => {\n            await saveConfig(config)\n            this.broadcastExcept('host:config-change', event.sender, config)\n        })\n\n        ipcMain.on('app:register-global-hotkey', (_event, specs) => {\n            globalShortcut.unregisterAll()\n            for (const spec of specs) {\n                globalShortcut.register(spec, () => this.globalHotkey$.next())\n            }\n        })\n\n        this.globalHotkey$.pipe(throttleTime(100)).subscribe(() => {\n            this.onGlobalHotkey()\n        })\n\n        ;(promiseIpc as any).on('plugin-manager:install', (name, version) => {\n            return pluginManager.install(this.userPluginsPath, name, version)\n        })\n\n        ;(promiseIpc as any).on('plugin-manager:uninstall', (name) => {\n            return pluginManager.uninstall(this.userPluginsPath, name)\n        })\n\n        ;(promiseIpc as any).on('get-default-mac-shell', async () => {\n            try {\n                return (await exec(`/usr/bin/dscl . -read /Users/${process.env.LOGNAME} UserShell`))[0].toString().split(' ')[1].trim()\n            } catch {\n                return '/bin/bash'\n            }\n        })\n\n        if (process.platform === 'linux') {\n            app.commandLine.appendSwitch('no-sandbox')\n            if ((this.configStore.appearance?.opacity || 1) !== 1) {\n                app.commandLine.appendSwitch('enable-transparent-visuals')\n                app.disableHardwareAcceleration()\n            }\n        }\n        if (this.configStore.hacks?.disableGPU) {\n            app.commandLine.appendSwitch('disable-gpu')\n            app.disableHardwareAcceleration()\n        }\n\n        this.userPluginsPath = path.join(\n            app.getPath('userData'),\n            'plugins',\n        )\n\n        if (!fs.existsSync(this.userPluginsPath)) {\n            fs.mkdirSync(this.userPluginsPath)\n        }\n\n        app.commandLine.appendSwitch('disable-http-cache')\n        app.commandLine.appendSwitch('max-active-webgl-contexts', '9000')\n        app.commandLine.appendSwitch('lang', 'EN')\n\n        for (const flag of this.configStore.flags || [['force_discrete_gpu', '0']]) {\n            app.commandLine.appendSwitch(flag[0], flag[1])\n        }\n\n        app.on('before-quit', () => {\n            this.quitRequested = true\n        })\n\n        app.on('window-all-closed', () => {\n            if (this.quitRequested || process.platform !== 'darwin') {\n                app.quit()\n            }\n        })\n    }\n\n    init (): void {\n        screen.on('display-metrics-changed', () => this.broadcast('host:display-metrics-changed'))\n        screen.on('display-added', () => this.broadcast('host:displays-changed'))\n        screen.on('display-removed', () => this.broadcast('host:displays-changed'))\n    }\n\n    async newWindow (options?: WindowOptions): Promise<Window> {\n        const window = new Window(this, this.configStore, options)\n        this.windows.push(window)\n        if (this.windows.length === 1) {\n            window.makeMain()\n        }\n        window.visible$.subscribe(visible => {\n            if (visible) {\n                this.disableTray()\n            } else {\n                this.enableTray()\n            }\n        })\n        window.closed$.subscribe(() => {\n            this.windows = this.windows.filter(x => x !== window)\n            if (!this.windows.some(x => x.isMainWindow)) {\n                this.windows[0]?.makeMain()\n                this.windows[0]?.present()\n            }\n        })\n        if (process.platform === 'darwin') {\n            this.setupMenu()\n        }\n        await window.ready\n        return window\n    }\n\n    onGlobalHotkey (): void {\n        let isPresent = this.windows.some(x => x.isFocused() && x.isVisible())\n        const isDockedOnTop = this.windows.some(x => x.isDockedOnTop())\n        if (isDockedOnTop) {\n            // if docked and on top, hide even if not focused right now\n            isPresent = this.windows.some(x => x.isVisible())\n        }\n\n        if (isPresent) {\n            for (const window of this.windows) {\n                window.hide()\n            }\n        } else {\n            for (const window of this.windows) {\n                window.present()\n            }\n        }\n    }\n\n    presentAllWindows (): void {\n        for (const window of this.windows) {\n            window.present()\n        }\n    }\n\n    broadcast (event: string, ...args: any[]): void {\n        for (const window of this.windows) {\n            window.send(event, ...args)\n        }\n    }\n\n    broadcastExcept (event: string, except: WebContents, ...args: any[]): void {\n        for (const window of this.windows) {\n            if (window.webContents.id !== except.id) {\n                window.send(event, ...args)\n            }\n        }\n    }\n\n    async send (event: string, ...args: any[]): Promise<void> {\n        if (!this.hasWindows()) {\n            await this.newWindow()\n        }\n        this.windows.filter(w => !w.isDestroyed())[0].send(event, ...args)\n    }\n\n    enableTray (): void {\n        if (!!this.tray || process.platform === 'linux' || (this.configStore.hideTray ?? false) === true) {\n            return\n        }\n\n        if (process.platform === 'darwin') {\n            this.tray = new Tray(`${app.getAppPath()}/assets/tray-darwinTemplate.png`)\n            this.tray.setPressedImage(`${app.getAppPath()}/assets/tray-darwinHighlightTemplate.png`)\n        } else {\n            this.tray = new Tray(`${app.getAppPath()}/assets/tray.png`)\n        }\n\n        this.tray.on('click', () => setTimeout(() => this.focus()))\n\n        const contextMenu = Menu.buildFromTemplate([{\n            label: 'Show',\n            click: () => this.focus(),\n        }])\n\n        if (process.platform !== 'darwin') {\n            this.tray.setContextMenu(contextMenu)\n        }\n\n        this.tray.setToolTip(`Tabby ${app.getVersion()}`)\n    }\n\n    disableTray (): void {\n        if (process.platform === 'linux') {\n            return\n        }\n        this.tray?.destroy()\n        this.tray = null\n    }\n\n    hasWindows (): boolean {\n        return !!this.windows.length\n    }\n\n    focus (): void {\n        for (const window of this.windows) {\n            window.present()\n        }\n    }\n\n    async handleSecondInstance (argv: string[], cwd: string): Promise<void> {\n        if (!this.windows.length) {\n            await this.newWindow()\n        }\n        this.presentAllWindows()\n        this.windows[this.windows.length - 1].passCliArguments(argv, cwd, true)\n    }\n\n    private useBuiltinGraphics (): void {\n        if (process.platform === 'win32') {\n            const keyPath = 'SOFTWARE\\\\Microsoft\\\\DirectX\\\\UserGpuPreferences'\n            const valueName = app.getPath('exe')\n            if (!wnr.getRegistryValue(wnr.HK.CU, keyPath, valueName)) {\n                wnr.setRegistryValue(wnr.HK.CU, keyPath, valueName, wnr.REG.SZ, 'GpuPreference=1;')\n            }\n        }\n    }\n\n    private setupMenu () {\n        const template: MenuItemConstructorOptions[] = [\n            {\n                label: 'Application',\n                submenu: [\n                    { role: 'about', label: 'About Tabby' },\n                    { type: 'separator' },\n                    {\n                        label: 'Preferences',\n                        accelerator: 'Cmd+,',\n                        click: async () => {\n                            if (!this.hasWindows()) {\n                                await this.newWindow()\n                            }\n                            this.windows[0].send('host:preferences-menu')\n                        },\n                    },\n                    { type: 'separator' },\n                    { role: 'services', submenu: [] },\n                    { type: 'separator' },\n                    { role: 'hide' },\n                    { role: 'hideOthers' },\n                    { role: 'unhide' },\n                    { type: 'separator' },\n                    {\n                        label: 'Quit',\n                        accelerator: 'Cmd+Q',\n                        click: () => {\n                            this.quitRequested = true\n                            app.quit()\n                        },\n                    },\n                ],\n            },\n            {\n                label: 'Edit',\n                submenu: [\n                    { role: 'undo' },\n                    { role: 'redo' },\n                    { type: 'separator' },\n                    { role: 'cut' },\n                    { role: 'copy' },\n                    { role: 'paste' },\n                    { role: 'pasteAndMatchStyle' },\n                    { role: 'delete' },\n                    { role: 'selectAll' },\n                ],\n            },\n            {\n                label: 'View',\n                submenu: [\n                    { role: 'toggleDevTools' },\n                    { type: 'separator' },\n                    { role: 'togglefullscreen' },\n                ],\n            },\n            {\n                role: 'window',\n                submenu: [\n                    { role: 'minimize' },\n                    { role: 'zoom' },\n                    { type: 'separator' },\n                    { role: 'front' },\n                ],\n            },\n            {\n                role: 'help',\n                submenu: [\n                    {\n                        label: 'Website',\n                        click () {\n                            shell.openExternal('https://eugeny.github.io/tabby')\n                        },\n                    },\n                ],\n            },\n        ]\n\n        if (process.env.TABBY_DEV) {\n            template[2].submenu['unshift']({ role: 'reload' })\n        }\n\n        Menu.setApplicationMenu(Menu.buildFromTemplate(template))\n    }\n}\n"
  },
  {
    "path": "app/lib/cli.ts",
    "content": "import { app } from 'electron'\n\ninterface YargsOption {\n    type?: 'string' | 'number' | 'boolean' | 'array'\n    alias?: string\n    describe?: string\n    default?: any\n    choices?: string[]\n}\n\ninterface CommandConfig {\n    command: string | string[]\n    description: string\n    options?: Record<string, YargsOption>\n    positionals?: Record<string, YargsOption>\n}\n\ninterface ParserConfig {\n    usage: string\n    commands: CommandConfig[]\n    options: Record<string, YargsOption>\n    version: string\n}\n\nexport function createParserConfig (cwd: string): ParserConfig {\n    return {\n        usage: 'tabby [command] [arguments]',\n        commands: [\n            {\n                command: 'open [directory]',\n                description: 'open a shell in a directory',\n                options: {\n                    directory: { type: 'string', 'default': cwd },\n                },\n            },\n            {\n                command: ['run [command...]', '/k'],\n                description: 'run a command in the terminal',\n                options: {\n                    command: { type: 'array' },\n                },\n            },\n            {\n                command: 'profile [profileName]',\n                description: 'open a tab with specified profile',\n                options: {\n                    profileName: { type: 'string' },\n                },\n            },\n            {\n                command: 'paste [text]',\n                description: 'paste stdin into the active tab',\n                options: {\n                    escape: {\n                        alias: 'e',\n                        type: 'boolean',\n                        describe: 'Perform shell escaping',\n                    },\n                },\n                positionals: {\n                    text: { type: 'string' },\n                },\n            },\n            {\n                command: 'recent [index]',\n                description: 'open a tab with a recent profile',\n                options: {\n                    profileNumber: { type: 'number' },\n                },\n            },\n            {\n                command: 'quickConnect <providerId> <query>',\n                description: 'open a tab for specified quick connect provider',\n                positionals: {\n                    providerId: {\n                        describe: 'The name of a quick connect profile provider',\n                        type: 'string',\n                    },\n                    query: {\n                        describe: 'The quick connect query string',\n                        type: 'string',\n                    },\n                },\n            },\n        ],\n        options: {\n            debug: {\n                alias: 'd',\n                describe: 'Show DevTools on start',\n                type: 'boolean',\n            },\n            hidden: {\n                describe: 'Start minimized',\n                type: 'boolean',\n            },\n        },\n        version: app.getVersion(),\n    }\n}\n\nfunction applyOptionsToYargs (yargsInstance: any, options: Record<string, YargsOption>, method: 'option' | 'positional') {\n    return Object.entries(options).reduce(\n        (yargs, [key, value]) => yargs[method](key, value),\n        yargsInstance,\n    )\n}\n\nfunction createParserFromConfig (config: ParserConfig) {\n    const yargs = require('yargs/yargs')\n    let parser = yargs().usage(config.usage)\n    config.commands.forEach(cmd => {\n        const builder = (yargsInstance: any) => {\n            let instance = yargsInstance\n            if (cmd.options) {\n                instance = applyOptionsToYargs(instance, cmd.options, 'option')\n            }\n            if (cmd.positionals) {\n                instance = applyOptionsToYargs(instance, cmd.positionals, 'positional')\n            }\n            return instance\n        }\n        parser = parser.command(cmd.command, cmd.description, builder)\n    })\n    parser = applyOptionsToYargs(parser, config.options, 'option')\n    return parser.version(config.version).help('help')\n}\n\nexport function parseArgs (argv: string[], cwd: string): any {\n    const args = argv[0].includes('node') ? argv.slice(2) : argv.slice(1)\n    const config = createParserConfig(cwd)\n    const parser = createParserFromConfig(config)\n    return parser.parse(args)\n}\n"
  },
  {
    "path": "app/lib/config.ts",
    "content": "import * as fs from 'fs'\nimport * as path from 'path'\nimport * as yaml from 'js-yaml'\nimport { writeFile } from 'atomically'\n\n\nexport const configPath = path.join(process.env.TABBY_CONFIG_DIRECTORY!, 'config.yaml')\nconst legacyConfigPath = path.join(process.env.TABBY_CONFIG_DIRECTORY!, '../terminus', 'config.yaml')\n\n\nexport function migrateConfig (): void {\n    if (fs.existsSync(legacyConfigPath) && (\n        !fs.existsSync(configPath) ||\n        fs.statSync(configPath).mtime < fs.statSync(legacyConfigPath).mtime\n    )) {\n        fs.writeFileSync(configPath, fs.readFileSync(legacyConfigPath))\n    }\n}\n\nexport function loadConfig (): any {\n    migrateConfig()\n\n    if (fs.existsSync(configPath)) {\n        return yaml.load(fs.readFileSync(configPath, 'utf8'))\n    } else {\n        return {}\n    }\n}\n\nexport async function saveConfig (content: string): Promise<void> {\n    await writeFile(configPath, content, { encoding: 'utf8' })\n    await writeFile(configPath + '.backup', content, { encoding: 'utf8' })\n}\n"
  },
  {
    "path": "app/lib/index.ts",
    "content": "import { app, ipcMain, Menu, dialog } from 'electron'\n\n// set userData Path on portable version\nimport './portable'\n\n// set defaults of environment variables\nimport 'dotenv/config'\nprocess.env.TABBY_PLUGINS ??= ''\nprocess.env.TABBY_CONFIG_DIRECTORY ??= app.getPath('userData')\n\n\nimport 'v8-compile-cache'\nimport 'source-map-support/register'\nimport './sentry'\nimport './lru'\nimport { parseArgs } from './cli'\nimport { Application } from './app'\nimport electronDebug from 'electron-debug'\nimport { loadConfig } from './config'\n\n\nconst argv = parseArgs(process.argv, process.cwd())\n\n// eslint-disable-next-line @typescript-eslint/init-declarations\nlet configStore: any\n\ntry {\n    configStore = loadConfig()\n} catch (err) {\n    dialog.showErrorBox('Could not read config', err.message)\n    app.exit(1)\n}\n\nprocess.mainModule = module\n\nconst application = new Application(configStore)\n\n// Register tabby:// URL scheme\nif (process.defaultApp) {\n    if (process.argv.length >= 2) {\n        app.setAsDefaultProtocolClient('tabby', process.execPath, [process.argv[1]])\n    }\n} else {\n    app.setAsDefaultProtocolClient('tabby')\n}\n\nipcMain.on('app:new-window', () => {\n    application.newWindow()\n})\n\nprocess.on('uncaughtException' as any, err => {\n    console.log(err)\n    application.broadcast('uncaughtException', err)\n})\n\nif (argv.d) {\n    electronDebug({\n        isEnabled: true,\n        showDevTools: true,\n        devToolsMode: 'undocked',\n    })\n}\n\napp.on('activate', async () => {\n    if (!application.hasWindows()) {\n        application.newWindow()\n    } else {\n        application.focus()\n    }\n})\n\n// Handle URL scheme on macOS\napp.on('open-url', async (event, url) => {\n    event.preventDefault()\n    console.log('Received open-url event:', url)\n    if (!application.hasWindows()) {\n        process.argv.push(url)\n    } else {\n        await app.whenReady()\n        application.handleSecondInstance([url], process.cwd())\n    }\n})\n\napp.on('second-instance', async (_event, newArgv, cwd) => {\n    application.handleSecondInstance(newArgv, cwd)\n})\n\nif (!app.requestSingleInstanceLock()) {\n    app.quit()\n    app.exit(0)\n}\n\napp.on('ready', async () => {\n    if (process.platform === 'darwin') {\n        app.dock.setMenu(Menu.buildFromTemplate([\n            {\n                label: 'New window',\n                click () {\n                    this.app.newWindow()\n                },\n            },\n        ]))\n    }\n\n    application.init()\n\n    const window = await application.newWindow({ hidden: argv.hidden })\n    await window.ready\n    window.passCliArguments(process.argv, process.cwd(), false)\n    window.focus()\n})\n"
  },
  {
    "path": "app/lib/lru.ts",
    "content": "import LRU from 'lru-cache'\nimport * as fs from 'fs'\nconst lru = new LRU({ max: 256, maxAge: 250 })\nconst origLstat = fs.realpathSync.bind(fs)\n\n// NB: The biggest offender of thrashing realpathSync is the node module system\n// itself, which we can't get into via any sane means.\nrequire('fs').realpathSync = function (p) {\n    let r = lru.get(p)\n    if (r) {\n        return r\n    }\n\n    r = origLstat(p)\n    lru.set(p, r)\n    return r\n}\n"
  },
  {
    "path": "app/lib/pluginManager.ts",
    "content": "import { promisify } from 'util'\n\n\nexport class PluginManager {\n    npm: any\n    npmReady?: Promise<void>\n\n    async ensureLoaded (): Promise<void> {\n        if (!this.npmReady) {\n            this.npmReady = new Promise(resolve => {\n                const npm = require('npm')\n                npm.load(err => {\n                    if (err) {\n                        console.error(err)\n                        return\n                    }\n                    npm.config.set('global', false)\n                    this.npm = npm\n                    resolve()\n                })\n            })\n        }\n        return this.npmReady\n    }\n\n    async install (path: string, name: string, version: string): Promise<void> {\n        await this.ensureLoaded()\n        this.npm.prefix = path\n        return promisify(this.npm.commands.install)([`${name}@${version}`])\n    }\n\n    async uninstall (path: string, name: string): Promise<void> {\n        await this.ensureLoaded()\n        this.npm.prefix = path\n        return promisify(this.npm.commands.remove)([name])\n    }\n}\n\n\nexport const pluginManager = new PluginManager()\n"
  },
  {
    "path": "app/lib/portable.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'fs'\nimport * as electron from 'electron'\n\nconst appPath = path.dirname(electron.app.getPath('exe'))\n\nconst portableData = path.join(appPath, 'data')\nif (fs.existsSync(portableData)) {\n    console.log('reset user data to ' + portableData)\n    electron.app.setPath('userData', portableData)\n}\n"
  },
  {
    "path": "app/lib/pty.ts",
    "content": "import * as nodePTY from 'node-pty'\nimport { v4 as uuidv4 } from 'uuid'\nimport { ipcMain } from 'electron'\nimport { Application } from './app'\nimport { UTF8Splitter } from './utfSplitter'\nimport { Subject, debounceTime } from 'rxjs'\n\nclass PTYDataQueue {\n    private buffers: Buffer[] = []\n    private delta = 0\n    private maxChunk = 1024 * 100\n    private maxDelta = this.maxChunk * 5\n    private flowPaused = false\n    private decoder = new UTF8Splitter()\n    private output$ = new Subject<Buffer>()\n\n    constructor (private pty: nodePTY.IPty, private onData: (data: Buffer) => void) {\n        this.output$.pipe(debounceTime(500)).subscribe(() => {\n            const remainder = this.decoder.flush()\n            if (remainder.length) {\n                this.onData(remainder)\n            }\n        })\n    }\n\n    push (data: Buffer) {\n        this.buffers.push(data)\n        this.maybeEmit()\n    }\n\n    ack (length: number) {\n        this.delta -= length\n        this.maybeEmit()\n    }\n\n    private maybeEmit () {\n        if (this.delta <= this.maxDelta && this.flowPaused) {\n            this.resume()\n            return\n        }\n        if (this.buffers.length > 0) {\n            if (this.delta > this.maxDelta && !this.flowPaused) {\n                this.pause()\n                return\n            }\n\n            const buffersToSend = []\n            let totalLength = 0\n            while (totalLength < this.maxChunk && this.buffers.length) {\n                totalLength += this.buffers[0].length\n                buffersToSend.push(this.buffers.shift())\n            }\n\n            if (buffersToSend.length === 0) {\n                return\n            }\n\n            let toSend = Buffer.concat(buffersToSend)\n            if (toSend.length > this.maxChunk) {\n                this.buffers.unshift(toSend.slice(this.maxChunk))\n                toSend = toSend.slice(0, this.maxChunk)\n            }\n            this.emitData(toSend)\n            this.delta += toSend.length\n\n            if (this.buffers.length) {\n                setImmediate(() => this.maybeEmit())\n            }\n        }\n    }\n\n    private emitData (data: Buffer) {\n        const validChunk = this.decoder.write(data)\n        this.onData(validChunk)\n        this.output$.next(validChunk)\n    }\n\n    private pause () {\n        this.pty.pause()\n        this.flowPaused = true\n    }\n\n    private resume () {\n        this.pty.resume()\n        this.flowPaused = false\n        this.maybeEmit()\n    }\n}\n\nexport class PTY {\n    private pty: nodePTY.IPty\n    private outputQueue: PTYDataQueue\n    exited = false\n\n    constructor (private id: string, private app: Application, ...args: any[]) {\n        this.pty = (nodePTY as any).spawn(...args)\n        for (const key of ['close', 'exit']) {\n            (this.pty as any).on(key, (...eventArgs) => this.emit(key, ...eventArgs))\n        }\n\n        this.outputQueue = new PTYDataQueue(this.pty, data => {\n            setImmediate(() => this.emit('data', data))\n        })\n\n        this.pty.onData(data => this.outputQueue.push(Buffer.from(data)))\n        this.pty.onExit(() => {\n            this.exited = true\n        })\n    }\n\n    getPID (): number {\n        return this.pty.pid\n    }\n\n    resize (columns: number, rows: number): void {\n        if ((this.pty as any)._writable) {\n            this.pty.resize(columns, rows)\n        }\n    }\n\n    write (buffer: Buffer): void {\n        if ((this.pty as any)._writable) {\n            this.pty.write(buffer as any)\n        }\n    }\n\n    ackData (length: number): void {\n        this.outputQueue.ack(length)\n    }\n\n    kill (signal?: string): void {\n        this.pty.kill(signal)\n    }\n\n    private emit (event: string, ...args: any[]) {\n        this.app.broadcast(`pty:${this.id}:${event}`, ...args)\n    }\n}\n\nexport class PTYManager {\n    private ptys: Record<string, PTY|undefined> = {}\n\n    init (app: Application): void {\n        ipcMain.on('pty:spawn', (event, ...options) => {\n            const id = uuidv4().toString()\n            event.returnValue = id\n            this.ptys[id] = new PTY(id, app, ...options)\n        })\n\n        ipcMain.on('pty:exists', (event, id) => {\n            event.returnValue = this.ptys[id] && !this.ptys[id].exited\n        })\n\n        ipcMain.on('pty:get-pid', (event, id) => {\n            event.returnValue = this.ptys[id]?.getPID()\n        })\n\n        ipcMain.on('pty:resize', (_event, id, columns, rows) => {\n            this.ptys[id]?.resize(columns, rows)\n        })\n\n        ipcMain.on('pty:write', (_event, id, data) => {\n            this.ptys[id]?.write(Buffer.from(data))\n        })\n\n        ipcMain.on('pty:kill', (_event, id, signal) => {\n            this.ptys[id]?.kill(signal)\n        })\n\n        ipcMain.on('pty:ack-data', (_event, id, length) => {\n            this.ptys[id]?.ackData(length)\n        })\n    }\n}\n"
  },
  {
    "path": "app/lib/sentry.ts",
    "content": "const { init } = String(process.type) === 'main' ? require('@sentry/electron/dist/main') : require('@sentry/electron/dist/renderer')\n\nconst SENTRY_DSN = 'https://4717a0a7ee0b4429bd3a0f06c3d7eec3@sentry.io/181876'\nlet release = null\ntry {\n    release = require('electron').app.getVersion()\n} catch {\n    release = require('@electron/remote').app.getVersion()\n}\n\nif (!process.env.TABBY_DEV) {\n    init({\n        dsn: SENTRY_DSN,\n        release,\n        integrations (integrations) {\n            return integrations.filter(integration => integration.name !== 'Breadcrumbs')\n        },\n    })\n}\n"
  },
  {
    "path": "app/lib/urlHandler.ts",
    "content": "import { createParserConfig } from './cli'\nimport { parse as parseShellCommand } from 'shell-quote'\n\nexport function isTabbyURL (arg: string): boolean {\n    return arg.toLowerCase().startsWith('tabby://')\n}\n\nexport function parseTabbyURL (url: string, cwd: string = process.cwd()): any {\n    try {\n        if (!isTabbyURL(url)) {\n            return null\n        }\n\n        // NOTE: the url host may be lowercased (xdg-open), need to use the original command\n        const urlInstance = new URL(url)\n        const command = urlInstance.host || urlInstance.pathname.replace(/^\\/+/, '')\n        const config = createParserConfig(cwd)\n        const commandConfig = config.commands.find(cmd => {\n            const primaryCommand = Array.isArray(cmd.command) ? cmd.command[0] : cmd.command\n            return command.toLowerCase() === primaryCommand.split(/\\s+/)[0].toLowerCase()\n        })\n        if (!commandConfig) {\n            console.error(`Unknown command in tabby:// URL: ${command}`)\n            return null\n        }\n        const primaryCommand = Array.isArray(commandConfig.command) ? commandConfig.command[0] : commandConfig.command\n        const actualCommand = primaryCommand.split(/\\s+/)[0]\n        const argv: any = {\n            _: [actualCommand],\n        }\n        for (const [key, value] of urlInstance.searchParams.entries()) {\n            let parsedValue: any = value\n            const optionConfig = commandConfig.options?.[key] ?? commandConfig.positionals?.[key]\n            if (optionConfig) {\n                switch (optionConfig.type) {\n                    case 'boolean':\n                        parsedValue = value === 'true' || value === ''\n                        break\n                    case 'number':\n                        parsedValue = parseInt(value, 10)\n                        break\n                    case 'array':\n                        parsedValue = parseShellCommand(value).filter(item => typeof item === 'string')\n                        break\n                    case 'string':\n                    default:\n                        parsedValue = value\n                        break\n                }\n            } else {\n                parsedValue = value\n            }\n            argv[key] = parsedValue\n        }\n\n        console.log(`URL Handler - Safely parsed [${url}] to:`, JSON.stringify(argv))\n        return argv\n    } catch (e) {\n        console.error('Failed to parse tabby:// URL:', e)\n        return null\n    }\n}\n"
  },
  {
    "path": "app/lib/utfSplitter.ts",
    "content": "const partials = [\n    [0b110, 5, 0],\n    [0b1110, 4, 1],\n    [0b11110, 3, 2],\n]\n\nexport class UTF8Splitter {\n    private internal = Buffer.alloc(0)\n\n    write (data: Buffer): Buffer {\n        this.internal = Buffer.concat([this.internal, data])\n\n        let keep = 0\n        for (const [pattern, shift, maxOffset] of partials) {\n            for (let offset = 0; offset < maxOffset + 1; offset++) {\n                if (this.internal[this.internal.length - offset - 1] >> shift === pattern) {\n                    keep = Math.max(keep, offset + 1)\n                }\n            }\n        }\n\n        const result = this.internal.slice(0, this.internal.length - keep)\n        this.internal = this.internal.slice(this.internal.length - keep)\n        return result\n    }\n\n    flush (): Buffer {\n        const result = this.internal\n        this.internal = Buffer.alloc(0)\n        return result\n    }\n}\n"
  },
  {
    "path": "app/lib/window.ts",
    "content": "import * as glasstron from 'glasstron'\nimport { autoUpdater } from 'electron-updater'\nimport { Subject, Observable, debounceTime } from 'rxjs'\nimport { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents, nativeTheme } from 'electron'\nimport ElectronConfig = require('electron-config')\nimport { enable as enableRemote } from '@electron/remote/main'\nimport * as os from 'os'\nimport * as path from 'path'\nimport macOSRelease from 'macos-release'\nimport { compare as compareVersions } from 'compare-versions'\n\nimport type { Application } from './app'\nimport { parseArgs } from './cli'\nimport { parseTabbyURL, isTabbyURL } from './urlHandler'\n\nlet DwmEnableBlurBehindWindow: any = null\nif (process.platform === 'win32') {\n    DwmEnableBlurBehindWindow = require('@tabby-gang/windows-blurbehind').DwmEnableBlurBehindWindow\n}\n\nexport interface WindowOptions {\n    hidden?: boolean\n}\n\nabstract class GlasstronWindow extends BrowserWindow {\n    blurType: string\n    abstract setBlur (_: boolean)\n}\n\nconst macOSVibrancyType: any = process.platform === 'darwin' ? compareVersions(macOSRelease().version || '0.0', '10.14', '>=') ? 'fullscreen-ui' : 'dark' : null\n\nconst activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`)\n\nexport class Window {\n    ready: Promise<void>\n    isMainWindow = false\n    webContents: WebContents\n    private visible = new Subject<boolean>()\n    private closed = new Subject<void>()\n    private window?: GlasstronWindow\n    private windowConfig: ElectronConfig\n    private windowBounds?: Rectangle\n    private closing = false\n    private lastVibrancy: { enabled: boolean, type?: string } | null = null\n    private disableVibrancyWhileDragging = false\n    private touchBarControl: any\n    private isFluentVibrancy = false\n    private dockHidden = false\n\n    get visible$ (): Observable<boolean> { return this.visible }\n    get closed$ (): Observable<void> { return this.closed }\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    constructor (private application: Application, private configStore: any, options?: WindowOptions) {\n        options = options ?? {}\n\n        this.windowConfig = new ElectronConfig({ name: 'window' })\n        this.windowBounds = this.windowConfig.get('windowBoundaries')\n\n        const maximized = this.windowConfig.get('maximized')\n        const bwOptions: BrowserWindowConstructorOptions = {\n            width: 800,\n            height: 600,\n            title: 'Tabby',\n            minWidth: 400,\n            minHeight: 300,\n            webPreferences: {\n                nodeIntegration: true,\n                preload: path.join(__dirname, 'sentry.js'),\n                backgroundThrottling: false,\n                contextIsolation: false,\n            },\n            maximizable: true,\n            frame: false,\n            show: false,\n            backgroundColor: '#00000000',\n            acceptFirstMouse: true,\n        }\n\n        if (this.windowBounds) {\n            Object.assign(bwOptions, this.windowBounds)\n            const closestDisplay = screen.getDisplayNearestPoint( { x: this.windowBounds.x, y: this.windowBounds.y } )\n\n            const [left1, top1, right1, bottom1] = [this.windowBounds.x, this.windowBounds.y, this.windowBounds.x + this.windowBounds.width, this.windowBounds.y + this.windowBounds.height]\n            const [left2, top2, right2, bottom2] = [closestDisplay.bounds.x, closestDisplay.bounds.y, closestDisplay.bounds.x + closestDisplay.bounds.width, closestDisplay.bounds.y + closestDisplay.bounds.height]\n\n            if ((left2 > right1 || right2 < left1 || top2 > bottom1 || bottom2 < top1) && !maximized) {\n                bwOptions.x = closestDisplay.bounds.width / 2 - bwOptions.width / 2\n                bwOptions.y = closestDisplay.bounds.height / 2 - bwOptions.height / 2\n            }\n        }\n\n        if (this.configStore.appearance?.frame === 'native') {\n            bwOptions.frame = true\n        } else {\n            bwOptions.titleBarStyle = 'hidden'\n            if (process.platform === 'win32') {\n                bwOptions.titleBarOverlay = {\n                    color: '#00000000',\n                }\n            }\n        }\n\n        if (process.platform === 'darwin') {\n            bwOptions.visualEffectState = 'active'\n        }\n\n        if (process.platform === 'darwin') {\n            this.window = new BrowserWindow(bwOptions) as GlasstronWindow\n        } else {\n            this.window = new glasstron.BrowserWindow(bwOptions)\n        }\n\n        this.webContents = this.window.webContents\n\n        this.window.webContents.once('did-finish-load', () => {\n            if (process.platform === 'darwin') {\n                this.window.setVibrancy(macOSVibrancyType)\n            } else if (process.platform === 'win32' && this.configStore.appearance?.vibrancy) {\n                this.setVibrancy(true)\n            }\n\n            this.setDarkMode(this.configStore.appearance?.colorSchemeMode ?? 'dark')\n\n            if (!options.hidden) {\n                if (maximized) {\n                    this.window.maximize()\n                } else {\n                    this.window.show()\n                }\n                this.window.focus()\n                this.window.moveTop()\n                application.focus()\n            }\n        })\n\n        this.window.on('blur', () => {\n            if (\n                (this.configStore.appearance?.dock ?? 'off') !== 'off' &&\n                this.configStore.appearance?.dockHideOnBlur &&\n                !BrowserWindow.getFocusedWindow()\n            ) {\n                this.hide()\n            }\n        })\n\n        enableRemote(this.window.webContents)\n\n        this.window.loadFile(path.join(app.getAppPath(), 'dist', 'index.html'))\n\n        this.window.webContents.setVisualZoomLevelLimits(1, 1)\n        this.window.webContents.setZoomFactor(1)\n        this.window.webContents.session.setPermissionCheckHandler(() => true)\n        this.window.webContents.session.setDevicePermissionHandler(() => true)\n\n        if (process.platform === 'darwin') {\n            this.touchBarControl = new TouchBar.TouchBarSegmentedControl({\n                segments: [],\n                change: index => this.send('touchbar-selection', index),\n            })\n            this.window.setTouchBar(new TouchBar({\n                items: [this.touchBarControl],\n            }))\n        } else {\n            this.window.setMenu(null)\n        }\n\n        this.setupWindowManagement()\n        this.setupUpdater()\n\n        this.ready = new Promise(resolve => {\n            const listener = event => {\n                if (event.sender === this.window.webContents) {\n                    ipcMain.removeListener('app:ready', listener as any)\n                    resolve()\n                }\n            }\n            ipcMain.on('app:ready', listener)\n        })\n    }\n\n    makeMain (): void {\n        this.isMainWindow = true\n        this.window.webContents.send('host:became-main-window')\n    }\n\n    setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void {\n        if (userRequested ?? true) {\n            this.lastVibrancy = { enabled, type }\n        }\n        if (process.platform === 'win32') {\n            if (parseFloat(os.release()) >= 10) {\n                this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null\n                try {\n                    this.window.setBlur(enabled)\n                    this.isFluentVibrancy = enabled && type === 'fluent'\n                } catch (error) {\n                    console.error('Failed to set window blur', error)\n                }\n            } else {\n                DwmEnableBlurBehindWindow(this.window.getNativeWindowHandle(), enabled)\n            }\n        } else if (process.platform === 'linux') {\n            this.window.setBackgroundColor(enabled ? '#00000000' : '#131d27')\n            this.window.setBlur(enabled)\n        } else {\n            this.window.setVibrancy(enabled ? macOSVibrancyType : null)\n        }\n    }\n\n    setDarkMode (mode: string): void {\n        if (process.platform === 'darwin') {\n            if ('light' === mode ) {\n                nativeTheme.themeSource = 'light'\n            } else if ('auto' === mode) {\n                nativeTheme.themeSource = 'system'\n            } else {\n                nativeTheme.themeSource = 'dark'\n            }\n        }\n    }\n\n    focus (): void {\n        this.window.focus()\n    }\n\n    send (event: string, ...args: any[]): void {\n        if (!this.window) {\n            return\n        }\n        this.window.webContents.send(event, ...args)\n        if (event === 'host:config-change') {\n            this.configStore = args[0]\n            this.enableDockedWindowStyles(this.isDockedOnTop())\n        }\n    }\n\n    isDestroyed (): boolean {\n        return !this.window || this.window.isDestroyed()\n    }\n\n    isFocused (): boolean {\n        return this.window.isFocused()\n    }\n\n    isVisible (): boolean {\n        return this.window.isVisible()\n    }\n\n    isDockedOnTop (): boolean {\n        return this.isMainWindow && this.configStore.appearance?.dock && this.configStore.appearance?.dock !== 'off' && (this.configStore.appearance?.dockAlwaysOnTop ?? true)\n    }\n\n    async hide (): Promise<void> {\n        if (process.platform === 'darwin') {\n            // Lose focus\n            Menu.sendActionToFirstResponder('hide:')\n            // Don't disable docked window styles when hiding - keep dock hidden if feature is enabled\n            if (this.isDockedOnTop()) {\n                // Temporarily disable always-on-top and other properties while hidden\n                if (this.window.isAlwaysOnTop()) {\n                    this.window.setAlwaysOnTop(false)\n                }\n            }\n        }\n        this.window.blur()\n        this.window.hide()\n    }\n\n    async show (): Promise<void> {\n        await this.enableDockedWindowStyles(this.isDockedOnTop())\n        this.window.show()\n        this.window.focus()\n    }\n\n    async present (): Promise<void> {\n        await this.show()\n        this.window.moveTop()\n    }\n\n    passCliArguments (argv: string[], cwd: string, secondInstance: boolean): void {\n        const urlArg = argv.find(arg => isTabbyURL(arg))\n        if (urlArg) {\n            this.send('cli', parseTabbyURL(urlArg, cwd), cwd, secondInstance)\n        } else {\n            this.send('cli', parseArgs(argv, cwd), cwd, secondInstance)\n        }\n    }\n\n    private async enableDockedWindowStyles (enabled: boolean) {\n        if (process.platform === 'darwin') {\n            if (enabled) {\n                if (!this.dockHidden) {\n                    app.dock.hide()\n                    this.dockHidden = true\n                }\n                this.window.setAlwaysOnTop(true, 'screen-saver', 1)\n                if (!this.window.isVisibleOnAllWorkspaces()) {\n                    this.window.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true })\n                }\n                if (this.window.fullScreenable) {\n                    this.window.setFullScreenable(false)\n                }\n            } else {\n                if (this.dockHidden) {\n                    await app.dock.show()\n                    this.dockHidden = false\n                }\n                if (this.window.isAlwaysOnTop()) {\n                    this.window.setAlwaysOnTop(false)\n                }\n                if (this.window.isVisibleOnAllWorkspaces()) {\n                    this.window.setVisibleOnAllWorkspaces(false)\n                }\n                if (!this.window.fullScreenable) {\n                    this.window.setFullScreenable(true)\n                }\n            }\n        }\n    }\n\n    private setupWindowManagement () {\n        this.window.on('show', () => {\n            this.visible.next(true)\n            this.send('host:window-shown')\n        })\n\n        this.window.on('hide', () => {\n            this.visible.next(false)\n        })\n\n        const moveSubscription = new Observable<void>(observer => {\n            this.window.on('move', () => observer.next())\n        }).pipe(debounceTime(250)).subscribe(() => {\n            this.send('host:window-moved')\n        })\n\n        this.window.on('closed', () => {\n            moveSubscription.unsubscribe()\n        })\n\n        this.window.on('enter-full-screen', () => this.send('host:window-enter-full-screen'))\n        this.window.on('leave-full-screen', () => this.send('host:window-leave-full-screen'))\n\n        this.window.on('maximize', () => this.send('host:window-maximized'))\n        this.window.on('unmaximize', () => this.send('host:window-unmaximized'))\n\n        this.window.on('close', event => {\n            if (!this.closing) {\n                event.preventDefault()\n                this.send('host:window-close-request')\n                return\n            }\n            this.windowConfig.set('windowBoundaries', this.windowBounds)\n            this.windowConfig.set('maximized', this.window.isMaximized())\n        })\n\n        this.window.on('closed', () => {\n            this.destroy()\n        })\n\n        this.window.on('resize', () => {\n            if (!this.window.isMaximized()) {\n                this.windowBounds = this.window.getBounds()\n            }\n        })\n\n        this.window.on('move', () => {\n            if (!this.window.isMaximized()) {\n                this.windowBounds = this.window.getBounds()\n            }\n        })\n\n        this.window.on('focus', () => {\n            this.send('host:window-focused')\n        })\n\n        this.on('ready', () => {\n            this.window?.webContents.send('start', {\n                config: this.configStore,\n                executable: app.getPath('exe'),\n                windowID: this.window.id,\n                isMainWindow: this.isMainWindow,\n                userPluginsPath: this.application.userPluginsPath,\n            })\n        })\n\n        this.on('window-minimize', () => {\n            this.window?.minimize()\n        })\n\n        this.on('window-set-bounds', (_, bounds) => {\n            this.window?.setBounds(bounds)\n        })\n\n        this.on('window-set-always-on-top', (_, flag) => {\n            this.window?.setAlwaysOnTop(flag)\n        })\n\n        this.on('window-set-vibrancy', (_, enabled, type) => {\n            this.setVibrancy(enabled, type)\n        })\n\n        this.on('window-set-dark-mode', (_, mode) => {\n            this.setDarkMode(mode)\n        })\n\n        this.on('window-set-window-controls-color', (_, theme) => {\n            if (process.platform === 'win32') {\n                const symbolColor: string = theme.foreground\n                this.window?.setTitleBarOverlay(\n                    {\n                        symbolColor: symbolColor,\n                        height: 32,\n                    },\n                )\n            }\n        })\n\n        this.on('window-set-title', (_, title) => {\n            this.window?.setTitle(title)\n        })\n\n        this.on('window-bring-to-front', () => {\n            if (this.window?.isMinimized()) {\n                this.window.restore()\n            }\n            this.present()\n        })\n\n        this.on('window-close', () => {\n            this.closing = true\n            this.window.close()\n        })\n\n        this.on('window-set-touch-bar', (_, segments, selectedIndex) => {\n            this.touchBarControl.segments = segments.map(s => ({\n                label: s.label,\n                icon: s.hasActivity ? activityIcon : undefined,\n            }))\n            this.touchBarControl.selectedIndex = selectedIndex\n        })\n\n        this.window.webContents.setWindowOpenHandler(() => {\n            return { action: 'deny' }\n        })\n\n        ipcMain.on('window-set-disable-vibrancy-while-dragging', (_event, value) => {\n            this.disableVibrancyWhileDragging = value && this.configStore.hacks?.disableVibrancyWhileDragging\n        })\n\n        let moveEndedTimeout: any = null\n        const onBoundsChange = () => {\n            if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging || !this.isFluentVibrancy) {\n                return\n            }\n            this.setVibrancy(false, undefined, false)\n            if (moveEndedTimeout) {\n                clearTimeout(moveEndedTimeout)\n            }\n            moveEndedTimeout = setTimeout(() => {\n                this.setVibrancy(this.lastVibrancy.enabled, this.lastVibrancy.type)\n            }, 50)\n        }\n        this.window.on('move', onBoundsChange)\n        this.window.on('resize', onBoundsChange)\n\n        ipcMain.on('window-set-traffic-light-position', (_event, x, y) => {\n            this.window.setWindowButtonPosition({ x, y })\n        })\n\n        ipcMain.on('window-set-opacity', (_event, opacity) => {\n            this.window.setOpacity(opacity)\n        })\n\n        this.on('window-set-progress-bar', (_, value) => {\n            this.window?.setProgressBar(value, { mode: value < 0 ? 'none' : 'normal' })\n        })\n    }\n\n    on (event: string, listener: (...args: any[]) => void): void {\n        ipcMain.on(event, (e, ...args) => {\n            if (!this.window || e.sender !== this.window.webContents) {\n                return\n            }\n            listener(e, ...args)\n        })\n    }\n\n    private setupUpdater () {\n        autoUpdater.autoDownload = true\n        autoUpdater.autoInstallOnAppQuit = true\n\n        autoUpdater.on('update-available', () => {\n            this.send('updater:update-available')\n        })\n\n        autoUpdater.on('update-not-available', () => {\n            this.send('updater:update-not-available')\n        })\n\n        autoUpdater.on('error', err => {\n            this.send('updater:error', err)\n        })\n\n        autoUpdater.on('update-downloaded', () => {\n            this.send('updater:update-downloaded')\n        })\n\n        this.on('updater:check-for-updates', () => {\n            autoUpdater.checkForUpdates()\n        })\n\n        this.on('updater:quit-and-install', () => {\n            autoUpdater.quitAndInstall()\n        })\n    }\n\n    private destroy () {\n        this.window = null\n        this.closed.next()\n        this.visible.complete()\n        this.closed.complete()\n    }\n}\n"
  },
  {
    "path": "app/package.json",
    "content": "{\n  \"name\": \"tabby\",\n  \"description\": \"A terminal for a modern age\",\n  \"private\": true,\n  \"repository\": \"https://github.com/Eugeny/tabby\",\n  \"author\": {\n    \"name\": \"Tabby Developers\",\n    \"email\": \"e@ajenti.org\"\n  },\n  \"main\": \"dist/main.js\",\n  \"version\": \"1.0.0-alpha.1\",\n  \"scripts\": {\n    \"postinstall\": \"patch-package\",\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"dependencies\": {\n    \"@electron/remote\": \"^2\",\n    \"atomically\": \"^2.0.2\",\n    \"any-promise\": \"^1.3.0\",\n    \"dunder-proto\": \"^1\",\n    \"electron-config\": \"2.0.0\",\n    \"electron-debug\": \"^3.2.0\",\n    \"electron-promise-ipc\": \"^2.2.4\",\n    \"electron-updater\": \"^5.2.1\",\n    \"fontmanager-redux\": \"1.1.0\",\n    \"glasstron\": \"0.1.1\",\n    \"js-yaml\": \"4.1.0\",\n    \"keytar\": \"^7.9.0\",\n    \"mz\": \"^2.7.0\",\n    \"native-process-working-directory\": \"^1.0.2\",\n    \"node-pty\": \"^1.2.0-beta.8\",\n    \"npm\": \"6\",\n    \"russh\": \"0.1.35\",\n    \"rxjs\": \"^7.5.7\",\n    \"source-map-support\": \"^0.5.20\",\n    \"v8-compile-cache\": \"^2.3.0\",\n    \"yargs\": \"^17.7.2\"\n  },\n  \"optionalDependencies\": {\n    \"@tabby-gang/windows-blurbehind\": \"^3.1.0\",\n    \"@tabby-gang/windows-process-tree\": \"^0.6.1\",\n    \"macos-native-processlist\": \"^2.1.0\",\n    \"patch-package\": \"^8\",\n    \"serialport\": \"11.0.1\",\n    \"serialport-binding-webserialapi\": \"^1.0.3\",\n    \"windows-native-registry\": \"^3.2.1\"\n  },\n  \"devDependencies\": {\n    \"@ngx-translate/core\": \"^14.0.0\",\n    \"@types/mz\": \"2.7.4\",\n    \"@types/node\": \"20.3.1\"\n  },\n  \"peerDependencies\": {\n    \"tabby-community-color-schemes\": \"*\",\n    \"tabby-core\": \"*\",\n    \"tabby-electron\": \"*\",\n    \"tabby-local\": \"*\",\n    \"tabby-plugin-manager\": \"*\",\n    \"tabby-serial\": \"*\",\n    \"tabby-settings\": \"*\",\n    \"tabby-ssh\": \"*\",\n    \"tabby-terminal\": \"*\"\n  },\n  \"resolutions\": {\n    \"node-abi\": \"4.9.0\",\n    \"node-gyp\": \"^10.0.0\",\n    \"nan\": \"2.22.2\",\n    \"node-addon-api\": \"^8.3.0\"\n  }\n}\n"
  },
  {
    "path": "app/patches/@serialport+bindings-cpp+11.0.3.patch",
    "content": "diff --git a/node_modules/@serialport/bindings-cpp/src/serialport_win.cpp b/node_modules/@serialport/bindings-cpp/src/serialport_win.cpp\nindex b11c07f..910023e 100644\n--- a/node_modules/@serialport/bindings-cpp/src/serialport_win.cpp\n+++ b/node_modules/@serialport/bindings-cpp/src/serialport_win.cpp\n@@ -10,6 +10,7 @@\n #include <initguid.h>\n #include <devpkey.h>\n #include <devguid.h>\n+#include <wchar.h>\n #pragma comment(lib, \"setupapi.lib\")\n \n #define ARRAY_SIZE(arr)     (sizeof(arr)/sizeof(arr[0]))\n@@ -25,6 +26,29 @@ typedef BOOL (WINAPI *CancelIoExType)(HANDLE hFile, LPOVERLAPPED lpOverlapped);\n \n std::list<int> g_closingHandles;\n \n+void ErrorCodeToString(const wchar_t* prefix, int errorCode, wchar_t *errorStr) {\n+  switch (errorCode) {\n+  case ERROR_FILE_NOT_FOUND:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: File not found\", prefix);\n+    break;\n+  case ERROR_INVALID_HANDLE:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: Invalid handle\", prefix);\n+    break;\n+  case ERROR_ACCESS_DENIED:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: Access denied\", prefix);\n+    break;\n+  case ERROR_OPERATION_ABORTED:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: Operation aborted\", prefix);\n+    break;\n+  case ERROR_INVALID_PARAMETER:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: The parameter is incorrect %d\", prefix, errorCode);\n+    break;\n+  default:\n+    _snwprintf_s(errorStr, ERROR_STRING_SIZE, _TRUNCATE, L\"%ls: Unknown error code %d\", prefix, errorCode);\n+    break;\n+  }\n+}\n+\n void ErrorCodeToString(const char* prefix, int errorCode, char *errorStr) {\n   switch (errorCode) {\n   case ERROR_FILE_NOT_FOUND:\n@@ -608,9 +632,9 @@ void CloseBaton::Execute() {\n   }\n }\n \n-char *copySubstring(char *someString, int n) {\n-  char *new_ = reinterpret_cast<char*>(malloc(sizeof(char)*n + 1));\n-  strncpy_s(new_, n + 1, someString, n);\n+wchar_t *copySubstring(wchar_t *someString, int n) {\n+  wchar_t *new_ = reinterpret_cast<wchar_t*>(malloc(sizeof(wchar_t)*n + 1));\n+  wcsncpy_s(new_, n + 1, someString, n);\n   new_[n] = '\\0';\n   return new_;\n }\n@@ -625,7 +649,7 @@ Napi::Value List(const Napi::CallbackInfo& info) {\n \n   Napi::Function callback = info[0].As<Napi::Function>();\n   ListBaton* baton = new ListBaton(callback);\n-  snprintf(baton->errorString, sizeof(baton->errorString), \"\");\n+  _snwprintf(baton->errorString, sizeof(baton->errorString), L\"\");\n \n   baton->Queue();\n   return env.Undefined();\n@@ -633,20 +657,20 @@ Napi::Value List(const Napi::CallbackInfo& info) {\n \n // It's possible that the s/n is a construct and not the s/n of the parent USB\n // composite device. This performs some convoluted registry lookups to fetch the USB s/n.\n-void getSerialNumber(const char *vid,\n-                     const char *pid,\n+void getSerialNumber(const wchar_t *vid,\n+                     const wchar_t *pid,\n                      const HDEVINFO hDevInfo,\n                      SP_DEVINFO_DATA deviceInfoData,\n                      const unsigned int maxSerialNumberLength,\n-                     char* serialNumber) {\n-  _snprintf_s(serialNumber, maxSerialNumberLength, _TRUNCATE, \"\");\n+                     wchar_t* serialNumber) {\n+  _snwprintf_s(serialNumber, maxSerialNumberLength, _TRUNCATE, L\"\");\n   if (vid == NULL || pid == NULL) {\n     return;\n   }\n \n   DWORD dwSize;\n   WCHAR szWUuidBuffer[MAX_BUFFER_SIZE];\n-  WCHAR containerUuid[MAX_BUFFER_SIZE];\n+  WCHAR wantedUuid[MAX_BUFFER_SIZE];\n \n \n   // Fetch the \"Container ID\" for this device node. In USB context, this \"Container\n@@ -683,7 +707,7 @@ void getSerialNumber(const char *vid,\n \n     // Given the UUID bytes, build up a (widechar) string from it. There's some mangling\n     // going on.\n-    StringFromGUID2((REFGUID)szWUuidBuffer, containerUuid, ARRAY_SIZE(containerUuid));\n+    StringFromGUID2((REFGUID)szWUuidBuffer, wantedUuid, ARRAY_SIZE(wantedUuid));\n   } else {\n     // Container UUID could not be fetched, return empty serial number.\n     return;\n@@ -693,21 +717,15 @@ void getSerialNumber(const char *vid,\n   // This means they're non-removable, and are not handled (yet).\n   // Maybe they should inherit the s/n from somewhere else.\n \n-  // Sanitize input - for whatever reason, StringFromGUID2() returns a WCHAR* but\n-  // the comparisons later need a plain old char*, in lowercase ASCII.\n-  char wantedUuid[MAX_BUFFER_SIZE];\n-  _snprintf_s(wantedUuid, MAX_BUFFER_SIZE, _TRUNCATE, \"%ws\", containerUuid);\n-  strlwr(wantedUuid);\n-\n   // Iterate through all the USB devices with the given VendorID/ProductID\n \n   HKEY vendorProductHKey;\n   DWORD retCode;\n-  char hkeyPath[MAX_BUFFER_SIZE];\n+  wchar_t hkeyPath[MAX_BUFFER_SIZE];\n \n-  _snprintf_s(hkeyPath, MAX_BUFFER_SIZE, _TRUNCATE, \"SYSTEM\\\\CurrentControlSet\\\\Enum\\\\USB\\\\VID_%s&PID_%s\", vid, pid);\n+  _snwprintf_s(hkeyPath, MAX_BUFFER_SIZE, _TRUNCATE, L\"SYSTEM\\\\CurrentControlSet\\\\Enum\\\\USB\\\\VID_%s&PID_%s\", vid, pid);\n \n-  retCode = RegOpenKeyEx(\n+  retCode = RegOpenKeyExW(\n     HKEY_LOCAL_MACHINE,\n     hkeyPath,\n     0,\n@@ -739,9 +757,9 @@ void getSerialNumber(const char *vid,\n           // Each of the subkeys here is the serial number of a USB device with the\n           // given VendorId/ProductId. Now fetch the string for the S/N.\n           DWORD serialNumberLength = maxSerialNumberLength;\n-          retCode = RegEnumKeyEx(vendorProductHKey,\n+          retCode = RegEnumKeyExW(vendorProductHKey,\n                                   i,\n-                                  serialNumber,\n+                                  reinterpret_cast<LPWSTR>(serialNumber),\n                                   &serialNumberLength,\n                                   NULL,\n                                   NULL,\n@@ -751,21 +769,21 @@ void getSerialNumber(const char *vid,\n           if (retCode == ERROR_SUCCESS) {\n             // Lookup info for VID_(vendorId)&PID_(productId)\\(serialnumber)\n \n-            _snprintf_s(hkeyPath, MAX_BUFFER_SIZE, _TRUNCATE,\n-                        \"SYSTEM\\\\CurrentControlSet\\\\Enum\\\\USB\\\\VID_%s&PID_%s\\\\%s\",\n+            _snwprintf_s(hkeyPath, MAX_BUFFER_SIZE, _TRUNCATE,\n+                        L\"SYSTEM\\\\CurrentControlSet\\\\Enum\\\\USB\\\\VID_%ls&PID_%ls\\\\%ls\",\n                         vid, pid, serialNumber);\n \n             HKEY deviceHKey;\n \n-            if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, hkeyPath, 0, KEY_READ, &deviceHKey) == ERROR_SUCCESS) {\n-                char readUuid[MAX_BUFFER_SIZE];\n+            if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, hkeyPath, 0, KEY_READ, &deviceHKey) == ERROR_SUCCESS) {\n+                wchar_t readUuid[MAX_BUFFER_SIZE];\n                 DWORD readSize = sizeof(readUuid);\n \n                 // Query VID_(vendorId)&PID_(productId)\\(serialnumber)\\ContainerID\n-                retCode = RegQueryValueEx(deviceHKey, \"ContainerID\", NULL, NULL, (LPBYTE)&readUuid, &readSize);\n+                retCode = RegQueryValueExW(deviceHKey, L\"ContainerID\", NULL, NULL, (LPBYTE)&readUuid, &readSize);\n                 if (retCode == ERROR_SUCCESS) {\n                     readUuid[readSize] = '\\0';\n-                    if (strcmp(wantedUuid, readUuid) == 0) {\n+                    if (wcscmp(wantedUuid, readUuid) == 0) {\n                         // The ContainerID UUIDs match, return now that serialNumber has\n                         // the right value.\n                         RegCloseKey(deviceHKey);\n@@ -783,7 +801,7 @@ void getSerialNumber(const char *vid,\n     RegCloseKey(vendorProductHKey);\n   }\n \n-  _snprintf_s(serialNumber, maxSerialNumberLength, _TRUNCATE, \"\");\n+  _snwprintf_s(serialNumber, maxSerialNumberLength, _TRUNCATE, L\"\");\n   return;\n }\n \n@@ -795,15 +813,15 @@ void ListBaton::Execute() {\n \n   int memberIndex = 0;\n   DWORD dwSize, dwPropertyRegDataType;\n-  char szBuffer[MAX_BUFFER_SIZE];\n-  char *pnpId;\n-  char *vendorId;\n-  char *productId;\n-  char *name;\n-  char *manufacturer;\n-  char *locationId;\n-  char *friendlyName;\n-  char serialNumber[MAX_REGISTRY_KEY_SIZE];\n+  wchar_t szBuffer[MAX_BUFFER_SIZE];\n+  wchar_t *pnpId;\n+  wchar_t *vendorId;\n+  wchar_t *productId;\n+  wchar_t *name;\n+  wchar_t *manufacturer;\n+  wchar_t *locationId;\n+  wchar_t *friendlyName;\n+  wchar_t serialNumber[MAX_REGISTRY_KEY_SIZE];\n   bool isCom;\n   while (true) {\n     isCom = false;\n@@ -814,7 +832,6 @@ void ListBaton::Execute() {\n     manufacturer = NULL;\n     locationId = NULL;\n     friendlyName = NULL;\n-    isCom = false;\n \n     ZeroMemory(&deviceInfoData, sizeof(SP_DEVINFO_DATA));\n     deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);\n@@ -826,16 +843,16 @@ void ListBaton::Execute() {\n     }\n \n     dwSize = sizeof(szBuffer);\n-    SetupDiGetDeviceInstanceId(hDevInfo, &deviceInfoData, szBuffer, dwSize, &dwSize);\n+    SetupDiGetDeviceInstanceIdW(hDevInfo, &deviceInfoData, reinterpret_cast<PWSTR>(szBuffer), dwSize, &dwSize);\n     szBuffer[dwSize] = '\\0';\n-    pnpId = strdup(szBuffer);\n+    pnpId = wcsdup(szBuffer);\n \n-    vendorId = strstr(szBuffer, \"VID_\");\n+    vendorId = wcsstr(szBuffer, L\"VID_\");\n     if (vendorId) {\n       vendorId += 4;\n       vendorId = copySubstring(vendorId, 4);\n     }\n-    productId = strstr(szBuffer, \"PID_\");\n+    productId = wcsstr(szBuffer, L\"PID_\");\n     if (productId) {\n       productId += 4;\n       productId = copySubstring(productId, 4);\n@@ -843,32 +860,29 @@ void ListBaton::Execute() {\n \n     getSerialNumber(vendorId, productId, hDevInfo, deviceInfoData, MAX_REGISTRY_KEY_SIZE, serialNumber);\n \n-    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &deviceInfoData,\n+    if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, &deviceInfoData,\n                                          SPDRP_LOCATION_INFORMATION, &dwPropertyRegDataType,\n-                                         reinterpret_cast<BYTE*>(szBuffer),\n-                                         sizeof(szBuffer), &dwSize)) {\n-      locationId = strdup(szBuffer);\n+                                         reinterpret_cast<PBYTE>(szBuffer), sizeof(szBuffer), &dwSize)) {\n+      locationId = wcsdup(szBuffer);\n     }\n-    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &deviceInfoData,\n+    if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, &deviceInfoData,\n                                          SPDRP_FRIENDLYNAME, &dwPropertyRegDataType,\n-                                         reinterpret_cast<BYTE*>(szBuffer),\n-                                         sizeof(szBuffer), &dwSize)) {\n-      friendlyName = strdup(szBuffer);\n+                                         reinterpret_cast<PBYTE>(szBuffer), sizeof(szBuffer), &dwSize)) {\n+      friendlyName = wcsdup(szBuffer);\n     }\n-    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &deviceInfoData,\n+    if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, &deviceInfoData,\n                                          SPDRP_MFG, &dwPropertyRegDataType,\n-                                         reinterpret_cast<BYTE*>(szBuffer),\n-                                         sizeof(szBuffer), &dwSize)) {\n-      manufacturer = strdup(szBuffer);\n+                                         reinterpret_cast<PBYTE>(szBuffer), sizeof(szBuffer), &dwSize)) {\n+      manufacturer = wcsdup(szBuffer);\n     }\n \n     HKEY hkey = SetupDiOpenDevRegKey(hDevInfo, &deviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);\n     if (hkey != INVALID_HANDLE_VALUE) {\n       dwSize = sizeof(szBuffer);\n-      if (RegQueryValueEx(hkey, \"PortName\", NULL, NULL, (LPBYTE)&szBuffer, &dwSize) == ERROR_SUCCESS) {\n+      if (RegQueryValueExW(hkey, L\"PortName\", NULL, NULL, (LPBYTE)&szBuffer, &dwSize) == ERROR_SUCCESS) {\n+        name = wcsdup(szBuffer);\n         szBuffer[dwSize] = '\\0';\n-        name = strdup(szBuffer);\n-        isCom = strstr(szBuffer, \"COM\") != NULL;\n+        isCom = wcsstr(szBuffer, L\"COM\") != NULL;\n       }\n     }\n     if (isCom) {\n@@ -916,6 +930,16 @@ void setIfNotEmpty(Napi::Object item, std::string key, const char *value) {\n   }\n }\n \n+void setIfNotEmpty(Napi::Object item, std::string key, const wchar_t *value) {\n+  Napi::Env env = item.Env();\n+  Napi::String v8key = Napi::String::New(env, key);\n+  if (wcslen(value) > 0) {\n+    (item).Set(v8key, Napi::String::New(env, (const char16_t*) value));\n+  } else {\n+    (item).Set(v8key, env.Undefined());\n+  }\n+}\n+\n void FlushBaton::Execute() {\n   DWORD purge_all = PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR;\n   if (!PurgeComm(int2handle(fd), purge_all)) {\ndiff --git a/node_modules/@serialport/bindings-cpp/src/serialport_win.h b/node_modules/@serialport/bindings-cpp/src/serialport_win.h\nindex f3e3c32..739b5dd 100644\n--- a/node_modules/@serialport/bindings-cpp/src/serialport_win.h\n+++ b/node_modules/@serialport/bindings-cpp/src/serialport_win.h\n@@ -47,23 +47,24 @@ Napi::Value Read(const Napi::CallbackInfo& info);\n \n Napi::Value List(const Napi::CallbackInfo& info);\n void setIfNotEmpty(Napi::Object item, std::string key, const char *value);\n+void setIfNotEmpty(Napi::Object item, std::string key, const wchar_t *value);\n \n struct ListResultItem {\n-  std::string path;\n-  std::string manufacturer;\n-  std::string serialNumber;\n-  std::string pnpId;\n-  std::string locationId;\n-  std::string friendlyName;\n-  std::string vendorId;\n-  std::string productId;\n+  std::wstring path;\n+  std::wstring manufacturer;\n+  std::wstring serialNumber;\n+  std::wstring pnpId;\n+  std::wstring locationId;\n+  std::wstring friendlyName;\n+  std::wstring vendorId;\n+  std::wstring productId;\n };\n \n struct ListBaton : public Napi::AsyncWorker {\n   ListBaton(Napi::Function& callback) : Napi::AsyncWorker(callback, \"node-serialport:ListBaton\"),\n   errorString() {}\n   std::list<ListResultItem*> results;\n-  char errorString[ERROR_STRING_SIZE];\n+  wchar_t errorString[ERROR_STRING_SIZE];\n   void Execute() override;\n \n   void OnOK() override {\n"
  },
  {
    "path": "app/src/app.module.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { ApplicationRef, NgModule } from '@angular/core'\nimport { BrowserModule } from '@angular/platform-browser'\nimport { ToastrModule } from 'ngx-toastr'\n\nexport function getRootModule (plugins: any[]) {\n    const imports = [\n        BrowserModule,\n        ...plugins,\n        ToastrModule.forRoot({\n            positionClass: 'toast-bottom-center',\n            toastClass: 'toast',\n            preventDuplicates: true,\n            extendedTimeOut: 1000,\n        }),\n    ]\n\n    const bootstrap = [\n        ...plugins.filter(x => x.bootstrap).map(x => x.bootstrap),\n    ]\n\n    if (bootstrap.length === 0) {\n        throw new Error('Did not find any bootstrap components. Are there any plugins installed?')\n    }\n\n    @NgModule({\n        imports,\n    }) class RootModule {\n        ngDoBootstrap (appRef: ApplicationRef) {\n            (window as any)['requestAnimationFrame'] = window[window['Zone'].__symbol__('requestAnimationFrame')]\n\n            const componentDef = bootstrap[0]\n            appRef.bootstrap(componentDef)\n        }\n    }\n\n    return RootModule\n}\n"
  },
  {
    "path": "app/src/entry.preload.ts",
    "content": "import 'v8-compile-cache'\nimport '../lib/lru'\nimport 'source-sans-pro/source-sans-pro.css'\nimport 'source-code-pro/source-code-pro.css'\nimport '@fortawesome/fontawesome-free/css/solid.css'\nimport '@fortawesome/fontawesome-free/css/brands.css'\nimport '@fortawesome/fontawesome-free/css/regular.css'\nimport '@fortawesome/fontawesome-free/css/fontawesome.css'\nimport './preload.scss'\n"
  },
  {
    "path": "app/src/entry.ts",
    "content": "import 'zone.js'\nimport 'core-js/proposals/reflect-metadata'\nimport 'rxjs'\n\nimport './global.scss'\nimport './toastr.scss'\n\n// Importing before @angular/*\nimport { findPlugins, initModuleLookup, loadPlugins } from './plugins'\n\nimport { enableProdMode, NgModuleRef, ApplicationRef } from '@angular/core'\nimport { enableDebugTools } from '@angular/platform-browser'\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic'\nimport { ipcRenderer } from 'electron'\n\nimport { getRootModule } from './app.module'\nimport { BootstrapData, BOOTSTRAP_DATA, PluginInfo } from '../../tabby-core/src/api/mainProcess'\n\n// Always land on the start view\nlocation.hash = ''\n\n;(process as any).enablePromiseAPI = true\n\nif (process.platform === 'win32' && !('HOME' in process.env)) {\n    process.env.HOME = `${process.env.HOMEDRIVE}${process.env.HOMEPATH}`\n}\n\nif (process.env.TABBY_DEV && !process.env.TABBY_FORCE_ANGULAR_PROD) {\n    console.warn('Running in debug mode')\n} else {\n    enableProdMode()\n}\n\nasync function bootstrap (bootstrapData: BootstrapData, plugins: PluginInfo[], safeMode = false): Promise<NgModuleRef<any>> {\n    if (safeMode) {\n        plugins = plugins.filter(x => x.isBuiltin)\n    }\n\n    const pluginModules = await loadPlugins(plugins, (current, total) => {\n        (document.querySelector('.progress .bar') as HTMLElement).style.width = `${100 * current / total}%` // eslint-disable-line\n    })\n\n    window['pluginModules'] = pluginModules\n\n    const module = getRootModule(pluginModules)\n    const moduleRef = await platformBrowserDynamic([\n        { provide: BOOTSTRAP_DATA, useValue: bootstrapData },\n    ]).bootstrapModule(module)\n    if (process.env.TABBY_DEV) {\n        const applicationRef = moduleRef.injector.get(ApplicationRef)\n        const componentRef = applicationRef.components[0]\n        enableDebugTools(componentRef)\n    }\n    return moduleRef\n}\n\nipcRenderer.once('start', async (_$event, bootstrapData: BootstrapData) => {\n    console.log('Window bootstrap data:', bootstrapData)\n\n    initModuleLookup(bootstrapData.userPluginsPath)\n\n    let plugins = await findPlugins()\n    bootstrapData.installedPlugins = plugins\n    if (bootstrapData.config.pluginBlacklist) {\n        plugins = plugins.filter(x => !bootstrapData.config.pluginBlacklist.includes(x.name))\n    }\n    plugins = plugins.filter(x => x.name !== 'web')\n\n    console.log('Starting with plugins:', plugins)\n    try {\n        await bootstrap(bootstrapData, plugins)\n    } catch (error) {\n        console.error('Angular bootstrapping error:', error)\n        console.warn('Trying safe mode')\n        window['safeModeReason'] = error\n        try {\n            await bootstrap(bootstrapData, plugins, true)\n        } catch (error2) {\n            console.error('Bootstrap failed:', error2)\n        }\n    }\n})\n\nipcRenderer.send('ready')\n"
  },
  {
    "path": "app/src/global.scss",
    "content": "html {\n    --spaciness: 1;\n}\n\nbody {\n    min-height: 100vh;\n    overflow: hidden;\n    background: transparent !important;\n    -webkit-font-smoothing: antialiased;\n}\n\n.modal-dialog, .modal-backdrop, .no-drag {\n    -webkit-app-region: no-drag;\n}\n\n.selectable {\n    user-select: text;\n}\n\na, button {\n    &.btn {\n        display: inline-flex;\n        align-items: center;\n        flex-wrap: nowrap;\n\n        & > svg {\n            pointer-events: none;\n            // width: 16px;\n            // height: 16px;\n        }\n    }\n}\n\n.form-line {\n    display: flex;\n    align-items: center;\n    padding: 10px 0;\n    margin: 0;\n    min-height: 64px;\n\n    .header {\n        margin-right: auto;\n\n        .title {\n        }\n\n        .description {\n            font-size: 13px;\n            opacity: .5;\n        }\n    }\n\n    &>.form-control, &>.input-group {\n        width: 33%;\n    }\n\n    &>.form-check {\n        display: flex;\n    }\n}\n\ninput[type=range] {\n    -webkit-appearance: none;\n    background: transparent;\n    outline: none;\n    padding: 0;\n\n    &:focus {\n        border-color: transparent;\n    }\n\n    @mixin thumb() {\n        -webkit-appearance: none;\n        display: block;\n        height: 12px;\n        width: 12px;\n        background: #aaa;\n        border-radius: 6px;\n        cursor: pointer;\n        margin-top: -4px;\n        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.95);\n        transition: 0.25s background;\n\n        &:hover {\n            background: #777;\n        }\n\n        &:active {\n            background: #666;\n        }\n    }\n\n    &::-webkit-slider-thumb { @include thumb(); }\n    &::-moz-range-thumb  { @include thumb(); }\n    &::-ms-thumb  { @include thumb(); }\n    &::thumb { @include thumb(); }\n\n    @mixin track() {\n        height: 4px;\n        background: #111;\n        margin: 3px 0 0;\n        box-sizing: border-box;\n    }\n\n    &::-webkit-slider-runnable-track { @include track(); }\n    &:focus::-webkit-slider-runnable-track { @include track(); }\n    &::-moz-range-track { @include track(); }\n    &::-ms-track { @include track(); }\n}\n\na[ngbdropdownitem] {\n    cursor: pointer;\n}\n\nngb-typeahead-window {\n    max-height: 60vh;\n    overflow: auto;\n}\n\n\n.hover-reveal {\n    opacity: 0;\n\n    .hover-reveal-parent:hover &,\n    *:hover > &,\n    &:hover,\n    &.show {\n      opacity: 1;\n    }\n}\n\n\n@keyframes terminalShakeFrames {\n    0% {\n        transform: translateX(0);\n    }\n    25% {\n        transform: translateX(5px);\n    }\n    50% {\n        transform: translateX(-5px);\n    }\n    75% {\n        transform: translateX(5px);\n    }\n    100% {\n        transform: translateX(0);\n    }\n}\n\n.dropdown {\n    .dropdown-toggle::after {\n        vertical-align: 0.15em;\n        margin-left: .5em;\n        opacity: .5;\n    }\n\n    .dropdown-item {\n        i + span {\n            margin-left: 10px;\n        }\n    }\n}\n\n.no-wrap {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.list-group-item > button {\n    margin: -7px 0;\n}\n\n.content-box {\n    max-width: 600px;\n}\n\n\n// Windows high contrast mode\n@media screen and (forced-colors: active) {\n    .form-switch .form-check-label::before {\n        background: buttonface;\n    }\n\n    .form-switch .form-check-label::after {\n        background: buttontext;\n    }\n\n    .form-switch .form-check-input:checked ~ .form-check-label::before {\n        background: activetext;\n    }\n\n    .form-switch .form-check-input:checked ~ .form-check-label::after {\n        background: canvas;\n    }\n\n    color-scheme-preview, terminaltab > .content {\n        forced-color-adjust: none;\n    }\n}\n"
  },
  {
    "path": "app/src/pluginBlacklist.ts",
    "content": "export const PLUGIN_BLACKLIST = [\n    'terminus-shell-selector', // superseded by profiles\n    'terminus-scrollbar', // now useless\n    'terminus-clickable-links', // now bundled with Tabby\n    'tabby-clickable-links', // now bundled with Tabby\n    'terminus-clickable-ips', // broken, functionality now bundled with Tabby\n    'terminus-elastic-quick-commands', // broken and abandoned, fork of quick-commands\n    'terminus-elastic-quick-cmds', // broken and abandoned, fork of quick-commands\n    'tabby-fig', // abandoned,\n    'tabby-plugin-fig-integration', // abandoned,\n]\n"
  },
  {
    "path": "app/src/plugins.ts",
    "content": "import * as fs from 'mz/fs'\nimport * as path from 'path'\nimport * as remote from '@electron/remote'\nimport { PluginInfo } from '../../tabby-core/src/api/mainProcess'\nimport { PLUGIN_BLACKLIST } from './pluginBlacklist'\n\nconst nodeModule = require('module') // eslint-disable-line @typescript-eslint/no-var-requires\n\nconst nodeRequire = global['require']\n\nfunction normalizePath (p: string): string {\n    const cygwinPrefix = '/cygdrive/'\n    if (p.startsWith(cygwinPrefix)) {\n        p = p.substring(cygwinPrefix.length).replace('/', '\\\\')\n        p = p[0] + ':' + p.substring(1)\n    }\n    return p\n}\n\nconst builtinPluginsPath = process.env.TABBY_DEV ? path.dirname(remote.app.getAppPath()) : path.join((process as any).resourcesPath, 'builtin-plugins')\n\nconst cachedBuiltinModules = {\n    '@angular/animations': require('@angular/animations'),\n    '@angular/cdk/drag-drop': require('@angular/cdk/drag-drop'),\n    '@angular/cdk/clipboard': require('@angular/cdk/clipboard'),\n    '@angular/common': require('@angular/common'),\n    '@angular/compiler': require('@angular/compiler'),\n    '@angular/core': require('@angular/core'),\n    '@angular/forms': require('@angular/forms'),\n    '@angular/localize': require('@angular/localize'),\n    '@angular/localize/init': require('@angular/localize/init'),\n    '@angular/platform-browser': require('@angular/platform-browser'),\n    '@angular/platform-browser/animations': require('@angular/platform-browser/animations'),\n    '@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),\n    '@ng-bootstrap/ng-bootstrap': require('@ng-bootstrap/ng-bootstrap'),\n    'ngx-toastr': require('ngx-toastr'),\n    rxjs: require('rxjs'),\n    'rxjs/operators': require('rxjs/operators'),\n    'zone.js/dist/zone.js': require('zone.js'),\n    'zone.js': require('zone.js'),\n}\n\nconst builtinModules = [\n    ...Object.keys(cachedBuiltinModules),\n    'tabby-core',\n    'tabby-local',\n    'tabby-settings',\n    'tabby-terminal',\n]\n\nconst originalRequire = (global as any).require\n;(global as any).require = function (query: string) {\n    if (cachedBuiltinModules[query]) {\n        return cachedBuiltinModules[query]\n    }\n    return originalRequire.apply(this, [query])\n}\n\nconst originalModuleRequire = nodeModule.prototype.require\nnodeModule.prototype.require = function (query: string) {\n    if (cachedBuiltinModules[query]) {\n        return cachedBuiltinModules[query]\n    }\n    return originalModuleRequire.call(this, query)\n}\n\nexport type ProgressCallback = (current: number, total: number) => void\n\nexport function initModuleLookup (userPluginsPath: string): void {\n    global['module'].paths.map((x: string) => nodeModule.globalPaths.push(normalizePath(x)))\n\n    const paths = []\n    paths.unshift(path.join(userPluginsPath, 'node_modules'))\n    paths.unshift(path.join(remote.app.getAppPath(), 'node_modules'))\n\n    if (process.env.TABBY_DEV) {\n        paths.unshift(path.dirname(remote.app.getAppPath()))\n    }\n\n    paths.unshift(builtinPluginsPath)\n    // paths.unshift(path.join((process as any).resourcesPath, 'app.asar', 'node_modules'))\n    if (process.env.TABBY_PLUGINS) {\n        process.env.TABBY_PLUGINS.split(':').map(x => paths.push(normalizePath(x)))\n    }\n\n    process.env.NODE_PATH += path.delimiter + paths.join(path.delimiter)\n    nodeModule._initPaths()\n\n    builtinModules.forEach(m => {\n        if (!cachedBuiltinModules[m]) {\n            cachedBuiltinModules[m] = nodeRequire(m)\n        }\n    })\n}\n\nconst PLUGIN_PREFIX = 'tabby-'\nconst LEGACY_PLUGIN_PREFIX = 'terminus-'\n\nasync function getCandidateLocationsInPluginDir (pluginDir: any): Promise<{ pluginDir: string, packageName: string }[]> {\n    const candidateLocations: { pluginDir: string, packageName: string }[] = []\n\n    if (await fs.exists(pluginDir)) {\n        const pluginNames = await fs.readdir(pluginDir)\n        if (await fs.exists(path.join(pluginDir, 'package.json'))) {\n            candidateLocations.push({\n                pluginDir: path.dirname(pluginDir),\n                packageName: path.basename(pluginDir),\n            })\n        }\n\n        const promises = []\n\n        for (const packageName of pluginNames) {\n            if ((packageName.startsWith(PLUGIN_PREFIX) || packageName.startsWith(LEGACY_PLUGIN_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {\n                const pluginPath = path.join(pluginDir, packageName)\n                const infoPath = path.join(pluginPath, 'package.json')\n                promises.push(fs.exists(infoPath).then(result => {\n                    if (result) {\n                        candidateLocations.push({ pluginDir, packageName })\n                    }\n                }))\n            }\n        }\n\n        await Promise.all(promises)\n    }\n\n    return candidateLocations\n}\n\nasync function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: string, packageName: string }[]> {\n    const candidateLocationsPromises: Promise<{ pluginDir: string, packageName: string }[]>[] = []\n\n    const processedPaths = []\n\n    for (let pluginDir of paths) {\n        if (processedPaths.includes(pluginDir)) {\n            continue\n        }\n        processedPaths.push(pluginDir)\n\n        pluginDir = normalizePath(pluginDir)\n\n        candidateLocationsPromises.push(getCandidateLocationsInPluginDir(pluginDir))\n\n    }\n\n    const candidateLocations: { pluginDir: string, packageName: string }[] = []\n    for (const pluginCandidateLocations of await Promise.all(candidateLocationsPromises)) {\n        candidateLocations.push(...pluginCandidateLocations)\n    }\n\n    return candidateLocations\n}\n\nasync function parsePluginInfo (pluginDir: string, packageName: string): Promise<PluginInfo|null> {\n    const pluginPath = path.join(pluginDir, packageName)\n    const infoPath = path.join(pluginPath, 'package.json')\n\n    const name = packageName.startsWith(PLUGIN_PREFIX) ? packageName.substring(PLUGIN_PREFIX.length) : packageName.substring(LEGACY_PLUGIN_PREFIX.length)\n\n    try {\n        const info = JSON.parse(await fs.readFile(infoPath, { encoding: 'utf-8' }))\n\n        if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin') || info.keywords.includes('tabby-plugin') || info.keywords.includes('tabby-builtin-plugin'))) {\n            return null\n        }\n\n        let author = info.author\n        author = author.name || author\n\n        console.log(`Found ${name} in ${pluginDir}`)\n\n        return {\n            name: name,\n            packageName: packageName,\n            isBuiltin: pluginDir === builtinPluginsPath,\n            isLegacy: info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'),\n            version: info.version,\n            description: info.description,\n            author,\n            path: pluginPath,\n            info,\n        }\n    } catch (error) {\n        console.error('Cannot load package info for', packageName)\n        return null\n    }\n}\n\nexport async function findPlugins (): Promise<PluginInfo[]> {\n    const paths = nodeModule.globalPaths\n    let foundPlugins: PluginInfo[] = []\n\n    const candidateLocations: { pluginDir: string, packageName: string }[] = await getPluginCandidateLocation(paths)\n\n    const foundPluginsPromises: Promise<PluginInfo|null>[] = []\n    for (const { pluginDir, packageName } of candidateLocations) {\n\n        if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {\n            continue\n        }\n\n        foundPluginsPromises.push(parsePluginInfo(pluginDir, packageName))\n    }\n\n    for (const pluginInfo of await Promise.all(foundPluginsPromises)) {\n        if (pluginInfo) {\n            const existing = foundPlugins.find(x => x.name === pluginInfo.name)\n            if (existing) {\n                if (existing.isLegacy) {\n                    console.info(`Plugin ${pluginInfo.packageName} already exists, overriding`)\n                    foundPlugins = foundPlugins.filter(x => x.name !== pluginInfo.name)\n                } else {\n                    console.info(`Plugin ${pluginInfo.packageName} already exists, skipping`)\n                    continue\n                }\n            }\n\n            foundPlugins.push(pluginInfo)\n        }\n    }\n\n    foundPlugins.sort((a, b) => a.name > b.name ? 1 : -1)\n    foundPlugins.sort((a, b) => a.isBuiltin < b.isBuiltin ? 1 : -1)\n    return foundPlugins\n}\n\nexport async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {\n    const plugins: any[] = []\n    const pluginsPromises: Promise<any>[] = []\n\n    let index = 0\n    const setProgress = function () {\n        index++\n        progress(index, foundPlugins.length)\n    }\n\n    progress(0, 1)\n    for (const foundPlugin of foundPlugins) {\n        pluginsPromises.push(new Promise(x => {\n            console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)\n            try {\n                const packageModule = nodeRequire(foundPlugin.path)\n                if (foundPlugin.packageName.startsWith('tabby-')) {\n                    cachedBuiltinModules[foundPlugin.packageName.replace('tabby-', 'terminus-')] = packageModule\n                }\n                const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default\n                pluginModule.pluginName = foundPlugin.name\n                pluginModule.bootstrap = packageModule.bootstrap\n                plugins.push(pluginModule)\n            } catch (error) {\n                console.error(`Could not load ${foundPlugin.name}:`, error)\n            }\n            setProgress()\n            setTimeout(x, 50)\n        }))\n    }\n    await Promise.all(pluginsPromises)\n\n    progress(1, 1)\n    return plugins\n}\n"
  },
  {
    "path": "app/src/preload.scss",
    "content": "app-root {\n  background: #1D272D;\n}\n\n.preload-logo {\n  -webkit-app-region: drag;\n  position: fixed;\n  left: 0;\n  top: 0;\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  animation: 0.5s ease-out fadeIn;\n  background-image: radial-gradient(#3a66820a 0%,  #000e17 30%, black 100%);\n  background-color: black;\n\n  &>div {\n    width: 200px;\n    height: 200px;\n    margin: auto;\n    flex: none;\n\n    .progress {\n      background: rgba(0,0,0,.25);\n      height: 3px;\n      margin: 10px 50px;\n\n      .bar {\n        transition: 1s ease-out width;\n        background: #a1c5e4;\n        height: 3px;\n        box-shadow: 0 0 2px #ffffff1f;\n      }\n    }\n  }\n}\n\n\n@keyframes fadeIn {\n  0% { opacity: 0; }\n  100% { opacity: 1; }\n}\n\n\n\n.tabby-logo {\n  width: 120px;\n  height: 120px;\n  background: url('../assets/logo.svg');\n  background-repeat: none;\n  background-size: contain;\n  margin: auto;\n}\n\n\n.tabby-title {\n  color: #a1c5e4;\n  font-family: 'Source Sans Pro';\n  text-align: center;\n  font-weight: normal;\n  font-size: 32px;\n  margin: 0;\n\n  sup {\n      color: #842fe0;\n  }\n}\n"
  },
  {
    "path": "app/src/toastr.scss",
    "content": "#toast-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 20px 0 50px;\n\n  .toast {\n    box-shadow: 0 1px 0 rgba(0,0,0,.25);\n    padding: 7px 12px;\n    background-image: none;\n    display: block !important;\n    border: none !important;\n    width: auto;\n    flex-basis: auto;\n    border-radius: 0.5rem;\n    font-size: 0.75rem;\n\n    &.toast-error {\n      background-color: #BD362F;\n      color: white !important;\n    }\n\n    &.toast-info {\n      background-color: #555;\n      color: #eee !important;\n    }\n  }\n}\n"
  },
  {
    "path": "app/tsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"baseUrl\": \"./src\",\n        \"module\": \"commonjs\",\n        \"target\": \"es2015\",\n        \"declaration\": false,\n        \"noImplicitAny\": false,\n        \"removeComments\": false,\n        \"esModuleInterop\": true,\n        \"emitDecoratorMetadata\": true,\n        \"experimentalDecorators\": true,\n        \"sourceMap\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"noUnusedParameters\": true,\n        \"noUnusedLocals\": true,\n        \"lib\": [\n           \"dom\",\n           \"es2015\",\n           \"es2015.iterable\",\n           \"es2017\",\n           \"es2019\",\n           \"es7\"\n        ]\n    },\n    \"compileOnSave\": false,\n    \"exclude\": [\n        \"dist\",\n        \"node_modules\",\n        \"*/node_modules\",\n        \"tabby*\",\n        \"platforms\"\n    ]\n}\n"
  },
  {
    "path": "app/tsconfig.main.json",
    "content": "{\n    \"compilerOptions\": {\n        \"baseUrl\": \"./lib\",\n        \"module\": \"commonjs\",\n        \"target\": \"es2017\",\n        \"moduleResolution\": \"node\",\n        \"declaration\": false,\n        \"noImplicitAny\": false,\n        \"removeComments\": false,\n        \"emitDecoratorMetadata\": true,\n        \"experimentalDecorators\": true,\n        \"esModuleInterop\": true,\n        \"sourceMap\": true,\n        \"noUnusedParameters\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"noUnusedLocals\": true,\n        \"lib\": [\n           \"dom\",\n           \"es2015\",\n           \"es2015.iterable\",\n           \"es2017\",\n           \"es7\"\n        ]\n    },\n    \"compileOnSave\": false,\n    \"exclude\": [\n        \"dist\",\n        \"src\",\n        \"node_modules\",\n        \"*/node_modules\"\n    ]\n}\n"
  },
  {
    "path": "app/webpack.config.main.mjs",
    "content": "import * as path from 'path'\nimport wp from 'webpack'\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nconst config = {\n    name: 'tabby-main',\n    target: 'electron-main',\n    entry: {\n        main: path.resolve(__dirname, 'lib/index.ts'),\n    },\n    mode: process.env.TABBY_DEV ? 'development' : 'production',\n    context: __dirname,\n    devtool: 'source-map',\n    output: {\n        path: path.join(__dirname, 'dist'),\n        pathinfo: true,\n        filename: '[name].js',\n    },\n    resolve: {\n        modules: ['lib/', 'node_modules', '../node_modules'].map(x => path.join(__dirname, x)),\n        extensions: ['.ts', '.js'],\n    },\n    module: {\n        rules: [\n            {\n                test: /\\.ts$/,\n                use: {\n                    loader: 'ts-loader',\n                    options: {\n                        configFile: path.resolve(__dirname, 'tsconfig.main.json'),\n                    },\n                },\n            },\n        ],\n    },\n    externals: {\n        'v8-compile-cache': 'commonjs v8-compile-cache',\n        'any-promise': 'commonjs any-promise',\n        electron: 'commonjs electron',\n        'electron-config': 'commonjs electron-config',\n        'electron-debug': 'commonjs electron-debug',\n        'electron-promise-ipc': 'commonjs electron-promise-ipc',\n        'electron-updater': 'commonjs electron-updater',\n        fs: 'commonjs fs',\n        glasstron: 'commonjs glasstron',\n        mz: 'commonjs mz',\n        npm: 'commonjs npm',\n        'node:os': 'commonjs os',\n        'node-pty': 'commonjs node-pty',\n        path: 'commonjs path',\n        util: 'commonjs util',\n        'source-map-support': 'commonjs source-map-support',\n        'windows-swca': 'commonjs windows-swca',\n        'windows-native-registry': 'commonjs windows-native-registry',\n        '@tabby-gang/windows-blurbehind': 'commonjs @tabby-gang/windows-blurbehind',\n        'yargs/yargs': 'commonjs yargs/yargs',\n    },\n    plugins: [\n        new wp.optimize.ModuleConcatenationPlugin(),\n        new wp.DefinePlugin({\n            'process.type': '\"main\"',\n        }),\n    ],\n}\n\nif (process.env.BUNDLE_ANALYZER) {\n    config.plugins.push(new BundleAnalyzerPlugin())\n}\n\nexport default () => config\n"
  },
  {
    "path": "app/webpack.config.mjs",
    "content": "import * as fs from 'fs'\nimport * as path from 'path'\nimport wp from 'webpack'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport { AngularWebpackPlugin } from '@ngtools/webpack'\nimport { createEs2015LinkerPlugin } from '@angular/compiler-cli/linker/babel'\nconst linkerPlugin = createEs2015LinkerPlugin({\n    linkerJitMode: true,\n    fileSystem: {\n        resolve: path.resolve,\n        exists: fs.existsSync,\n        dirname: path.dirname,\n        relative: path.relative,\n        readFile: fs.readFileSync,\n    },\n})\n\nexport default () => ({\n    name: 'tabby',\n    target: 'node',\n    entry: {\n        'index.ignore': 'file-loader?name=index.html!pug-html-loader!' + path.resolve(__dirname, './index.pug'),\n        sentry: path.resolve(__dirname, 'lib/sentry.ts'),\n        preload: path.resolve(__dirname, 'src/entry.preload.ts'),\n        bundle: path.resolve(__dirname, 'src/entry.ts'),\n    },\n    mode: process.env.TABBY_DEV ? 'development' : 'production',\n    optimization:{\n        minimize: false,\n    },\n    context: __dirname,\n    devtool: 'source-map',\n    output: {\n        path: path.join(__dirname, 'dist'),\n        pathinfo: true,\n        filename: '[name].js',\n        publicPath: 'auto',\n    },\n    resolve: {\n        modules: ['src/', 'node_modules', '../node_modules', 'assets/'].map(x => path.join(__dirname, x)),\n        extensions: ['.ts', '.js'],\n    },\n    module: {\n        rules: [\n            {\n                test: /\\.(m?)js$/,\n                loader: 'babel-loader',\n                options: {\n                    plugins: [linkerPlugin],\n                    compact: false,\n                    cacheDirectory: true,\n                },\n                resolve: {\n                    fullySpecified: false,\n                },\n            },\n            {\n                test: /\\.ts$/,\n                use: {\n                    loader: '@ngtools/webpack',\n                },\n            },\n            { test: /\\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },\n            { test: /\\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] },\n            {\n                test: /\\.(png|svg|ttf|eot|otf|woff|woff2)(\\?v=[0-9]\\.[0-9]\\.[0-9])?$/,\n                type: 'asset',\n            },\n        ],\n    },\n    externals: {\n        '@electron/remote': 'commonjs @electron/remote',\n        'v8-compile-cache': 'commonjs v8-compile-cache',\n        child_process: 'commonjs child_process',\n        electron: 'commonjs electron',\n        fs: 'commonjs fs',\n        module: 'commonjs module',\n        mz: 'commonjs mz',\n        path: 'commonjs path',\n    },\n    plugins: [\n        new wp.optimize.ModuleConcatenationPlugin(),\n        new wp.DefinePlugin({\n            'process.type': '\"renderer\"',\n        }),\n        new AngularWebpackPlugin({\n            tsconfig: path.resolve(__dirname, 'tsconfig.json'),\n            directTemplateLoading: false,\n            jitMode: true,\n        })\n    ],\n})\n"
  },
  {
    "path": "build/installer.nsh",
    "content": "!macro customInit\n  nsExec::Exec '\"$LOCALAPPDATA\\tabby\\Update.exe\" --uninstall -s'\n!macroend\n"
  },
  {
    "path": "build/linux/after-install.tpl",
    "content": "#!/bin/bash\ncat > '/usr/bin/${executable}' << END\n#!/bin/sh\n'/opt/${productFilename}/${executable}' --no-sandbox \\$@\nEND\n\nchmod +x '/usr/bin/${executable}'\n"
  },
  {
    "path": "build/mac/entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <key>com.apple.security.automation.apple-events</key>\n    <true/>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n    <key>com.apple.security.device.audio-input</key>\n    <true/>\n    <key>com.apple.security.device.camera</key>\n    <true/>\n  </dict>\n</plist>\n"
  },
  {
    "path": "electron-builder.yml",
    "content": "---\nappId: org.tabby\nproductName: Tabby\ncompression: normal\nnpmRebuild: false\nprotocols:\n  - name: Tabby URL\n    schemes:\n      - tabby\nfiles:\n- '**/*'\n- dist\n- '!lib'\n- '!src'\n- '!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,node.lib}'\n- '!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples,docs}'\n- '!**/node_modules/@angular/common/locales'\n- '!**/node_modules/@angular/compiler/src'\n- '!**/node_modules/node-gyp'\n- '!**/node_modules/**/*.d.ts'\n- '!**/node_modules/**/*.map'\n- '!**/node_modules/**/include/node'\n- '!**/node_modules/.bin'\n- '!**/node_modules/*/*/{esm5,fesm5,esm2015,fesm2015,_esm2015,_fesm2015}'\n- '!**/*.{woff,ttf,otf,eot}'\n- '!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}'\n- '!.editorconfig'\n- '!**/._*'\n- '!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}'\n- '!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}'\n- '!**/{appveyor.yml,.travis.yml,circle.yml}'\n- '!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}'\n- '!**/deps/cpu_features/build'\nextraResources:\n- builtin-plugins\n- extras\nasarUnpack:\n- 'dist/*.map'\n- node_modules/keytar/build/Release/*.node\n- node_modules/**/*.node\nwin:\n  icon: \"./build/windows/icon.ico\"\n  artifactName: tabby-${version}-portable-${env.ARCH}.${ext}\n  signtoolOptions:\n    rfc3161TimeStampServer: http://timestamp.sectigo.com\nnsis:\n  oneClick: false\n  artifactName: tabby-${version}-setup-${env.ARCH}.${ext}\n  installerIcon: \"./build/windows/icon.ico\"\n  allowToChangeInstallationDirectory: true\n  shortcutName: Tabby Terminal\nmac:\n  category: public.app-category.utilities\n  icon: \"./build/mac/icon.icns\"\n  artifactName: tabby-${version}-macos-${env.ARCH}.${ext}\n  hardenedRuntime: true\n  entitlements: \"./build/mac/entitlements.plist\"\n  entitlementsInherit: \"./build/mac/entitlements.plist\"\n  extendInfo:\n    ElectronTeamID: ${teamId}\n    NSRequiresAquaSystemAppearance: false\n    NSCameraUsageDescription: \"A subprocess requests access to the device's camera.\"\n    NSMicrophoneUsageDescription: \"A subprocess requests access to the device's microphone.\"\n    NSLocationUsageDescription: \"A subprocess requests access to the user's location information.\"\n    NSDesktopFolderUsageDescription: \"A subprocess requests access to the user's Desktop folder.\"\n    NSDocumentsFolderUsageDescription: \"A subprocess requests access to the user's Documents folder.\"\n    NSDownloadsFolderUsageDescription: \"A subprocess requests access to the user's Downloads folder.\"\n    NSNetworkVolumesUsageDescription: 'A subprocess requests access to files on a network volume.'\n    NSRemovableVolumesUsageDescription: 'A subprocess requests access to files on a removable volume.'\n    NSAppleEventsUsageDescription: 'A subprocess requests permission to send AppleScript events to another application.'\n\nlinux:\n  category: \"Utility;TerminalEmulator;System\"\n  icon: \"./build/icons\"\n  artifactName: tabby-${version}-linux-${env.ARCH}.${ext}\n  executableArgs:\n  - \"--no-sandbox\"\n  desktop:\n    entry:\n      StartupWMClass: tabby\n      MimeType: x-scheme-handler/tabby\nsnap:\n  plugs:\n  - default\n  - system-files\n  - system-observe\ndeb:\n  depends:\n  - gnome-keyring\n  - libnotify4\n  - libsecret-1-0\n  - libxtst6\n  - libnss3\n  afterInstall: build/linux/after-install.tpl\n  fpm:\n  - '--replaces'\n  - 'terminus-terminal'\npacman:\n  depends:\n  - gnome-keyring\n  - libsecret\nrpm:\n  depends:\n  - gnome-keyring\n  fpm:\n  - '--rpm-rpmbuild-define'\n  - '_build_id_links none'\n  - '--replaces'\n  - 'terminus-terminal'\nelectronFuses:\n  runAsNode: false\n  enableNodeOptionsEnvironmentVariable: false\n  enableNodeCliInspectArguments: false\n"
  },
  {
    "path": "extras/automator-workflows/Open Tabby here.workflow/Contents/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>NSServices</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>NSBackgroundColorName</key>\n\t\t\t<string>background</string>\n\t\t\t<key>NSIconName</key>\n\t\t\t<string>NSActionTemplate</string>\n\t\t\t<key>NSMenuItem</key>\n\t\t\t<dict>\n\t\t\t\t<key>default</key>\n\t\t\t\t<string>Open Tabby here</string>\n\t\t\t</dict>\n\t\t\t<key>NSMessage</key>\n\t\t\t<string>runWorkflowAsService</string>\n\t\t\t<key>NSRequiredContext</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSApplicationIdentifier</key>\n\t\t\t\t<string>com.apple.finder</string>\n\t\t\t</dict>\n\t\t\t<key>NSSendFileTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.item</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/automator-workflows/Open Tabby here.workflow/Contents/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict/>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>QuickLook/Thumbnail.png</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\ttv0Qtgo8zZ9+sQPQDNdKJHm7jeQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t8nlfnBbkORcam9cE84KuxM9Lgf6hYU0jehepX8sSNDU=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>document.wflow</key>\n\t\t<dict>\n\t\t\t<key>cdhash</key>\n\t\t\t<data>\n\t\t\tVK77ipNZktBsDCcUfnfht774juM=\n\t\t\t</data>\n\t\t\t<key>requirement</key>\n\t\t\t<string>identifier document and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = V4JSMC46SY</string>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^Resources/</key>\n\t\t<true/>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^[^/]+$</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/automator-workflows/Open Tabby here.workflow/Contents/document.wflow",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>AMApplicationBuild</key>\n\t<string>444.38</string>\n\t<key>AMApplicationVersion</key>\n\t<string>2.9</string>\n\t<key>AMDocumentVersion</key>\n\t<string>2</string>\n\t<key>actions</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>action</key>\n\t\t\t<dict>\n\t\t\t\t<key>AMAccepts</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>Container</key>\n\t\t\t\t\t<string>List</string>\n\t\t\t\t\t<key>Optional</key>\n\t\t\t\t\t<true/>\n\t\t\t\t\t<key>Types</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<string>com.apple.cocoa.string</string>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<key>AMActionVersion</key>\n\t\t\t\t<string>2.0.3</string>\n\t\t\t\t<key>AMApplication</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Automator</string>\n\t\t\t\t</array>\n\t\t\t\t<key>AMParameterProperties</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>COMMAND_STRING</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>CheckedForUserDefaultShell</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>inputMethod</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>shell</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>source</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t</dict>\n\t\t\t\t<key>AMProvides</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>Container</key>\n\t\t\t\t\t<string>List</string>\n\t\t\t\t\t<key>Types</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<string>com.apple.cocoa.string</string>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<key>ActionBundlePath</key>\n\t\t\t\t<string>/System/Library/Automator/Run Shell Script.action</string>\n\t\t\t\t<key>ActionName</key>\n\t\t\t\t<string>Run Shell Script</string>\n\t\t\t\t<key>ActionParameters</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>COMMAND_STRING</key>\n\t\t\t\t\t<string>/Applications/Tabby.app/Contents/MacOS/tabby open \"$1\"</string>\n\t\t\t\t\t<key>CheckedForUserDefaultShell</key>\n\t\t\t\t\t<true/>\n\t\t\t\t\t<key>inputMethod</key>\n\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t<key>shell</key>\n\t\t\t\t\t<string>/bin/sh</string>\n\t\t\t\t\t<key>source</key>\n\t\t\t\t\t<string></string>\n\t\t\t\t</dict>\n\t\t\t\t<key>BundleIdentifier</key>\n\t\t\t\t<string>com.apple.RunShellScript</string>\n\t\t\t\t<key>CFBundleVersion</key>\n\t\t\t\t<string>2.0.3</string>\n\t\t\t\t<key>CanShowSelectedItemsWhenRun</key>\n\t\t\t\t<false/>\n\t\t\t\t<key>CanShowWhenRun</key>\n\t\t\t\t<true/>\n\t\t\t\t<key>Category</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>AMCategoryUtilities</string>\n\t\t\t\t</array>\n\t\t\t\t<key>Class Name</key>\n\t\t\t\t<string>RunShellScriptAction</string>\n\t\t\t\t<key>InputUUID</key>\n\t\t\t\t<string>CDBAB8D4-B8B8-4FBB-9115-B4082FB99E1C</string>\n\t\t\t\t<key>Keywords</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Shell</string>\n\t\t\t\t\t<string>Script</string>\n\t\t\t\t\t<string>Command</string>\n\t\t\t\t\t<string>Run</string>\n\t\t\t\t\t<string>Unix</string>\n\t\t\t\t</array>\n\t\t\t\t<key>OutputUUID</key>\n\t\t\t\t<string>96B5890B-A95F-4BF2-8E5A-38E07A849C33</string>\n\t\t\t\t<key>UUID</key>\n\t\t\t\t<string>62251AFB-502C-4EA0-821C-D9B8CA96E6EE</string>\n\t\t\t\t<key>UnlocalizedApplications</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Automator</string>\n\t\t\t\t</array>\n\t\t\t\t<key>arguments</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<integer>0</integer>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>inputMethod</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string></string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>source</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>1</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<false/>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>CheckedForUserDefaultShell</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>2</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string></string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>COMMAND_STRING</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>3</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string>/bin/sh</string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>shell</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>4</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>isViewVisible</key>\n\t\t\t\t<true/>\n\t\t\t\t<key>location</key>\n\t\t\t\t<string>529.000000:305.000000</string>\n\t\t\t\t<key>nibPath</key>\n\t\t\t\t<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib</string>\n\t\t\t</dict>\n\t\t\t<key>isViewVisible</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</array>\n\t<key>connectors</key>\n\t<dict/>\n\t<key>workflowMetaData</key>\n\t<dict>\n\t\t<key>applicationBundleID</key>\n\t\t<string>com.apple.finder</string>\n\t\t<key>applicationBundleIDsByPath</key>\n\t\t<dict>\n\t\t\t<key>/System/Library/CoreServices/Finder.app</key>\n\t\t\t<string>com.apple.finder</string>\n\t\t</dict>\n\t\t<key>applicationPath</key>\n\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t<key>applicationPaths</key>\n\t\t<array>\n\t\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t</array>\n\t\t<key>inputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.fileSystemObject</string>\n\t\t<key>outputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.nothing</string>\n\t\t<key>presentationMode</key>\n\t\t<integer>15</integer>\n\t\t<key>processesInput</key>\n\t\t<integer>0</integer>\n\t\t<key>serviceApplicationBundleID</key>\n\t\t<string>com.apple.finder</string>\n\t\t<key>serviceApplicationPath</key>\n\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t<key>serviceInputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.fileSystemObject</string>\n\t\t<key>serviceOutputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.nothing</string>\n\t\t<key>serviceProcessesInput</key>\n\t\t<integer>0</integer>\n\t\t<key>systemImageName</key>\n\t\t<string>NSActionTemplate</string>\n\t\t<key>useAutomaticInputType</key>\n\t\t<integer>0</integer>\n\t\t<key>workflowTypeIdentifier</key>\n\t\t<string>com.apple.Automator.servicesMenu</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/automator-workflows/Paste path into Tabby.workflow/Contents/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>NSServices</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>NSBackgroundColorName</key>\n\t\t\t<string>background</string>\n\t\t\t<key>NSIconName</key>\n\t\t\t<string>NSActionTemplate</string>\n\t\t\t<key>NSMenuItem</key>\n\t\t\t<dict>\n\t\t\t\t<key>default</key>\n\t\t\t\t<string>Paste path into Tabby</string>\n\t\t\t</dict>\n\t\t\t<key>NSMessage</key>\n\t\t\t<string>runWorkflowAsService</string>\n\t\t\t<key>NSRequiredContext</key>\n\t\t\t<dict>\n\t\t\t\t<key>NSApplicationIdentifier</key>\n\t\t\t\t<string>com.apple.finder</string>\n\t\t\t</dict>\n\t\t\t<key>NSSendFileTypes</key>\n\t\t\t<array>\n\t\t\t\t<string>public.item</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/automator-workflows/Paste path into Tabby.workflow/Contents/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict/>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>QuickLook/Thumbnail.png</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\ttv0Qtgo8zZ9+sQPQDNdKJHm7jeQ=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t8nlfnBbkORcam9cE84KuxM9Lgf6hYU0jehepX8sSNDU=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>document.wflow</key>\n\t\t<dict>\n\t\t\t<key>cdhash</key>\n\t\t\t<data>\n\t\t\tDwLo2M9xZ+aZGtMzRCGHhHB/wMY=\n\t\t\t</data>\n\t\t\t<key>requirement</key>\n\t\t\t<string>identifier document and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = V4JSMC46SY</string>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^Resources/</key>\n\t\t<true/>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^[^/]+$</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/automator-workflows/Paste path into Tabby.workflow/Contents/document.wflow",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>AMApplicationBuild</key>\n\t<string>444.38</string>\n\t<key>AMApplicationVersion</key>\n\t<string>2.9</string>\n\t<key>AMDocumentVersion</key>\n\t<string>2</string>\n\t<key>actions</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>action</key>\n\t\t\t<dict>\n\t\t\t\t<key>AMAccepts</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>Container</key>\n\t\t\t\t\t<string>List</string>\n\t\t\t\t\t<key>Optional</key>\n\t\t\t\t\t<true/>\n\t\t\t\t\t<key>Types</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<string>com.apple.cocoa.string</string>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<key>AMActionVersion</key>\n\t\t\t\t<string>2.0.3</string>\n\t\t\t\t<key>AMApplication</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Automator</string>\n\t\t\t\t</array>\n\t\t\t\t<key>AMParameterProperties</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>COMMAND_STRING</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>CheckedForUserDefaultShell</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>inputMethod</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>shell</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t\t<key>source</key>\n\t\t\t\t\t<dict/>\n\t\t\t\t</dict>\n\t\t\t\t<key>AMProvides</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>Container</key>\n\t\t\t\t\t<string>List</string>\n\t\t\t\t\t<key>Types</key>\n\t\t\t\t\t<array>\n\t\t\t\t\t\t<string>com.apple.cocoa.string</string>\n\t\t\t\t\t</array>\n\t\t\t\t</dict>\n\t\t\t\t<key>ActionBundlePath</key>\n\t\t\t\t<string>/System/Library/Automator/Run Shell Script.action</string>\n\t\t\t\t<key>ActionName</key>\n\t\t\t\t<string>Run Shell Script</string>\n\t\t\t\t<key>ActionParameters</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>COMMAND_STRING</key>\n\t\t\t\t\t<string>/Applications/Tabby.app/Contents/MacOS/tabby paste --escape \"$1\"</string>\n\t\t\t\t\t<key>CheckedForUserDefaultShell</key>\n\t\t\t\t\t<true/>\n\t\t\t\t\t<key>inputMethod</key>\n\t\t\t\t\t<integer>1</integer>\n\t\t\t\t\t<key>shell</key>\n\t\t\t\t\t<string>/bin/sh</string>\n\t\t\t\t\t<key>source</key>\n\t\t\t\t\t<string></string>\n\t\t\t\t</dict>\n\t\t\t\t<key>BundleIdentifier</key>\n\t\t\t\t<string>com.apple.RunShellScript</string>\n\t\t\t\t<key>CFBundleVersion</key>\n\t\t\t\t<string>2.0.3</string>\n\t\t\t\t<key>CanShowSelectedItemsWhenRun</key>\n\t\t\t\t<false/>\n\t\t\t\t<key>CanShowWhenRun</key>\n\t\t\t\t<true/>\n\t\t\t\t<key>Category</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>AMCategoryUtilities</string>\n\t\t\t\t</array>\n\t\t\t\t<key>Class Name</key>\n\t\t\t\t<string>RunShellScriptAction</string>\n\t\t\t\t<key>InputUUID</key>\n\t\t\t\t<string>CDBAB8D4-B8B8-4FBB-9115-B4082FB99E1C</string>\n\t\t\t\t<key>Keywords</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Shell</string>\n\t\t\t\t\t<string>Script</string>\n\t\t\t\t\t<string>Command</string>\n\t\t\t\t\t<string>Run</string>\n\t\t\t\t\t<string>Unix</string>\n\t\t\t\t</array>\n\t\t\t\t<key>OutputUUID</key>\n\t\t\t\t<string>96B5890B-A95F-4BF2-8E5A-38E07A849C33</string>\n\t\t\t\t<key>UUID</key>\n\t\t\t\t<string>62251AFB-502C-4EA0-821C-D9B8CA96E6EE</string>\n\t\t\t\t<key>UnlocalizedApplications</key>\n\t\t\t\t<array>\n\t\t\t\t\t<string>Automator</string>\n\t\t\t\t</array>\n\t\t\t\t<key>arguments</key>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>0</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<integer>0</integer>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>inputMethod</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>1</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string></string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>source</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>1</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>2</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<false/>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>CheckedForUserDefaultShell</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>2</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>3</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string></string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>COMMAND_STRING</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>3</string>\n\t\t\t\t\t</dict>\n\t\t\t\t\t<key>4</key>\n\t\t\t\t\t<dict>\n\t\t\t\t\t\t<key>default value</key>\n\t\t\t\t\t\t<string>/bin/sh</string>\n\t\t\t\t\t\t<key>name</key>\n\t\t\t\t\t\t<string>shell</string>\n\t\t\t\t\t\t<key>required</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>type</key>\n\t\t\t\t\t\t<string>0</string>\n\t\t\t\t\t\t<key>uuid</key>\n\t\t\t\t\t\t<string>4</string>\n\t\t\t\t\t</dict>\n\t\t\t\t</dict>\n\t\t\t\t<key>isViewVisible</key>\n\t\t\t\t<true/>\n\t\t\t\t<key>location</key>\n\t\t\t\t<string>529.000000:305.000000</string>\n\t\t\t\t<key>nibPath</key>\n\t\t\t\t<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib</string>\n\t\t\t</dict>\n\t\t\t<key>isViewVisible</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</array>\n\t<key>connectors</key>\n\t<dict/>\n\t<key>workflowMetaData</key>\n\t<dict>\n\t\t<key>applicationBundleID</key>\n\t\t<string>com.apple.finder</string>\n\t\t<key>applicationBundleIDsByPath</key>\n\t\t<dict>\n\t\t\t<key>/System/Library/CoreServices/Finder.app</key>\n\t\t\t<string>com.apple.finder</string>\n\t\t</dict>\n\t\t<key>applicationPath</key>\n\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t<key>applicationPaths</key>\n\t\t<array>\n\t\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t</array>\n\t\t<key>inputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.fileSystemObject</string>\n\t\t<key>outputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.nothing</string>\n\t\t<key>presentationMode</key>\n\t\t<integer>15</integer>\n\t\t<key>processesInput</key>\n\t\t<integer>0</integer>\n\t\t<key>serviceApplicationBundleID</key>\n\t\t<string>com.apple.finder</string>\n\t\t<key>serviceApplicationPath</key>\n\t\t<string>/System/Library/CoreServices/Finder.app</string>\n\t\t<key>serviceInputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.fileSystemObject</string>\n\t\t<key>serviceOutputTypeIdentifier</key>\n\t\t<string>com.apple.Automator.nothing</string>\n\t\t<key>serviceProcessesInput</key>\n\t\t<integer>0</integer>\n\t\t<key>systemImageName</key>\n\t\t<string>NSActionTemplate</string>\n\t\t<key>useAutomaticInputType</key>\n\t\t<integer>0</integer>\n\t\t<key>workflowTypeIdentifier</key>\n\t\t<string>com.apple.Automator.servicesMenu</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "extras/clink/CHANGES",
    "content": "# Changes\n\n### Releases from [chrisant996/clink](https://github.com/chrisant996/clink) fork\n\n#### v1.7.6\n\n- Update Win8.1 character width measurements from [wcwidth-verifier](https://github.com/chrisant996/wcwidth-verifier).\n- Fixed a case where other popup list colors could interfere with the `colors.border` color in `clink.popuplist()`.\n- Fixed [#709](https://github.com/chrisant996/clink/issues/709); TAB expansion doesn't work for `cd ~` (regression introduced in v1.3.36).\n\n#### v1.7.5\n\n- Added new Lua API [console.ellipsify()](#console.ellipsify) to truncate an input string in various ways.\n- Added new [rl_buffer:setcommentrow()](#rl_buffer:setcommentrow) to let [`\"luafunc:\"` commands](#luakeybindings) immediately show text in the comment row.\n- Adjusted some character width measurements based on analysis from [wcwidth-verifier](https://github.com/chrisant996/wcwidth-verifier) on Win8.1, Win10 with conhost, Win10 with Windows Terminal 1.22, Win11 with conhost, and Win11 with Windows Terminal 1.22.\n- The Headline, Pure, and Bureau clinkprompt files now consider unpublished branches as being \"ahead\", even in cases where git doesn't report a specific \"ahead by\" count.\n- Internal changes to the right side prompt implementation, to disentangle unnecessary internal dependencies.\n\n#### v1.7.4\n\n- Changed searching for color themes and custom prompts to always include `themes\\` directories under the Clink program directory and Clink profile directory, even when the `clink.path` setting has been used to remove them from the list of script directories.\n- Improved emoji width measurements.\n  - Unqualified emojis are counted as a single cell now.  Windows Terminal intentionally renders these as a single cell for compatibility with the behavior of the first terminal programs on Linux that began to support emoji characters (an important compatibility detail for the Windows Subsystem for Linux, for example).\n  - Country flag emoji character pairs are recognized.\n  - Skin tone variant selectors are recognized.\n  - The zero width joiner is recognized when it joins two emoji characters, or an emoji and a male or female symbol.\n  - **NOTE:**  A given OS version and terminal program version will only recognize certain combinations of joined emojis as valid sequences.  And Windows Terminal is one of the only terminal programs on Windows that can draw color emoji characters.  Clink has no way to know how a given terminal will actually render sequences of Unicode emoji characters.  If a terminal program renders a particular emoji sequence differently than Clink predicts, then the display may become garbled.  If that happens, don't use that emoji sequence.  But if a terminal program renders an emoji sequence as a single glyph and Clink predicts the width incorrectly, then please open an issue with details about the emoji.\n- The pure.clinkprompt now also supports virtualenv's `VIRTUAL_ENV_DISABLE_PROMPT` and `VIRTUAL_ENV_PROMPT` environment variables.\n- Added [console.cellcountiter()](#console.cellcountiter) so scripts can iterate over Unicode character sequences in a string.  Using `unicode.iter()` returns one codepoint at a time, but emojis can have multiple codepoints and `console.cellcountiter()` groups them together for easy processing and accurate overall width measures (measuring the width of each codepoint in an emoji sequence is not the same as measuring the width of the emoji sequence as a whole).\n- Fixed the right side transient prompt so it shows up even when identical to the right side normal prompt.\n- Fixed the `demo` callback in .clinkprompt files.\n- Fixed potential for incomplete input of Unicode surrogate pairs.  An easy way to encounter the problem was using the Windows emoji picker to input an emoji that's a sequence of other emojis joined together -- for example, the pride flag emoji is a flag emoji joined with a rainbow emoji, and the rainbow emoji uses a surrogate pair.\n- Fixed an edge case where if a .clinkprompt file calls `require()` to load a module, and later on a different script also calls `require()` for the same module, then any event handlers or prompt filters registered by the required module accidentally only worked inside the .clinkprompt that originally required it.  Now required modules behave the same regardless whether they are first required by a .clinkprompt file or by some other script file.\n- Fixed [#685](https://github.com/chrisant996/clink/issues/685); CTRL-L while input text is present redraws the input line wrong.\n- Fixed [#686](https://github.com/chrisant996/clink/issues/686); `clink config -h` shows inaccurate info.\n- Fixed [#696](https://github.com/chrisant996/clink/issues/696); console width length off-by-one on certain characters (in particular U+26A1).\n- Fixed [#698](https://github.com/chrisant996/clink/issues/698); script error when using `clink config prompt show pure`.\n- Fixed [#701](https://github.com/chrisant996/clink/issues/701); issues in Antares prompt (missing tag and error when truncation is needed).\n\n#### v1.7.3\n\n- Added the missing Tomorrow* color themes.\n- Fixed [#682](https://github.com/chrisant996/clink/issues/682); the `clink config theme use` and `clink config prompt use` commands had no effect if there is no `clink_settings` file yet.\n\n#### v1.7.2\n\n- Fixed an error when the updater tried to install the new `themes\\` subdirectory and files.\n\n#### v1.7.0\n\nClink now supports color theme files and custom prompt files.  These enable packaging Clink color settings or Clink custom prompts into shareable files.  This finally makes it easy to download and apply themes or prompts shared by other people, or copy them and modify them.  The new [clink-themes](https://github.com/chrisant996/clink-themes) repo is a site where .clinktheme and .clinkprompt files can be shared (see [Contributing](https://github.com/chrisant996/clink-themes#contributing) for details on how to contribute your own themes and prompts).\n\n- Added support for `*.clinktheme` color theme files; see [Color Themes](#color-themes) for more information.\n  - Added several `clink config theme` commands for color themes (run `clink config theme --help`).\n  - The famous [Dracula](https://draculatheme.com), [Solarized](https://github.com/altercation/solarized) (light and dark), and [Tomorrow](https://github.com/chriskempson/tomorrow-theme) (1 light, 4 dark) themes are included.\n  - Use <code>clink config theme use <span class=\"arg\">name</span></code> to apply a color theme, or set the `CLINK_COLORTHEME` environment variable to the color theme name.\n- Added support for `*.clinkprompt` custom prompt files; see [Custom Prompts](#custom-prompts) for more information.  This makes it easy to share custom prompts, and to have a library of many different custom prompts and switch between them quickly and easily.  One .clinkprompt can be active at a time; activating one deactivates any others.\n  - Added several `clink config prompt` commands for custom prompts (run `clink config prompt --help`).\n  - [Oh-My-Posh](#oh-my-posh) support is included.\n  - Also included are ports of [Agnoster](https://github.com/agnoster/agnoster-zsh-theme), [Pure](https://github.com/sindresorhus/pure), [Headline](https://github.com/Moarram/headline), [Antares](https://github.com/elB4RTO/zsh-themes/tree/master/antares), and a few others (all ported from zsh to Clink).\n  - Use <code>clink config prompt use <span class=\"arg\">name</span></code> to activate a custom prompt module, or set the `CLINK_CUSTOMPROMPT` environment variable to the custom prompt name.\n- Added the ability to show input hints in the comment row (below the input line).\n  - Input hints are off by default, and can be enabled with `clink set comment_row.show_hints true`.\n  - Argmatchers can provide input hints; see [Show a Usage Hint](#addarg_hint) for more information.\n  - Lua scripts can create custom hinters; see [Showing Input Hints](#showinginputhints) for more information.\n- Enhanced the syntax for setting colors; added `italic` and `reverse`, and added `#XXXXXX` and `#XXX` shortcuts for specifying 24-bit color values.\n- Added more popup list colors:  `color.popup_border`, `color.popup_header`, `color.popup_footer`, `color.popup_select`, and `color.popup_selectdesc`.\n- Changed phrasing from \"Accept Suggestion\" to \"Insert Suggestion\" in the documentation and in the auto-suggestions usage hint text.\n- Changed the Lua `print()` function to support UTF8 output and terminal escape codes.  Now the only reasons for a script to use `clink.print()` instead of `print()` are (1) background compatibility or (2) using `NONL` to suppress printing a line ending.\n- Improved terminal output logging when the `debug.log_terminal` setting is enabled (the setting is only for diagnostic use).\n  - Now it captures all WriteConsoleW and WriteFile output sent to stdout or stderr (instead of only capturing output from the Readline library).\n  - Added a `debug.log_output_callstacks` setting which includes callstacks for each output reported by the `debug.log_terminal` setting.\n- Added a workaround for Unicode limitations in legacy console windows and legacy terminals (improves cursor position accuracy when Unicode surrogate pairs are present).\n- Added several new Lua APIs for color themes and custom prompts:  [clink.getprompts()](#clink.getprompts), [clink.applyprompt()](#clink.applyprompt), [clink.getclinkprompt()](#clink.getclinkprompt), [clink.getthemes()](#clink.getthemes), [clink.readtheme()](#clink.readtheme), [clink.applytheme()](#clink.applytheme), [settings.clear()](#settings.clear), [settings.parsecolor()](#settings.parsecolor), [settings.formatcolor()](#settings.formatcolor), [os.createguid()](#os.createguid).\n- Added [git Lua APIs](#git) for use by custom prompts.\n- Added optional `cookie` argument to [clink.promptcoroutine()](#clink.promptcoroutine) to make it simple for *.clinkprompt files to allow customization that makes use of asynchronous prompt filtering without needing modifications to the main *.clinkprompt file.\n- Fixed detecting file associations (some file extensions weren't detected as having file associations, causing executable completion to omit them, and causing input line coloring to be inaccurate).\n- Fixed a case where updating the right side prompt could leave stray characters behind.\n- Fixed a case where the `match.coloring_rules` setting could have no effect.\n- Fixed delay when typing `X:` and it's a remote drive.\n- Fixed coloring `2>&1`; the `1` wasn't colored.\n- Fixed color of leading blank lines in a prompt string (use the terminal's default color, not the `color.prompt` color).\n- Fixed `rl.collapsetilde()` which just didn't do its job.\n- Fixed `%clink_dummy_capture_env%` to stop accidentally leaking into the environment variables collection.\n- Fixed an infinite loop when `prompt.async` was false.\n- Fixed <kbd>F9</kbd> to stop jumping one past the actual entered history number.\n- Fixed various edge case bugs in the input line display, which were uncovered while adding the ability to show input hints.\n\n#### v1.6.21\n\n- Reduced the performance overhead of hooked APIs from about 20 microseconds to about 2 microseconds.\n- Enhanced the executable recognition to avoid flickering red (or `color.unrecognized`) for an executable name that was already recognized in a recent previous input line.\n- Enhanced the `srcmap` command in the Lua debugger so that `srcmap dir` automatically sets up source mappings for Clink's built in scripts using `dir` as the repo root.\n- Fixed when `history.expand_mode` is `off`; it didn't fully turn off all of the history expansion syntax forms (for example the `^` syntax).\n- Fixed input line coloring when the first word is a device name (e.g. `nul` or `com1:`); it should use `color.unrecognized` for the color.\n- Fixed [#651](https://github.com/chrisant996/clink/issues/651); completion doesn't work for `./` and `../` anymore in the first word of a command line.  Now when the `match.translate_slashes` setting is `system` or `backslash` then completing `./` and `../` can complete the word as a path, even though CMD does not consider it to be a path.\n- Fixed [#653](https://github.com/chrisant996/clink/issues/653); `clink_start.cmd` gets run twice if the binaries directory is the same as the profile directory.\n- Fixed [#654](https://github.com/chrisant996/clink/issues/654); input line coloring doesn't treat `^` correctly inside quotes (and related quirks).\n\n#### v1.6.20\n\n- Fixed [#652](https://github.com/chrisant996/clink/issues/652); error when trying to update again after updating to v1.6.20 (regression introduced in v1.6.19).\n\n#### v1.6.19\n\n- Fixed truncated descriptions with `clink set exec.` and then `clink-select-complete` (<kbd>Ctrl</kbd>-<kbd>Space</kbd>) (regression introduced in v1.6.11).\n- Fixed fully qualified paths from a different local drive accidentally being colored with `color.unrecognized`.\n- Fixed [#648](https://github.com/chrisant996/clink/issues/648); on Windows 8.1 the title bar can get changed to \"Windows PowerShell\" for the rest of the CMD session.\n\n#### v1.6.18\n\n- Added a new callback function that can be assigned to an argument position in the table given to `:addarg()` via `onalias=` (see [Responding to Arguments in Argmatchers](#responsive-argmatchers) for more information).  The git argmatcher in the [clink-completions](https://github.com/vladimir-kotikov/clink-completions) repo uses this to support git aliases.\n- When a doskey alias doesn't include any `$` tokens then CMD is guaranteed to ignore the rest of the command line after the alias, so now argmatcher parsing also ignores the rest of the command line and colors it using `color.unexpected`.\n- Suppress the ANSICON warning in the log file and diagnostics output on Windows 8.1.  The performance problem in ANSICON exists, but apparently there isn't a better alternative before Windows 10.\n\n#### v1.6.17\n\n- Added warning in the log file and in `clink-diagnostics` (<kbd>Ctrl</kbd>-<kbd>X</kbd>,<kbd>Ctrl</kbd>-<kbd>Z</kbd>) when ANSICON is detected on Windows 8.1 or greater (it's unnecessary, less functional, and greatly degrades performance).\n- Added language info in `clink-diagnostics` when the code page is not 1252 (for easier troubleshooting).\n- Fixed finding argmatchers registered with exact names (typing `foo` couldn't find an argmatcher registered as `c:\\dir\\foo.exe` because it accidentally looked for `c:\\dir\\foo.EXE`).\n- Fixed [#631](https://github.com/chrisant996/clink/issues/631); script error after `cmd ` when the current language is German.\n\n#### v1.6.16\n\n- Added a workaround for how [scoop](https://scoop.sh/) tries to control app versions and updates ([#615](https://github.com/chrisant996/clink/issues/615); scoop causes `clink autorun install` to use a wrong path).\n- Added an `auto` mode for the `match.translate_slashes` setting.  This mode makes completion translate all slashes in the completed word to match whichever kind occurs first in the word, or to the system path separator if there are no slashes yet (e.g. when completing a directory name).\n- Changed the default to `auto` for the `match.translate_slashes` setting.\n- Updated the `clink.slash_translation()` function.\n- UNC share name completion works with forward slashes now (e.g. `//localhost/`).\n- Added a `clink-toggle-slashes` bindable command, bound by default to <kbd>Ctrl</kbd>-<kbd>/</kbd>.  The command toggles between forward and backslashes in the word at the cursor point, or in the <em>N</em>th word if a numeric argument is provided (e.g. by the <kbd>Alt</kbd>-Digit keys).\n- Fixed the `off` mode for the `matches.translate_slashes` setting (regression introduced in v1.1.23).\n- Fixed input line coloring of `@` in `for %a in (*) do @whatever`.\n- Fixed crash in `glob-list-expansions` when used on an empty word (regression introduced in v1.3.36).\n- Fixed wildcard completions when `match.wild` is on and `match.substring` is off.\n- Fixed obscure edge case where match filtering with wildcards could potentially yield inaccurate results immediately after an auto-suggestion was offered.\n\n#### v1.6.15\n\n- Fixed hiding internal script names in the `clink-diagnostics` output (regression introduced in v1.6.11).\n- Fixed [#613](https://github.com/chrisant996/clink/issues/613); wrong input line coloring for `cmd /c \"command line\"`.\n\n#### v1.6.14\n\n- Fixed `menu-complete` to respect `completion-auto-query-items`.\n- Fixed missing line break before `dump-macros`, `dump-variables`, `clink-dump-functions`, and `clink-dump-macros` (regression introduced in v1.6.3).\n- Fixed `rl.getbinding()` to return `clink-select-complete` instead of `clink-popup-complete` (the latter is just an alias; the real command name is `clink-select-complete`).\n\n#### v1.6.13\n\n- Popup lists can now be filtered.\n  - Press <kbd>F4</kbd> in a popup list to toggle the search mode between \"find\" and \"filter\".\n  - The `clink.popup_search_mode` setting controls the default search mode.\n  - The `clink.popuplist()` function can be told to start in a specific search mode.\n- Added `os.findfiles()` to allow getting files/directories one at a time (versus `os.globfiles()` which collects the entire set all at once into a table).\n- Added `exec.associations` setting to let Executable Completion include files with registered file associations as matches (e.g. launchable documents such as \"*.pdf\" files).\n- Fixed <kbd>Ctrl</kbd>-<kbd>C</kbd> in a popup list copying the wrong entry after having used <kbd>Del</kbd> to delete an entry.\n- Fixed input line coloring to use `color.executable` also for files included by the `exec.path` setting, if the files have registered file associations.\n\n#### v1.6.12\n\n- Fixed [#597](https://github.com/chrisant996/clink/issues/597); prompt shows leftover text sometimes (regression introduced in v1.6.10).\n- Fixed [#596](https://github.com/chrisant996/clink/issues/596); it's easy to forget whether <kbd>Enter</kbd> in history list executes or inserts.\n\n#### v1.6.11\n\n- Added `os.setalias()` for setting a doskey alias without needing to invoke the doskey.exe program.\n- Fixed a case where match descriptions could be displayed with incorrect padding and truncation.\n- Lua debugging enhancements:\n  - Changed the built-in embedded scripts to include debug info, which allows some Lua error messages to be more useful for troubleshooting.\n  - Added `srcmap` command in the Lua debugger to override where to find source files.\n\n#### v1.6.10\n\n- Added an optimization to further reduce flicker when re-drawing the prompt.\n- Added a `user_data.shared_user_data` table to allow linked argmatchers to share data with each other while an input line is being parsed (see [Responding to Arguments in Argmatchers](https://chrisant996.github.io/clink/clink.html#responsive-argmatchers) for details).\n- Fixed [#579](https://github.com/chrisant996/clink/issues/579); popup lists could accidentally truncate text in the first column when there's only one column.\n- Fixed [#576](https://github.com/chrisant996/clink/issues/576); setup exe doesn't remove old uninstall exe files.\n- Fixed [#575](https://github.com/chrisant996/clink/issues/575); error when `color.executable` is set and `color.unrecognized` is not (regression introduced in v1.6.2).\n\n#### v1.6.9\n\n- Fixed [#574](https://github.com/chrisant996/clink/issues/574); `prompt.spacing` \"eats\" lines containing Unicode Surrogate Pairs such as for some [nerdfont](https://nerdfonts.com) icons (Windows Terminal accidentally returns that such lines are empty).\n- Fixed [#573](https://github.com/chrisant996/clink/issues/573); C# was unable to read Clink's version resource.\n- Fixed [#555](https://github.com/chrisant996/clink/issues/555); security advisory [CVE-2020-24370](https://github.com/advisories/GHSA-gfr4-c37g-mm3v) for a Lua bug.\n\n#### v1.6.8\n\n- Fixed [#571](https://github.com/chrisant996/clink/issues/571); error in clink.bat under some circumstances (regression introduced in v1.6.7).\n\n#### v1.6.7\n\n- Recognize the little-known `cmd /r` as a synonym for `cmd /c` so that Clink can optimize and skip injecting into a `cmd /r` process.\n- Fixed displaying descriptions when they're left-justified (regression introduced in v1.6.6).\n- Fixed `argmatcher:chaincommand(\"run\")` to not find argmatchers for builtin CMD command names (since CMD doesn't get invoked in that case, so it won't get interpreted as a CMD command).\n- Fixed `argmatcher:chaincommand()` to find an argmatcher for a builtin CMD command even if a directory exists with the same name (since CMD interprets that case as a CMD command).\n- Fixed `argmatcher:chaincommand(\"cmd\")` so when `exec.aliases` is enabled it can include aliases as completions.\n- Fixed `argmatcher:addarg({loopchars=\"+\", etcetc})` so that `-Q:+x` still gets parsed into two input words `-Q:` and `+x`.\n- Fixed to parse `foo^ bar` as two words \"foo\" and \"bar\".\n- Fixed to recognize `^echo` (etc) as a builtin CMD command name despite embedded `^` characters.\n- Fixed [#570](https://github.com/chrisant996/clink/issues/570); fixed #569 more thoroughly, and `cd /d` cannot be used anywhere because it also requires command extensions.\n\n#### v1.6.6\n\n- Added `clink history --no-show-time` to allow omitting history timestamps even when the `history.time_stamp` setting is `show`.\n- Fixed match display to not right justify descriptions when the screen isn't wide enough or when descriptions contain aligned columns (like `clink set` completions do since v1.6.3).\n- Fixed `clink history` when output is redirected; strip any escape codes that might be embedded in the time format.\n- Fixed [#569](https://github.com/chrisant996/clink/issues/569); `cmd /e:off` causes syntax error in clink.bat script.\n- Fixed [#567](https://github.com/chrisant996/clink/issues/567); `clink history compact` accidentally deletes all timestamps.\n- Fixed documentation error in Lua API Reference about `\"w\"` mode in `io.open()` and `io.sopen()` (the behavior was correct, but the documentation was inaccurate/unclear).\n\n#### v1.6.5\n\n- Added all match fields in the table of matches passed to the `clink.onfiltermatches()` callback function.\n- Fixed stripping colors from strings (e.g. when displaying in popup lists); it didn't strip 8-bit and 24-bit colors correctly.\n\n#### v1.6.4\n\n- Added `rl_buffer:hassuggestion()` and `rl_buffer:insertsuggestion()` for direct access to inserting suggestions without invoking Readline commands.\n- Added `clink.dirmatchesexact()` and `clink.filematchesexact()` which are the same as the non-`exact` variants, except these don't append a `*` to the search pattern.  For example, `clink.filematchesexact(\"*.zip\")` can collect exactly \"\\*.zip\" file matches instead of \"\\*.zip\\*\".\n- Added OS version info to `clink info`.\n- Added UNC share name completion when using Executable Completion (the `exec.enable` setting).\n- Fixed completing input `.` or `..` when the `exec.enable` setting is enabled.\n- Fixed applying `colored-completion-prefix` when match display filtering is active or a match has a custom `display` field.\n- Fixed the `exec.path` setting so it doesn't accidentally include directories if their names end with an executable extension such as `.exe`.\n- Fixed finding an argmatcher registered with a full path (e.g. `c:\\foo\\bar.exe`) when a full path is entered without a drive letter (e.g. enter `\\foo\\bar.exe`).\n- Fixed [#562](https://github.com/chrisant996/clink/issues/562); `clink autorun install` strips quotes by mistake.\n\n#### v1.6.3\n\n- **Breaking Change:** For the four <kbd>Ctrl</kbd>-<kbd>-</kbd> key combinations, Clink got the <kbd>Shift</kbd> key backwards and generated inaccurate input codes.  And that broke the Readline/bash default key binding for `undo` (the Windows default key binding of <kbd>Ctrl</kbd>-<kbd>z</kbd> works fine).  If your .inputrc file has bindings for any of the <kbd>Ctrl</kbd>-<kbd>-</kbd> key combinations then you can keep the keys working the same by updating the key bindings.  You can even use the [`$if clink_version >= 1.6.3`](#if_clink_version) syntax in your .inputrc file to make it define the key bindings differently in different versions of Clink.\n  Key Combination | Old Code | New Code\n  -|-|-\n  <kbd>Ctrl</kbd>-<kbd>-</kbd> | `\"\\C-_\"` or `C-_` | `\"\\e[27;5;189~\"`\n  <kbd>Ctrl</kbd>-<kbd>Shift</kbd>-<kbd>-</kbd> | `\"\\e[27;6;189~\"` | `\"\\C-_\"` or `C-_`\n  <kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>-</kbd> | `\"\\e\\C-_\"` or `\"\\M-\\C-_\"` or `M-C-_` or etc | `\"\\e[27;7;189~\"`\n  <kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>Shift</kbd>-<kbd>-</kbd> | `\"\\e[27;8;189~\"` | `\"\\e\\C-_\"` or `\"\\M-\\C-_\"` or `M-C-_` or etc\n- Completions for all `clink set` settings include the current value in the description field (e.g. type `clink set `<kbd>Alt</kbd>-<kbd>=</kbd> to see Clink settings and their current values).\n- Fixed to differentiate between `undo` and `vi-undo` commands again (they do the same thing, but are technically different commands).\n- Fixed `execute-named-command` to also accept <kbd>Ctrl</kbd>-<kbd>-</kbd> for `undo` (the emacs binding for undo).\n- Fixed redisplaying multi-line prompts after using completion during `execute-named-command`.\n- Fixed accidentally loading the history file twice on each prompt; now it loads once, as intended.\n- Fixed another double-free and potential crash in the Readline library; after navigating through history entries and then editing a history entry, pressing <kbd>Ctrl</kbd>-<kbd>c</kbd> or <kbd>Ctrl</kbd>-<kbd>Break</kbd> could cause a crash or memory corruption (regression exposed by changes in Readline 8.2).\n- Applied fixes for 6 Lua bugs, curated by [@goodusername123](https://github.com/goodusername123) (thank you!) from [Lua.org](https://lua.org/bugs.html):\n  - \"Dead keys with nil values can stay in weak tables.\"\n  - \"Expression list with four or more expressions in a 'for' loop can crash the interpreter.\"\n  - \"Label between local definitions can mix-up their initializations.\"\n  - \"Return hook may not see correct values for active local variables when function returns.\"\n  - \"Suspended __le metamethod can give wrong result.\"\n  - \"Wrong code generated for a 'goto' followed by a label inside an 'if'.\"\n- Fixed the Lua debugger so 5-digit line numbers don't break indentation when showing source code lines.\n\n#### v1.6.2\n\n- Added optional argument `argmatcher:chaincommand(aliases)` to let the argmatcher know that the chained command will have doskey aliases expanded.\n- Fixed match display potentially missing some matches (regression introduced in v1.6.1).  In particular, git command completions were affected.\n- Fixed command line input parsing so that the first word (the command word) `foo/` is interpreted as two words `foo` and `/` just like CMD does.\n- Fixed [#549](https://github.com/chrisant996/clink/issues/549); `cd -` intercept interferes with `cd` doskey alias.\n- Fixed [#546](https://github.com/chrisant996/clink/issues/546); in Windows 10 when \"Wrap text output on resize\" is unchecked or the Window Width is different from the Screen Buffer Width, then the display becomes garbled.  The root cause is a limitation in how Windows 10 implements support for ANSI escape codes, but Clink now has workaround code that tries to compensate for the problems as much as possible (the terminal display will be a bit jittery, though; there's nothing that can be done about that).\n- Fixed updating the display after using `clink-popup-show-help` to invoke a command that changes only the cursor position.\n- Fixed a case where a custom strategy for auto-suggestions could accidentally skip inserting part of the suggestion.\n- Fixed a race condition where `clink-diagnostics` could encounter an error while printing information about coroutines.\n\n**Important pre-release changes in Readline:**\nReadline 8.2 introduced a crash in the `undo` command after navigating through history and making edits in history entries.  The following pre-release updates in Readline fix the crash and several related issues.  They also fix many other edge-case stability issues, and add a couple of new features.\n- Fixed crashes due to memory corruption in the undo information for editing operations.\n- Fixed many issues found by Address Sanitizer (ASAN); these are edge cases where crashes or memory corruption or malfunctions or memory leaks occurred.\n- Added new `execute-named-command` bindable command which reads a command name from the input and executes it (default is <kbd>Alt</kbd>-<kbd>x</kbd>).\n- Allow `quoted-insert` into search strings.\n- Repeated invocations of `vi-yank-pop` now cycle through the kill ring.\n- Fixed when `do-lowercase-version` is bound to something that's not an uppercase letter.\n- Fixed getting the value of the `active-region-start-color` config variable.\n\n#### v1.6.1\n\n**Features:**\n- Improved input line parsing and coloring:\n  - Commands starting with `@` are supported, and completion correctly ignores the `@`.\n  - Each of the following CMD syntax errors are recognized:  lines starting with `&` or `@2>`, and lines containing `& &` or `2>&file`.\n  - The whole redirections `2>file` or `>file` or `2>&1` are colored instead of only the `>` or `>&`.\n- Completions for `clink set` color settings include a color sample in the description field (e.g. type `clink set color`<kbd>Alt</kbd>-<kbd>=</kbd> to see the color settings and their current color samples).\n- The `clink-reload` bindable command now reverts key bindings and config variables before reloading the inputrc file, so that old bindings and values don't linger in the current session if they've been removed from the inputrc file.\n- Added `clink-dump-functions` and `clink-dump-macros` bindable commands.  These behave similar to `dump-functions` and `dump-macros`, but they show user-friendly key names and `luafunc:` macros are listed as functions instead of as macros.\n- Added some new \"bigword\" cursor movement commands for moving to the next or previous space delimited word; `clink-backward-bigword`, `clink-forward-bigword`, `cua-backward-bigword`, `cua-forward-bigword`.\n- Added a new conditional directive `$if clink_version` in the inputrc file (e.g. `$if clink_version >= 1.6.1`).\n- Added a new `prompt.spacing` setting which can control blank lines before the prompt (it was a clink-flex-prompt feature which has now been incorporated into Clink itself).\n- Added a new `match.coloring_rules` setting and `%CLINK_MATCH_COLORS%` environment variable, both of which supersede Readline's `%LS_COLORS%` definitions when displaying match completions.\n- Internal changes.\n\n**Lua:**\n- Added `line_state:getrangeoffset()` and `line_state:getrangelength()` to get the beginning offset and length of the range in the input line described by the line_state.\n- Added `console.explodeansi()` to split a string into substrings on ANSI escape code boundaries.\n- Added `rl.getinputrcfilename()` to get the loaded inputrc file name.\n- Added `rl.translatekey()` to translate between key sequence formats (input key, key binding, and friendly key name).\n- Added `rl.bracketpromptcodes()` to apply `\\1` and `\\2` codes as needed by Readline in certain inputrc config variables.\n- Document the `CLINK_EXE` global variable which has existed since v1.0.0 but was accidentally undocumented.\n\n**Fixes:**\n- Removed superfluous `;39` and/or `;49` from color setting escape codes in some cases.\n- Fixed `console.readinput()` repeatedly returning nil after `console.checkinput()` returns true (regression introduced in v1.5.12).\n- Fixed loading the `default_inputrc` file if it exists (introduced in v1.3.5, and it never worked properly until now).\n- Fixed the `history-size` config variable to be completely ignored (it interfered with Clink's history database and settings, which were meant to supersede it).\n- Fixed the `clink-popup-show-help` command when including unbound commands (numeric argument of 4) so it doesn't double-list the bound `luafunc:` macros.\n- Fixed updating column text in `clink.popuplist()` when <kbd>Del</kbd> is pressed (e.g. history timestamps in the `clink-popup-history` command).\n- Fixed the width of `clink.popuplist()` to take the title into account.\n- Fixed Lua argument errors for some objects (the argument # in the error message was one lower than it should have been in some messages).\n- Fixed the return value from `rl_buffer:setcursor()`.\n- Fixed `console:getnumlines()` between onendedit and onbeginedit.\n- Fixed erasing the \"History expansion for\" preview when the transient prompt is enabled.\n- Fixed the transient prompt sometimes not erasing properly (regression introduced in v1.5.17).\n- Fixed the color of flags for `clink set` (e.g. `--help`).\n- Fixed the `clink-reload` command so any inputrc file parse errors are printed on new lines.\n- Fixed the `lua.break_on_error` setting so it works properly in released builds of Clink.\n\n#### v1.6.0\n- Updated the Readline library to v8.2 patch 7 (the list here omits changes that were contributed to Readline from Clink, or which do not affect Clink).\n  - New features:\n    - History expansion better understands multiple history expansions that may contain strings that would ordinarily inhibit history expansion (e.g., `abc!$!$`).\n    - There is a new `fetch-history` bindable command that retrieves the history entry corresponding to its numeric argument. Negative arguments count back from the end of the history.\n    - There is a new option: `enable-active-region`. This separates control of the active region and bracketed-paste. It has the same default value as `enable-bracketed-paste`, and enabling bracketed paste enables the active region. Users can now turn off the active region while leaving bracketed paste enabled. (Note that bracketed paste is currently ignored in Clink.)\n    - Readline looks in `%LS_COLORS%` for a custom filename extension (`*.readline-colored-completion-prefix`) and uses that as the default color for the common prefix displayed when `colored-completion-prefix` is set, superseding the `so` type if both are present.\n    - Two new bindable string variables: `active-region-start-color` and `active-region-end-color`. The first sets the color used to display the active region; the second is unused and unnecessary in Clink, but exists anyway for compatibility. If set, these are used in place of terminal standout mode.\n  - Fixes:\n    - Fixed a problem with cleaning up active marks.\n    - Fixed a problem with arithmetic comparison operators checking the version in the inputrc file.\n    - Fixed a bug that could cause readline to crash if the application removed the callback line handler before readline read all typeahead.\n    - Added additional checks for read errors in the middle of readline commands.\n    - Fixed a problem with `unix-filename-rubout` that caused it to delete too much when applied to a pathname consisting only of one or more slashes.\n    - Fixed a couple problems where `transpose-words` could corrupt the end of the input line.\n    - Fixed an issue that caused a history line's undo list to be cleared when it should not have been.\n    - Fixed leaked memory from undo lists.\n    - When replacing a history entry, make sure the existing entry has a non-NULL timestamp before copying it; it may have been added by the application, not the history library.\n- The `blink-matching-paren` setting works in Clink now.\n- Completion works for UNC share names now (share names like `\\\\server\\share`, not server names like `\\\\server`).\n- Improved undo grouping for consecutive inserted text.\n- Added `os.enumshares()` to enumerate the SMB UNC shares on a given server.\n- Fixed Lua error messages from custom Lua libraries that report errors using table objects instead of strings.\n- Fixed issue with the `autosuggest.hint` setting where it could apply incorrect input line coloring when the <kbd>Right</kbd> key isn't bound to one of the usual commands for that key.\n- Internal changes and optimizations.\n\n#### v1.5.18\n- Fixed [#524](https://github.com/chrisant996/clink/issues/524) and [#523](https://github.com/chrisant996/clink/issues/523); garbled display in wide terminal windows (regression introduced in v1.5.14, which exacerbated and revealed a bug that's existed since Clink v1.0.0 alpha and which could intermittently garble Unicode text or escape sequences).\n- Fixed the transient prompt sometimes not displaying properly (regression introduced in v1.5.17).\n\n#### v1.5.17\n- Reduced flicker when async prompt filtering redraws the prompt.\n- When `_argmatcher:addarg()` or `_argmatcher:addflags()` is passed a table containing <code>nowordbreakchars=\"<span class=\"arg\">chars</span>\"</code> then the <span class=\"arg\">chars</span> are not treated as word breaks for that argument index or for flags (see [Overcoming Word Breaks](#addarg_nowordbreakchars) for more information).\n- Added a `user_data` argument to the custom classifier function for an argmatcher (set via `_argmatcher:setclassifier()`).\n- Improved input line coloring for `clink set` so that `color.unexpected` is only used for a completed word that isn't a match.\n- Fixed reading lines from stdin in Lua scripts (e.g. `io.stdin:read()`).\n- Fixed accidentally showing matches in a single column sometimes even when there are no descriptions.\n- Fixed an incomplete `clink inject` if an explicit or implicit `endlocal` happens after `clink inject` but before the prompt is shown (the injection didn't finish successfully until the next time an environment variable was set, but now it finishes immediately).\n\n#### v1.5.16\n- Fixed [#522](https://github.com/chrisant996/clink/issues/522); garbled display in JetBrains WebStorm terminal (regression introduced in v1.5.15).\n  - Fixing this required reverting the change that automatically chose a default for `color.suggestion` based on the current console colors.\n- Fixed `:chaincommand()` so that generators and classifiers that come after argmatchers in the priority order receive the same `line_state` objects as ones that come before argmatchers in the priority order.\n- Fixed `:setdelayinit()` with linked argmatchers; the callback function was only called for registered argmatchers (e.g. `clink.argmatcher(\"foo\"):setdelayinit(func)`) and it wasn't called for linked argmatchers (e.g. `\"-x\" .. clink.argmatcher():setdelayinit(func)`).\n- Fixed the word parser to recognize a single digit as a word when followed by punctuation.\n- Fixed `loopchars` for characters like `-` or `*` that are also Lua pattern characters.\n\n#### v1.5.15\n- Added localized descriptions for flag completions in `cmd`, `cd`, and `rd`.\n- Added partial ability to detect light/dark console color themes:\n  - Added `console.getcolortable()` which returns a table with the console's current 16 predefined colors.  When possible, the table includes a field indicating whether the current console color theme is a light or dark theme.\n  - At this time, the colors can be accurately retrieved only when using the legacy conhost terminal.  When using Windows Terminal, ConEmu, or other ConPty-based terminals there is currently no way to accurately retrieve the colors.  Once the [Terminal#10639](https://github.com/microsoft/terminal/issues/10639) issue is fixed then Clink will also detect the background color in these terminal programs.\n  - Changed the default for `color.suggestion` so that it attempts to detect light themes (bright background colors) when possible, and it attempts to automatically choose a default color for suggestions that is faint but has sufficient contrast to be readable.\n- Fixed the `onlink` callback function in `:addflags()` so that the `arg_index` parameter is correctly `0` instead of `1`.\n- Fixed the upper bound line number for Lua console line API functions.\n- Fixed `console.getlinetext()` when emojis are present.\n\n#### v1.5.14\n- Added a visible usage hint for [Auto-Suggestions](#gettingstarted_autosuggest) to help make the feature more discoverable and usable.  The usage hint can be hidden by turning off the `autosuggest.hint` setting.\n- Added new callback functions that can be assigned to an argument position in the table given to `:addarg()` via `onadvance=` and `onlink=` (see [Responding to Arguments in Argmatchers](#responsive-argmatchers) for more information).\n- Fixed displaying match descriptions containing embedded color codes.\n- Fixed finding argmatchers for doskey alias names containing quotes.\n- Fixed parsing the input line when a doskey alias references a command with an argmatcher that uses the `:chaincommand()` function (e.g. an alias `foo=sudo dir $*` with an argmatcher like `clink.argmatcher(\"sudo\"):chaincommand()` so that completions and input line coloring work properly for the rest of the input line).\n- Fixed the `exec.commands` setting with an argmatcher that uses the `:chaincommand()` function.\n- Fixed `_argmatcher:setclassifier()` so the custom classifier is called for flags as well as for arguments.\n\n#### v1.5.13\n- Added `clink.onhistory()` to register a function to be called when the input line has been accepted and is about to be added to history (and optionally cancel adding it).\n- Fixed `history delete` with a negative number so it indexes backwards from the end, as advertised.\n- Fixed calling `clink.refilterprompt()` from a coroutine, and related fixes to ensure various Lua functions coexist properly with coroutines.\n- Fixed [#520](https://github.com/chrisant996/clink/issues/520); add a link to the Releases page in the updater dialog box.\n\n#### v1.5.12\n- Fixed updating the input line display after using `clink-popup-history` or `win-popup-history` (regression introduced in v1.5.3; the fix in v1.5.4 was incomplete).\n- Fixed `console.checkinput()` so it doesn't eat whatever pending input it detects.\n- Fixed the updater to be more specific about what PowerShell cmdlet it invokes, in case a module replaces the built-in `Expand-Archive` cmdlet.\n\n#### v1.5.11\n- Fixed prompt filters and other Lua coroutines when `color.executable` and `color.unrecognized` are both empty (regression introduced in v1.5.10).\n\n#### v1.5.10\n- Changed `clink update` to consider \"up-to-date\" as a successful case.\n- Fixed a case where the `completion` auto-suggest strategy could be temporarily prevented from providing a suggestion (regression introduced in v1.4.22).\n- Fixed leaked memory when showing history expansion previews.\n- Fixed [#511](https://github.com/chrisant996/clink/issues/511); `!` doesn't need to be treated as a word break character.\n- Internal changes.\n\n#### v1.5.9\n- Added default key binding <kbd>Alt</kbd>-<kbd>Ctrl</kbd>-<kbd>Up</kbd> for `clink-popup-history`.\n- Fixed the `match.max_rows` setting to control the number of rows of items (instead of the total number of rows including description rows).\n- Fixed [#509](https://github.com/chrisant996/clink/issues/509); crash when using `clink-popup-history` if `history.time_stamp` is `off` (regression introduced in v1.5.7).\n\n#### v1.5.8\n- Fixed [#504](https://github.com/chrisant996/clink/issues/504); the `clink.autoupdate` setting behaves like `auto` even when it's set to `check` (regression introduced in v1.5.5).\n- Fixed [#503](https://github.com/chrisant996/clink/issues/503); the updater could hang if any additional CMD instances were started while the \"Clink Update\" prompt window was open (regression introduced in v1.5.5).\n\n#### v1.5.7\n- Added vertical scrollbars in `clink-select-complete` and in popup lists.\n- Added `terminal.scrollbars` setting which can disable the vertical scrollbars (e.g. according to preference, or if a terminal or font is incompatible with extended Unicode box drawing characters).\n- Added `clink set --info` flag.\n- Added language-related diagnostic info in `clink info`.\n- Added minor optimization when displaying prompt text.\n- Added enhancements in the pager used when displaying help or matches; <kbd>Tab</kbd> or <kbd>Space</kbd> or <kbd>Y</kbd> print the next page, <kbd>D</kbd> prints the next half-page, <kbd>Enter</kbd> prints the next line, <kbd>N</kbd> or <kbd>Q</kbd> stop printing, and <kbd>?</kbd> shows the available keys in the `-- More --` pager prompt (the enhancements were accidentally lost in v1.1.1-alpha).\n- Horizontal scrolling in popup lists works for all columns, if text doesn't fit in the column.\n- Fixed crash in `rl.getmatchcolor(match, type)`; when the optional `type` parameter was passed in, the API could crash.\n- Fixed [#498](https://github.com/chrisant996/clink/issues/498); when `autosuggest.enable` is False, cycling or searching through history and then pressing <kbd>Right</kbd> does nothing (regression introduced in v1.5.4).\n- Internal improvements.\n\n#### v1.5.6\n- Added `os.getpushddepth()`, which works when `%PROMPT%` contains exactly one `$+`.\n- The `clink-popup-history` and `win-history-list` commands show timestamps when `history.time_stamp` is set to `show`.\n- Fixed `os.geterrorlevel()` when `cmd /u` was used.\n- Fixed word break parsing in the input line when certain Unicode characters are present.\n- Fixed Unicode string conversions to disallow translating to \"similar\" characters (which could be problematic in filenames).\n- Fixed a crash in `rl.getkeybindings()` if it's called by a Lua script running inside `clink set`.\n- Fixed Lua debugger input if a script error occurs inside `clink set`.\n- Fixed a width quirk in `clink-select-complete` where typing to narrow the list to a single item accidentally made the column width at least 3 characters, even if the item was only 1 or 2 characters width.\n- Fixed `clink history` to handle escape codes embedded in the `history.time_format` setting.\n- Fixed a potential crash after using `remove-history` at the beginning of the history list.\n- Fixed [#494](https://github.com/chrisant996/clink/issues/494); Lua error when using `unicode.fromcodepage()` (reported and fixed before the bug was published).\n- Fixed [#493](https://github.com/chrisant996/clink/issues/493); `clink-select-complete` displays the selected item incorrectly if both `colored-stats` and `colored-completion-prefix` are `off` (regression introduced in v1.5.5).\n\n#### v1.5.5\n- Changed the `clink.autoupdate` setting to allow `off`, `check` (the default), `prompt`, and `auto` for more control over how and when updating happens.  When set to `prompt` or `auto` Clink can trigger updates automatically, so you don't need to even run `clink update`.\n- Enhanced `debug.log_terminal` to include low level console keyboard and mouse input events.\n- Fixed `debug.log_terminal` to capture all input (regression introduced in v1.5.2).\n- Fixed slowness during `clink-select-complete` while typing, caused by excessive match generation.\n- Fixed selection highlight in `clink-select-complete` when the whole match text has been typed.\n- Fixed [#486](https://github.com/chrisant996/clink/issues/486); window title escape code doesn't work properly if it contains emojis or UTF8 content.\n- Internal changes.\n\n#### v1.5.4\n- Further contrast improvements for default colors to be readable in both Dark and Light terminal themes.\n- Added `arginfo` field in `builder:addmatches()` and in match display filtering.\n- Auto-suggestions are no longer shown while searching history; it was too distracting and confusing.\n- Fixed updating the input line display after using `clink-popup-history` or `win-popup-history` (regression introduced in v1.5.3).\n- Fixed `old-menu-complete` and `menu-complete` when there's only one match.  The first time it should insert the match, and subsequent times should ding instead of cycling through the same match over and over and requiring an equal number of `undo` to undo.\n- Fixed match display filtering to support the `match.substring` setting.\n- Fixed match display filtering to support the `files.system` setting.\n- Fixed the cursor position if match display filtering happens the first time `clink-select-complete` is used in a session.\n- Fixed a case where two `undo` were required to fully undo what `menu-complete` inserted.\n- Fixed <kbd>Esc</kbd> during incremental history search mode so it cancels the search.\n- Fixed input line coloring after `non-incremental-reverse-search-history` or `non-incremental-forward-search-history` finds an exact match for the search text (since v1.1.5).\n- Internal changes and optimizations.\n\n#### v1.5.3\n- Added `builder:setfullyqualified()` to force completions to be inserted as fully qualified path names.\n- Completions for <code>clink set <span class=\"arg\">setting_name</span> <span class=\"arg\">input</span></code> use fully qualified path names for <span class=\"arg\">input</span>.  This helps avoid accidentally setting relative paths in global settings; since the current directory changes frequently, setting relative paths usually leads to unintended consequences.\n- Only load a script from a `completions\\` directory if the associated command exists in the file system.  Also, pass the fully qualified file name as input to the script (in Lua, use `...` to get script arguments, e.g. `local command = ...`).\n- `clink info` now reports whether Clink is injected.\n- Improve efficiency of updating the input line display.  This eliminates some redundant processing in the Readline library and in Clink.\n- Fixed input line parsing and coloring when the `doskey.enhanced` setting is off or when doskey macro expansion is suppressed.\n- Fixed `line_state:getwordinfo()` to accurately set the `.alias` field when the `doskey.enhanced` setting is off or when doskey macro expansion is suppressed.\n- Fixed coloring the command word in the command line when queued keys select and accept a command line from history instantly (it could accidentally continue without applying the appropriate coloring).\n- Fixed script error in `clink.filematches(nil)` and `clink.dirmatches(nil)`; they were meant to behave the same as passing an empty string.\n\n#### v1.5.2\n- Adjusted the colors in \"Use enhanced defaults\" to have sufficient contrast to be readable in both Dark and Light terminal themes.\n- More reliably detect whether hosted in Windows Terminal, and even when Windows Terminal is set as the default terminal application.\n- Fixed crash in `clink.popuplist()` when the `current` argument is past the end of the list of items.\n- Fixed cursor location when the input line contains embedded CTRL characters.\n- Fixed [#474](https://github.com/chrisant996/clink/issues/474); pasting is slow in Windows Terminal and ConEmu.\n- Fixed [#470](https://github.com/chrisant996/clink/issues/470); typo in help text.\n\n#### v1.5.1\n- Added `rl.getcommandbindings()` to get info about a command, including the key(s) bound to it, if any.\n- Changed to also allow `clink.popuplist()` inside a function registered by `clink.onfiltermatches()`.\n- Changed console input mode handling to more aggressively clear `ENABLE_VIRTUAL_TERMINAL_INPUT` since it interferes with input (especially <kbd>Ctrl</kbd> key combinations) and some console programs set it but accidentally neglect to clear it when they're finished.\n\n#### v1.5.0\n- Added code-signing.\n- Added note after successful `clink update` to clarify that the update will take effect in new Clink windows.\n- Fixed order of running the autostart script (from the `clink.autostart` setting) vs loading Lua; the autostart script should run before Lua so that Lua scripts can query environment variables set by it.  Otherwise Lua scripts may behave differently on initial load versus after invoking the `clink-reload` command (e.g. <kbd>Ctrl</kbd>-<kbd>X</kbd>,<kbd>Ctrl</kbd>-<kbd>R</kbd>).\n- Fixed precedence of match colors; readonly should be lower precedence than executable.\n- Fixed [#469](https://github.com/chrisant996/clink/issues/469); incorrect usage of `memset()`.\n\n"
  },
  {
    "path": "extras/clink/LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\r\n                       Version 3, 29 June 2007\r\n\r\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\r\n Everyone is permitted to copy and distribute verbatim copies\r\n of this license document, but changing it is not allowed.\r\n\r\n                            Preamble\r\n\r\n  The GNU General Public License is a free, copyleft license for\r\nsoftware and other kinds of works.\r\n\r\n  The licenses for most software and other practical works are designed\r\nto take away your freedom to share and change the works.  By contrast,\r\nthe GNU General Public License is intended to guarantee your freedom to\r\nshare and change all versions of a program--to make sure it remains free\r\nsoftware for all its users.  We, the Free Software Foundation, use the\r\nGNU General Public License for most of our software; it applies also to\r\nany other work released this way by its authors.  You can apply it to\r\nyour programs, too.\r\n\r\n  When we speak of free software, we are referring to freedom, not\r\nprice.  Our General Public Licenses are designed to make sure that you\r\nhave the freedom to distribute copies of free software (and charge for\r\nthem if you wish), that you receive source code or can get it if you\r\nwant it, that you can change the software or use pieces of it in new\r\nfree programs, and that you know you can do these things.\r\n\r\n  To protect your rights, we need to prevent others from denying you\r\nthese rights or asking you to surrender the rights.  Therefore, you have\r\ncertain responsibilities if you distribute copies of the software, or if\r\nyou modify it: responsibilities to respect the freedom of others.\r\n\r\n  For example, if you distribute copies of such a program, whether\r\ngratis or for a fee, you must pass on to the recipients the same\r\nfreedoms that you received.  You must make sure that they, too, receive\r\nor can get the source code.  And you must show them these terms so they\r\nknow their rights.\r\n\r\n  Developers that use the GNU GPL protect your rights with two steps:\r\n(1) assert copyright on the software, and (2) offer you this License\r\ngiving you legal permission to copy, distribute and/or modify it.\r\n\r\n  For the developers' and authors' protection, the GPL clearly explains\r\nthat there is no warranty for this free software.  For both users' and\r\nauthors' sake, the GPL requires that modified versions be marked as\r\nchanged, so that their problems will not be attributed erroneously to\r\nauthors of previous versions.\r\n\r\n  Some devices are designed to deny users access to install or run\r\nmodified versions of the software inside them, although the manufacturer\r\ncan do so.  This is fundamentally incompatible with the aim of\r\nprotecting users' freedom to change the software.  The systematic\r\npattern of such abuse occurs in the area of products for individuals to\r\nuse, which is precisely where it is most unacceptable.  Therefore, we\r\nhave designed this version of the GPL to prohibit the practice for those\r\nproducts.  If such problems arise substantially in other domains, we\r\nstand ready to extend this provision to those domains in future versions\r\nof the GPL, as needed to protect the freedom of users.\r\n\r\n  Finally, every program is threatened constantly by software patents.\r\nStates should not allow patents to restrict development and use of\r\nsoftware on general-purpose computers, but in those that do, we wish to\r\navoid the special danger that patents applied to a free program could\r\nmake it effectively proprietary.  To prevent this, the GPL assures that\r\npatents cannot be used to render the program non-free.\r\n\r\n  The precise terms and conditions for copying, distribution and\r\nmodification follow.\r\n\r\n                       TERMS AND CONDITIONS\r\n\r\n  0. Definitions.\r\n\r\n  \"This License\" refers to version 3 of the GNU General Public License.\r\n\r\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\r\nworks, such as semiconductor masks.\r\n\r\n  \"The Program\" refers to any copyrightable work licensed under this\r\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\r\n\"recipients\" may be individuals or organizations.\r\n\r\n  To \"modify\" a work means to copy from or adapt all or part of the work\r\nin a fashion requiring copyright permission, other than the making of an\r\nexact copy.  The resulting work is called a \"modified version\" of the\r\nearlier work or a work \"based on\" the earlier work.\r\n\r\n  A \"covered work\" means either the unmodified Program or a work based\r\non the Program.\r\n\r\n  To \"propagate\" a work means to do anything with it that, without\r\npermission, would make you directly or secondarily liable for\r\ninfringement under applicable copyright law, except executing it on a\r\ncomputer or modifying a private copy.  Propagation includes copying,\r\ndistribution (with or without modification), making available to the\r\npublic, and in some countries other activities as well.\r\n\r\n  To \"convey\" a work means any kind of propagation that enables other\r\nparties to make or receive copies.  Mere interaction with a user through\r\na computer network, with no transfer of a copy, is not conveying.\r\n\r\n  An interactive user interface displays \"Appropriate Legal Notices\"\r\nto the extent that it includes a convenient and prominently visible\r\nfeature that (1) displays an appropriate copyright notice, and (2)\r\ntells the user that there is no warranty for the work (except to the\r\nextent that warranties are provided), that licensees may convey the\r\nwork under this License, and how to view a copy of this License.  If\r\nthe interface presents a list of user commands or options, such as a\r\nmenu, a prominent item in the list meets this criterion.\r\n\r\n  1. Source Code.\r\n\r\n  The \"source code\" for a work means the preferred form of the work\r\nfor making modifications to it.  \"Object code\" means any non-source\r\nform of a work.\r\n\r\n  A \"Standard Interface\" means an interface that either is an official\r\nstandard defined by a recognized standards body, or, in the case of\r\ninterfaces specified for a particular programming language, one that\r\nis widely used among developers working in that language.\r\n\r\n  The \"System Libraries\" of an executable work include anything, other\r\nthan the work as a whole, that (a) is included in the normal form of\r\npackaging a Major Component, but which is not part of that Major\r\nComponent, and (b) serves only to enable use of the work with that\r\nMajor Component, or to implement a Standard Interface for which an\r\nimplementation is available to the public in source code form.  A\r\n\"Major Component\", in this context, means a major essential component\r\n(kernel, window system, and so on) of the specific operating system\r\n(if any) on which the executable work runs, or a compiler used to\r\nproduce the work, or an object code interpreter used to run it.\r\n\r\n  The \"Corresponding Source\" for a work in object code form means all\r\nthe source code needed to generate, install, and (for an executable\r\nwork) run the object code and to modify the work, including scripts to\r\ncontrol those activities.  However, it does not include the work's\r\nSystem Libraries, or general-purpose tools or generally available free\r\nprograms which are used unmodified in performing those activities but\r\nwhich are not part of the work.  For example, Corresponding Source\r\nincludes interface definition files associated with source files for\r\nthe work, and the source code for shared libraries and dynamically\r\nlinked subprograms that the work is specifically designed to require,\r\nsuch as by intimate data communication or control flow between those\r\nsubprograms and other parts of the work.\r\n\r\n  The Corresponding Source need not include anything that users\r\ncan regenerate automatically from other parts of the Corresponding\r\nSource.\r\n\r\n  The Corresponding Source for a work in source code form is that\r\nsame work.\r\n\r\n  2. Basic Permissions.\r\n\r\n  All rights granted under this License are granted for the term of\r\ncopyright on the Program, and are irrevocable provided the stated\r\nconditions are met.  This License explicitly affirms your unlimited\r\npermission to run the unmodified Program.  The output from running a\r\ncovered work is covered by this License only if the output, given its\r\ncontent, constitutes a covered work.  This License acknowledges your\r\nrights of fair use or other equivalent, as provided by copyright law.\r\n\r\n  You may make, run and propagate covered works that you do not\r\nconvey, without conditions so long as your license otherwise remains\r\nin force.  You may convey covered works to others for the sole purpose\r\nof having them make modifications exclusively for you, or provide you\r\nwith facilities for running those works, provided that you comply with\r\nthe terms of this License in conveying all material for which you do\r\nnot control copyright.  Those thus making or running the covered works\r\nfor you must do so exclusively on your behalf, under your direction\r\nand control, on terms that prohibit them from making any copies of\r\nyour copyrighted material outside their relationship with you.\r\n\r\n  Conveying under any other circumstances is permitted solely under\r\nthe conditions stated below.  Sublicensing is not allowed; section 10\r\nmakes it unnecessary.\r\n\r\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\r\n\r\n  No covered work shall be deemed part of an effective technological\r\nmeasure under any applicable law fulfilling obligations under article\r\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\r\nsimilar laws prohibiting or restricting circumvention of such\r\nmeasures.\r\n\r\n  When you convey a covered work, you waive any legal power to forbid\r\ncircumvention of technological measures to the extent such circumvention\r\nis effected by exercising rights under this License with respect to\r\nthe covered work, and you disclaim any intention to limit operation or\r\nmodification of the work as a means of enforcing, against the work's\r\nusers, your or third parties' legal rights to forbid circumvention of\r\ntechnological measures.\r\n\r\n  4. Conveying Verbatim Copies.\r\n\r\n  You may convey verbatim copies of the Program's source code as you\r\nreceive it, in any medium, provided that you conspicuously and\r\nappropriately publish on each copy an appropriate copyright notice;\r\nkeep intact all notices stating that this License and any\r\nnon-permissive terms added in accord with section 7 apply to the code;\r\nkeep intact all notices of the absence of any warranty; and give all\r\nrecipients a copy of this License along with the Program.\r\n\r\n  You may charge any price or no price for each copy that you convey,\r\nand you may offer support or warranty protection for a fee.\r\n\r\n  5. Conveying Modified Source Versions.\r\n\r\n  You may convey a work based on the Program, or the modifications to\r\nproduce it from the Program, in the form of source code under the\r\nterms of section 4, provided that you also meet all of these conditions:\r\n\r\n    a) The work must carry prominent notices stating that you modified\r\n    it, and giving a relevant date.\r\n\r\n    b) The work must carry prominent notices stating that it is\r\n    released under this License and any conditions added under section\r\n    7.  This requirement modifies the requirement in section 4 to\r\n    \"keep intact all notices\".\r\n\r\n    c) You must license the entire work, as a whole, under this\r\n    License to anyone who comes into possession of a copy.  This\r\n    License will therefore apply, along with any applicable section 7\r\n    additional terms, to the whole of the work, and all its parts,\r\n    regardless of how they are packaged.  This License gives no\r\n    permission to license the work in any other way, but it does not\r\n    invalidate such permission if you have separately received it.\r\n\r\n    d) If the work has interactive user interfaces, each must display\r\n    Appropriate Legal Notices; however, if the Program has interactive\r\n    interfaces that do not display Appropriate Legal Notices, your\r\n    work need not make them do so.\r\n\r\n  A compilation of a covered work with other separate and independent\r\nworks, which are not by their nature extensions of the covered work,\r\nand which are not combined with it such as to form a larger program,\r\nin or on a volume of a storage or distribution medium, is called an\r\n\"aggregate\" if the compilation and its resulting copyright are not\r\nused to limit the access or legal rights of the compilation's users\r\nbeyond what the individual works permit.  Inclusion of a covered work\r\nin an aggregate does not cause this License to apply to the other\r\nparts of the aggregate.\r\n\r\n  6. Conveying Non-Source Forms.\r\n\r\n  You may convey a covered work in object code form under the terms\r\nof sections 4 and 5, provided that you also convey the\r\nmachine-readable Corresponding Source under the terms of this License,\r\nin one of these ways:\r\n\r\n    a) Convey the object code in, or embodied in, a physical product\r\n    (including a physical distribution medium), accompanied by the\r\n    Corresponding Source fixed on a durable physical medium\r\n    customarily used for software interchange.\r\n\r\n    b) Convey the object code in, or embodied in, a physical product\r\n    (including a physical distribution medium), accompanied by a\r\n    written offer, valid for at least three years and valid for as\r\n    long as you offer spare parts or customer support for that product\r\n    model, to give anyone who possesses the object code either (1) a\r\n    copy of the Corresponding Source for all the software in the\r\n    product that is covered by this License, on a durable physical\r\n    medium customarily used for software interchange, for a price no\r\n    more than your reasonable cost of physically performing this\r\n    conveying of source, or (2) access to copy the\r\n    Corresponding Source from a network server at no charge.\r\n\r\n    c) Convey individual copies of the object code with a copy of the\r\n    written offer to provide the Corresponding Source.  This\r\n    alternative is allowed only occasionally and noncommercially, and\r\n    only if you received the object code with such an offer, in accord\r\n    with subsection 6b.\r\n\r\n    d) Convey the object code by offering access from a designated\r\n    place (gratis or for a charge), and offer equivalent access to the\r\n    Corresponding Source in the same way through the same place at no\r\n    further charge.  You need not require recipients to copy the\r\n    Corresponding Source along with the object code.  If the place to\r\n    copy the object code is a network server, the Corresponding Source\r\n    may be on a different server (operated by you or a third party)\r\n    that supports equivalent copying facilities, provided you maintain\r\n    clear directions next to the object code saying where to find the\r\n    Corresponding Source.  Regardless of what server hosts the\r\n    Corresponding Source, you remain obligated to ensure that it is\r\n    available for as long as needed to satisfy these requirements.\r\n\r\n    e) Convey the object code using peer-to-peer transmission, provided\r\n    you inform other peers where the object code and Corresponding\r\n    Source of the work are being offered to the general public at no\r\n    charge under subsection 6d.\r\n\r\n  A separable portion of the object code, whose source code is excluded\r\nfrom the Corresponding Source as a System Library, need not be\r\nincluded in conveying the object code work.\r\n\r\n  A \"User Product\" is either (1) a \"consumer product\", which means any\r\ntangible personal property which is normally used for personal, family,\r\nor household purposes, or (2) anything designed or sold for incorporation\r\ninto a dwelling.  In determining whether a product is a consumer product,\r\ndoubtful cases shall be resolved in favor of coverage.  For a particular\r\nproduct received by a particular user, \"normally used\" refers to a\r\ntypical or common use of that class of product, regardless of the status\r\nof the particular user or of the way in which the particular user\r\nactually uses, or expects or is expected to use, the product.  A product\r\nis a consumer product regardless of whether the product has substantial\r\ncommercial, industrial or non-consumer uses, unless such uses represent\r\nthe only significant mode of use of the product.\r\n\r\n  \"Installation Information\" for a User Product means any methods,\r\nprocedures, authorization keys, or other information required to install\r\nand execute modified versions of a covered work in that User Product from\r\na modified version of its Corresponding Source.  The information must\r\nsuffice to ensure that the continued functioning of the modified object\r\ncode is in no case prevented or interfered with solely because\r\nmodification has been made.\r\n\r\n  If you convey an object code work under this section in, or with, or\r\nspecifically for use in, a User Product, and the conveying occurs as\r\npart of a transaction in which the right of possession and use of the\r\nUser Product is transferred to the recipient in perpetuity or for a\r\nfixed term (regardless of how the transaction is characterized), the\r\nCorresponding Source conveyed under this section must be accompanied\r\nby the Installation Information.  But this requirement does not apply\r\nif neither you nor any third party retains the ability to install\r\nmodified object code on the User Product (for example, the work has\r\nbeen installed in ROM).\r\n\r\n  The requirement to provide Installation Information does not include a\r\nrequirement to continue to provide support service, warranty, or updates\r\nfor a work that has been modified or installed by the recipient, or for\r\nthe User Product in which it has been modified or installed.  Access to a\r\nnetwork may be denied when the modification itself materially and\r\nadversely affects the operation of the network or violates the rules and\r\nprotocols for communication across the network.\r\n\r\n  Corresponding Source conveyed, and Installation Information provided,\r\nin accord with this section must be in a format that is publicly\r\ndocumented (and with an implementation available to the public in\r\nsource code form), and must require no special password or key for\r\nunpacking, reading or copying.\r\n\r\n  7. Additional Terms.\r\n\r\n  \"Additional permissions\" are terms that supplement the terms of this\r\nLicense by making exceptions from one or more of its conditions.\r\nAdditional permissions that are applicable to the entire Program shall\r\nbe treated as though they were included in this License, to the extent\r\nthat they are valid under applicable law.  If additional permissions\r\napply only to part of the Program, that part may be used separately\r\nunder those permissions, but the entire Program remains governed by\r\nthis License without regard to the additional permissions.\r\n\r\n  When you convey a copy of a covered work, you may at your option\r\nremove any additional permissions from that copy, or from any part of\r\nit.  (Additional permissions may be written to require their own\r\nremoval in certain cases when you modify the work.)  You may place\r\nadditional permissions on material, added by you to a covered work,\r\nfor which you have or can give appropriate copyright permission.\r\n\r\n  Notwithstanding any other provision of this License, for material you\r\nadd to a covered work, you may (if authorized by the copyright holders of\r\nthat material) supplement the terms of this License with terms:\r\n\r\n    a) Disclaiming warranty or limiting liability differently from the\r\n    terms of sections 15 and 16 of this License; or\r\n\r\n    b) Requiring preservation of specified reasonable legal notices or\r\n    author attributions in that material or in the Appropriate Legal\r\n    Notices displayed by works containing it; or\r\n\r\n    c) Prohibiting misrepresentation of the origin of that material, or\r\n    requiring that modified versions of such material be marked in\r\n    reasonable ways as different from the original version; or\r\n\r\n    d) Limiting the use for publicity purposes of names of licensors or\r\n    authors of the material; or\r\n\r\n    e) Declining to grant rights under trademark law for use of some\r\n    trade names, trademarks, or service marks; or\r\n\r\n    f) Requiring indemnification of licensors and authors of that\r\n    material by anyone who conveys the material (or modified versions of\r\n    it) with contractual assumptions of liability to the recipient, for\r\n    any liability that these contractual assumptions directly impose on\r\n    those licensors and authors.\r\n\r\n  All other non-permissive additional terms are considered \"further\r\nrestrictions\" within the meaning of section 10.  If the Program as you\r\nreceived it, or any part of it, contains a notice stating that it is\r\ngoverned by this License along with a term that is a further\r\nrestriction, you may remove that term.  If a license document contains\r\na further restriction but permits relicensing or conveying under this\r\nLicense, you may add to a covered work material governed by the terms\r\nof that license document, provided that the further restriction does\r\nnot survive such relicensing or conveying.\r\n\r\n  If you add terms to a covered work in accord with this section, you\r\nmust place, in the relevant source files, a statement of the\r\nadditional terms that apply to those files, or a notice indicating\r\nwhere to find the applicable terms.\r\n\r\n  Additional terms, permissive or non-permissive, may be stated in the\r\nform of a separately written license, or stated as exceptions;\r\nthe above requirements apply either way.\r\n\r\n  8. Termination.\r\n\r\n  You may not propagate or modify a covered work except as expressly\r\nprovided under this License.  Any attempt otherwise to propagate or\r\nmodify it is void, and will automatically terminate your rights under\r\nthis License (including any patent licenses granted under the third\r\nparagraph of section 11).\r\n\r\n  However, if you cease all violation of this License, then your\r\nlicense from a particular copyright holder is reinstated (a)\r\nprovisionally, unless and until the copyright holder explicitly and\r\nfinally terminates your license, and (b) permanently, if the copyright\r\nholder fails to notify you of the violation by some reasonable means\r\nprior to 60 days after the cessation.\r\n\r\n  Moreover, your license from a particular copyright holder is\r\nreinstated permanently if the copyright holder notifies you of the\r\nviolation by some reasonable means, this is the first time you have\r\nreceived notice of violation of this License (for any work) from that\r\ncopyright holder, and you cure the violation prior to 30 days after\r\nyour receipt of the notice.\r\n\r\n  Termination of your rights under this section does not terminate the\r\nlicenses of parties who have received copies or rights from you under\r\nthis License.  If your rights have been terminated and not permanently\r\nreinstated, you do not qualify to receive new licenses for the same\r\nmaterial under section 10.\r\n\r\n  9. Acceptance Not Required for Having Copies.\r\n\r\n  You are not required to accept this License in order to receive or\r\nrun a copy of the Program.  Ancillary propagation of a covered work\r\noccurring solely as a consequence of using peer-to-peer transmission\r\nto receive a copy likewise does not require acceptance.  However,\r\nnothing other than this License grants you permission to propagate or\r\nmodify any covered work.  These actions infringe copyright if you do\r\nnot accept this License.  Therefore, by modifying or propagating a\r\ncovered work, you indicate your acceptance of this License to do so.\r\n\r\n  10. Automatic Licensing of Downstream Recipients.\r\n\r\n  Each time you convey a covered work, the recipient automatically\r\nreceives a license from the original licensors, to run, modify and\r\npropagate that work, subject to this License.  You are not responsible\r\nfor enforcing compliance by third parties with this License.\r\n\r\n  An \"entity transaction\" is a transaction transferring control of an\r\norganization, or substantially all assets of one, or subdividing an\r\norganization, or merging organizations.  If propagation of a covered\r\nwork results from an entity transaction, each party to that\r\ntransaction who receives a copy of the work also receives whatever\r\nlicenses to the work the party's predecessor in interest had or could\r\ngive under the previous paragraph, plus a right to possession of the\r\nCorresponding Source of the work from the predecessor in interest, if\r\nthe predecessor has it or can get it with reasonable efforts.\r\n\r\n  You may not impose any further restrictions on the exercise of the\r\nrights granted or affirmed under this License.  For example, you may\r\nnot impose a license fee, royalty, or other charge for exercise of\r\nrights granted under this License, and you may not initiate litigation\r\n(including a cross-claim or counterclaim in a lawsuit) alleging that\r\nany patent claim is infringed by making, using, selling, offering for\r\nsale, or importing the Program or any portion of it.\r\n\r\n  11. Patents.\r\n\r\n  A \"contributor\" is a copyright holder who authorizes use under this\r\nLicense of the Program or a work on which the Program is based.  The\r\nwork thus licensed is called the contributor's \"contributor version\".\r\n\r\n  A contributor's \"essential patent claims\" are all patent claims\r\nowned or controlled by the contributor, whether already acquired or\r\nhereafter acquired, that would be infringed by some manner, permitted\r\nby this License, of making, using, or selling its contributor version,\r\nbut do not include claims that would be infringed only as a\r\nconsequence of further modification of the contributor version.  For\r\npurposes of this definition, \"control\" includes the right to grant\r\npatent sublicenses in a manner consistent with the requirements of\r\nthis License.\r\n\r\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\r\npatent license under the contributor's essential patent claims, to\r\nmake, use, sell, offer for sale, import and otherwise run, modify and\r\npropagate the contents of its contributor version.\r\n\r\n  In the following three paragraphs, a \"patent license\" is any express\r\nagreement or commitment, however denominated, not to enforce a patent\r\n(such as an express permission to practice a patent or covenant not to\r\nsue for patent infringement).  To \"grant\" such a patent license to a\r\nparty means to make such an agreement or commitment not to enforce a\r\npatent against the party.\r\n\r\n  If you convey a covered work, knowingly relying on a patent license,\r\nand the Corresponding Source of the work is not available for anyone\r\nto copy, free of charge and under the terms of this License, through a\r\npublicly available network server or other readily accessible means,\r\nthen you must either (1) cause the Corresponding Source to be so\r\navailable, or (2) arrange to deprive yourself of the benefit of the\r\npatent license for this particular work, or (3) arrange, in a manner\r\nconsistent with the requirements of this License, to extend the patent\r\nlicense to downstream recipients.  \"Knowingly relying\" means you have\r\nactual knowledge that, but for the patent license, your conveying the\r\ncovered work in a country, or your recipient's use of the covered work\r\nin a country, would infringe one or more identifiable patents in that\r\ncountry that you have reason to believe are valid.\r\n\r\n  If, pursuant to or in connection with a single transaction or\r\narrangement, you convey, or propagate by procuring conveyance of, a\r\ncovered work, and grant a patent license to some of the parties\r\nreceiving the covered work authorizing them to use, propagate, modify\r\nor convey a specific copy of the covered work, then the patent license\r\nyou grant is automatically extended to all recipients of the covered\r\nwork and works based on it.\r\n\r\n  A patent license is \"discriminatory\" if it does not include within\r\nthe scope of its coverage, prohibits the exercise of, or is\r\nconditioned on the non-exercise of one or more of the rights that are\r\nspecifically granted under this License.  You may not convey a covered\r\nwork if you are a party to an arrangement with a third party that is\r\nin the business of distributing software, under which you make payment\r\nto the third party based on the extent of your activity of conveying\r\nthe work, and under which the third party grants, to any of the\r\nparties who would receive the covered work from you, a discriminatory\r\npatent license (a) in connection with copies of the covered work\r\nconveyed by you (or copies made from those copies), or (b) primarily\r\nfor and in connection with specific products or compilations that\r\ncontain the covered work, unless you entered into that arrangement,\r\nor that patent license was granted, prior to 28 March 2007.\r\n\r\n  Nothing in this License shall be construed as excluding or limiting\r\nany implied license or other defenses to infringement that may\r\notherwise be available to you under applicable patent law.\r\n\r\n  12. No Surrender of Others' Freedom.\r\n\r\n  If conditions are imposed on you (whether by court order, agreement or\r\notherwise) that contradict the conditions of this License, they do not\r\nexcuse you from the conditions of this License.  If you cannot convey a\r\ncovered work so as to satisfy simultaneously your obligations under this\r\nLicense and any other pertinent obligations, then as a consequence you may\r\nnot convey it at all.  For example, if you agree to terms that obligate you\r\nto collect a royalty for further conveying from those to whom you convey\r\nthe Program, the only way you could satisfy both those terms and this\r\nLicense would be to refrain entirely from conveying the Program.\r\n\r\n  13. Use with the GNU Affero General Public License.\r\n\r\n  Notwithstanding any other provision of this License, you have\r\npermission to link or combine any covered work with a work licensed\r\nunder version 3 of the GNU Affero General Public License into a single\r\ncombined work, and to convey the resulting work.  The terms of this\r\nLicense will continue to apply to the part which is the covered work,\r\nbut the special requirements of the GNU Affero General Public License,\r\nsection 13, concerning interaction through a network will apply to the\r\ncombination as such.\r\n\r\n  14. Revised Versions of this License.\r\n\r\n  The Free Software Foundation may publish revised and/or new versions of\r\nthe GNU General Public License from time to time.  Such new versions will\r\nbe similar in spirit to the present version, but may differ in detail to\r\naddress new problems or concerns.\r\n\r\n  Each version is given a distinguishing version number.  If the\r\nProgram specifies that a certain numbered version of the GNU General\r\nPublic License \"or any later version\" applies to it, you have the\r\noption of following the terms and conditions either of that numbered\r\nversion or of any later version published by the Free Software\r\nFoundation.  If the Program does not specify a version number of the\r\nGNU General Public License, you may choose any version ever published\r\nby the Free Software Foundation.\r\n\r\n  If the Program specifies that a proxy can decide which future\r\nversions of the GNU General Public License can be used, that proxy's\r\npublic statement of acceptance of a version permanently authorizes you\r\nto choose that version for the Program.\r\n\r\n  Later license versions may give you additional or different\r\npermissions.  However, no additional obligations are imposed on any\r\nauthor or copyright holder as a result of your choosing to follow a\r\nlater version.\r\n\r\n  15. Disclaimer of Warranty.\r\n\r\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\r\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\r\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\r\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\r\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\r\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\r\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r\n\r\n  16. Limitation of Liability.\r\n\r\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\r\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\r\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\r\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\r\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\r\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\r\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\r\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\r\nSUCH DAMAGES.\r\n\r\n  17. Interpretation of Sections 15 and 16.\r\n\r\n  If the disclaimer of warranty and limitation of liability provided\r\nabove cannot be given local legal effect according to their terms,\r\nreviewing courts shall apply local law that most closely approximates\r\nan absolute waiver of all civil liability in connection with the\r\nProgram, unless a warranty or assumption of liability accompanies a\r\ncopy of the Program in return for a fee.\r\n\r\n                     END OF TERMS AND CONDITIONS\r\n\r\n            How to Apply These Terms to Your New Programs\r\n\r\n  If you develop a new program, and you want it to be of the greatest\r\npossible use to the public, the best way to achieve this is to make it\r\nfree software which everyone can redistribute and change under these terms.\r\n\r\n  To do so, attach the following notices to the program.  It is safest\r\nto attach them to the start of each source file to most effectively\r\nstate the exclusion of warranty; and each file should have at least\r\nthe \"copyright\" line and a pointer to where the full notice is found.\r\n\r\n    <one line to give the program's name and a brief idea of what it does.>\r\n    Copyright (C) <year>  <name of author>\r\n\r\n    This program is free software: you can redistribute it and/or modify\r\n    it under the terms of the GNU General Public License as published by\r\n    the Free Software Foundation, either version 3 of the License, or\r\n    (at your option) any later version.\r\n\r\n    This program is distributed in the hope that it will be useful,\r\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n    GNU General Public License for more details.\r\n\r\n    You should have received a copy of the GNU General Public License\r\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\r\n\r\nAlso add information on how to contact you by electronic and paper mail.\r\n\r\n  If the program does terminal interaction, make it output a short\r\nnotice like this when it starts in an interactive mode:\r\n\r\n    <program>  Copyright (C) <year>  <name of author>\r\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\r\n    This is free software, and you are welcome to redistribute it\r\n    under certain conditions; type `show c' for details.\r\n\r\nThe hypothetical commands `show w' and `show c' should show the appropriate\r\nparts of the General Public License.  Of course, your program's commands\r\nmight be different; for a GUI interface, you would use an \"about box\".\r\n\r\n  You should also get your employer (if you work as a programmer) or school,\r\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\r\nFor more information on this, and how to apply and follow the GNU GPL, see\r\n<http://www.gnu.org/licenses/>.\r\n\r\n  The GNU General Public License does not permit incorporating your program\r\ninto proprietary programs.  If your program is a subroutine library, you\r\nmay consider it more useful to permit linking proprietary applications with\r\nthe library.  If this is what you want to do, use the GNU Lesser General\r\nPublic License instead of this License.  But first, please read\r\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\r\n\r\n"
  },
  {
    "path": "extras/clink/clink.bat",
    "content": "@echo off\r\nrem -- Copyright (c) 2012 Martin Ridgers\r\nrem -- Portions Copyright (c) 2020-2024 Christopher Antos\r\nrem -- License: http://opensource.org/licenses/MIT\r\n\r\nsetlocal enableextensions\r\nset clink_profile_arg=\r\nset clink_quiet_arg=\r\n\r\nrem -- Mimic cmd.exe's behaviour when starting from the start menu.\r\nif /i \"%~1\"==\"startmenu\" (\r\n    cd /d \"%userprofile%\"\r\n    shift\r\n)\r\n\r\nrem -- Check for the --profile option.\r\nif /i \"%~1\"==\"--profile\" (\r\n    set clink_profile_arg=--profile \"%~2\"\r\n    shift\r\n    shift\r\n)\r\n\r\nrem -- Check for the --quiet option.\r\nif /i \"%~1\"==\"--quiet\" (\r\n    set clink_quiet_arg= --quiet\r\n    shift\r\n)\r\n\r\nrem -- If the .bat is run without any arguments, then start a cmd.exe instance.\r\nif _%1==_ (\r\n    call :launch\r\n    goto :end\r\n)\r\n\r\nrem -- Test for autorun.\r\nif defined CLINK_NOAUTORUN if /i \"%~1\"==\"inject\" if /i \"%~2\"==\"--autorun\" goto :end\r\n\r\nrem -- Forward to appropriate loader, and endlocal before inject tags the prompt.\r\nif /i \"%processor_architecture%\"==\"x86\" (\r\n        endlocal\r\n        \"%~dp0\\clink_x86.exe\" %*\r\n) else if /i \"%processor_architecture%\"==\"arm64\" (\r\n        endlocal\r\n        \"%~dp0\\clink_arm64.exe\" %*\r\n) else if /i \"%processor_architecture%\"==\"amd64\" (\r\n    if defined processor_architew6432 (\r\n        endlocal\r\n        \"%~dp0\\clink_x86.exe\" %*\r\n    ) else (\r\n        endlocal\r\n        \"%~dp0\\clink_x64.exe\" %*\r\n    )\r\n)\r\n\r\ngoto :end\r\n\r\n:launch\r\nsetlocal enableextensions\r\nset WT_PROFILE_ID=\r\nset WT_SESSION=\r\nstart \"Clink\" cmd.exe /s /k \"\"%~dpnx0\" inject %clink_profile_arg%%clink_quiet_arg%\"\r\nendlocal\r\n\r\n:end\r\n"
  },
  {
    "path": "extras/clink/clink.lua",
    "content": "-- This file is intentionally blank.\r\n--\r\n-- The old clink.lua file is no longer used, and this blank file ensures if a\r\n-- new clink version is copied over an old clink version, it won't accidentally\r\n-- use an obsolete leftover clink.lua file.\r\n"
  },
  {
    "path": "extras/clink/clink_inputrc_base",
    "content": "set bell-style                  visible\nset completion-ignore-case      on\nset completion-map-case         on\nset completion-display-width    106\nset output-meta                 on\nset skip-completed-text         on\nset convert-meta                on\n\n\"\\e`s\": backward-word           # ctrl-left\n\"\\e`t\": forward-word            # ctrl-right\n\"\\e`O\": end-of-line             # end\n\"\\e`G\": beginning-of-line       # home\n\"\\e`S\": delete-char             # del\n\"\\e`c\": page-up                 # shift page-up\n\"\\e`u\": kill-line               # ctrl+end\n\"\\e`w\": backward-kill-line      # ctrl+home\n\"\\e`I\": history-search-backward # page-up\n\"\\e`Q\": history-search-forward  # page-down\n\nset keymap emacs\n\"\\t\":               clink-completion-shim\nC-v:                paste-from-clipboard\nC-q:                reload-lua-state\nC-z:                undo\nM-h:                show-rl-help\nM-C-c:              copy-line-to-clipboard\nC-c:                ctrl-c\nM-a:                \"..\\\\\"\n\nset keymap vi-insert\n\"\\t\":               clink-completion-shim\nC-v:                paste-from-clipboard\nC-z:                undo\nM-h:                show-rl-help\nM-C-c:              copy-line-to-clipboard\nC-c:                ctrl-c\nM-a:                \"..\\\\\"\n\nset keymap vi-move\nC-v:                paste-from-clipboard\nC-z:                undo\nM-h:                show-rl-help\nM-C-c:              copy-line-to-clipboard\nC-c:                ctrl-c\nM-a:                \"..\\\\\"\n\n$if cmd.exe\n    set keymap emacs\n    \"\\e`U\":         up-directory\n    M-C-u:          up-directory\n    M-C-e:          expand-env-vars\n\n    set keymap vi-insert\n    \"\\e`U\":         up-directory\n    M-C-u:          up-directory\n    M-C-e:          expand-env-vars\n\n    set keymap vi-move\n    \"\\e`U\":         up-directory\n    M-C-u:          up-directory\n    M-C-e:          expand-env-vars\n$endif\n\nset keymap emacs\n\n# Uncomment these two lines for vanilla cmd.exe style completion.\n# \"\\t\": clink-menu-completion-shim\n# \"\\e`Z\": clink-backward-menu-completion-shim\n\n$include ~/clink_inputrc\n$include ~/_inputrc\n$include ~/.inputrc\n"
  },
  {
    "path": "extras/clink/default_inputrc",
    "content": "# When this file is named \"default_inputrc\" and is in the binaries\r\n# directory or profile directory, it provides enhanced default settings.\r\n\r\n# Override the built-in Readline defaults with ones that provide a more\r\n# enhanced Clink experience.\r\n\r\nset colored-completion-prefix                   on\r\nset colored-stats                               on\r\nset mark-symlinked-directories                  on\r\nset completion-auto-query-items                 on\r\nset history-point-at-end-of-anchored-search     on\r\nset search-ignore-case                          on\r\n\r\n"
  },
  {
    "path": "extras/clink/default_settings",
    "content": "# When this file is named \"default_settings\" and is in the binaries\n# directory or profile directory, it provides enhanced default settings.\n\n# Override built-in default settings with ones that provide a more\n# enhanced Clink experience.\n\nclink.default_bindings            = windows\nclink.autoupdate                  = off\ncmd.ctrld_exits                   = False\ncolor.arginfo                     = sgr 38;5;172\ncolor.argmatcher                  = sgr 1;38;5;40\ncolor.cmd                         = bold\ncolor.cmdredir                    = sgr 38;5;172\ncolor.cmdsep                      = sgr 38;5;135\ncolor.comment_row                 = sgr 38;5;87;48;5;18\ncolor.description                 = sgr 38;5;39\ncolor.doskey                      = sgr 1;38;5;75\ncolor.executable                  = sgr 1;38;5;33\ncolor.filtered                    = bold\ncolor.flag                        = sgr 38;5;117\ncolor.hidden                      = sgr 38;5;160\ncolor.histexpand                  = sgr 97;48;5;55\ncolor.horizscroll                 = sgr 38;5;16;48;5;30\ncolor.input                       = sgr 38;5;214\ncolor.readonly                    = sgr 38;5;28\ncolor.selected_completion         = sgr 7\ncolor.selection                   = sgr 38;5;16;48;5;179\ncolor.unrecognized                = sgr 38;5;203\nhistory.max_lines                 = 25000\nhistory.time_stamp                = show\nmatch.expand_envvars              = True\nmatch.substring                   = True\n"
  },
  {
    "path": "firebase.json",
    "content": "{\n  \"hosting\": {\n    \"public\": \"docs/api\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**/.*\",\n      \"**/node_modules/**\"\n    ]\n  }\n}\n"
  },
  {
    "path": "locale/STOP.txt",
    "content": "Do not submit pull requests for translations.\n\nTranslations are managed at https://crowdin.com/project/tabby\n"
  },
  {
    "path": "locale/af-ZA.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: af\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Afrikaans\\n\"\n\"Language: af_ZA\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" is steeds besig om te hardloop. Maak toe?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} kopie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"'n Tweede lettertipefamilie wat gebruik word om karakters wat in die hooflettertipe ontbreek, te vertoon\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Stop alles\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Aanvaar en onthou sleutel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Aanvaar net hierdie eenkeer\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Toeganklikheid\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Akriel agtergrond\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Voeg by\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Voeg 'n poort aanstuurder by\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Voeg 'n privaat sleutel by\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Voeg by...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Bykomende spasie tussen lyne\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Gevorderd\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agent aanstuur\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent pyp pad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Agent tipe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Laat toe om .bat-lêers in oortjies oop te maak, maar breek sommige skulpe\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Laat toe om 'n terminaal vinnig oop te maak in die geselekteerde vouer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Altyd Donker\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Altyd Lig\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Voorkoms\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Toepassing\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Toepassing instellings\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Is jy seker jy wil Tabby toemaak? U kan hierdie boodskap deaktiveer in Instellings -> Venster.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Is jy seker?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumente\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Vra 'n vraag\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Vra voordat die blaaieroortjie toegemaak word\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Hoorbaar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Stawing metode\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Skrywer\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Outo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Maak 'n terminaal outomaties oop wanneer die toep begin\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Outomaties\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Outomatiese Bywerkings\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Laai veranderinge outomaties op en kyk elke minuut vir opdaterings\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Beskikbaar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Agtergrond tipe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Terugspasie-sleutelmodus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Baud koers\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Begin van die lyn\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Flikker wyser\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Blou\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Vervaag\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Vet lettertipe gewig\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Onderkant\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Plak tussen hakies (vereis dop ondersteuning)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Uitsaaimodus. Klik enige plek om te kanselleer.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Ingeboude\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Kanselleer\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Verander die baud-koers\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Verander oortjiekleur\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Verander die hoofwagfrase\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Kyk vir opdaterings\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Syfers\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Opruim\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Vee onlangse profiele uit\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Maak terminaal skoon\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Maak terminaal skoon na verbinding\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Knipbord\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Maak toe\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Maak toe en wys nooit weer nie\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Maak gefokusde paneel toe\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Maak ander oortjies toe\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Maak oortjie toe\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Maak oortjies aan die linkerkant toe\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Maak oortjies aan die regterkant toe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Maak die venster toe nadat jy die laaste oortjie toegemaak het\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Kleur\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Kleur skema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Kleurskemas\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Kleure\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Kombineer alle oortjies in die huidige oortjie\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Bevelreël\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Command se stdin/stdout word gebruik in plaas van 'n netwerkverbinding\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Bevele\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompak (erfenis)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Opstelling geskrap\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Opstelling afgelaai\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Opstelling lêer\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Opstelling sinchronisering\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Opstelling opgelaai\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Opstellings\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Koppel deur 'n instaanbediener\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Koppel aan \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Koppel eers aan 'n ander gasheer en gebruik dit as 'n instaanbediener\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Koppel tans\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Koppel\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Koppel het misluk: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Koppelnaam sal eerder gebruik word\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Kontekskieslys\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Beheer die hoeveelheid spasie tussen elemente\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Gekopieer\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopieer\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Kopieer huidige pad\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopieer volle pad\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopieer op kies\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Kopieer na knipbord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopieer met formatering\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Kon nie opstelling dekripteer nie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Skep\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Skep gids\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Huidige\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Huidige kleurskema\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Huidige gasheersleutel-vingerafdruk\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Huidige proses: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Wyser vorm\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Pasgemaak\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Pasgemaakte CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Donker modus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Data bisse\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Ontfouting\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Verminder die horisontale verdelingsgrootte\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Verminder die vertikale verdelingsgrootte\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Standaard \\\"Koppel aan\\\" tiepe\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Standaard verbindingssoort gebruik deur die vinnige koppelingsfunksie (bv. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Verstekprofiel vir nuwe oortjies\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Standaard profielgroepinstellings\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Verstekprofiel instellings\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Verstekke\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Verstekke vir {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Skrap\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Skrap \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Skrap {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Skrap hele reël\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Skrap volgende woord\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Skrap vorige woord\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Verwyder die konfigurasie aan die afgeleë kant?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Skrap die groep se profiele?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Skrap hierdie skrip?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Skrap kluisinhoud?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Skrap tans\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Toestel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direk\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Deaktiveer\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Deaktiveer dinamiese oortjietitel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Deaktiveer vlot-agtergrond terwyl jy sleep\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Deaktiveer GVE-versnelling\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Gediaktiveer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Ontkoppel\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Ontkoppel huidige oortjie (Serieel/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Ontkoppel van {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Vertoon beelde via Sixel-ontsnappingsreekse\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Skerm aan\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Moenie aborteer nie\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Moenie toemaak nie\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Moet nie onthou nie\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Dok altyd bo-op\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Dok die terminaal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Gedokte terminaalgrootte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Gedokte terminaalruimte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Dokering\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Dubbelklik seleksie sal stop by hierdie karakters\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Af\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Aflaai\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Teken vet teks in helder kleure\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Dupliseer\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Dupliseer as administrateur\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Dupliseer oortjie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Wysig\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Wysig plaaslik\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Aktiveer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Aktiveer analise\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Aktiveer animasies\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Aktiveer outomatiese installasie van opdaterings wanneer hulle beskikbaar word.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Aktiveer vloeiende agtergrondopsie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Aktiveer lettertipe-ligatuur\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Aktiveer globale snelsleutel (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Aktiveer die eksperimentele Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Enkripteer konfigurasielêer\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Einde van die lyn\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Omgewing\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Vee konfigurasie uit\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Vee die Kluis uit\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Fout in {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Presiese passing\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Voorbeeld:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Eksperimentele Windows 10 agtergrondstyl wat bekend is om probleme te veroorsaak\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Uitvoer\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Terugval-lettertipe\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Lêeroordragte\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Lêer: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Vaste\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Vloeiende agtergrond veroorsaak soms sleep vertraging\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Fokus alle ruite\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Fokus alle ruite gelyktydig (uitsaai)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Fokus alle oortjies\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Fokus alle oortjies gelyktydig (uitsaai)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Fokus volg muis\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Fokus volgende ruit\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Fokus ruit {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Fokus vorige ruit\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Fokus op die ruit hierbo\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Fokus die ruit hieronder\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Fokus die ruit aan die linkerkant\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Fokus die ruit aan die regterkant\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Volg die kleurskema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Lettertipe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Vir sleutelbord kortpaaie\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Dwing CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Dwing CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Dwing LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Dwing 'n spesifieke tipe SSH-agentverbinding.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Vergeet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Stuur poort aan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Aangestuurde poorte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Van kleurskema\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Van stelsel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Van tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Voorkant\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Vol\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Algemeen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Genereer 'n vooraf ingevulde GitHub-kwessie\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Kry\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Kry dit uit die Tabby Web-instellingsvenster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Gee die venster 'n vaag deursigtige agtergrond\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Gaan op\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Groen\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Groep\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Kappe\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Help om die aantal Tabby-installasies regoor die wêreld te volg!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Help om Tabby te vertaal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Heksadesimaal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Versteek\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Versteek oortjie toemaakknoppie\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Versteek oortjie-indeks\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Versteek oortjie-opsies-knoppie\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Versteek venster op fokusverlies\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Versteek die gekoppelde terminaal wanneer jy wegklik.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Tuisblad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Gasheer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Gasheer sleutel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Gasheersleutel verifikasie\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Sneltoetse\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Hoe Tabby homself deur omgewingsveranderlikes voorstel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP-instaanbediener\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP-instaanbediener gasheer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP-instaanbediener poort\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikoon\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"id.tab-width.dynamic\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Indien gedeaktiveer, sal slegs gepasmaakte profiele in die profielkieser verskyn\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Onmiddellik eggo jou insette plaaslik\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Verhoog die horisontale verdelingsgrootte\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Verhoog die vertikale verdelingsgrootte\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Invoer\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Invoer word gestuur soos jy tik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Invoermodus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Voer nuwe lyne in\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Geïnstalleer\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Die installering van die opdatering sal alle oortjies toemaak en Tabby herbegin.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Intelligente Ctrl-C (kopieer/aborteer)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktief\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Ongeldige sintaksis\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Spring gasheer\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Spring na die volgende woord\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Spring na die vorige woord\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Behou\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Hou lewendig interval (millisekondes)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Hou gedokte terminaal altyd bo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Sleutel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Sleutel ruil\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Sleutelbord\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Sleutelbord-interaktiewe verifikasie\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Eindig\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Taal\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Laas bekende gasheersleutel-vingerafdruk\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Begin WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Begin WinSCP vir huidige SSH sessie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Leer hoe om Tabby toe te laat om afgeleë dop se werkgids op te spoor.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Links\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Laat die dop Meta-sleutel hanteer in plaas van BS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Ligte modus\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Reël vir reël\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Reël-redigeerder, insette word gestuur nadat u Enter gedruk het\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Reël-vulling\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Laai tans\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Laai tans opstellings...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Plaaslike\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Plaaslike eggo\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Plaaslike terminaal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Aanmelding skripte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Langkliek vir kontekskieslys\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Bestuur profiele\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maks. hou-lewendig tel\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maksimeer die aktiewe paneel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minimum kontrasverhouding\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Gewysig op {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Muis\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Skuif oortjie na links\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Skuif oortjie na regs\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Skuif na \\\"Ongegroepeer\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Deur die muis oor 'n onaktiewe paneel te beweeg, sal dit aktiveer\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Naam\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Naam vir die nuwe opstelling\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Naam vir die nuwe gids\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Inheems\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nuwe\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nuwe admin-oortjie\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nuwe opstelling op {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nuwe groepnaam\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nuwe item\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nuwe naam\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nuwe profiel\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nuwe profielgroep\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nuwe profiel naam\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nuwe oortjie\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nuwe oortjie: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nuwe terminaal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nuwe venster\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nuwe Venster\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nuut met profiel\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Volgende oortjie\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Geen kleur\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Geen wysiger nie\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Geen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normaal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Normale lettertipe gewig\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Nie gevind nie\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Stel in kennis van aktiwiteit\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Stel in kennis wanneer klaar is\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Aantal lyne wat in die buffer gehou word\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Af\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Amptelik\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Op GitHub-besprekings\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Sluit net die oortjie wanneer die sessie uitdruklik beëindig is\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Ondeursigtigheid\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Maak DevTools oop\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Maak instellings oop\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Maak instellingsoortjie oop: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Maak die SFTP-paneel oop\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opsioneel\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opsies\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Oranje\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"OS verstek\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"OS verstek ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Uitset word as 'n heksstort getoon\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Uitset word getoon soos dit ontvang word\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Uitset modus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Uitset nuwelyne\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Oorskryf X11-vertoning\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Oorskryf plaaslik en sinkroniseer\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Oorskryf afgeleë en sinkroniseer\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Oorskryf die opstelling aan die afgeleë kant en begin sinkroniseer?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Oorskryf die plaaslike opstelling en begin sinkroniseer?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Paneel herskaleer stap\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Panele\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papier (erfenis)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Pariteit\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Gedeeltelike opstelling-sinkronisering is nie moontlik wanneer die opstelling via Vault geënkripteer is nie.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Deurlaat\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Wagfrase vir 'n private sleutel met hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Wagwoord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Plak\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Plak uit knipbord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Plak indien geen seleksie nie, anders kopieer\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Plak veelvuldige reëls?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Plak op middel-klik\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Pad of adres van die plaaslike X11-sok\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Speld vas\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Inproppe\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Inprop vouer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Poort\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port oopgemaak\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Poorte\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Druk enige sleutel om weer te koppel\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Druk die sleutel nou\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Voorkom toevallige sluiting\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Voorkom toevallige uitvoering van geplakte bevele\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Vorige oortjie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Privaat sleutels\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proses voltooi\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Profielnaam\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profiele\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profiele en verbindings\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Instaanbediener bevel\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Pers\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Plaas al Tabby se opstelling in die kluis\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Vinnig verbind\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Verlaat\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Rou-sok verbinding\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Gereed-uitteltyd (Millisekondes)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Onlangse\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Herkoppel\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Herkoppel huidige oortjie (Serieel/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rooi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regeks\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Vrystelling notas\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Onthou vir {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Afgeleë\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Verwyder witspasie en nuwe lyne rondom die gekopieerde teks\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Hernoem\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Hernoem oortjie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Beeldbouing\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Heropen laaste oortjie\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Vervang\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Meld ’n probleem\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Vereis 'n sleutel om skakels te klik\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Herstel zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Herbegin huidige reeks-sessie\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Herbegin huidige SSH-sessie\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Herbegin huidige Telnet-sessie\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Herbegin oortjie\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Herbegin die toep om veranderinge toe te pas\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Herstel instellings na verstek ?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Herstel instellings na oorgeërfde verstekwaardes ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Herstel terminaal-oortjies gedurende die begin van die toep\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Hergebruik sessie vir veelvuldige oortjies\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Regs\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Regs klik\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Laat loop as administrateur\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Stoor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Stoor 'n wagwoord in die sleutelhanger\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Stoor en pas toe\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Stoor as profiel\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Stoor uitleg as profiel\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Gestoor\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Gestoorde uitleg\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Rol op inset\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Rol terminaal een bladsy af\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Rol terminaal een bladsy op\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Rol terminaal tot onder\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Rol terminaal tot bo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Rol terug\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Rol die terminaal tot onder op Gebruiker inset\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Soek\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Soek deur kleurskemas\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Soek deur sneltoetse\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Soek deur inproppe\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Geheime sinchronisasie-kenteken\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Kies\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Kies 'n basisprofiel om as 'n sjabloon te gebruik\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Kies alles\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Kies lêerberging\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Kies profiel\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Kies profiel of voer 'n adres in\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Stuur grepe deur hex-waardes in te tik\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Stuur data een greep op 'n slag\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serie\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Serieverbinding\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serie: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Stel hoofwagfrase\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Stel wagfrase\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Stel wagwoord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Stel Tabby as %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Stel na 0 om onlangse profiele te deaktiveer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Stel die SSH-agent se benoemde pyppad.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Stellings\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Dop\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Dop ondersteun nie huidige padbespeuring nie\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Dop Integrasies\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Wys\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Wys {type} profielkieser\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Wys 'n bevestigingsblokkie wanneer jy veelvuldige reëls plak\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Wys ingeboude profiele in die kieser\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Wys bevelkieser\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Wys opstellingslêer\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Wys verstek waardes\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Wys Menger\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Wys paneeletikette (vir herrangskikking)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Wys profielikoon op oortjie\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Wys profielkieser\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Wys onlangse profiele in die kieser\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Wys vrystellingnotas\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Show Serie verbindings\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Wys oortjies in volskermmodus\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Toon Nutsbalk\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Wys kluisinhoud\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Sixel grafiese ondersteuning (eksperimenteel)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Slaan BvDD/banier oor\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Stadige voer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Knip die venster na 'n kant van die skerm\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS instaanbediener\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS instaanbediener gasheer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS instaanbediener poort\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Klank\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Bronkode\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Ruimtelikheid\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Verdeel\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Verdeel na onder\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Verdeel na onder\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Verdeel na links\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Verdeel na regs\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Verdeel na bo\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Verdeel na bo\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH verbinding\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH-verbindingsbestuur word nou gedoen deur die \\\"Profiel & Verbindings\\\"-oortjie\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH-wagwoord vir {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standaard (erfenis)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Begin\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Stop bisse\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Strook\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Teken in om opdaterings te kry\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Plaasvervangers toegelaat.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Skakel kleurskema\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Wissel profiel\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Wissel profiel in die aktiewe paneel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Wissel die terminaal voorkant implementering (eksperimenteel)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sinkroniseer\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sinkroniseer outomaties\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Sinkroniseer gasheer\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sinkroniseer sneltoetse\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sinkroniseer Kluis\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sinkroniseer vensterinstellings\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Oortjie {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Oortjie-aktiwiteit\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby kon nie met jou inproppe begin nie, so alle derdeparty-inproppe is in hierdie sessie gedeaktiveer. Die fout was:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Tabby nuus en opdaterings op Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Oortjies\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Oortjie-ligging\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Oortjie breedte\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet sessie\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminaal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Terminaal agtergrond\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminaal klok\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Terminale identifikasie\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Dankie dat jy Tabby afgelaai het!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Daar is aktiewe lêeroordragte\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Daar is 'n gestoorde wagwoord vir hierdie verbinding\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Dit is van toepassing op alle profiele van 'n gegewe tipe\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Dit is van toepassing op alle profiele van 'n gegewe tipe in hierdie groep\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Dun\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Merk dit as jy aliasing, spookbeelde of ander visuele probleme ondervind\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Wissel volskerm modus\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Wissel laaste oortjie\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Wissel terminaal venster\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Wissel die sigbaarheid van die Tabby-venster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Bo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Knip witspasie en nuwe lyne af\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Probeer weer\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Probeer tans gestoorde wagwoord\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Verander huidige oortjie se ruite in aparte oortjies\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Ongegroepeer\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Deïnstalleer\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Onbekend\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Onbekende geheim van tipe {type} vir {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Ontspeld\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Op\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Opdateer\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Gradeer op na {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Laai op\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Laai op as 'n nuwe opstelling\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Gebruik {altKeyName} as die Meta-sleutel\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Gebruik ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Gebruiker verstek\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Gebruikersnaam\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Gebruik CONNECT metode\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Gebruik vooraf ingestelde wagwoord\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Kluis\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Vault is 'n altyd-geïnkripteer houer vir geheime soos SSH-wagwoorde en privaat sleutelwagfrases.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Kluis is leeg\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Kluis is gesluit\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Kluis is nie opgestel nie\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Kluis-hoofwagfrase moet gestel word om geheime te stoor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verifieer gasheersleutels wanneer jy verbind\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Weergawe\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Weergawe: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Kleurhelderheid\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visueel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Waarsku op multi-reël plak\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Waarsku wanneer aktiewe verbindings gesluit word\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Waarskuwing: afgeleë gasheer se sleutel het skielik verander!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Ons volg net jou Tabby- en OS-weergawes.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Welkom\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Wat's nuut\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Wanneer 'n sessie eindig\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Wanneer dit geaktiveer is, kan skakels slegs geklik word terwyl hierdie sleutel ingehou word\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Wanneer WinSCP opgespoor word, kan u 'n SCP-sessie vanaf die kontekskieslys begin.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Of 'n pasgemaakte venster of 'n OS-inheemse venster gebruik moet word\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Sal voorkom dat die SSH-groet verskyn\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Venster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Vensterafmeting langs die rand\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Vensterafmeting weg van die rand af\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Venster raam\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Vensters\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 bou 18309 of hoër word aanbeveel vir ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP pad\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Woordskeier\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Werk gids\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Werkgidsopsporing\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL-terminaalklok kan slegs deur Volume Mixer gedemp word\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL-terminaal ondersteun slegs TrueColor met ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 aanstuuring\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Geel\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Jy kan dit later verander, maar dit is onherstelbaar as dit vergeet word.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Jy kan nou onder 'n man-in-die-middel-aanval wees, of die gasheersleutel kon net verander gewees het.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Zoom in\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Zoem uit\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"id.port-forwarding.dynamic\"\n\n"
  },
  {
    "path": "locale/app.pot",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"\"\n"
  },
  {
    "path": "locale/bg-BG.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: bg\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Bulgarian\\n\"\n\"Language: bg_BG\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" все още се изпълнява. Затваряне?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} копирай\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Шрифт, който да се използва в случай, че символ отсъства в основния шрифт\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Отмени всички\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Приеми и запомни ключа\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Приеми самотози веднъж\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Достъпност\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Акрилен фон\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Добави\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Добави препращащ порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Добави частен ключ\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Добави...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Допълнително разстояние между редовете\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Разширени\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Агент\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Пренасочване на агент\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Път към pipe SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Агент тип\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Разрешава отваряне на .bat файлове в табове, но прекъсва някои терминали\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Разрешава бързо отваряне на терминал в избраната папка\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Винаги тъмно\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Винаги светло\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Изглед\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Приложение\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Настройки на приложението\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Сигурни ли сте, че желаете да затворите Tabby? Може да изключите това съобщение от Настройки -> Прозорец.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Сигурни ли сте?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Аргументи\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Задайте въпрос\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Питай преди да затвориш таба на браузъра\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Звучен\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Метод за удостоверяване\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Автор\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Автоматично\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Автоматично отваряне на терминал при стартиране на приложението\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Автоматично\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Автоматична актуализация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Автоматично качи промените и проверявай за актуализация всяка минута\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Налични\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Тип на фона\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Режим на клавиша Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Скорост на предаване\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Начало на реда\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Мигане на курсора\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Синьо\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Замъгляване\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Тежест на шрифта\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Долу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Bracketed paste (изисква shell подръжка)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Режим на излъчване. Щракнете навсякъде, за да отмените.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Вградени\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Откажи\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Промени скорост на предаване\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Промяна цвета на таба\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Промяна на главна парола\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Провери за актуализация\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Шифри\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Изчисти\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Изчисти скорошни профили\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Изчисти терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Изчисти терминала след свързване\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Клипборд\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Затвори\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Затвори и не показвай отново\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Затвори панела на фокус\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Затвори останалите табове\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Затваряне на таба\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Затвори табовете вляво\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Затвори табовете вдясно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Затваряне на прозореца след затваряне на последния таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Цветове\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Цветови схеми\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Цветова схема\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Цветове\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Комбинирай всички табове в текущия\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Команден ред\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Командния stdin/stdout се използва вместо мрежова връзка\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Команди\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Компактен (наследен)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Конфигурацията е изтрита\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Конфифурацията е свалена\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Конфигурационен файл\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Синхронизация на конфигурация\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Конфигурацията е качена\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Конфигурации\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Връзка чрез прокси сървър\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Свържи към \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Свържи се първо към друг хост и го използвай като прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Свързване\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Свързване\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Свързването е неуспешно: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Името на свръзката ще се се използва вместо това\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Контекстно меню\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Контролира разстоянието между елементите\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Копирано\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Копирай\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Копирай текущия път\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Копирай пълния път\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Копирай при маркиране\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Копирай в клипборда\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Копирай с форматиране\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Конфигурацията не може да бъде декриптирана\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Създай\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Създай директория\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Текущ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Текуща цветова схема\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Текущ ключов отпечатък на хоста\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Текущ процес: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Форма на курсора\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Потребителски\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Персонализиран CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Тъмен режим\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Битове на данните\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Отстраняване на грешки\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Намали размера на хоризонталното разделяне\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Намали размера на вертикалното разделяне\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Тип по подразбиране \\\"Свързване към\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Тип връзка по подразбиране, използване на функцията за бързо свързване (например SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Профил по подразбиране за нов таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Настройки по подразбиране на групата профили\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Настройка на профил по подразбиране\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"По подразбиране\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"По подразбиране за {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Изтрий\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Изтрий \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Изтриване {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Изтриване на целия ред\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Изтрий следваща дума\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Изтрий предишна дума\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Изтриване конфигурацията на отсрещната страна?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Изтриване профилите на групата?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Изтриване на този скрипт?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Изтриване съдържанието на хранилището?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Изтриване\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Устройство\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Директно\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Изключи\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Изключи динамично заглавие на таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Деактивиране на плавния фон при влачене\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Изключи ускоряване от графичния процесор\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Изключен\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Прекъсни\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Прекъсване на връзката с текущия tab (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Прекъсване на връзката с {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Показване на изображения чрез Sixel escape sequences\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Показвай на\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Не прекъсвай\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Не затваряй\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Не запаметявай\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Закрепи винаги отгоре\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Закрепи терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Рзамер на закрепения терминал\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Отстояние от закрепения терминал\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Закрепване\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Селекцията с двоен клик ще спира при тези символи\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Долу\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Свали\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Нарисувай удебелен текст в ярки цветове\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Дублирай\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Дублирай като администратор\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Дублирай таб\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Редактирай\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Редактирай локално\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Включи\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Включи събиране на статистики\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Активиране на анимации\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Включи автоматично инсталиране на наличните актуализации.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Включи на опцията за плавен фон\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Включи шрифрова типография\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Включи глобален бърз клавиш (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Включва експерименталния Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Криптирай конфигурационния файл\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Края на реда\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Среда\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Изтрий настройките\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Изтрий хранилището\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Грешка в {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Точно съвпадение\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Пример:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Експериментален стил на фона на Windows 10, за който се знае, че причинява проблеми\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Експорт\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Резервен шрифт\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Прехвърляне на файл\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Файл: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Филтър\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Фиксирана\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"В някои случаи плавният фон води до насичания при влачене\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Фокусирай всички панели\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Фокусирай всички панели наведнъж (излъчвай)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Фокусирай всички табове\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Фокусирай всички табове наведнъж (Разпространение)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Фокусът следва мишката\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Фокусирай следващия панел\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Панел на фокус {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Фокусирай предишния панел\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Фокусирай горен панел\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Фокусирай долен панел\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Фокусирай левия панел\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Фокусирай десния панел\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Следване на цветовата схема\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Шрифт\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"За бързи клавиши\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Принудително използване на CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Принудително използване на CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Принудително използване на LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Принудително използване на специфичен SSH агент връзка.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Забрави\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Пренасочи порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Пренасочени портове\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"От цветова схема\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"От система\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"От тема\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Фронтенд\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Пълен\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Общи\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Генерирай предварително попълнен GitHub проблем\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Получи\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Вземете от прозореца за Web настройки на Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Придава на прозореца размазано прозрачен фон\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Нагоре\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Зелен\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Група\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Хакове\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Помогнете за проследяване броя на инсталациите на Tabby по света!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Помощ за превод на Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Шестнайсетичен\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Скрий\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Скрий бутон затвори таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Скрий номериране на таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Бутон за скриване опциите на таба\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Скрий прозореца при загуба на фокус\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Скриване на прикрепения терминал в случай на кликване извън него.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Начална страница\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Хост\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Ключ на хоста\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Проверка ключа на хоста\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Бързи клавиши\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Как Tabby се представя чрез променливи на средата\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP прокси хост\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP прокси порт\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Икона\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Динамична\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Ако е изключен, само потребителските профили ще се показват за избор\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Незабавно отразява локално въведеното от Вас\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Увеличи размера на хоризонталното разделяне\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Увеличи размера на вертикалното разделяне\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Вход\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Въведенето се изпраща докато пишете\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Режим на въвеждане\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Въвеждане на нови редове\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Инсталирани\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Инсталирането на актуализацията ще затвори всички табове и ще рестартира Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Интелигентен Ctrl-C (копирай/прекъсни)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Интерактивен\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Неправилен синтаксис\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Посреднически хост\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Прескочи към следваща дума\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Прескочи към предишна дума\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Запази\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Интервал за проверка на връзката (мс)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Прикрепеният терминал винаги отгоре\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Ключ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Обмен на ключ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Клавиатура\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Интерактивно удостоверяване\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Принудително спиране\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Език\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Последно известен ключов отпечатък на хоста\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Стартирай WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Стартирай WinSCP за текущата SSH сесия\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Научете как да разрешите на Tabby да разпознава отдалечената работна директория.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Ляво\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Позволява на shell да обработва мета клавиша вместо ОС\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Светъл режим\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Ред по ред\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Редактор на редове, входните данни се изпращат, след като натиснете Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Разстояние между редовете\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Зареждане\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Зареждане на конфигурации...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Локално\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Локално ехо\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Локален терминал\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Скрипт при вход\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Продължително натискане за контекстно меню\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Управление на профили\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Максимамален брой проверки на свръзката\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Увеличи максимално активния панел\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Минимално съотношение на контраста\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Модифицирано на {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Мишка\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Премести таба наляво\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Премести таба надясно\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Премести в \\\"Негрупирани\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Преместването на мишката върху неактивен панел ще го активира\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Име\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Име за новата конфигурация\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Име на новата директория\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Системна\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Нов\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Нов администраторски таб\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Нова конфигурация на {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Име на нова група\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Нов елемент\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Ново име\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Нов профил\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Нов профил на групата\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Ново име на профила\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Нов таб\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Нов таб: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Нов терминал\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Нов прозорец\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Нов прозорец\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Нов с профил\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Следващ таб\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Без цвят\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Без модификатор\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Без\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Нормален\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Нормална тежест на шрифта\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Не е намерен\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Извести при активност\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Извести като приключиш\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Брой редове за съхранение в буфера\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Изключено\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Официален\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"В GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Затваряне на tab само при изрично прекратяване на сесията\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Непрозрачност\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Отвори DevTools\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Отвори настройки\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Отвори таба настройки: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Отвори SFTP панел\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"По желание\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Опции\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Оранжев\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"По подразбиране за ОС\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"По подразбиране за ОС ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Извеждане в шеснайсетичен вид\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Извеждане в непроменен вид\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Режим на извеждане\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Извеждане на нови редове\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Отмяна на X11 дисплей\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Презапиши локалната и синхронизирай\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Презапиши отдалечената и синхронизирай\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Презаписване на отдалечената конфигурация и стартиране на синхронизация?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Презаписване на лоцалната конфигурация и стартиране на синхронизация?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Стъпка за уразмераване на панела\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Панели\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Хартия (наследена)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Проверка на четност\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Частична синхронизация на конфигурацията не е възможна когато конфигурацията е криптирана в хранилището.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Пропускане\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Парола за частен ключ с хеш {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Парола\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Вмъкни\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Вмъкни от клипборда\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\\\"Paste\\\", ако няма селекция, иначе \\\"Copy\\\"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Вмъкване на няколко реда?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Вмъкване със среден клавиш на мишка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Път или адрес на локалния X11 сокет\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Закрепи\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Плъгини\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Папка за плъгини\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Порт\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Портът е отворен\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Портове\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Натиснете произволен клавиш за повторно свързване\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Натиснете клавиша сега\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Предпазва от инцидентно затваряне\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Предотврати инцидентно изпълнение на вмъкнати команди\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Предходен таб\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Частни ключове\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Процесът е завършен\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Име на профила\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Профили\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Профили и връзки\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Програма\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Прокси команда\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Лилаво\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Поставя всички конфигурации на Tabby в хранилището\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Бързо свързване\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Изход\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Свързване чрез сокет\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Време за прекъсване на връзката (мс)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Последни\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Повторно свързване\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Повторно свързване на текущия раздел (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Червен\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Регулярен израз\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Бележки към тази версия\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Запомни за {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Отдалечен\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Премахване на белите интервали и новите редове около копирания текст\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Преименувай\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Преименуване на таба\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Рендване\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Отвори отново последния таб\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Замени\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Докладвайте за проблем\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Изисква клавиш за отваряне на линк\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Възстанови мащаба\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Рестартирай текущата serial сесия\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Рестартирай текущата SSH сесия\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Рестартирай текущата Telnet сесия\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Рестартиране на таба\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Рестартирайте приложението, за да приложите промените\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Възстановяване на настройките по подразбиране ?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Възстановяване на унаследените настройки по подразбиране ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Възстанови терминалните табове при стартиране на програмата\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Повторно използване на сесията за няколко таба\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Дясно\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Десен бутон на мишката\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Стартирай като администратор\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Запиши\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Запази паролата в ключодържателя\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Запиши и приложи\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Запази като профил\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Запази оформлението като профил\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Записано\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Запазени оформления\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Превъртай екрана при въвеждане\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Превъртете терминала една страница по-надолу\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Превъртете терминала с една страница нагоре\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Превърти терминала до край\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Превъртете терминала в началото\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Буфер за превъртане\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Превърта терминала до край при въвежнане от потребителя\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Търси\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Търси цветови схеми\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Търси бързи клавиши\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Търси плъгини\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Токен за синхронизация\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Избери\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Изберете базов профил, който да се използва за шаблон\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Изберете всичко\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Изберете къде ще съхранявате файлове\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Изберете профил\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Изберете профил или въведете адрес\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Изпращане на байтове чрез въвеждане на шестнайсетични стойности\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Изпраща данни по един байт\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Сериен порт\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Свръзка на сериен порт\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Сериен порт: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Създаване на главна парола\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Задай парола\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Създаване на парола\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Задай Tabby като %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Задайте 0, за да деактивирате последните профили\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Задава пътя за \\\"named pipe\\\" на SSH агента.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Настройки\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell не поддържа откриване на текущия път\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Shell интеграция\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Покажи\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Покажи {type} на селектора за профил\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Покажи поле за потвърждение при поставяне на няколко реда\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Показване на вградените профили в селектора\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Покажи селектора за команди\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Покажи конфигурационния файл\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Покажи настройките по подразбиране\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Покажи миксер\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Показване етикетите на панелите (за пренареждане)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Покажи икона на профила на таба\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Покажи избор на профил\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Покажи последни профили при избор\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Покажи бележките към изданието\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Покажи серийните връзки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Показване на табове в режим на цял екран\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Покажи лентата с инструменти\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Покажи съдържанието на хранилището\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Графична поддръжка на Sixel (експериментално)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Пропусни MoTD/банер\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Бавно подаване\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Прилепване на прозореца към страна на екрана\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS прокси хост\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS прокси порт\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Програмен код\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Пространство\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Раздели\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Раздели надолу\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Разделяне в посока надолу\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Раздели наляво\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Раздели надясно\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Раздели нагоре\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Разделяне в посока нагоре\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH свързване\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Управлението на SSH връзката вече се извършва чрез таба \\\"Профили и връзки\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH парола за {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Стандартен (наследен)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"При стартиране\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Стоп битове\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Лента\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Абонирайте се за обновления\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Заместванията са разрешени.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Промяна на цветовата схема\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Смени профил\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Смени профила в активния панел\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Превключва към \\\"frontend\\\" реализация на терминала (експериментално)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Синхронизация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Автоматична синхронизация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Хост за синхронизация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Синхронизирай бързи клавиши\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Синхронизирай хранилището\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Синхтонизирай настройки за прозорец\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Таб {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Активност на таба\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby не може да стартира с вашите плъгини, така че всички плъгини на трети страни са деактивирани в тази сесия. Грешката беше:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Новини и актуализации за Tabby в Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Табове\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Местоположение на табовете\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Ширина на табовете\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet сесия\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Терминал\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Фон на терминала\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Звънец на терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Идентифициране на терминала\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Благодарим Ви, че изтеглихте Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Тема\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Има активни файлови трансфери\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Има запаметена парола за тази сесия\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Прилага се за всички профили от дадения тип\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Те се прилагат за всички профили от даден тип в тази група\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Тънка\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Поставете отметката, ако имате визуални проблеми с алиасинг, гостинг или други\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Режим цял екран\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Последен таб\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Показване/Скриване на терминалния прозорец\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Превключва визуализацията на Tabby прозореца\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Горе\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Подрязване на белите интервали и новите редове\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Опитай отново\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Опитвам запазена парола\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Превръщане на панелите на текущия таб в отделни табове\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Негрупирани\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Деинсталирай\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Неизвестен\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Неизветна тип тайна {type} за {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Откачи\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Горе\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Актуализирай\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Обнови до {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Качи\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Качи като нова конфигурация\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Използвай {altKeyName} като Meta клавиш\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Използвай ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Потребителска настройка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Потребителско име\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Използване на CONNECT метод\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Използване на предварително зададена парола\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Хранилище\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Хранилището е постоянно криптиран контейнер за тайни, като SSH пароли и пароли на частни ключове.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Хранилището е празно\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Хранилището е заключено\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Хранилището не е конфигурирано\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Необходимо е да зададете главната парола на хранилището, за да съхранявате тайни\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Проверявай ключа на хоста при свръзка\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Версия\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Версия: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Живи цветове\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Визуално\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Предупреждавай при вмъкване на няколко реда\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Предупреждавай при затваряне на активна връзка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Предупреждение: ключът на отдалечения хост внезапно се промени!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Ние проследяваме само версиите на Tabby и на ОС.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Добре дошли\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Какво ново\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Когато дадена сесия приключи\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Когато е включено, връзките могат да се кликват само при задържане на този клавиш\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Когато бъде открит WinSCP, можете да стартирате SCP сесия от контекстното меню.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Дали да се използва потребителски прозорец или да се определи от ОС\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Ще предотврати появата на SSH поздрава\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Прозорец\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Размер на прозореца по ръба\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Размер на прозореца от ръба\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Рамка на прозореца\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Прозорци\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 версия 18309 или по-нова е препоръчителна за ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Път към WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Разделители на думи\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Работна директория\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Откриване на работна директория\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL теминалния звънец може да бъде заглушен само от Volume Mixer\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL терминал подържа само TrueColor с ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 пренасочване\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Жълто\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Може да я промените по-късно, но не може да бъде възстановена в случай, че я забравите.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Възможно е в момента да сте обект на атака от типа \\\"man-in-the-middle\\\" или ключът на хоста просто да е бил променен.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Увеличи\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Намали\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Динамичен\"\n\n"
  },
  {
    "path": "locale/cs-CZ.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: cs\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Czech\\n\"\n\"Language: cs_CZ\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" stále běží. Zavřít?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} kopie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Druhá rodina písma používaná k zobrazení chybějících znaků v hlavním písmu\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Zrušit vše\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Přijmout a zapamatovat klíč\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Přijmout pouze tentokrát\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Přístupnost\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Akrylové pozadí\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Přidat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Přidat nové přesměrování portů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Přidat soukromý klíč\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Přidat...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Dodatečný prostor mezi řádky\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Rozšířené\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Přeposílání agenta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Cesta kanálu agenta SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Typ agenta\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Umožňuje otevírat .bat soubory v záložkách, ale rozbíjí některé shelly\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Umožňuje rychlé otevření terminálu ve vybrané složce\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Vždy tmavý\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Vždy světlý\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Vzhled\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplikace\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Nastavení aplikace\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Opravdu chcete zavřít Tabby? Tuto výzvu můžete vypnout v Nastavení -> Okno.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Jste si jisti?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Parametry\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Zeptejte se\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Zeptat se před zavřením karty prohlížeče\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Slyšitelný\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Metoda ověřování\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automaticky\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Automatické otevření terminálu při spuštění aplikace\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatický\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatické aktualizace\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Automaticky nahrávat změny a kontrolovat aktualizace každou minutu\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"K dispozici\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Typ pozadí\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Režim klávesy Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Modulační rychlost\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Začátek čáry\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Blikající kurzor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Modrá\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Rozostření\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Síla tučného písma\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Dolní\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Vložení bez odřádkování (vyžaduje podporu shellu)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Režim vysílání. Klikněte kdekoli pro zrušení.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Vestavěný\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Zrušit\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Změna rychlosti přenosu v baudech\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Změnit barvu karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Změnit hlavní heslo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Zkontrolovat aktualizace\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Šifry\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Vyčistit\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Vymazat nedávné profily\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Vyčistit terminál\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Vymazat terminál po připojení\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Schránka\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Zavřít\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Zavřít a už nikdy nezobrazovat\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Zavřít aktivní okno\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Zavřít ostatní panely\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Zavřít panel\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Zavřít karty vlevo\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Zavřít karty vpravo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Zavřít okno po zavření poslední karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Barva\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Barevné schéma\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Barevná schémata\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Barvy\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Zkombinovat všechny panely do aktuálního panelu\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Příkazový řádek\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Stdin/stdout příkazu se používá namísto síťového připojení\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Příkazy\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompaktní (Legacy)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfigurace odstraněna\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfigurace stažena\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Konfigurační soubor\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Synchronizace konfigurace\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfigurace nahrána\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfigurace\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Připojit přes proxy server\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Připojit k \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Nejdříve se připojte k jinému hostiteli a použijte jej jako proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Připojuji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Připojení\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Připojení selhalo: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Místo toho bude použit název připojení\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Kontextové menu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Určuje množství prostoru mezi prvky\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Zkopírováno\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopírovat\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Kopírovat aktuální cestu\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopírovat celou cestu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopírovat při výběru\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Kopírovat do schránky\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopírovat s formátováním\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Zprávu se nepodařilo dešifrovat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Vytvořit\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Vytvořit adresář\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Aktuální\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Aktuální barevné schéma\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Aktuální otisk klíče hostitele\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Aktuální proces: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Tvar kurzoru\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Vlastní\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Vlastní CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Tmavý režim\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Datové bity\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Ladění\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Snížit vodorovné rozdělení\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Snížit vodorovné rozdělení\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Výchozí typ připojení\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Výchozí typ připojení používaný funkcí rychlého připojení (např. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Výchozí profil pro nové karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Výchozí nastavení profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Výchozí nastavení profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Výchozí\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Výchozí hodnoty pro {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Smazat\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Smazat {name}?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Smazat {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Smazat celý řádek\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Smazat následující\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Smazat předchozí\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Odstranění konfigurace na dálku?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Smazat profily ve skupině?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Smazat tento skript?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Smazat obsah trezoru?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Mazání\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Zařízení\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Přímé\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Vypnout\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Zakázat dynamický název karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Zakázat plynulé pozadí při přetažení\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Zakázat hardwarovou akceleraci\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Vypnuto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Odpojit\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Odpojit aktuální kartu (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Odpojit od {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Zobrazit obrázky přes únikové sekvence Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Zobrazit na\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Nepřerušovat\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Nezavírat\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Nepamatovat si\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Vždy nahoře\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Připevnit terminál\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Velikost připevněného terminálu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Místo připevněného terminálu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Připevnění\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Výběr dvojitým kliknutím se zastaví na tyto znaky\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Dolů\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Stáhnout\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Vykreslit tučný text jasnými barvami\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplikovat\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplikovat jako administrátor\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplikovat kartu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Upravit\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Upravit lokálně\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Povolit\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Povolit analytiky\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Povolit animace\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Povolit automatickou instalaci aktualizací, jakmile budou dostupné.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Povolit fluent pozadí\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Povolit svázání znaků\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Povolit globální zkratku (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Povolit experimentální Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Šifrovat konfigurační soubor\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Konec řádku\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Environment\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Smazat konfiguraci\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Vymazat trezor\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Chyba v {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Přesná shoda\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Příklad:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Experimentální styl pozadí Windowsu 10, je známo že způsobuje problémy\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Export\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Náhradní písmo\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Přenos souborů\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Soubor: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtr\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Opraveno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Plynulé pozadí někdy způsobuje lagy při přetažení\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Soustředit všechna okna\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Soustředit všechna okna najednou (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Soustředit všechny karty\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Soustředit všechny karty najednou (broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Zaměřit se na myš\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Soustředit na další okno\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Soustředit na okno {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Soustředit na předchozí okno\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Soustředit na okno nahoře\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Soustředit na okno dole\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Soustředit na okno vlevo\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Soustředit na okno vpravo\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Duplikovat barevné schéma\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Písmo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Klávesové zkratky\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Vynutit CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Vynutit CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Vynutit LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Vynucuje konkrétní typ připojení SSH agenta.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Zapomenout\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Přesměrovat port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Přesměrované porty\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Z barevného schématu\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Ze systému\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Z motivu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Plné\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Obecné\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Generovat předvyplněný GitHub issue\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Získat\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Dostupný v nastavení webové aplikace Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Dá oknu rozostřené průhledné pozadí\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Přejít nahoru\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Zelená\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Skupina\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacky\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Pomozte sledovat počet instalací Tabby po celém světě!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Pomozte s překladem Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimální\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Skrýt\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Skrýt tlačítko zavřít kartu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Skrýt číslo karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Skrýt tlačítko možností karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Skrýt neaktivní okno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Při kliknutí pryč skryje připnutý terminál.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Domovská stránka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Klíč hostitele\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Ověření hostitelského klíče\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Klávesové zkratky\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Jak se Tabby prezentuje prostřednictvím indikátorů prostředí\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP proxy server\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP proxy port\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikona\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamický\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Pokud je zakázáno, ve výběru profilu se zobrazí pouze vlastní profily\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Okamžitě lokálně vypíše data na vstupu\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Zvětšit vodorovné odsazení\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Zvětšit svislé odsazení\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Příkaz\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Vstup je odeslán při psaní\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Režim vstupu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Vložit nové řádky\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Nainstalované\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Instalace aktualizace zavře všechny panely a restartuje Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Inteligentní Ctrl-C (kopírování/přerušení)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktivní\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Neplatná syntaxe\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Jump host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Přeskočit na následující\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Skoč na předchozí slovo\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Ponechat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Keep Alive Interval (Milisekundy)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Ponechat připevněný terminál vždy nahoře\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Klíč\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Výměna klíčů\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Klávesnice\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Interaktivní ověření klávesnice\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Vynuceně ukončit\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Jazyk\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Poslední známý klíč hostitele\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Spustit WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Spustit WinSCP pro aktuální SSH relaci\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Zjistěte, jak povolit Tabby detekovat pracovní adresář vzdáleného shellu.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Vlevo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Nechat shell zpracovat Meta klávesu namísto OS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Světlý režim\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Řádek po řádku\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Řádkový editor, vstup je odeslán po stisknutí Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Odsazení řádek\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Načítání\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Načítání konfigurací...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Místní\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokální echo\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Místní terminál\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Přihlašovací skripty\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Podržte pro zobrazení kontextové nabídky\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Správa profilů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maximální počet zachycení\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximalizovat aktivní okno\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minimální poměr kontrastu\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Upraveno dne {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Myš\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Posunout kartu vlevo\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Posunout kartu vpravo\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Přesunout do \\\"Neseskupené\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Přesun myši nad neaktivní okno ho soustředí\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Jméno\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Název nové konfigurace\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Název nového adresáře\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativní\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nový\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nová admin karta\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nové nastavení na {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nové jméno skupiny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nová položka\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nový název\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nový profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nová profilová skupina\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Název nového profilu\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nová karta\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nová karta: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nový terminál\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nové okno\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nové okno\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nový s profilem\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Nová karta\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Bez barvy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Bez modifikátoru\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Žádný\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normální\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Síla normálního písma\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Nenalezeno\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Upozornit na aktivitu\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Upozornit po dokončení\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Počet řádků uložených ve vyrovnávací paměti\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Vypnuto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Oficiální\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Na GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Karta zůstane otevřená až do konce relace\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Průhlednost\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Otevřít vývojářské nástroje\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Otevřít nastavení\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Otevřít záložku nastavení: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Otevřít panel SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Volitelný\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Možnosti\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Oranžový\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Výchozí nastavení OS\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Výchozí nastavení OS ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Výstup je zobrazen jako hexadecimální výpis\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Výstup je zobrazen v přijaté podobě\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Režim výstupu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Výstupní nové řádky\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Přepsat zobrazení X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Přepsat místní konfiguraci a synchronizovat\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Přepsat vzdálenou konfiguraci a synchronizovat\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Přepsat konfiguraci na vzdálené straně a začít synchronizovat?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Přepsat místní konfiguraci a začít synchronizovat?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"krok změny velikosti\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Panely\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papír (Legacy)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parita\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Částečná konfigurace není možná, pokud je konfigurace šifrována přes trezor.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Kapacita\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Heslo pro privátní klíč s hashem {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Heslo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Vložit\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Vložit ze schránky\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Vložit, pokud není nic vybráno, jinak zkopírovat\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Vložit více řádků?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Vložit při kliknutí prostředním tlačítkem\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Cesta nebo adresa lokálního X11 soketu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Připnout\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Pluginy\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Složka pluginů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port otevřen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Porty\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Stiskněte libovolnou klávesu pro opětovné připojení\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Stiskněte libovolnou klávesu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Brání nechtěnému zavření\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Brání nechtěnému spuštění vložených příkazů\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Předchozí karta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Soukromé klíče\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proces dokončen\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Název profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profily\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profily a připojení\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Příkaz proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Fialová\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Vloží všechny konfigurace Tabby do trezoru\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Rychlé připojení\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Odejít\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Připojení přes socket\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Časový limit pohotovostního režimu (milisekundy)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Poslední\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Obnovit připojení\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Obnovení připojení aktivní karty (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Červená\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Poznámky k verzi\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Pamatovat po {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Vzdálený\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Odstranit mezery a nové řádky kolem zkopírovaného textu\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Přejmenovat\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Přejmenovat kartu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Vykreslování\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Otevřít poslední kartu\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Nahradit\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Nahlásit problém\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Vyžadovat stisk klávesy pro kliknutí na odkaz\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Resetovat přiblížení\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Restartovat aktuální sériovou relaci\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Restartovat aktuální SSH relaci\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Restartovat aktuální relaci Telnet\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Restartovat kartu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Restartujte aplikaci pro zavedení změn\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Obnovit nastavení na výchozí hodnoty?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Obnovit nastavení na výchozí hodnoty?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Obnovit karty při spuštění aplikace\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Znovu použít relaci pro více karet\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Vpravo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Pravé tlačítko myši\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Spustit jako správce\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Uložit\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Uložit heslo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Uložit a použít\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Uložit jako profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Uložit rozložení jako profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Uloženo\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Rozložení uloženo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Posunout na vstup\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Posunout terminál o jednu stránku dolů\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Posunout terminál o jednu stránku nahoru\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Posunout dolů\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Posunout nahoru\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Posunout zpět\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Posune při vstupu uživatele terminál dolů\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Hledat\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Hledat barevná témata\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Hledat klávesové zkratky\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Hledat pluginy\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Synchronizační token\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Vybrat\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Vyberte základní profil, který chcete použít jako šablonu\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Vybrat vše\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Vyberte úložiště\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Zvolte profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Zvolte profil nebo vložte adresu\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Poslat bajty zadáním hexadecimálních hodnot\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Odesílá data po 1 bitu\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Sériové číslo\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Sériové připojení\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Sériový: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Nastavit hlavní heslo\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Nastavit přístupovou frázi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Nastavit heslo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"nastavit Tabby jako %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Nastavte na 0 pro vypnutí nedávných profilů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Nastaví agenta SSH na pojmenovanou cestu potrubí.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Nastavení\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell nepodporuje aktuální cestu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integrace shellu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Ukázat\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Zobrazit {type} selektor profilu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Zobrazit potvrzovací pole při vkládání více řádků\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Zobrazení vložených profilů ve výběru\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Zobrazit výběr příkazu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Zobrazit konfigurační soubor\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Zobrazit výchozí hodnoty\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Zobrazit Mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Zobrazit popisky tabulek (pro přeuspořádání)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Zobrazit ikonu profilu na kartě\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Zobrazit výběr profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Zobrazit nedávné profily ve výběru\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Zobrazit poznámky k verzi\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Zobrazit sériová připojení\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Zobrazit panely v režimu celé obrazovky\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Zobrazit panel nástrojů\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Zobrazit obsah trezoru\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Podpora šestielové grafiky (experimentální)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Přeskočit MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Pomalé odesílání\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Přichytí okno na stranu obrazovky\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxy port\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Zvuk\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Zdrojový kód\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Prostor\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Rozdělit\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Rozdělit do spodu\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"rozdělit dolů\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Rozdělit vlevo\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Rozdělit vpravo\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Rozdělení nahoře\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Rozdělit nahoru\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Připojení SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Správa SSH připojení se nyní provádí přes záložku \\\"Profily a připojení\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH heslo pro {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standardní (Legacy)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Spuštění\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Stop bity\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Proužek\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Přihlásit k odběru novinek\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Povolené náhrady.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Přepnout barevné schéma\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Přepnout profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Přepnout profil v aktivním panelu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Přepíná implementaci terminálu (experimentální)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synchronizace\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Synchronizovat automaticky\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Hostitel synchronizace\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Synchronizovat klávesové zkratky\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Synchronizovat trezor\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Synchronizovat nastavení okna\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Karta {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Aktivita záložek\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby nemohl začít s vašimi pluginy, takže všechny pluginy třetích stran byly v této relaci zakázány. Došlo k chybě:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Novinky a aktualizace Tabby na Twitteru\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Umístění záložek\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Šířka panelu\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet relace\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminál\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Pozadí terminálu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminální zvonek\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identifikace terminálu\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Děkujeme vám za stažení Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Téma\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Existují aktivní přenosy souborů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Pro toto připojení existuje uložené heslo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Ty se vztahují na všechny profily daného typu\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Ty se vztahují na všechny profily daného typu v této skupině\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Tenké\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Zaškrtněte, pokud máte aliasing, ghosting nebo jiné vizuální problémy\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Přepnout režim celé obrazovky\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Přepnout na poslední kartu\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Přepnout okno terminálu\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Přepíná viditelnost okna Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Vrchní\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Oříznout mezery a nové linie\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Zkuste to znovu\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Pokus o uložení hesla\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Změní panely aktuálního panelu v samostatné panely\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Bez zařazení\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Odinstalovat\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Neznámý\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Neznámý typ tejemství typu {type} pro {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Odepnout\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Nahoru\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Aktualizovat\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Aktualizace na {verzi}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Nahrát\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Nahrát jako novou konfiguraci\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Použít {altKeyName} jako Meta klíč\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Použít ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Výchozí nastavení uživatele\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Uživatelské jméno\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Použití metody CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Použití přednastaveného hesla\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Trezor\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Trezor je vždy šifrovaný kontejner pro tajné objekty jako jsou SSH klíče nebo hesla privátních klíčů.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Trezor je prázdný\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Trezor je uzamčený\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Trezor není nakonfigurován\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Hlavní heslo pro trezor musí být nastaveno pro ukládání tajných objektů\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Ověřit klíče hostitele při připojení\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Verze\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Verze: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibrace\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Vizuální\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Upozornit na vícevrstvé vložení\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Upozornit při zavírání aktivních připojení\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Varování: klíč vzdáleného hostitele se náhle změnil!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Sledujeme pouze verzi Tabby a OS.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Vítejte\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Co je nového\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Když skončí relace\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Na odkazy lze kliknout pouze při stisku této klávesy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Když je WinSCP detekován, můžete spustit relaci SCP z kontextového menu.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Slouží k výběru vlastního nebo nativního vzhledu okna terminálu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Zabránit zobrazování SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Okno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Rozměr okna podél okraje\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Rozměry okna od okraje\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Rám okna\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Pro ConPTY je doporučeno sestavení Windows 10 18309 nebo vyšší\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Cesta k WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Oddělovače slov\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Pracovní adresář\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detekce pracovního adresáře\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Zvonek terminálu WSL lze ztlumit pouze pomocí směšovače hlasitosti\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL terminál podporuje pouze TrueColor s ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 Přesměrování\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Žlutá\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Můžeš to změnit později, ale je to nevratné, pokud je zapomenuto.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Může se jednat o útok typu \\\"man-in-the-middle\\\" nebo byl právě změněn klíč hostitele.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Přiblížit\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Oddálit\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamické\"\n\n"
  },
  {
    "path": "locale/da-DK.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: da\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Danish\\n\"\n\"Language: da_DK\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" kører stadig. Luk?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} kopi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"En anden skrifttypefamilie, der bruges til at vise tegn, der mangler i hovedskrifttypen\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Afbryd alle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Accepter og husk nøgle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Accepter kun dette én gang\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Akryl baggrund\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Tilføj\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Tilføj en port-videresendelse\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Tilføj en privat nøgle\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Tilføj...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Yderligere mellemrum mellem linjer\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avanceret\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agent-videresendelse\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent pipe-sti\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Agent type\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Giver mulighed for at åbne .bat filer i faner, men virker ikke med nogle shell's\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Tillader hurtigt at åbne en terminal i den valgte mappe\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Altid mørk\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Altid lys\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Udseende\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Applikation\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Applikationsindstillinger\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Er du sikker på, at du vil lukke Tabby? Du kan deaktivere denne prompt i Indstillinger -> Vindue.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Er du sikker?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumenter\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Stil et spørgsmål\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Spørg før du lukker browserfanen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Hørbar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Godkendelsesmetode\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Forfatter\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Auto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Åbn automatisk en terminal ved appstart\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatisk\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatiske opdateringer\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Upload automatisk ændringer og tjek for opdateringer hvert minut\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Tilgængelig\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Baggrundstype\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Baud-rate (hastighed)\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Begyndelse af linjen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Blinkende markør\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Blå\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Sløring\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Fed skriftvægt\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Bunden\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Indbygget\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Annullér\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Ændre baud-rate (hastighed)\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Ændr hovedadgangskoden\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Kontrollér for opdateringer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Ciphers\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Ryd\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Ryd seneste profiler\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Ryd terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Udklipsholder\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Luk\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Luk og vis aldrig igen\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Luk fokuseret rude\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Luk andre faner\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Luk fane\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Luk faner til venstre\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Luk faner til højre\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Luk vinduet efter lukningen af den sidste fane\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Farve\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Farvetema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Farveskemaer\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Farver\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Kombinér alle faner til den aktuelle fane\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Kommandolinje\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Kommandoens stdin/stdout bruges i stedet for en netværksforbindelse\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Kommandoer\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompakt (ældre)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfig slettet\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfiguration downloadet\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Konfigurationsfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Konfigurationssynkronisering\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfiguration uploadet\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfigurationer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Forbind via en proxyserver\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Forbind til \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Opret forbindelse til en anden vært først og brug den som en proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Tilslutter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Forbindelse\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Forbindelse fejlede: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Forbindelsens navn vil blive brugt i stedet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Kontekstmenu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Styrer mængden af mellemrum mellem elementer\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Kopieret\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopiér\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Kopiér nuværende sti\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopiér hele stien\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopiér ved markering\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Kopiér til udklipsholder\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopiér med formatering\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Kunne ikke dekryptere konfiguration\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Opret\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Opret mappe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Nuværende\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Nuværende farvetema\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Nuværende værtsnøgle fingeraftryk\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Nuværende proces: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Markørens form\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Tilpasset\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Brugerdefineret CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Mørk tilstand\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Databits\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Fejlfinding\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Reducér den vandrette splitstørrelse\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Reducér den lodrette splitstørrelse\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Standard \\\"Forbind til\\\"-type\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Standard profil for nye faner\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Standard profilindstillinger\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Standardindstillinger\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Standard for {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Slet\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Slet \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Slet {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Slet hele linjen\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Slet næste ord\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Slet forrige ord\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Slet konfigurationen på fjernsiden?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Slet gruppens profiler?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Slet dette script?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Slet indholdet i boksen?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Sletter\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Enhed\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direkte\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Deaktivér\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Deaktiver dynamisk fanetitel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Deaktivér GPU acceleration\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Deaktiveret\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Afbryd\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Afbryd forbindelsen til {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Vis på\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Afbryd ikke\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Luk ikke\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Husk ikke\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Markering med dobbeltklik vil stoppe ved disse tegn\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Ned\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Download\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplikér\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplikér som administrator\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplikér fane\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Redigér\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Aktivér\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Aktivér automatisk installation af opdateringer, når de bliver tilgængelige.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Aktivér skrifttype ligaturer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Aktivér global genvejstast (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Aktiverer den eksperimentelle Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Kryptér konfigurationsfil\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Slut på linjen\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Miljø\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Slet konfiguration\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Slet Boksen\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Fejl i {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Præcis match\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Eksempel:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Eksportér\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Skrifttype at falde tilbage på\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Filoverførsler\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Fil: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fast\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Fokusér alle ruder\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Fokusér alle ruder på én gang (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Fokusér næste rude\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Fokusér forrige rude\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Fokusér ruden ovenover\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Fokusér ruden nedenfor\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Fokusér ruden til venstre\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Fokusér ruden til højre\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Skrifttype\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Gennemtving CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Gennemtving CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Gennemtving LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Tvinger en specifik SSH agent forbindelsestype.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Glem\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Videresend port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Videresendte porte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Fra farvetema\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Fra tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Fuld\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Generel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Hent\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Gå op\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Grøn\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Gruppe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Skjul lukkeknap for fane\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Skjul faneindeks\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Skjul vindue ved fokustab\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Hjemmeside\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Vært\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Værtsnøgle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Verifikation af værtsnøgle\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Genvejstaster\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikon\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Hvis deaktiveret, vil kun brugerdefinerede profiler vises i profilvælgeren\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Ekkoer straks dit input lokalt\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Input sendes mens du skriver\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Inputtilstand\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Installeret\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Installation af opdateringen vil lukke alle faner og genstarte Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktiv\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Ugyldig syntaks\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Jump host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Hop til næste ord\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Hop til forrige ord\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Behold\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Keep Alive interval (Millisekunder)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Nøgle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Sprog\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Sidste kendte fingeraftryk for værtsnøgle\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Start WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Start WinSCP for den aktuelle SSH-session\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Lær, hvordan du tillader Tabby at registrere ekstern shell's arbejdsmappe.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Venstre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Lader shell'et håndtere Meta taster i stedet for operativsystemet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Linje for linje\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Indlæser\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Indlæser konfigurationer...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokalt ekko\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Lokal terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Login scripts\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Administrér profiler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maks Keep Alive antal\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maksimér den aktive rude\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Ændret den {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Flyt fane til venstre\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Flyt fane til højre\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Flyt til \\\"Ugrupperet\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Navn\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Navn på den nye konfiguration\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Indbygget\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Ny admin fane\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Ny konfiguration på {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nyt element\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nyt navn\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Ny profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nyt profilnavn\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Ny fane\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Ny fane: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Ny terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nyt vindue\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Ny med profil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Næste fane\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Ingen farve\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Ingen modifikator\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ingen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Ikke fundet\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Underret ved aktivitet\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Underret ved afslutning\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Antal linjer i bufferen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Slået fra\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Officiel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"På GitHub Diskussioner\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Gennemsigtighed\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Åbn udviklingsværktøjer\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Åbn indstillinger\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Åbn indstillingsfane: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Åbn SFTP-panel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Valgfri\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Indstillinger\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Orange\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"OS standard\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"OS standard ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Output vises som hexdump\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Output er vist som det er modtaget\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Outputtilstand\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Output nye linjer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Tilsidesæt X11-visning\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Overskriv ekstern og synkroniser\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Overskriv konfigurationen på den eksterne side og start synkronisering?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Overskriv den lokale konfiguration og start synkronisering?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paritet\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Delvis konfigurationssynkronisering er ikke muligt, når konfigurationen krypteres via Boksen.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Adgangskode for en privat nøgle med hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Adgangskode\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Indsæt\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Indsæt fra udklipsholder\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Indsæt flere linjer?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Sti eller adresse på den lokale X11-socket\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Fastgør\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Plugins\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Pluginmappe\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port åbnet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Porte\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Tryk på en vilkårlig tast for at forbinde igen\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Tryk på tasten nu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Forhindrer utilsigtet lukning\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Forhindrer utilsigtet udførelse af indsatte kommandoer\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Forrige fane\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Private nøgler\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proces fuldført\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Profilnavn\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profiler\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profiler og forbindelser\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Proxy kommando\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Lilla\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Placerer alle Tabby's konfiguration i boksen\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Hurtig tilslutning\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Afslut\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Rå socket forbindelse\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Seneste\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Genopret forbindelse\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rød\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Udgivelsesnoter\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Husk i {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Ekstern\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Omdøb\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Genåben sidste fane\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Erstat\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Rapportér et problem\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Nulstil zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Genstart nuværende seriel session\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Genstart nuværende SSH-session\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Genstart nuværende Telnet session\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Genstart app'en for at anvende ændringer\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Højre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Højreklik\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Kør som administrator\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Gem\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Gem en adgangskode i nøgleringen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Gem og anvend\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Gem som profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Gem layout som profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Gemt\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Gemt layout\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Rul terminal til bunden\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Søg\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Hemmelig synkroniseringstoken\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Vælg\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Vælg en basisprofil, der skal bruges som skabelon\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Vælg lagerplads\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Vælg profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Vælg profil eller indtast en adresse\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Send bytes ved at skrive i hex-værdier\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Sender data en byte ad gangen\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Seriel\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Seriel forbindelse\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Seriel: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Opsæt hovedadgangskode\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Indstil adgangskode\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Angiv adgangskode\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Sæt Tabby som %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Sæt til 0 for at deaktivere seneste profiler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Indstillinger\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell understøtter ikke detektion af aktuel sti\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Shell integration\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Vis {type} profilvælger\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Vis indbyggede profiler i vælgeren\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Vis konfigurationsfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Vis standardindstillinger\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Vis rudeetiketter (til omarrangering)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Vis profilvælger\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Vis seneste profiler i vælgeren\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Vis udgivelsesnoter\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Vis serielle forbindelser\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Vis indhold i boksen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Spring over MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Langsom feed\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Snap'er vinduet til en side af skærmen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy vært\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxy port\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Kildekode\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Opdel\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Opdel i bunden\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Opdel til venstre\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Opdel til højre\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Opdel til toppen\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH forbindelse\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH forbindelsesstyring udføres nu gennem fanen \\\"Profiler og forbindelser\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH adgangskode for {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Opstart\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Stopbits\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Fjern\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Abonnér på opdateringer\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Skift profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Skift profil i den aktive rude\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Skifter terminal frontend implementering (eksperimentel)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synkronisering\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Synkroniser automatisk\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Synkroniseringsvært\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Synkroniser genvejstaster\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Synkronisér Boksen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Synkroniser vinduesindstillinger\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Fane {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Fane aktivitet\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby kunne ikke starte med dine plugins, så alle tredjeparts-plugins er blevet deaktiveret i denne session. Fejlen var:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Nyheder og opdateringer fra Tabby på Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Faner\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Placering af faner\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Fanebredde\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet session\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Terminalbaggrund\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminalklokke\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Tak fordi du har downloadet Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Der er aktive filoverførsler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Der er en gemt adgangskode til denne forbindelse\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Disse gælder for alle profiler af en given type\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Tynd\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Markér dette, hvis du oplever aliasing, ghosting eller andre visuelle problemer\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Skift fuldskærmstilstand\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Toppen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Prøv igen\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Prøver gemt adgangskode\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Ugrupperet\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Afinstallér\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Ukendt\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Ukendt hemmelighed for typen {type} for {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Frigør\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Op\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Opdatér\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Opgradér til {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Upload\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Upload som ny konfiguration\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Brug {altKeyName} som Meta tasten\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Brug ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Brugerstandard\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Brugernavn\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Brug forudindstillede adgangskode\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Boksen\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Boksen er en altid-krypteret beholder til hemmeligheder, såsom SSH-adgangskoder og private nøgleadgangskoder.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Boksen er tom\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Boksen er låst\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Boksen er ikke konfigureret\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Boksens master adgangskode skal indstilles for at tillade lagring af hemmeligheder\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verificér værtsnøgler ved tilslutning\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Version: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibrancy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visuel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Advar ved lukning af aktive forbindelser\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Advarsel: Den eksterne værtsnøgle er pludselig ændret!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Vi indsamler kun dine Tabby og OS versioner.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Velkommen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Nyheder\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Når aktiveret, er links kun klikbare mens du holder denne tast nede\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Vindue\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Vinduesramme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 build 18309 eller derover anbefales til ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP sti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Ordseparatorer\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Arbejdsmappe\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detektering af arbejdsmappe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL terminal understøtter kun TrueColor med ConPTY slået til\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 videresendelse\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Gul\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Du kan ændre det senere, men det er uopretteligt, hvis det glemmes.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Du kunne være under et man-in-the-middle angreb lige nu, eller værtsnøglen kunne lige være blevet ændret.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Zoom ind\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Zoom ud\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "locale/de-DE.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: de\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: German\\n\"\n\"Language: de_DE\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" läuft noch. Schließen?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} Kopie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Eine zweite Schriftart, die zur Darstellung von Zeichen verwendet wird, wenn in der Hauptschriftart Zeichen fehlen\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Alles abbrechen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Schlüssel akzeptieren und merken\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Nur diesmal akzeptieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Bedienungshilfen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Acryl-Hintergrund\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Hinzufügen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Port-Weiterleitung hinzufügen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Privaten Schlüssel importieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Hinzufügen...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Zusätzlicher Abstand zwischen den Zeilen\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Erweitert\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agent-Weiterleitung\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent Pipe-Pfad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Agenttyp\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Ermöglicht das Öffnen von .bat Dateien in Tabs, es kann Shells zum abstürzen führen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Ermöglicht das schnelle Öffnen eines Terminals im ausgewählten Ordner\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Immer dunkel\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Immer hell\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Darstellung\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Anwendung\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Programmeinstellungen\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Sind Sie sicher, dass Sie Tabby schließen möchten? Sie können diese Abfrage unter Einstellungen -> Fenster deaktivieren.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Sind Sie sicher?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumente\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Eine Frage stellen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Vor dem Schließen des Browser-Tabs fragen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Hörbar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Authentifizierungsmethode\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automatisch\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Ein Terminal beim Anwendungs-Start automatisch öffnen\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatisch\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatische Updates\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Änderungen automatisch hochladen und jede Minute nach Updates suchen\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Verfügbar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Hintergrundtyp\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Backspace-Tastenmodus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Baudrate\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Beginn der Zeile\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Blinkender Cursor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Blau\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Unschärfeeffekt\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Strichstärke Fettschrift\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Unten\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Sicheres einfügen (erfordert Shellunterstützung)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Broadcast-Modus. Klicken Sie irgendwo zum Abbrechen.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Integriert\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Abbrechen\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Baudrate ändern\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Tab-Farbe ändern\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Hauptpasswort ändern\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Auf Aktualisierungen prüfen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Verschlüsselungsverfahren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Leeren\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Zuletzt benutzte Profile leeren\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Terminal leeren\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Terminal nach Verbindung leeren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Zwischenablage\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Schließen\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Schließen und nicht mehr anzeigen\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Fokussierten Bereich schließen\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Alle anderen Tabs schließen\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Tab schließen\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Alle linken Tabs schließen\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Alle rechten Tabs schließen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Fenster schließen, nachdem der letzte Tab geschlossen wurde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Farbe\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Farbschema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Farbschema\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Farben\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Alle Tabs in den aktuellen Tab kombinieren\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Kommandozeile\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Die stdin/stdout des Kommandos wird anstelle einer Netzwerkverbindung verwendet\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Befehle\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompakt (alte Version)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfiguration gelöscht\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfigurationsdatei heruntergeladen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Konfigurationsdatei\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Konfiguration synchronisieren\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfiguration hochgeladen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfigurationen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Über einen Proxy-Server verbinden\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Mit \\\"%s\\\" verbinden...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Zuerst mit einem anderen Host verbinden, um diesen als Proxy zu nutzen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Verbinde\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Verbindung\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Verbindung fehlgeschlagen: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Stattdessen wird der Verbindungsname verwendet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Kontextmenü\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Legt den Abstand zwischen den Elementen fest\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Kopiert\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopieren\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Aktuellen Pfad kopieren\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Vollständigen Pfad kopieren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Bei Auswahl kopieren\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"In die Zwischenablage kopieren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Mit Formatierung kopieren\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Konfiguration konnte nicht entschlüsselt werden\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Erstellen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Verzeichnis erstellen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Aktuell\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Aktuelles Farbschema\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Aktueller Host-Schlüssel-Fingerabdruck\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Aktueller Prozess: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Cursorform\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Benutzerdefiniert\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Benutzerdefiniertes CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Dunkler Modus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Datenbits\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Fehlersuche\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Größe der horizontalen Teilung verringern\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Größe der vertikalen Teilung verringern\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Standards Verbindungstyp\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Standard Verbindung für Schnellverbanbindungen (z.B. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Standardprofil für neue Tabs\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Sandart Profil Gruppeneinstellungen\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Standard-Profileinstellungen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Standardwerte\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Standardwerte für {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Löschen\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"\\\"{name}\\\" löschen?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"{fullPath} löschen?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Gesamte Zeile löschen\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Nächstes Wort löschen\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Vorheriges Wort löschen\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Die Konfiguration auf der entfernten Seite löschen?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Profile der Gruppe löschen?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Dieses Skript löschen?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Tresor Inhalt löschen?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Lösche\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Gerät\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direkt\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Deaktivieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Dynamischen Tab-Titel deaktivieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Transparenten Hintergrund beim Ziehen des Fensters deaktivieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Grafikkarten-Beschleunigung deaktivieren\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Deaktiviert\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Verbindung trennen\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Aktuelle Tab Verbindung trennen (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Von {host} trennen?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Grafiken mittels Sixel Escape-Sequenzen anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Anzeigen auf\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Nicht abbrechen\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Nicht schließen\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Nicht merken\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Immer oben andocken\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Terminal andocken\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Größe des angedockten Terminals\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Breite des angedockten Terminals\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Andocken\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Doppelklick-Auswahl wird bei diesen Zeichen beendet\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Unten\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Herunterladen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Zeige fett geschriebenen Text in hellen Farben\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplizieren\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Als Administrator duplizieren\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Tab duplizieren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Bearbeiten\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Lokal bearbeiten\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Aktivieren\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Anonyme Nutzungsdaten senden\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Animationen aktivieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Automatische Installation von Updates aktivieren, wenn diese verfügbar sind.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Fluent Hintergrund-Option aktivieren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Schrift-Ligaturen aktivieren\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Globale Tastenkombination aktivieren (Ctrl-Leerzeichen)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Aktiviert die experimentelle Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Konfigurationsdatei verschlüsseln\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Ende der Zeile\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Umgebung\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Konfiguration löschen\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Tresor leeren\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Fehler in {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Genaue Übereinstimmung\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Beispiel:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Experimenteller Windows 10 Hintergrund-Stil (bekannt für Probleme)\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportieren\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Alternative Schriftart\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Dateiübertragung\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Datei: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fest\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Der transparente Hintergrund führt manchmal zum Stottern\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Alle Bereiche fokussieren\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Alle Bereiche gleichzeitig fokussieren (Broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Alle Tabs fokussieren\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Alle Tabs gleichzeitig fokussieren (Broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Fokus folgt der Maus\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Nächsten Bereich fokussieren\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Fokusbereich {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Vorherigen Bereich fokussieren\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Den darüberliegenden Bereich fokussieren\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Den darunterliegenden Bereich fokussieren\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Fokussiere den Bereich links\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Fokussiere den Bereich rechts\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"An Farbschema halten\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Schriftart\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Für Tastenkombinationen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"CR erzwingen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"CRLF erzwingen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"LF erzwingen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Erzwingt einen bestimmten SSH-Agenten-Verbindungstyp.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Löschen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Port weiterleiten\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Weitergeleitete Ports\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Aus dem Farbschema\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Vom System\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Aus dem Theme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Alle\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Allgemein\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Ein vorausgefülltes GitHub Ticket erzeugen\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Herunterladen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Holen Sie es sich aus dem Einstellungen-Fenster der Tabby-Web-App\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Gibt dem Fenster einen verschwommenen transparenten Hintergrund\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Nach oben\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Grün\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Gruppe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Problembehandlung\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Hilf dabei, die Anzahl der Tabby-Installationen auf der ganzen Welt zu verfolgen!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Hilf Tabby zu übersetzen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadezimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Verbergen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Tab Schließen verbergen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Tab-Nummer ausblenden\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Tab Optionen ausblenden\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Fenster beim Fokusverlust ausblenden\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Versteckt das angedockte Terminal, wenn Sie woanders klicken.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Homepage\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Hostschlüssel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Hostschlüssel Verifizierung\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Tastenkombinationen\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Wie sich Tabby durch Umgebungsvarianten präsentiert\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP-Proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP-Proxy-Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP-Proxy-Port\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Symbol\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamisch\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Wenn deaktiviert, werden nur benutzerdefinierte Profile in der Profilauswahl angezeigt\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Gibt die Eingabe sofort lokal wieder\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Größe der horizontalen Teilung vergrößern\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Größe der vertikalen Teilung vergrößern\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Eingabe\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Eingabe wird beim Tippen gesendet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Eingabemodus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Eingehende Zeilenumbrüche\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Installiert\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Das Installieren des Updates schließt alle Tabs und startet Tabby neu.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Intelligente Strg-C (Kopieren/Abbrechen)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktiv\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Ungültige Syntax\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Jump-Host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Zum nächsten Wort springen\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Zum vorherigen Wort springen\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Behalten\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Aktivitäts Intervall (Millisekunden)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Angedocktes Terminal immer oben halten\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Schlüssel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Schlüsselaustausch\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Tastatur\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Tastatur-interaktive Authentifizierung\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Beenden erzwingen\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Sprache\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Letzter bekannter Host-Schlüssel-Fingerabdruck\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Starte WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Starte WinSCP für die aktuelle SSH-Sitzung\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Erfahren Sie, wie Sie Tabby das Arbeitsverzeichnis von Remote Sitzung erkennen lassen können.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Links\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Ermöglicht der Shell das reagieren auf die Meta-Taste statt des Betriebssystems\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Heller Modus\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Zeile für Zeile\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Zeileneditor, Eingabe wird nach Drücken der Eingabetaste gesendet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Zeilenabstand\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Wird geladen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Lade Konfigurationen...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokales Echo\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Lokales Terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Login-Skripte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Langer-Klick für Kontextmenü\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Profile verwalten\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maximale Anzahl der Aktivitätsintervallen\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Aktiven Bereich maximieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minimales Kontrastverhältnis\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Geändert am {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Maus\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Tab nach links verschieben\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Tab nach rechts verschieben\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Nach \\\"Ungruppiert\\\" verschieben\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Wenn Sie die Maus über ein inaktives Fenster bewegen, wird es aktiviert\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Name\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Name für die neue Konfiguration\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Name des neuen Verzeichnis\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativ\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Neu\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Neues Admin Tab\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Neue Konfiguration auf {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Neuer Gruppenname\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Neuer Eintrag\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Neuer Name\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Neues Profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Neues Gruppenprofil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Neuer Profilname\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Neuer Tab\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Neues Tab: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Neues Terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Neues Fenster\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Neues Fenster\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Neu mit Profil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Nächster Tab\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Keine Farbe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Kein Modifikator\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Keine\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Strichstärke Normalschrift\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Nicht gefunden\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Bei Aktivität benachrichtigen\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Benachrichtigen, wenn erledigt\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Anzahl der Zeilen im Puffer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Aus\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Offiziell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Auf GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Tab nur schließen, wenn die Sitzung beendet wird\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Transparenz\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Entwicklerwerkzeuge öffnen\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Einstellungen öffnen\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Einstellungen öffnen: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"SFTP-Panel öffnen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Optional\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Optionen\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Orange\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Betriebssystem-Standard\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Betriebssystem-Standard ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Ausgabe wird als Hexdump angezeigt\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Ausgabe wird angezeigt, wie sie empfangen wird\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Ausgabemodus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Ausgehende Zeilenumbrüche\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"X11-Display überschreiben\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Lokal überschreiben und synchronisieren\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Remote überschreiben und synchronisieren\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Die Remote Konfiguration überschreiben und mit der Synchronisierung beginnen?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Die lokale Konfiguration überschreiben und mit der Synchronisierung beginnen?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Bereichsgrößenveränderungsschritt\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Bereiche\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Paper (Vorgängerversion)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parität\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Teilweise Konfigurations-Synchronisation ist nicht möglich, wenn die Konfiguration verschlüsselt ist.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Pass-through\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Passwort für einen privaten Schlüssel mit Hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Passwort\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Einfügen\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Aus Zwischenablage einfügen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Einfügen, wenn keine Auswahl, sonst kopieren\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Mehrere Zeilen einfügen?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Beim Mittel-Klick einfügen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Pfad oder Adresse des lokalen X11-Sockets\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Anheften\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Erweiterungen\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Ordner der Erweiterungen öffnen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port geöffnet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Ports\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Drücken Sie eine Taste zum erneuten Verbinden\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Drücken Sie jetzt die Taste\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Verhindert versehentliches Schließen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Verhindert versehentliche Ausführung von eingefügten Befehlen\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Vorheriger Tab\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Privater Schlüssel\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Prozess abgeschlossen\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Profilname\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profile\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profile & Verbindungen\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Programm\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Proxy-Befehl\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Lila\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Die gesamte Tabby-Konfiguration in den Tresor speichern\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Schnellverbindung\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Beenden\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Raw Socket-Verbindung\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Timeout (Millisekunden)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Neueste\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Neu verbinden\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Verbindung zum aktuellen Tab wiederaufnehmen (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rot\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Versionshinweise\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"{time} lang merken\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Remote\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Leerzeichen und Zeilenumbrüche um den kopierten Text entfernen\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Umbenennen\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Tab umbenennen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Darstellung\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Letzten Tab neu öffnen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Ersetzen\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Ein Problem melden\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Eine Taste zum öffnen von Links benötigen\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Vergrößerung zurücksetzen\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Aktuelle serielle Sitzung neu starten\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Aktuelle SSH-Sitzung neu starten\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Aktuelle Telnet-Sitzung neu starten\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Tab neu starten\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Anwendung neu starten, um Änderungen zu übernehmen\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Standard Einstellungen wiederherstellen?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Standard Einstellungen wiederherstellen?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Terminal-Tabs beim Anwendungs-Start wiederherstellen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Sitzung für mehrere Tabs wiederverwenden\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Rechts\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Rechtsklick\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Als Administrator ausführen\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Speichern\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Passwort im Schlüsselbund sichern\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Speichern und anwenden\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Als Profil speichern\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Layout als Profil speichern\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Gespeichert\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Gespeichertes Layout\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Scrollen bei Eingabe\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Scrolle Terminal eine Seite nach unten\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Scrolle Terminal eine Seite nach oben\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Terminal nach unten scrollen\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Terminal zum Anfang scrollen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Scrollback\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Scrollt das Terminal bei Benutzereingabe nach unten\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Suche\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Farbschemen durchsuchen\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Tastenkombinationen durchsuchen\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Plugins durchsuchen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Geheimes Sync-Token\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Auswählen\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Wählen Sie ein Basis-Profil als Vorlage\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Alle auswählen\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Verzeichnis auswählen\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Profil auswählen\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Profil auswählen oder Adresse eingeben\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Sende Bytes durch Eingabe von Hex-Werten\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Sendet Daten Byte für Byte\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Seriell\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Serielle Verbindung\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serielle Verbindung: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Hauptpasswort festlegen\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Passwort festlegen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Passwort festlegen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Tabby als %COMSPEC% setzen\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Auf 0 setzen, um die zuletzt benutzten Profile zu deaktivieren\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Legt den Pfad des SSH-Agenten-Pipes fest.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Einstellungen\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell unterstützt keine aktuelle Pfaderkennung\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Shell-Integration\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Anzeigen\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Zeige {type} Profilauswahl\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Beim Einfügen mehrerer Zeilen eine Bestätigungsbox anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Integrierte Profile im Selektor anzeigen\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Befehlsauswahl anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Konfigurationsdatei im Dateibrowser anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Standardwerte anzeigen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Mixer anzeigen\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Bereichnamen anzeigen (für Neuanordnung)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Profilsymbol im Tab anzeigen\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Profilauswahl anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Zuletzt benutzte Profile im Selektor anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Versionshinweise anzeigen\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Serielle Verbindungen anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Tabs im Vollbildmodus anzeigen\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Symbolleiste anzeigen\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Tresor Inhalt anzeigen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Sixel Grafikunterstützung (experimentell)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"MoTD/Banner überspringen\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Langsamer Feed\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Einrasten des Fensters an einer Seite des Bildschirms\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS-Proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS-Proxy-Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS-Proxy-Port\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Töne\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Quellcode\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Platzhalter\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Teilen\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Nach unten teilen\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Nach unten teilen\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Nach links teilen\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Nach rechts teilen\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Nach oben teilen\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Nach oben teilen\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH-Verbindung\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH-Verbindungsverwaltung erfolgt nun über die Registerkarte \\\"Profile & Verbindungen\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH-Passwort für {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standard (alte Version)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Beim Start\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Stoppbits\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Entfernen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Updates abonnieren\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Ersetzungen erlaubt.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Farbschema wechseln\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Profil wechseln\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Profil im aktiven Bereich wechseln\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Umschaltung der Frontend-Implementierung (experimentell)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synchronisierung\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Automatisch synchronisieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Synchronisiere Host\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Tastenkombination synchronisieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Tresor synchronisieren\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Fenster Einstellungen synchronisieren\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Tab {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Tab Aktivität\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby konnte nicht mit deinen Plugins starten, so dass alle Plugins von Dritten in dieser Sitzung deaktiviert wurden. Der Fehler war:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Nachrichten und Updates von Tabby auf Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Tabs\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Tab Position \"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Tab Breite\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet-Sitzung\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Terminal-Hintergrund\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminal Glocke\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Terminal-Identifikation\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Vielen Dank, dass Sie Tabby heruntergeladen haben!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Theme\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Es gibt aktive Dateiübertragungen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Es gibt ein gespeichertes Passwort für diese Verbindung\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Diese gelten für alle Profile eines bestimmten Typs\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Diese gelten für alle Profile eines bestimmten Typs in dieser Gruppe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Dünn\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Aktivieren Sie dies, wenn Sie visuelle Probleme haben\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Vollbildmodus umschalten\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Zum letzten Tab wechseln\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Terminalfenster umschalten\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Schaltet die Sichtbarkeit des Tabby-Fensters um\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Oben\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Leerzeichen und Zeilenumbrüche kürzen\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Erneut versuchen\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Versuche gespeichertes Passwort\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Aktuelle Teilbereiche in separate Tabs verwandeln\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Nicht gruppiert\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Deinstallieren\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Unbekannt\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Unbekanntes Geheimnis des Typs {type} für {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Lösen\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Hoch\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Aktualisieren\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Aktualisieren auf Version {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Hochladen\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Als neue Konfiguration hochladen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"{altKeyName} als Meta-Taste verwenden\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"ConPTY verwenden\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Benutzer Standard\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Benutzername\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Mit der CONNECT-Methode\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Vorgegebenes Passwort wird verwendet\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Tresor\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Der Tresor ist ein immer verschlüsselter Container für SSH-Passwörter und private Schlüssel.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Tresor ist leer\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Tresor ist gesperrt\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Tresor ist nicht konfiguriert\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Tresor Hauptpasswort muss gesetzt werden, um Einträge speichern zu können\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Hostschlüssel bei Verbindung überprüfen\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Version: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibrancy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Optisch\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Beim mehrzeiligen Einfügen warnen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Warnung beim Schließen aktiver Verbindungen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Warnung: Der Schlüssel des entfernten Hosts hat sich plötzlich geändert!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Wir analysieren nur Ihre Tabby- und Betriebssystem-Versionen.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Willkommen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Was gibt's Neues?\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Wenn eine Sitzung endet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Wenn aktiviert, sind Links nur anklickbar, während Sie diese Taste gedrückt halten\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Wenn WinSCP erkannt wird, können Sie eine SCP-Sitzung aus dem Kontextmenü starten.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Ob ein benutzerdefiniertes Fenster- oder das Fenster Layout des Betriebssystems verwendet werden soll\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Verhindert, dass die SSH-Begrüßung angezeigt wird\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Fenster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Fenstergröße entlang am Rand\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Fenstergröße weg vom Rand\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Fensterrahmen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 Build 18309 oder höher wird für ConPTY empfohlen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP-Pfad\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Worttrennzeichen\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Arbeitsverzeichnis\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Arbeitsverzeichniserkennung\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL-Terminal Glocke kann nur über Lautstärkeregler abgeschaltet werden\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL-Terminal unterstützt TrueColor nur mit ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11-Weiterleitung\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Gelb\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Du kannst es später ändern, aber es lässt sich nicht wiederherstellen wenn vergessen.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Sie könnten gerade Opfer eines Man-in-the-Middle-Angriffs sein oder der Host-Schlüssel könnte gerade geändert worden sein.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Hineinzoomen\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Herauszoomen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamisch\"\n\n"
  },
  {
    "path": "locale/en-GB.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: en-GB\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: English, United Kingdom\\n\"\n\"Language: en_GB\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Change tab colour\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Colour\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Colour scheme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Colour schemes\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Colours\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Current colour scheme\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Draw bold text in bright colours\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Follow the colour scheme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"From colour scheme\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamic\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximise the active pane\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"No colour\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Pane resize step\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Search colour schemes\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Switch colour scheme\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamic\"\n\n"
  },
  {
    "path": "locale/en-US.po",
    "content": "msgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamic\"\n\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamic\"\n"
  },
  {
    "path": "locale/es-ES.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: es-ES\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Spanish\\n\"\n\"Language: es_ES\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" se sigue ejecutando. ¿Cerrar?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} copiar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Una familia tipográfica secundaria usada para mostrar los caracteres faltantes en la principal\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Abortar todo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Aceptar y recordar clave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Aceptar solo esta vez\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Accesibilidad\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Fondo acrílico\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Añadir\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Agregar un puerto de reenvío\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Añadir una clave privada\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Añadir...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Espacio adicional entre líneas\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avanzado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Reenvío del agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Ruta de la tubería del agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Tipo de agente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Permite abrir archivos .bat en pestañas, pero rompe algunas shells\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Permite abrir rápidamente un terminal en la carpeta seleccionada\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Siempre a oscuras\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Siempre ligero\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Apariencia\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplicación\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Ajustes de la aplicación\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"¿Está seguro de que desea cerrar Tabby? Puede desactivar este mensaje en Ajustes -> Ventana.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"¿Estás seguro?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumentos\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Hacer una pregunta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Preguntar antes de cerrar la pestaña del navegador\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Audible\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Método de autenticación\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Auto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Autoabrir un terminal al iniciar la aplicación\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automático\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Actualizaciones automáticas\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Cargar automáticamente los cambios y comprobar si hay actualizaciones cada minuto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Disponible\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Tipo de fondo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Modo de tecla de retroceso\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Velocidad en baudios\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Inicio de la línea\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Parpadear cursor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Azul\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Desenfoque\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Peso de la fuente en negrita\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Inferior\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Pegar con corchetes (requiere soporte de shell)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Modo de transmisión. Haga clic en cualquier lugar para cancelar.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Integrado\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Cancelar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Cambiar la velocidad en baudios\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Cambiar color de pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Cambiar la contraseña maestra\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Buscar actualizaciones\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Cifrados\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Limpiar\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Limpiar los perfiles recientes\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Limpiar terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Limpiar el terminal al cerrar la conexión\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Portapapeles\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Cerrar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Cerrar y no mostrar de nuevo\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Cerrar el panel enfocado\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Cerrar el resto de pestañas\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Cerrar pestaña\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Cerrar las pestañas de la izquierda\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Cerrar las pestañas de la derecha\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Cerrar la ventana después de cerrar la última pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Color\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Esquema de color\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Esquemas de color\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Colores\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Combinar todas las pestañas en la pestaña actual\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Línea de comandos\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"El stdin/stdout del comando se utiliza en lugar de una conexión de red\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Comandos\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Compacto (heredado)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Configuración eliminada\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Configuración descargada\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Archivo de configuración\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Sincronizar configuración\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Configuración subida\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Configuraciones\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Conectar a través de un servidor proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Conectarse a %s...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Conectarse primero a un host diferente y utilizarlo como proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Conectando\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Conexión\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Conexión fallida: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"El nombre de la conexión se utilizará en su lugar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menú contextual\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Controla la cantidad de espacio entre los elementos\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Copiado\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Copiar\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Copiar la ruta actual\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Copiar ruta completa\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Copiar al seleccionar\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Copiar al portapapeles\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Copiar con formato\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"No se ha podido descifrar la configuración\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Crear\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Crear directorio\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Actual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Esquema de color actual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Huella actual de la clave de host\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Proceso actual: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Forma del cursor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Modo oscuro\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bits de datos\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Depuración\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Reducir tamaño de división horizontal\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Reducir tamaño de división vertical\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Tipo predeterminado \\\"Conectar a\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Tipo de conexión predeterminado utilizado por la función de conexión rápida (por ejemplo, SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Perfil predeterminado para nuevas pestañas\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Configuración predeterminada del grupo de perfiles\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Configuración de perfil predeterminada\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Valores predeterminados\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Valores predeterminados para {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Borrar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"¿Eliminar \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"¿Eliminar la ruta {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Borrar toda la línea\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Eliminar la siguiente palabra\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Eliminar palabra anterior\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"¿Eliminar la configuración del lado remoto?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"¿Eliminar los perfiles del grupo?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"¿Eliminar este código?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"¿Eliminar el contenido de vault?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Eliminando\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Dispositivo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Directo\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Deshabilitar\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Deshabilitar el título de la pestaña dinámica\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Desactivar el fondo de fluidez mientras arrastra\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Deshabilitar la aceleración de GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Deshabilitado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Desconectar\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Desconectar pestaña actual (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"¿Desconectarse desde {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Mostrar imágenes a través de secuencias de escape Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Mostrar en pantalla\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"No abortar\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"No cerrar\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"No recordar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Acoplar siempre en la parte superior\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Acoplar la terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Tamaño de la terminal acoplada\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Espacio de la terminal acoplada\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Acoplamiento\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"La selección con doble clic se detendrá en estos caracteres\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Abajo\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Descargar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Mostrar texto en negrita en colores brillantes\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplicar\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplicar como administrador\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplicar pestaña\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Editar\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Editar localmente\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Habilitar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Habilitar analíticas\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Activar animaciones\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Habilitar la instalación automática de actualizaciones cuando estén disponibles.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Activar la opción de fondo de fluido\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Habilitar ligaduras de fuentes\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Habilitar tecla de acceso rápido (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Habilitar la API experimental de Windows ConPTY\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Cifrar el archivo de configuración\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Fin de la línea\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Entorno\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Borrar configuración\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Borrar la Vault\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Error en {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Coincidencia exacta\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Ejemplo:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Se sabe que el estilo de fondo experimental de Windows 10 causa problemas\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Fuente alternativa\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Transferencias de archivos\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Archivo: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtro\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Solucionado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Fondo fluido a veces causa retraso de arrastre\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Enfocar todos los paneles\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Enfocar todos los paneles a la vez (transmitir)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Enfocar todas las pestañas\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Enfocar todas las pestañas a la vez (transmisión)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"El foco sigue al ratón\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Enfocar el siguiente panel\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Panel de enfoque {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Enfocar el panel anterior\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Enfocar el panel de arriba\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Enfocar el panel de abajo\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Central el panel de la izquierda\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Central el panel de la derecha\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Seguir el esquema de colores\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Fuente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Para atajos de teclado\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Forzar CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Forzar CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Forzar LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Forzar un tipo de conexión de agente SSH específico.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Olvidar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Puerto de reenvío\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Puertos reenviados\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Desde un color de esquema\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Del sistema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Desde el tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Interfaz\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Completo\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"General\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Generar un problema de GitHub precargado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Obtener\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Obtenerlo desde la ventana de configuración de Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Le da a la ventana un fondo transparente borroso\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Ir arriba\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Verde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacks\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"¡Ayuda a rastrear la cantidad de instalaciones de Tabby en todo el mundo!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Ayuda a traducir Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Ocultar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Ocultar botón de cierre de pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Ocultar índice de pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Ocultar botón de opciones de pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Ocultar ventana al perder enfoque\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Oculta la terminal acoplada cuando hagas clic fuera.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Página de inicio\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Anfitrión\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Clave de anfitrión\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Verificación de clave de host\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Teclas de acceso rápido\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Cómo Tabby se presenta a través de las variables de entorno\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Host proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Puerto de proxy HTTP\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ícono\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"id.tab-width.dynamic\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Si está deshabilitado, solo se mostrarán perfiles personalizados en el selector de perfil\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Inmediatamente hace echo de tu entrada localmente\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Aumentar tamaño de división horizontal\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Aumentar tamaño de división vertical\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Entrada\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"La entrada se envía mientras escribes\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modo de entrada\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Entrada de nuevas líneas\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Instalado\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"La instalación de la actualización cerrará todas las pestañas y reiniciará Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Ctrl-C inteligente (copiar/abortar)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interactivo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Sintáxis inválida\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Saltar host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Saltar a la siguiente palabra\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Saltar a la palabra anterior\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Mantener\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Mantener vivo el intervalo (Milisegundos)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Mantener la terminal acoplada siempre encima\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Clave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Intercambio de llaves\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Teclado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autenticación interactiva con teclado\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Terminar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Idioma\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Última huella de clave de host conocida\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Iniciar WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Iniciar WinSCP para la sesión SSH actual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Aprende cómo permitir que Tabby detecte el directorio de trabajo remoto de la shell.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Izquierda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Permita que la shell maneje la tecla Meta en lugar del sistema operativo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Modo claro\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Línea por línea\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Editor de línea, la entrada se envía después de pulsar Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Relleno de línea\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Cargando\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Cargando configuraciones...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Local\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Eco local\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminal local\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Código de acceso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Clic extendido para el menú contextual\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Administrar perfiles\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Cantidad máxima de mantenimiento vivo\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximiza el panel activo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Ratio de contraste mínimo\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Modificado el {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Ratón\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Mover pestaña a la izquierda\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Mover pestaña a la derecha\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Mover a \\\"Desagrupado\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Al mover el ratón sobre un panel inactivo se activará\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nombre\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nombre para la nueva configuración\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nombre para el nuevo directorio\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nuevo\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nueva pestaña de administración\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nueva configuración en {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nuevo nombre del grupo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nuevo elemento\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nuevo nombre\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nuevo perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nuevo grupo de perfiles\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nuevo nombre de perfil\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nueva pestaña\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nueva pestaña: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nuevo terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nueva ventana\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nueva ventana\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nuevo con perfil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Siguiente pestaña\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Sin color\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Sin modificador\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ninguno\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Peso de fuente normal\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"No encontrado\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Notificar sobre la actividad\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Notificar cuando termine\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Número de líneas guardadas en el búfer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Apagado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Oficial\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"En discusiones de GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Cierre la pestaña solo cuando la sesión finalice explícitamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacidad\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Abrir Herramientas de Desarrollo\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Abrir Ajustes\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Abrir pestaña de ajustes: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Abrir panel SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opcional\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opciones\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Naranja\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"SO predeterminado\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"SO predeterminado ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"La salida se muestra como un volcado hexadecimal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"La salida se muestra tal como se recibe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Modo de salida\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Salida de nuevas líneas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Reemplazar pantalla X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Sobrescribir local y sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Sobrescribir remoto y sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"¿Sobrescribir la configuración en el lado remoto y empezar a sincronizar?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"¿Sobrescribir la configuración local y empezar a sincronizar?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Paso de redimensionado del panel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Paneles\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papel (heredado)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paridad\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"La sincronización parcial de configuración no es posible cuando la configuración es cifrada a través de Vault.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Pasado-por-clave\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Contraseña para una clave privada con hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Contraseña\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Pegar\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Pegar desde el portapapeles\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Pegar si no hay selección, sino copiar\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"¿Pegar múltiples líneas?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Pegar con clic central\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Ruta o dirección del socket local X11\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Fijar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Complementos\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Carpeta de complementos\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Puerto\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Puerto abierto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Puertos\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Pulse cualquier tecla para reconectar\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Presiona la tecla ahora\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Previene cierre accidental\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Previene la ejecución de comandos pegados\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Pestaña anterior\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Claves privadas\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proceso completado\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nombre de perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Perfiles\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Perfiles y conexiones\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Programa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Comando proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Morado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Poner toda la configuración de Tabby en la vault\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Conexión rápida\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Salir\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Conexión de socket sin procesar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Tiempo de espera listo (Milisegundos)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Reciente\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Reconectar\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Reconecta la pestaña actual (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rojo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Notas de lanzamiento\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Recordar por {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Remoto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Eliminar espacios en blanco y nuevas líneas alrededor del texto copiado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Renombrar\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Renombrar pestaña\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Renderizando\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Reabrir última pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Reemplazar\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Reportar un problema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Requerir una clave para hacer clic en enlaces\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Restablecer zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Reiniciar la sesión en serie actual\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Reiniciar sesión SSH actual\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Reiniciar sesión Telnet actual\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Reiniciar pestaña\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Reiniciar la aplicación para aplicar cambios\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"¿Restaurar los ajustes de fábrica?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"¿Restaurar los ajustes a los heredados por defecto?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Restaurar pestañas de la terminar al iniciar la aplicación\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Reutilizar sesión para múltiples pestañas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Derecha\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Clic derecho\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Ejecutar como administrador\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Guardar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Guardar una contraseña en el llavero\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Guardar y aplicar\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Guardar como perfil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Guardar diseño como perfil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Guardado\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Diseño guardado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Desplazarse al entrar\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Desplazar terminal una página hacia abajo\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Desplazar terminal una página arriba\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Desplazar terminal hacia abajo\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Desplazar terminal hasta arriba\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Retroceso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Desplaza el terminal hasta la parte inferior de la entrada del usuario\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Buscar\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Buscar esquemas de color\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Buscar atajos\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Buscar plugins\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Token secreto de sincronización\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Seleccionar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Seleccione un perfil base para usar como plantilla\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Seleccionar todo\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Seleccionar archivo de almacenamiento\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Seleccionar perfil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Seleccionar perfil o introducir una dirección\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Enviar bytes escribiendo en valores hexadecimales\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Envía datos de un byte a la vez\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serial\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Conexión serial\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serial: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Establecer contraseña maestra\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Establecer contraseña\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Establecer contraseña\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Establecer Tabby como %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Establecer en 0 para desactivar perfiles recientes\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Establece la ruta de la tubería nombrada por el agente SSH.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Ajustes\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Escudo\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell no soporta la detección actual de rutas\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integración con la Shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Mostrar\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Mostrar {type} selector de perfil\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Mostrar un cuadro de confirmación al pegar múltiples líneas\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Mostrar perfiles incorporados en el selector\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Mostrar selector de comando\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Mostrar archivo de configuración\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Mostrar valores predeterminados\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Mostrar Mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Mostrar etiquetas de panel (para reordenar)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Mostrar icono de perfil en pestaña\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Mostrar selector de perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Mostrar perfiles recientes en el selector\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Mostrar notas del lanzamiento\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Mostrar conexiones Serial\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Mostrar pestañas en modo de pantalla completa\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Mostrar barra de herramientas\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Mostrar contenido de vault\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Soporte gráfico Sixel (experimental)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Omitir MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Fuente lenta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Adherir la ventana a un lado de la pantalla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Servidor proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Puerto proxy SOCKS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Sonido\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Código fuente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Espaciado\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Dividir\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Dividir en la parte inferior\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Dividir hacia abajo\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Dividir a la izquierda\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Dividir a la derecha\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Dividir en la parte superior\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Dividir hacia arriba\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Conexión SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"La gestión de conexiones SSH ahora se realiza a través de la pestaña \\\"Perfiles y conexiones\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Contraseña SSH para {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Estándar (heredado)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Inicialización\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Bits de parada\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Franja\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Suscribirse a actualizaciones\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Sustituciones permitidas.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Cambiar esquema de colores\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Cambiar perfil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Cambiar perfil en panel activo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Cambia la implementación de interfaz de la terminal (experimental)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sincronizar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sincronizar automáticamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Sincronizar host\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sincronizar atajos\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sincronizar Vault\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sincronizar la configuración de la ventana\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Pestaña {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Actividad de la pestaña\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby no pudo iniciar con tus complementos, por lo que todos los complementos de terceros han sido deshabilitados en esta sesión. El error fue:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Noticias de Tabby y actualizaciones en Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Pestañas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Ubicación de las pestañas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Ancho de pestañas\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sesión de Telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Fondo de la terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Campana de la terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identificación del Terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"¡Gracias por descargar Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Hay transferencias de archivos activas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Hay una contraseña guardada para esta conexión\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Estos se aplican a todos los perfiles de un tipo determinado\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Estos aplican a todos los perfiles de un tipo en este grupo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Estrecho\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Marque esto si está experimentando aliasing, efecto fantasma u otros problemas visuales\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Alternar modo de pantalla completa\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Alternar última pestaña\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Alternar ventana de la terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Alterna la visibilidad de la ventana de Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Top\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Recortar espacios en blanco y nuevas líneas\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Reintentar\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Reintentar contraseña guardada\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Convierte los paneles de pestañas actuales en pestañas separadas\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Desagrupado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Desinstalar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Desconocido\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Secreto desconocido de tipo {type} para {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Quitar fijado\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Arriba\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Actualizar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Actualizar a {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Cargar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Subir como una nueva configuración\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Usar {altKeyName} como la tecla Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Usar ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Usuario predeterminado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nombre de usuario\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Usando método CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Usando la contraseña preestablecida\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Caja fuerte\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Vault es un contenedor siempre cifrado para secretos tales como contraseñas SSH y contraseñas de clave privada.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Vault está vacio\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Vault está bloqueado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Vault no está configurado\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"La contraseña maestra de Vault debe estar establecida para permitir secretos\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verificar las claves del host al conectar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Versión\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Versión: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibración\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Advertir al pegar múltiples líneas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Advertir al cerrar conexiones activas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Advertencia: ¡la clave del host remoto ha cambiado repentinamente!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Solo estamos rastreando sus versiones de Tabby y SO.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Bienvenido\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Qué hay de nuevo\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Cuando una sesión finalice\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Cuando está habilitado, los enlaces sólo se pueden hacer clic mientras se mantiene presionada esta tecla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Cuando se detecta WinSCP, puede iniciar una sesión SCP desde el menú contextual.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Si se debe usar una ventana personalizada o una ventana nativa del sistema operativo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Evitar que aparezca el mensaje de bienvenida SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Ventana\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimensión de la ventana a lo largo del borde\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimensión de la ventana lejos del borde\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Marco de ventana\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Ventanas\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Se recomienda Windows 10 build 18309 o superior para ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Ruta WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Separadores de palabra\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Directorio de trabajo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detección de directorio de trabajo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"La campana de la terminal WSL sólo puede silenciarse a través del Mezclador del Volumen\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"La terminal WSL sólo soporta TrueColor con ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Reenvío X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Amarillo\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Puedes cambiarlo más tarde, pero es irrecuperable si lo olvidas.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Podría estar bajo un ataque de intermediario en este momento, o la clave de host podría haber sido cambiada.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Ampliar\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Alejar vista\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"id.port-forwarding.dynamic\"\n\n"
  },
  {
    "path": "locale/fr-FR.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: fr\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: French\\n\"\n\"Language: fr_FR\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" est toujours en cours d'exécution. Fermer ?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} - Copie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Second type de polices à utiliser pour afficher les caractères absents de la police principale\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Annuler tout\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Accepter et mémoriser la clé\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Accepter uniquement cette fois\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Accessibilité\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Arrière-plan acrylique\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Ajouter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Ajouter un transfert de port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Ajouter une clé privée\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Ajouter ...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Espace additionnel entre les lignes\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avancé\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Transfert d'agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Chemin vers l'agent SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Type d'agent\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Permet l'ouverture des fichiers .bat dans les onglets, mais brise certains terminaux\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Permet d'ouvrir rapidement un terminal dans le dossier sélectionné\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Toujours sombre\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Toujours clair\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Apparence\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Application\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Paramètres de l'application\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Êtes-vous sûr de vouloir fermer Tabby ? Vous pouvez désactiver cette invite dans Paramètres -> Fenêtre.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Êtes-vous sûr(e) ?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Arguments\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Poser une question\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Demander avant de fermer l'onglet du navigateur\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Audible\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Méthode d'authentification\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Auteur\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automatique\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Ouvrir automatiquement un terminal au démarrage de l'application\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatique\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Mettre à jour automatiquement\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Envoyer automatiquement les modifications et vérifier les mises à jour toutes les minutes\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Disponible\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Type d'arrière-plan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Mode de la touche Retour arrière\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Vitesse en bauds\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Début de la ligne\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Faire clignoter le curseur\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Bleu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Flouté\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Épaisseur de police en gras\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Bas\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Coller avec des parenthèses (l'interpréteur de commande doit le supporter)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Mode diffusion. Cliquez n'importe où pour annuler.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Intégré\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Annuler\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Changer le débit en bauds\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Changer la couleur de l'onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Changer le mot de passe maître\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Vérifier les mises à jour\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Chiffrements\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Effacer\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Effacer les profils récents\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Effacer le terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Effacer le terminal après la connexion\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Presse-papier\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Fermer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Fermer et ne plus afficher\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Fermer le panneau actif\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Fermer les autres onglets\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Fermer l'onglet\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Fermer les onglets à gauche\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Fermer les onglets à droite\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Fermer la fenêtre après la fermeture du dernier onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Couleur\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Schéma de couleurs\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Modèles de couleur\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Couleurs\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Combiner tous les onglets dans l'onglet actuel\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Ligne de commande\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"L'entrée et la sortie standards sont utilisées à la place d'une connexion réseau\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Commandes\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Compact (hérité)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Configuration supprimée\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Configuration téléchargée\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Fichier de configuration\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Synchronisation de la configuration\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Configuration téléversée\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Configurations\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Se connecter via un serveur proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Se connecter à \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Se connecte d'abord à un hôte différent et l'utilise comme proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Connexion en cours\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Connexion\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Échec de la connexion : {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Le nom de connexion sera utilisé à la place\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu contextuel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Contrôle la quantité d'espace entre les éléments\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Copié\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Copier\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Copier le chemin actuel\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Copier le chemin complet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Copier lors de la sélection\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Copier dans le presse-papier\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Copier avec mise en forme\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Impossible de déchiffrer la configuration\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Créer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Créer un répertoire\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Actif\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Schéma de couleurs actuel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Empreinte de la clé de l'hôte courant\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Processus actuel : {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Forme du curseur\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Personnalisé\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS personnalisé\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Mode sombre\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bits de données\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Débogage\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Diminuer la taille de la séparation horizontale\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Diminuer la taille de la séparation verticale\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Type de connexion par défaut\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Type de connexion par défaut utilisé par la fonction de connexion rapide (ex. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Profil par défaut pour les nouveaux onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Paramètres par défaut du groupe de profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Paramètres de profil par défaut\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Par défaut\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Par défaut pour {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Supprimer\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Supprimer \\\"{name} \\\" ?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Supprimer {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Supprimer toute la ligne\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Supprimer le mot suivant\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Supprimer le mot précédent\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Supprimer la configuration du côté distant ?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Supprimer les profils du groupe ?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Supprimer ce script ?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Supprimer le contenu du coffre ?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Suppression en cours\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Périphérique\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Directe\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Désactiver\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Désactiver le titre dynamique des onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Désactiver l'arrière-plan fluide lors du déplacement\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Désactiver l'accélération GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Désactivé\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Déconnecter\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Déconnecter l'onglet actuel (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Se déconnecter de {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Affiche les images en mode Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Afficher sur\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Ne pas interrompre\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Ne pas fermer\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Ne pas mémoriser\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Toujours garder au premier plan\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Ancrer le terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Taille du terminal ancré\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Espace du terminal ancré\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Ancrage\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"La sélection par double-clic s'arrêtera à ces caractères\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Bas\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Télécharger\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Afficher le texte en gras avec des couleurs vives\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Dupliquer\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Dupliquer en tant qu'administrateur\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Dupliquer l'onglet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Éditer\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Éditer en local\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Activer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Activer la télémétrie\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Activer les animations\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Activer l'installation automatique des mises à jour dès qu'elles sont disponibles.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Activer l'option d'arrière-plan fluide\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Activer les ligatures de police\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Activer le raccourci clavier global (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Active l'API expérimentale Windows ConPTY\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Chiffrer le fichier de configuration\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Fin de la ligne\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Environnement\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Effacer la configuration\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Effacer le coffre\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Erreur dans {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Correspondance exacte\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Exemple:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Style d'arrière-plan expérimental de Windows 10 connu pour causer des problèmes\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exporter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Police de substitution\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Transferts de fichiers\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Fichier : {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtre\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fixe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"L'arrière-plan fluide provoque parfois des problèmes d'affichage\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Cibler tous les volets\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Cibler tous les volets à la fois (diffusion)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Cibler tous les onglets\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Cibler tous les onglets à la fois (diffusion)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Le curseur suit la souris\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Focus sur le volet suivant\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Sélectionner le volet {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Focus sur le volet précédent\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Focus sur le volet au-dessus\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Focus sur le volet au-dessous\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Focus sur le volet à gauche\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Focus sur le volet à droite\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Suivre le schéma de couleurs\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Police\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Pour les raccourcis clavier\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Forcer CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Forcer CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Forcer LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Force un type spécifique de connexion à l'agent SSH.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Oublier\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Transfert de port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Ports transférés\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Celui du schéma de couleurs\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Depuis le système\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Celui du thème\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Interface Utilisateur\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Complet\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Général\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Générer une issue GitHub pré-remplie\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Obtenir\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Obtenir depuis la fenêtre des paramètres Tabby Web\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Donne à la fenêtre un fond à la fois transparent et flouté\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Remonter\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Vert\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Groupe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacks\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Aidez à suivre le nombre d'installations de Tabby à travers le monde !\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Aidez à traduire Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadécimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Masquer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Masquer le bouton de fermeture de l'onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Masquer la numérotation des onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Masquer le bouton d'options d'onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Masquer la fenêtre en cas de perte de focus\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Masque le terminal arrimé lorsque vous cliquez en dehors.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Page d'accueil\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Hôte\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Clé de l'hôte\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Vérification de la clé de l'hôte\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Raccourcis clavier\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Comment Tabby se présente à travers les variables d'environnement\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Hôte proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Port du proxy HTTP\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Icône\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamique\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Si désactivé, seuls les profils personnalisés apparaîtront dans le sélecteur de profil\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Echo local immédiat des saisies clavier\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Augmenter la taille de la séparation horizontale\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Augmenter la taille de la séparation verticale\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Saisir\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"La saisie est envoyée pendant la frappe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Mode de saisie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Entrée de nouvelles lignes\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Installé\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"L'installation de la mise à jour fermera tous les onglets et redémarrera Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Ctrl-C intelligent (copier/annuler)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interactif\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Syntaxe non valide\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Hôte de rebond\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Aller au mot suivant\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Aller au mot précédent\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Conserver\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Intervalle de signal de vie (millisecondes)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Toujours garder au premier plan le terminal arrimé\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Clé\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Échange de clés\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Clavier\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Authentification interactive au clavier\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Fermer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Langue\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Dernière empreinte de la clé d'hôte connue\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Lancer WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Lancer WinSCP pour la session SSH actuelle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Apprenez comment permettre à Tabby de détecter le répertoire de travail distant.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Gauche\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Laisser le shell gérer la Méta Key à la place de l'OS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Mode clair\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Ligne par ligne\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Éditeur de ligne, l'entrée est envoyée après avoir appuyé sur Entrée\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Interligne\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Chargement\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Chargement des configurations ...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Local\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Écho local\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminal local\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Scripts de connexion\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Clic long pour le menu contextuel\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Gérer les profils\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Nombre maximum de signaux de vie\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximiser le volet actif\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Ratio de contraste minimum\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Modifié le {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Souris\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Déplacer l'onglet vers la gauche\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Déplacer l'onglet vers la droite\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Déplacer vers \\\"Dégroupé\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Faire glisser la souris sur un volet inactif pour l'activer\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nom\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nom de la nouvelle configuration\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nom du nouveau répertoire\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Natif\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nouveau\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nouvel onglet admin\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nouvelle configuration sur {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nouveau nom de groupe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nouvel élément\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nouveau nom\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nouveau profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nouveau groupe de profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nom du nouveau profil\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nouvel onglet\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nouvel onglet: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nouveau terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nouvelle fenêtre\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nouvelle fenêtre\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nouveau avec profil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Onglet suivant\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Aucune couleur\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Aucun modificateur\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Aucun\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Épaisseur de police normale\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Non trouvé\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Notifier en cas d'activité\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Notifier une fois terminé\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Nombre de lignes conservées dans le tampon\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Désactivé\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Officiel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Sur les discussions GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Fermer l'onglet uniquement lorsque la session est explicitement terminée\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacité\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Ouvrir les Outils Développeur\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Ouvrir les paramètres\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Ouvrir l'onglet Paramètres: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Ouvrir le panneau SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Optionnel\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Options\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Orange\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Valeur par défaut de l'OS\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Valeur par défaut de l'OS ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"La sortie est affichée comme un dump hexadécimal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"La sortie est affichée telle qu'elle est reçue\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Mode de sortie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Sortie des nouvelles lignes\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Remplacer l'affichage X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Écraser la configuration locale et synchroniser\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Écraser la configuration distante et synchroniser\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Écraser la configuration distante et démarrer la synchronisation ?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Écraser la configuration locale et démarrer la synchronisation ?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Redimensionner le panneau avec ce pas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Panneaux\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papier (héritage)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parité\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"La synchronisation partielle de la configuration n'est pas possible lorsque la configuration est dans le coffre chiffré.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Passage à travers\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Phrase de passe pour une clé privée avec le hachage {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Mot de passe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Coller\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Coller depuis le presse-papier\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Coller si rien n'est sélectionné, sinon copier\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Coller plusieurs lignes ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Coller avec le clic du milieu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Chemin ou adresse du socket X11 local\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Épingler\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Extensions\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Dossier des extensions\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port ouvert\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Ports\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Appuyez sur n'importe quelle touche pour vous reconnecter\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Appuyez sur la touche maintenant\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Empêche la fermeture accidentelle\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Empêche l'exécution accidentelle de commandes collées\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Onglet précédent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Clés privées\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Processus terminé\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nom du profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profils\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profils et connexions\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Application\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Commande du proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Violet\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Place toute la configuration de Tabby dans le coffre\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Connexion Rapide\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Quitter\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Connexion socket Raw\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Délai d'attente (Millisecondes)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Récent\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Reconnecter\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Reconnecter l'onglet actuel (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rouge\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Expression régulière\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Notes de version\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"S'en souvenir pendant {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Distant\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Supprimer les espaces et les sauts de lignes autour du texte copié\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Renommer\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Renommer l’onglet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Rendu\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Rouvrir le dernier onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Remplacer\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Signaler un problème\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Presser une touche pour rendre les liens cliquables\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Réinitialiser le zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Redémarrer la session série actuelle\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Redémarrer la session SSH actuelle\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Redémarrer la session Telnet actuelle\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Redémarrer l'onglet\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Redémarrez l'application pour appliquer les modifications\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Restaurer les paramètres par défaut ?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Restaurer les paramètres par défaut hérités ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Restaurer les onglets ouverts au démarrage de l'application\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Réutiliser la session pour plusieurs onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Droite\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Clic droit\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Exécuter en tant qu'administrateur\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Enregistrer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Enregistrer le mot de passe dans le coffre\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Enregistrer et appliquer\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Enregistrer en tant que profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Enregistrer la disposition en tant que profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Enregistré\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Disposition enregistrée\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Défiler lors de la frappe\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Défiler le terminal une page vers le bas\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Défiler terminal une page vers le haut\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Défiler le terminal vers le bas\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Défiler le terminal vers le haut\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Tampon de défilement arrière\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Descend en bas du terminal lors de la saisie utilisateur\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Rechercher\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Rechercher un schéma de couleurs\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Rechercher dans les raccourcis\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Rechercher dans les extensions\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Jeton secret de synchronisation\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Sélectionner\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Sélectionnez un profil de base à utiliser comme modèle\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Tout sélectionner\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Sélectionner le stockage de fichiers\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Sélectionner un profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Sélectionnez un profil ou entrez une adresse\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Envoyer des octets en tapant des valeurs hexadécimales\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Envoie des données un octet à la fois\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Port Série\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Connexion via Port Série\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Port Série: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Définir le mot de passe maître\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Définir la phrase secrète\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Définir le mot de passe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Définir Tabby comme %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Indiquer 0 pour désactiver les profils récents\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Définit le chemin du named pipe de l'agent SSH.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Paramètres\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"L'interpréteur de commandes ne prend pas en charge la détection du chemin courant\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Intégration au menu contextuel\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Afficher\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Afficher le sélecteur de profil {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Afficher une boîte de confirmation lors du collage de plusieurs lignes\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Afficher les profils intégrés dans le sélecteur\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Afficher le sélecteur de commande\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Ouvrir l'emplacement du fichier de configuration\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Afficher les valeurs par défaut\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Afficher le mixeur\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Afficher les libellés du panneau (pour réorganiser)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Afficher l'icône de profil sur l'onglet\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Afficher le sélecteur de profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Afficher les profils récents dans le sélecteur\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Afficher les notes de version\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Afficher les connexions série\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Afficher les onglets en mode plein écran\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Afficher la barre d'outils\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Afficher le contenu du coffre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Mode Sixel supporté (expérimental)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Ne pas afficher le message du jour (MoTD) ni la bannière\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Avance lente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Colle la fenêtre sur un côté de l'écran\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"Proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Hôte proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Port proxy SOCKS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Son\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Code source\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Espacement\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Diviser\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Diviser vers le bas\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Diviser vers le bas\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Diviser vers la gauche\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Diviser vers la droite\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Diviser vers le haut\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Diviser vers le haut\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Connexion SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"La gestion des connexions SSH se fait maintenant via l'onglet \\\"Profils et connexions\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Mot de passe SSH pour {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standard (hérité)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Démarrage\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Bits d'arrêt\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Retirer\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Souscrire aux mises à jour\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Substitutions autorisées.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Changer le mode de couleur\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Changer de profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Changer de profil dans le volet actif\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Remplacer l'implémentation du terminal utilisateur (expérimental)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synchroniser\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Synchroniser automatiquement\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Hôte de synchronisation\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Synchroniser les raccourcis clavier\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Synchroniser le coffre\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Synchroniser les réglages de fenêtres\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Onglet {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Activité de l'onglet\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby n'a pas pu démarrer avec vos extensions, tous les plugins tiers ont été désactivés dans cette session. L'erreur était :\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Actualités et mises à jour de Tabby sur Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Emplacement des onglets\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Largeur des onglets\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Session Telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Arrière-plan du terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Bip du terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identification du terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Merci d'avoir téléchargé Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Thème\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Il y a des transferts de fichiers actifs\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Il y a un mot de passe enregistré pour cette connexion\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Ceci s'applique à tous les profils d'un type donné\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Ceci s'applique à tous les profils d'un type donné dans ce groupe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Compact\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Cochez cette case si vous rencontrez des problèmes d'aliasing, de dédoublement ou d'autres problèmes visuels\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Entrer ou sortir du mode plein écran\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Activer/désactiver le dernier onglet\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Basculer avec le dernier onglet\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Afficher ou masquer la fenêtre de Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"En haut\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Retirer les blancs et les nouvelles lignes\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Réessayer\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Tente d'utiliser le mot de passe enregistré\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Transformer les panneaux de l'onglet actuel en autant d'onglets séparés\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Sans groupe\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Désinstaller\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Inconnu\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Secret inconnu de type {type} pour {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Désépingler\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Haut\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Mise à jour\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Mise à jour vers {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Envoyer\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Envoyer en tant que nouvelle configuration\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Utiliser {altKeyName} comme clé Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Utiliser ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Valeurs utilisateur par défaut\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nom d'utilisateur\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Utiliser la méthode CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Utiliser le mot de passe prédéfini\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Coffre-fort\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Le coffre-fort est un conteneur chiffré en permanence contenant des secrets tels que des mots de passe SSH et une phrase de passe de clé privée.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Le coffre est vide\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Le coffre est verrouillé\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Le coffre n'est pas configuré\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Un mot de passe maître doit être défini pour permettre le stockage de secrets dans le coffre\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Vérifier les clés d'hôte lors de la connexion\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Version : {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Couleurs vives\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visuel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Avertir en cas de collage de plusieurs lignes\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Avertir lors de la fermeture de connexions actives\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Attention : la clé de l'hôte distant a soudainement changé !\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Nous ne collectons que la version de Tabby et celle de l'OS.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Bienvenue\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Quoi de neuf\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Quand une session se termine\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Lorsque cette option est activée, les liens ne sont cliquables que lorsque vous maintenez cette touche enfoncée\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Lorsque WinSCP est détecté, vous pouvez lancer une session SCP à partir du menu contextuel.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Indique si une fenêtre personnalisée ou une fenêtre native de l'OS doit être utilisée\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Empêchera l'affichage du message de salutation SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Fenêtre\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimension de la fenêtre le long du bord\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimension de la fenêtre loin du bord\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Cadre de fenêtre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Fenêtres\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 version 18309 ou supérieure est recommandé pour ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Chemin vers WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Séparateurs de mots\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Répertoire courant\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Détection du répertoire courant\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Le son du terminal WSL ne peut être mise en sourdine que via le mixeur de volume\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"Le terminal WSL ne prend en charge que TrueColor avec ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Transfert X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Jaune\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Vous pouvez le changer plus tard, mais il n'est pas récupérable s'il est oublié.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Vous pourriez être actuellement sous le coup d'une attaque de type man-in-the-middle ou bien la clé de l'hôte pourrait avoir été modifiée.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Zoom avant\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Zoom arrière\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamique\"\n\n"
  },
  {
    "path": "locale/hr-HR.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: hr\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Croatian\\n\"\n\"Language: hr_HR\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"„{command}” se još uvijek u izvodi. Zatvoriti?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"kopija {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Obitelj fontova za prikaz nedostajućih znakova u glavnom fontu\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Prekini sve\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Prihvati i zapamti ključ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Prihvati samo ovaj put\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Pristupačnost\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Pozadina u boji akrila\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Dodaj\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Dodaj prosljeđujući priključak\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Dodaj privatni ključ\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Dodaj …\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Dodatni razmak između redaka\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Napredno\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Proslijeđivanje agenta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Staza procesa agenta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Vrsta agenta\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Omogućuje otvaranje .bat datoteka u karticama, ali kvari neke ljuske\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Omogućuje brzo otvaranje terminala u odabranoj mapi\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Uvijek tamno\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Uvijek svijetlo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Izgled\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Postavke programa\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Stvarno želiš zatvoriti Tabby? Ovaj upit možeš deaktivirati u Postavke -> Prozor.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Sigurno?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumenti\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Postavi pitanje\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Pitaj prije zatvaranja kartice preglednika\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Zvukovi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Način autentifikacije\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automatski\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Automatski otvori terminal tijekom pokretanja programa\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatski\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatska aktualiziranja\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Automatski prenesi promjene i traži nove verzije svake minute\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Dostupno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Vrsta pozadine\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Brzina prijenosa\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Početak retka\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Titranje kursora\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Plava\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Zamuti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Podebljani font\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Dolje\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Umetanje sadržaja u uglatim zagradama (zahtijeva podršku školjke)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Broadcast-Modus. Za prekid pritisni bilo gdje.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Ugrađeno\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Odustani\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Promijeni brzinu prijenosa\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Promijeni boju kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Promijeni tekstualnu master lozinku\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Traži nove verzije\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Šifre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Isprazni\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Isprazni popis nedavnih profila\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Isprazni terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Isprazni terminal nakon povezivanja\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Međuspremnik\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Zatvori\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Zatvori i više nemoj prikazati\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Zatvori aktivnu ploču\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Zatvori druge kartice\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Zatvori karticu\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Zatvori kartice prema lijevo\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Zatvori kartice prema desno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Zatvori prozor nakon zatvaranja zadnje kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Boja\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Shema boja\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Sheme boja\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Boje\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Sjedini sve karticu u trenutačno aktivnu karticu\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Naredbeni redak\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Umjesto mrežne veze koriste se standardni unos/sandardni rezultat (stdin/stdout) naredbe\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Naredbe\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompaktno (zastarjelo)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfiguracija je izbrisana\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfiguracija preuzeta\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Datoteka konfiguracije\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Sinkronizacija konfiguracije\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfiguracija prenesena\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfiguracije\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Poveži se putem proxy poslužitelja\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Poveži se na „%s” …\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Najprije se poveži s jednim drugim host računalom i koristi ga kao proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Povezivanje\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Veza\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Veza neuspjela: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Umjesto toga će se koristiti ime veze\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Kontekstni izbornik\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Kontrolira količinu prostora između elemenata\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Kopirano\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopiraj\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Kopiraj trenutačnu stazu\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopiraj potpunu stazu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopiraj nakon odabiranja\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Kopiraj u međuspremnik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopiraj s formatiranjem\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Neuspjelo dešifriranje konfiguracije\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Stvori\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Stvori mapu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Trenutačno\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Trenutačna shema boja\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Trenutačna šifra ključa host računala\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Tenutačni postupak: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Oblik kursora\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Prilagođeno\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Prilagođeni CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Tamni modus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bitovi podataka\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Otklanjanje grešaka\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Smanji veličinu vodoravne podjele\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Smanji veličinu okomite podjele\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Standardni profil za nove kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Postavke standardnog profila grupe\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Postavke standardnog profila\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Standardne vrijednosti\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Standardne vrijednosti za {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Izbriši\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Izbrisati „{name}”?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Izbrisati {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Izbriši cijeli redak\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Izbriši sljedeću riječ\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Izbriši prethodnu riječ\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Izbrisati konfiguraciju na udaljenom uređaju?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Izbrisati profile ove grupe?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Ukloniti ovu skriptu?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Izbrisati sadržaj trezora?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Briše se\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Uređaj\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direktno\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Deaktiviraj\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Deaktiviraj dinamički naslov kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Deaktiviraj transparentnu pozadinu prilikom povlačenja prozora\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Deativiraj ubrzanje grafičkog procesora\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Deaktivirano\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Odspoji\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Odspoji trenutačnu karticu (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Odspojiti se od računala {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Prikaži slike putem Sixel escape sekvenci\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Ekran uključen\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Nemoj prekinuti\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Nemoj zatvoriti\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Nemoj zapamtiti\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Prikvači uvijek gore\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Prikvači terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Veličina prikvačenog terminala\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Područje prikvačenog terminala\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Prikvačivanje\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Označavanje teksta dvostrukim pritiskom miša zaustavit će se pri ovim znakovima\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Dolje\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Preuzmi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Crtaj podebljani tekst svijetlim bojama\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Dupliciraj\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Dupliciraj kao administratora\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Dupliciraj karticu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Uredi\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Uredi lokalno\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Aktiviraj\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Aktiviraj analitikčke podatke\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Aktiviraj animacije\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Akiviraj automatsko instaliranje novih verzija kad postanu dostupne.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Omogući opciju tečne pozadine\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Aktiviraj ligature fontova\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Aktiviraj globalne prečace (Ctrl-razmaknica)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Aktiviraj eksperimentalni Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Šifriraj datoteku konfiguracije\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Kraj retka\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Okruženje\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Izbriši konfiguraciju\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Izbriši trezor\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Greška u {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Točno podudaranje\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Primjer:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Eksperimentalni stil pozadine sustava Windows 10 je poznat da uzrokuje probleme\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Izvezi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Rezervni font\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Prijenosi datoteka\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Datoteka: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fiksno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Transparentna pozadina ponekad uzrokuje kašnjenje iscrtavanja prilikom povlačenja prozora\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Postavi sve ploče kao aktivne\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Postavi sve ploče kao aktivne odjednom (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Postavi sve kartice kao aktivne\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Postavi sve kartice kao aktivne odjednom (broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Fokusiranje prati miša\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Postavi sljedeću ploču kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Postavi ploču {number} kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Postavi prethodnu ploču kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Postavi gornju ploču kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Postavi donju ploču kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Postavi lijevu ploču kao aktivnu\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Postavi desnu ploču kao aktivnu\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Slijedi shemu boja\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Font\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Za tipkovne prečace\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Prisili CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Prisili CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Prisili LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Forsira određenu vrstu veze SSH agenta.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Zaboravi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Proslijedi priključak\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Proslijeđeni priključci\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Iz sheme boja\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Od sustava\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Iz teme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Sučelje\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Potpuno\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Opće\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Generiraj unaprijed ispunjeni GitHub problem\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Preuzmi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Preuzmi iz prozora Tabby-web postavki\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Daje prozoru zamućenu prozirnu pozadinu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Idi gore\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Zelena\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupa\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacks\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Pomogni pratiti broj Tabby instalacija diljem svijeta!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Pomogni prevoditi Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Heksadecimalni\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Sakrij\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Sakrij gumb za zatvaranje kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Sakrij indeks kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Sakrij gumb za opcije kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Sakrij prozor kad nije aktivan\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Skriva prikvačeni terminal kad pritisneš negdje drugdje.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Naslovnica\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host računalo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Ključ host računala\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Provjera ključa host računala\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Tipkovni prečaci\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Kako se Tabby predstavlja kroz različita okruženja\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP proxy host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP proxy priključak\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikona\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamic\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Ako je deaktivirano, u biraču profila prikazat će se samo prilagođeni profili\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Odmah lokalno odgovara tvoj unos\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Povećaj veličinu vodoravne podjele\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Povećaj veličinu okomite podjele\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Unos\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Unos se šalje tijekom tipkanja\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modus unosa\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Upiši nove retke\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Instalirano\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Instaliranjem nove verzije zatvorit će se sve kartice i Tabby će se ponovo pokrenuti.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Inteligenti Ctrl-C (kopiraj/prekini)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktivno\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Neispravna sintaksa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"„Jump” host računalo\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Skoči na sljedeću riječ\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Skoči na prethodnu riječ\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Zadrži\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Interval održavanja (milisekunde)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Zadrži prikvačeni terminal uvijek ispred ostalih prozora\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Tipka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Zamjena tipki\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Tipkovnica\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autentifikacija interaktivnom tipkovnicom\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Prekini naredbu\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Jezik\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Zadnja poznata šifra ključa host računala\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Pokreni WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Pokreni WinSCP za trenutačnu SSH sesiju\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Saznaj kako dopustiti Tabbyju da otkrije radnu mapu udaljene ljuske.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Lijevo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Omogućuje ljusci baratanje meta-tipkom umjesto OS-a\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Svijetli modus\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Redak po redak\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Uređivač redaka, unos se šalje nakon što pritisneš tipku Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Odmaci redaka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Učitavanje\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Učitavanje konfiguracija …\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokalno\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokalni odgovor\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Lokalni terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Skripta za prijavu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Pritisni dugo za kontekstni izbornik\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Upravljaj profilima\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maksimalni broj intervala održavanja\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maksimalno proširi aktivnu ploču\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Najmanji omjer kontrasta\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Promijenjeno {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Miš\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Premjesti karticu lijevo\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Premjesti karticu desno\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Premjesti u „Negrupirani”\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Pomicanje miša preko neaktivne ploče aktivirat će ju\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Ime\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Ime nove konfiguracije\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Ime nove mape\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Izvorni\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nova\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Kartica za novog administratora\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nova konfiguracija na {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Novo ime grupe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Novi element\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Novo ime\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Novi profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Ime novog profila\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nova kartica\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nova kartica: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Novi terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Novi prozor\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Novi prozor\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Novi s profilom\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Sljedeća kartica\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Bez boje\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Bez modifikatora\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ništa\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normalno\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Normalna debljina fonta\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Nije nađeno\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Obavijesti prilikom aktivnosti\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Obavijesti kad ja gotovo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Broj redaka zadržanih u predmemoriji\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Isključi\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Službeno\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Na GitHub diskusijama\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Neprozirnost\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Otvori alate za razvoj\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Otvori postavke\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Otvori karticu postavki: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Otvori SFTP ploču\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opcionalno\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opcije\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Narančasta\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Standard sustava\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Standard sustava ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Rezultat se prikazuje u heksadecimalnom obliku\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Rezultat se prikazuje po primanju\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Modus rezultata\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Ispiši nove retke\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Prepiši X11 ekran\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Prepiši lokalnu konfiguraciju i sinkroniziraj\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Prepiši udaljenu konfiguraciju i sinkroniziraj\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Prepisati konfiguraciju na udaljenoj strani i započeti sinkronizaciju?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Prepisati lokalnu konfiguraciju i započeti sinkronizaciju?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Korak mijenjanja veličine ploče\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Ploče\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papir (zastarjelo)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paritet\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Djelomično sinkroniziranje konfiguracije nije moguće kad je konfiguracija šifrirana putem trezora.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Tekstualna lozinka za privatni ključ s hashem {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Lozinka\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Umetni\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Umetni iz međuspremnika\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Umetni ako ništa nije odabrano, inače kopiraj\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Umetnuti višestruke retke?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Umetni pritiskom srednjeg gumba miša\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Staza ili adresa lokalne X11 utičnice\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Prikvači\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Dodaci\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Mapa dodataka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Priključak\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Priključak otvoren\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Priključci\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Pritisni bilo koju tipku za ponovno povezivanje\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Pritisni tipku sada\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Sprečava slučajno zatvaranje\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Sprečava slučajno izvršavanje umetnutih naredbi\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Prethodna kartica\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Privatni ključevi\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Postupak završen\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Ime profila\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profili\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profili i veze\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Proxy naredba\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Ljubičasta\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Stavlja svu konfiguraciju programa Tabby u trezor\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Brzo povezivanje\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Zatvori program\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Veza raw utičnice\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Istek vremena spremnosti (milisekunde)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Nedavni\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Ponovo spoji\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Ponovo poveži trenutačnu karticu (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Crvena\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regularni izraz\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Napomene uz izdanje\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Zapamti {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Udaljeni repozitorij\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Ukloni razmake/tabulatore i nove retke okolo kopiranog teksta\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Preimenuj\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Preimenuj karticu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Iscrtavanje\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Ponovo otvori zadnju karticu\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Zamijeni\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Prijavi problem\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Zatraži tipku za pritiskanje poveznica\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Izvorno uvećanje\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Ponovo pokreni sesiju serijske veze\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Ponovo pokreni SSH sesiju\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Ponovo pokreni Telnet sesiju\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Ponovo pokreni karticu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Za primjenu promjena ponovo pokreni program\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Obnoviti na standardne postavke?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Obnoviti postavke na naslijeđene standardne vrijednosti?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Obnovi kartice terminala tijekom pokretanja programa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Ponovo koristi sesiju za više kartica\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Desno\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Pritiskanje desne tipke miša\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Pokreni kao administrator\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Spremi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Spremi lozinku u privjesak ključeva\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Spremi i primijeni\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Spremi kao profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Spremi raspored kao profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Spremljeno\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Spremljeni raspored\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Pomakni nakon unosa\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Pomakni terminal jednu stranicu prema dolje\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Pomakni terminal jednu stranicu prema gore\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Pomakni terminal na kraj\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Pomakni terminal na početak\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Pomicanje unatrag\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Pomiče terminal na kraj nakon unosa korisnika\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Pretraga\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Pretraži sheme boja\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Pretraži tipkovne prečace\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Pretraži dodatke\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Tajni token za sinkronizaciju\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Odaberi\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Odaberi osnovni profil koji će se koristiti kao predložak\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Odaberi sve\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Odaberi spremište datoteka\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Odaberi profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Odaberi profil ili upiši e-mail adresu\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Šalji bajtove upisivanjem heksadecimalnih vrijednosti\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Šalje podatke bajt po bajt\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serijska veza\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Serijska veza\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serijska veza: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Postavi tekstualnu master lozinku\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Postavi tekstualnu lozinku\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Postavi lozinku\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Postavi Tabby kao %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Postavi na 0 za dekativiranje nedavnih profila\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Postavlja imenovanu stazu procesa SSH agenta.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Postavke\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Ljuska\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Ljuska ne podržava trenutačno otkrivanje staze\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integracija ljuske\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Prikaži\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Prikaži selektor profila „{type}”\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Prikaži prozor za potvrdu prilikom umetanja više redaka\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Prikaži ugrađene profile u selektoru\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Prikaži selektor naredbe\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Prikaži datoteku konfiguracije\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Prikaži standardne vrijednosti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Prikaži mikser\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Prikaži oznake prozora (za preuređivanje)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Prikaži ikonu profila na kartici\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Prikaži selektora profila\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Prikaži nedavne profile u selektoru\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Prikaži napomene uz izdanje\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Prikaži serijske veze\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Prikaži kartice u cjeloekranskom prikazu\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Prikaži alatnu traku\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Prikaži sadržaj trezora\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Podrška za Sixel slike (eksperimentalno)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Preskoči MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Slow feed\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Privlači prozor na jednu stranu ekrana\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy host računalo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxy priključak\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Zvuk\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Izvorni kod\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Razmak\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Podijeli\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Podijeli prema dolje\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Podijeli prema dolje\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Podijeli na lijevo\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Podijeli na desno\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Podijeli prema gore\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Podijeli prema gore\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH veza\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH vezom se sada upravlja u kartici „Profili i veze”\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH lozinka za {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standardno (zastarjelo)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Pokretanje\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Bitovi prekida\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Ukloni\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Pretplati se na nove verzije\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Zamjene su dozvoljene.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Promijeni shemu boja\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Zamijeni profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Zamijeni profil u trenutačnoj ploči\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Zamjenjuje implementaciju sučelja terminala (eksperimentalno)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sinkronizraj\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sinkronizraj automatski\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Sinkronizraj host računalo\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sinkronizraj tipkovne prečace\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sinkronizraj trezor\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sinkronizraj postavke prozora\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Kartica {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Aktivnost kartice\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby se nije mogao pokrenuti s tvojim dodacima, stoga su svi strani dodaci deaktivirani u ovoj sesiji. Greška je bila:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Tabby novosti i nove verzje na Twitteru\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Kartice\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Mjesto kartica\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Širina kartica\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet sesija\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Pozadina terminala\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Zvono terminala\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identifikacija terminala\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Zahvaljujemo na preuzimanju programa Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Postoje aktivni prijenosi datoteka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Postoji spremljena lozinka za ovu vezu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Primjenjuju se na sve profile zadane vrste\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Primjenjuju se na sve profile zadane vrste u ovoj grupi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Tanko\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Označi ovo ako se pojave vizualni problemi\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Uključi/isključi cjeloekranski prikaz\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Uključi/isključi zadnju karticu\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Uključi/isključi prozor terminala\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Uključuje/isključuje vidljivosti Tabby prozora\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Gore\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Ukloni razmake/tabulatore i nove retke\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Pokušaj ponovo\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Pokušaj spremljene lozinke\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Pretvori ploče trenutačne kartice u zasebne kartice\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Negrupirani\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Deinstaliraj\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Nepoznato\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Nepoznata tajna vrste {type} za {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Otkvači\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Gore\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Aktualiziraj\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Nadogradi na {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Prenesi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Prenesi kao novu konfiguraciju\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Koristi {altKeyName} kao meta-tipku\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Koristi ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Korisnički standard\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Korisničko ime\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Koristi CONNECT metodu\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Korištenje predodređene lozinke\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Trezor\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Trezor je uvijek šifrirani spremnik za tajne kao što su SSH lozinke i tekstualne lozinke privatnog ključa.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Trezor je prazan\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Trezor je zaključan\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Trezor nije konfiguriran\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Za spremanje tajni, tekstualna master lozinka trezora mora biti postavljena\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Provjeri ključeve host računala prilikom povezivanja\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Verzija\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Verzija: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Svjetlost\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Prikaz\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Upozori prilikom umetanja više redaka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Upozori pri zatvaranju aktivnih veza\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Upozorenje: ključ udaljenog host računala iznenada se promijenio!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Pratimo samo tvoje verzije Tabbyja i OS-a.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Dobrodošlica\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Novosti\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Kada sesija završi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Kad je aktivirano, veze se mogu pritisnuti samo dok držiš ovu tipku\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Kad se otkrije WinSCP, SCP sesiju možeš prekinuti iz kontekstualnog izbornika.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Da li koristiti prilagođeni prozor ili izvorni prozor OS-a\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Spriječit će pojavljivanje SSH pozdrava\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Prozor\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimenzija prozora uz rub\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimenzija prozora od ruba\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Okvir prozora\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Za ConPTY se preporučuje Windows 10 gradnja 18309 ili novija\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP staza\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Znakovi razdvajanja riječi\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Radna mapa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Otkrivanje radne mape\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Zvono WSL terminala može se isključiti samo putem miksera glasnoće\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL terminal podržava samo TrueColor s ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Proslijeđivanje X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Žuta\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Može se kasnije promijeniti, ali ne ne može obnoviti ako se zaboravi.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Možda se veza trenutačno nalazi pod napadom (man-in-the-middle attack) ili je ključ host računala jednostavno promijenjen.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Uvećaj prikaz\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Umanji prikaz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamic\"\n\n"
  },
  {
    "path": "locale/id-ID.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: id\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Indonesian\\n\"\n\"Language: id_ID\\n\"\n\"PO-Revision-Date: 2025-01-22 22:02\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" masih berjalan. Tutup?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} salin\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Keluarga huruf kedua digunakan untuk menampilkan karakter yang hilang di huruf utama\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Batalkan semua\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Terima dan ingat kunci\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Terima kali ini saja\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Aksesbilitas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Latar belakang akrilik\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Tambah\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Tambah port forward\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Tambah kunci pribadi\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Tambah...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Ruang tambahan antar baris\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Lanjutan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Penerusan agen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Jalur pipa agen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Jenis agen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Izinkan membuka berkas .bat di tab, tapi memecahkan beberapa shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Izinkan buka dengan cepat terminal di direktori terpilih\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Selalu gelap\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Selalu terang\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Tampilan\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplikasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Pengaturan aplikasi\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Anda yakin ingin menutup Tabby? Anda bisa menonaktifkan prompt ini di Pengaturan -> Jendela.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Anda yakin?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Berikan pertanyaan\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Tanya sebelum tutup tab peramban\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Terdengar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Metode otentikasi\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Pencipta\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Otomatis\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Otomatis buka terminal saat memulai aplikasi\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Otomatis\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Pembaruan Otomatis\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Otomatis unggah perubahan dan cek pembaruan setiap menit\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Tersedia\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Jenis latar belakang\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Baud rate\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Awal baris\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Kursor berkedip\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Biru\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Buram\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Ukuran ketebalan huruf\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Bawah\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Tempel tanda kurung (butuh dukungan shell)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Bawaan\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Batal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Ubah baud rate\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Rubah warna label\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Ubah frasa sandi utama\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Cek pembaruan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Sandi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Bersihkan\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Bersihkan profil terbaru\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Bersihkan terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Bershikan terminal setelah koneksi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Papan clip\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Tutup\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Tutup dan jangan tampilkan lagi\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Tutup panel fokus\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Tutup tab lain\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Tutup tab\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Tutup tab ke kiri\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Tutup tab ke kanan\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Warna\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Skema warna\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Warna Skema\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Warna-warna\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Gabungkan semua tab ke tab saat ini\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Baris perintah\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Perintah stdin/stdout digunakan sebagai pengganti koneksi jaringan\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Perintah-perintah\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Padat (tua)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfigurasi telah dihapus\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfigurasi diunduh\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Berkas konfigurasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Sinkronisasi konfigurasi\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfigurasi diunggah\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfigurasi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Terhubung melalui server proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Hubungkan ke \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Hubungkan ke host yang berbeda terlebih dahulu dan gunakan sebagai proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Menghubungkan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Koneksi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Koneksi gagal: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Nama koneksi akan digunakan sebagai gantinya\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu konteks\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Disalin\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Salin\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Salin jalur saat ini\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Salin alamat lengkap\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Salin pada saat pilih\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Salin ke papan klip\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Salin dengan formatting\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Tidak bisa mendekripsi konfigurasi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Buat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Buat direktori\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Saat ini\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Skema warna saat ini\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Sidik jari kunci host saat ini\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Proses saat ini: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Bentuk kursor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Kustom\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS khusus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Data bits\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Men-debug\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Kurangi ukuran pemisahan horizontal\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Kurangi ukuran pemisahan vertical\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Profil bawaan untuk tab baru\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Pengaturan profil bawaan\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Bawaan\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Bawaan untuk {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Hapus\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Hapus \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Hapus {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Hapus seluruh baris\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Hapus kata selanjutnya\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Hapus kata sebelumnya\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Hapus profil grup?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Hapus skrip ini?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Hapus konten vault?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Menghapus\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Perangkat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Langsung\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Matikan\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Matikan judul tab dinamis\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Nonaktifkan latar belakang yang lancar saat menyeret\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Matikan akselerasi GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Dinonaktifkan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Putuskan\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Putuskan dari {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Tampil pada\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Jangan dibatalkan\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Jangan tutup\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Jangan ingat\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Kait selalu diatas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Kaitkan terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Kaitkan ukuran terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Kaitkan ruang terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Mengaitkan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Pilihan klik dua kali akan berhenti di karakter ini\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Turun\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Unduh\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Menampilkan teks tebal dalam warna cerah\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplikasi\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplikat sebagai administrator\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplikat tab\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Sunting\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Sunting Lokal\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Izinkan\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Izinkan analitik\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Aktifkan animasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Aktifkan penginstalan pembaruan otomatis saat tersedia.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Aktifkan ligatur font\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Aktifkan hotkey global (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Mengaktifkan Windows ConPTY API eksperimental\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Enkripsi berkas konfigurasi\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Baris akhir\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Lingkungan\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Hapus konfigurasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Hapus vault\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Eror di {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Paling cocok\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Contoh:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Ekspor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Font cadangan\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Transfer berkas\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Berkas: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Saring\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Tetap\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Latar belakang yang lancar terkadang menyebabkan kelambatan seret\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Fokuskan semua panel\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Fokuskan semua panel sekaligus (siaran)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Fokuskan panel berikutnya\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Fokuskan panel sebelumnya\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Fokuskan panel di atas\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Fokuskan panel di bawah\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Fokuskan panel di kiri\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Fokuskan panel di kanan\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Ikuti Sekema Warna\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Font\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Untuk pintasan keyboard\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Paksakan CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Paksakan CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Paksakan LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Memaksa jenis koneksi agen SSH tertentu.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Lupakan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Port penerusan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Port diteruskan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Dari skema warna\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Dari tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Tampilan Depan\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Penuh\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Umum\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Buat pra-diisi isu di GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Dapatkan\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Dapatkan dari jendela pengaturan Web Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Beri jendela latar belakang transparan buram\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Naik\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Hijau\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grup\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Peretasan\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Bantu lacak jumlah pemasangan Tabby di seluruh dunia!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Bantu terjemahkan Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Heksadesimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Sembunyikan tombol tutup tab\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Sembunyikan indeks tab\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Sembunyikan tombol opsi tab\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Sembunyikan jendela saat kehilangan fokus\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Sembunyikan terminal yang terkait saat Anda mengklik.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Beranda\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Kunci host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Kunci verifikasi host\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Pintasan\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Host HTTP proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Port HTTP proxy\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikon\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"id.lebar-tab.dinamis\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Jika dimatikan, hanya profil khusus yang akan tampil di pemilhan profil\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Segera menggemakan masukan Anda secara lokal\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Tingkatkan ukuran pemisahan horizontal\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Tingkatkan ukuran pemisahan vertikal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Masukan dikirim saat Anda mengetik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modus masukan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Masukan garis baru\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Terpasang\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Pemasangan pembaruan akan menutup semua tab dan mengulang kembali Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Ctrl-C cerdas (salin/batal)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktif\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Sintaks tidak sah\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Lompat host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Lompat ke kata berikutnya\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Lompat ke kata sebelumnya\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Tetap\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Interval Tetap Hidup (Milidetik)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Terminal tetap selalu diatas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Kunci\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Bertukar kunci\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Papan ketik\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Otentikasi keyboard-interaktif\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Matikan\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Bahasa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Buka WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Buka WinSCP untuk sesi SSH saat ini\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Pelajari cara mengizinkan Tabby mendeteksi direktori kerja shell jarak jauh.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Kiri\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Biarkan shell menangani kunci Meta daripada OS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Baris per baris\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Editor baris, masukkan dikirim setelah Anda tekan Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Bantalan garis\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Memuat\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Memuat konfigurasi...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Echo Lokal\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminal lokal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Skrip masuk\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Klik lama untuk menu konteks\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Kelola profil\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Diubah pada {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Kursor\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Geser tab ke kiri\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Geser tab ke kanan\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Pindahkan ke \\\"Tanpa Group\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nama\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nama untuk konfigurasi baru\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nama untuk direktori baru\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Asli\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Tab admin baru\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Pengaturan baru di {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Item baru\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nama baru\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Profil baru\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nama profil baru\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Tab Baru\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Tab baru: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Terminal Baru\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Jendela baru\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Jendela Baru\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Buka baru dengan profil tertentu\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Tab selanjutnya\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Tidak berwarna\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Tidak ada modifier\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Tidak ada\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Ketebalan font normal\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Tidak ditemukan\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Beri tahu tentang aktivitas\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Beri tahu saat selesai\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Jumlah baris yang disimpan dalam buffer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Mati\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Resmi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Di Diskusi GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Keburaman\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Buka DevTools\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Buka Pengaturan\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Buka pengaturan tab: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Buka panel SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opsional\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Pilihan\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Oranye\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Default OS\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Default OS ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Output ditampilkan sebagai hexdump\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Luaran ditampilkan layaknya saat diterima\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Mode luaran\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Baris baru luaran\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Ganti tampilan X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Timpa lokal dan sinkronkan\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Timpa jarak jauh dan sinkronkan\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Timpa konfigurasi di sisi jarak jauh dan mulai menyinkronkan?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Timpa konfigurasi lokal dan mulai menyinkronkan?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Langkah mengubah ukuran panel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Panel\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Keseimbangan\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Sinkronisasi konfigurasi parsial tidak dimungkinkan saat konfigurasi dienkripsi melalui Vault.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Frasa sandi untuk kunci pribadi dengan hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Kata sandi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Tempel\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Tempel dari papanklip\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Tempel beberapa baris?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Tempel di klik tengah\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Jalur atau alamat soket X11 lokal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Pin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Plugin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Folder plugin\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port dibuka\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Port\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Tekan tombol apa saja untuk menghubungkan ulang\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Tekan tombol sekarang\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Cegah keluar tak disengaja\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Mencegah eksekusi tidak sengaja dari perintah yang ditempel\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Tab sebelumnya\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proses selesai\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nama profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profil\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profil & koneksi\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Ungu\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Sambung Cepat\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Keluar\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Terbaru\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Sambungkan Kembali\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Merah\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Ekspresi reguler\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Catatan Rilis\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Ingat untuk {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Jarak Jauh\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Ganti Nama\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Ganti nama label\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Rendering\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Buka Kembali Tab Terakhir\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Menggantikan\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Laporkan Masalah\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Perlukan tombol khusus untuk membuka tautan\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Ukuran Semula\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Mulai ulang sesi serial saat ini\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Mulai ulang sesi SSH saat ini\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Mulai ulang sesi Telnet saat ini\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Muat ulang tab\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Mulai ulang aplikasi untuk menerapkan perubahan\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Kembali ke settingan sebelumnya ?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Gunakan sesi untuk banyak tab\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Kanan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Klik kanan\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Jalan sebagai administrator\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Simpan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Simpan password di keychain\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Simpan dan terapkan\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Simpan sebagai profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Simpan tata letak sebagai profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Disimpan\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Tata letak tersimpan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Gulir saat input\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Gulir terminal ke bawah\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Gulir kembali\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Gulir terminal ke bawah saat pengguna meng-input\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Cari\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Cari skema warna\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Cari hotkey\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Cari pluggin\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Token sinkronisasi rahasia\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Pilih\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Pilih profil utama sebagai template\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Pilih semua\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Pilih penyimpanan file\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Pilih profile\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Pilih profile atau masukkan alamat\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Kirim byte dengan mengetik nilai hex\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Kirim data satu byte pada suatu waktu\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serial\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Koneksi serial\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serial: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Buat kata sandi utama\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Buat kata sandi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Buat kata sandi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Atur Tabby sebagai %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Atur ke 0 untuk men-disable profile saat ini\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Pengaturan\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell tidak mendukung deteksi path saat ini\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integrasi Shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Tampilkan {type} selector profile\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Tampilkan dialog konfirmasi ketika menempel banyak baris\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Tampilkan built-in profile di selector\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Tampilkan pemilihan perintah\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Tampilkan file konfigurasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Tampilkan bawaan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Tampilkan Mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Tampilkan ikon profile di tab\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Tampilkan selector profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Tampilkan profil terbaru di selector\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Tampilkan catatan pembaruan\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Bunyi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Kode Sumber\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Bagi\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Membelah ke bawah\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Membelah ke kiri\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Membelah ke kanan\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Membelah ke atas\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Koneksi SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Koneksi SSH sekarang dapat dilakukan melalui Tab \\\"Profil&Koneksi\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Password SSH untuk {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Permulaan\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Berhentikan Bit\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Strip\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Berlangganan untuk memperbarui\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Pergantian diperbolehkan.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Beralih Profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Beralih profil di panel yang aktif\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Gantikan terminal implementasi frontend (Experimetal)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sinkronisasi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sinkron dengan Otomatis\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Sinkron Host\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sinkron Hotkeys\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sinkron Brankas\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sinkron Penganturan Jendela\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Tab {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Aktifitas tab\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby tidak bisa memulai dengan plugin anda, sehingga plugin pihak ketiga telah di nonaktifkan untuk sesi ini. Errornya adalah:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Berita dan Pembaharuan Tabby di Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Tabs\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Lokasi Tabs\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Panjang Tab\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sesi Telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Background Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Bell Terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Terima Kasih telah mengunduh Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Sedang ada transfer file aktif\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Ada password tersimpan untuk koneksi ini\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Ini diterapkan ke seluruh profile dari tipe tersebut\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Tipis\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Centang ini jika anda mengalami aliasing, ghosting atau isu visual lainnya\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Beralih ke mode layar penuh\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"aktifkan tab terakhir\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Aktifkan jendela terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Alihkan visibilitas jendela Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Atas\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Coba Kembali\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Mencoba dengan kata sandi yang tersimpan\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Ubah tab sekarang menjadi tab terpisah\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Bubarkan Grup\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Hapus Aplikasi\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Tidak Diketahui\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Tidak Diketahui tipe secret {type} untuk {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Lepas Sematan\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Perbarui\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Pemutahiran ke {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Unggah\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Unggah sebagai pengaturan baru\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Gunakan {altKeyName} sebagai tombol Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Gunakan ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Gunakan kata sandi yang telah disetel sebelumnya\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Brankas\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Brankas adalah kotak penyimpanan yang selalu dienkripsi, berisi sandi rahasia seperti sandi SSH dan passphrase private key.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Brankas kosong\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Brankas terkunci\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Versi\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Versi: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Peringatkan ketika menempel lebih dari satu baris\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Peringatkan ketika menutup sambungan yang masih aktif\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Kami hanya mencatat versi Tabby dan sistem operasi Anda.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Selamat datang\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Jika diaktifkan, tautan hanya bisa diklik bila tombol ini sedang ditekan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 build 18309 atau lebih baru disarankan untuk ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Pemisah kata\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Direktori kerja\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Kuning\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Perbesar\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Perkecil\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "locale/it-IT.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: it\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Italian\\n\"\n\"Language: it_IT\\n\"\n\"PO-Revision-Date: 2025-01-22 22:02\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" è ancora in esecuzione. Chiudere?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} copia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Un set di caratteri secondario usato per mostrare quelli mancanti del font principale\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Annulla tutto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Accetta e ricorda chiave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Accetta solo questa volta\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Accessibilità\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Sfondo acrilico\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Aggiungi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Configura un inoltro di porta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Aggiungi una chiave privata\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Aggiungi...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Spazio aggiuntivo tra le righe\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avanzate\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Inoltro dell'agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Percorso pipe agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Tipo di agente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Permetti l'apertura di file .bat nelle schede, potrebbe bloccare alcune shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Permetti l'apertura rapida di un terminale nella cartella selezionata\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Sempre scuro\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Sempre chiaro\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Aspetto\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Applicazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Impostazioni applicazione\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Sei sicuro di voler chiudere Tabby? \\n\"\n\"Puoi disabilitare questo avviso in Impostazioni -> Finestra.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Sei sicuro?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argomenti\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Fai una domanda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Chiedi conferma prima di chiudere una scheda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Sonore\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Metodo di autenticazione\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autore\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automatico\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Apertura automatica di un terminale all'avvio dell'app\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatico\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Aggiornamenti automatici\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Carica automaticamente le modifiche e controlla gli aggiornamenti ogni minuto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Disponibile\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Tipo di sfondo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Modalità tasto backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Velocità trasmissione\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Inizio della riga\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Cursore lampeggiante\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Blu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Sfocatura\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Peso del carattere in grassetto\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"In basso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Incolla tra parentesi (richiede una shell che lo supporti)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Modalità broadcast. Fai clic ovunque per disabilitare.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Integrato\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Annulla\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Modifica velocità di trasmissione\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Modifica il colore della scheda\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Modifica la frase segreta principale\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Verifica aggiornamenti\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Crittografie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Azzera\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Cancella profili recenti\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Azzera contenuto terminale\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Azzera contenuto terminale dopo la connessione\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Appunti\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Chiudi\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Chiudi e non visualizzare più\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Chiudi riquadro in evidenza\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Chiudi le altre schede\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Chiudi scheda\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Chiudi schede a sinistra\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Chiudi schede a destra\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Chiude la finestra dopo aver chiuso l'ultima scheda\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Colore\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Tema terminale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Schemi colore\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Colori\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Unisci tutte le schede all'interno della scheda attuale\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Riga di comando\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Viene usato lo stdin/stdout invece di una connessione di rete\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Comandi\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Compatto (legacy)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Configurazione eliminata\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Configurazione scaricata\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"File configurazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Backup configurazione\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Configurazione caricata\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Configurazioni\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Connetti tramite un server proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Connessione a \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Connettiti prima ad un altro host e usalo come proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"In connessione\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Connessione\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Connessione fallita: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Verrà usato il nome della connessione\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu contestuale\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Controlla la quantità di spazio tra gli elementi\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Copiato\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Copia\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Copia percorso attuale\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Copia percorso completo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Copia sulla selezione\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Copia negli appunti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Copia formattazione\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Impossibile decifrare la configurazione\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Crea\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Crea cartella\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Attuale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Tema in uso\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Firma chiave host attuale\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Processo attuale: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Forma cursore\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Personalizzato\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS personalizzato\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Tema scuro\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bit di dati\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Debugging\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Riduci la divisione orizzontale\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Riduci la divisione verticale\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\\\"Connetti a\\\" predefinito\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Tipo di connessione predefinita usato dalla funzione di connessione rapida (es. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Profilo predefinito per le nuove schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Impostazioni predefinite profilo di gruppo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Impostazioni del profilo predefinito\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"PredefinitI\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Predefiniti per {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Elimina\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Vuoi eliminare \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Vuoi eliminare {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Elimina tutta la riga\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Elimina parola successiva\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Elimina parola precedente\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Vuoi eliminare la configurazione sul dispositivo remoto?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Vuoi eliminare i profili del gruppo?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Vuoi eliminare questo script?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Vuoi eliminare il contenuto della cassaforte?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Eliminazione\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Dispositivo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Diretto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Disabilita\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Disabilita il titolo dinamico per la scheda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Disabilita lo sfondo fluente durante il trascinamento\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Disabilita accelerazione GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Disabilitato\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Disconnetti\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Disconnetti la scheda attuale (serial/telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Vuoi disconnetti da {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Visualizza le immagini tramite sequenze di escape di Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Visualizza in\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Non interrompere\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Non chiudere\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Non ricordare\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Visualizza sempre in primo piano\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Aggancia il terminale\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Dimensione del terminale agganciato\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Margine del terminale agganciato\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Aggancia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"La selezione con doppio clic si fermerà a questi caratteri\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"In basso\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Scarica\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Evidenzia il testo in grassetto con colori chiari\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplica\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplica come amministratore\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplica la scheda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Modifica\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Modifica in locale\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Abilita\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Abilita dati analitici\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Abilita animazioni\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Abilita l'installazione automatica degli aggiornamenti quando disponibili.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Abilita opzione di sfondo fluente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Abilita le legature tra font\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Abilita tasto di scelta rapida globale (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Abilita l'API sperimentale di Windows ConPTY\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Cifra il file di configurazione\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Fine della riga\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Ambiente\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Cancella configurazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Cancella cassaforte\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Errore in {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Corrispondenza esatta\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Esempio:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Sfondo sperimentale basati sullo stile di Windows 10, sono noti dei problemi\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Esporta\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Carattere sostitutivo\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Trasferimento file\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"File: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtra\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fissa\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Lo sfondo fluente può causare ritardo nel trascinamento\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Evidenzia tutti i riquadri\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Evidenzia tutti i riquadri contemporaneamente (scrivi su tutti)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Utilizza tutte le schede\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Attiva tutte le schede contemporaneamente (broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Il fuoco segue il mouse\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Evidenzia riquadro successivo\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Metti a fuoco il pannello {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Evidenzia riquadro precedente\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Evidenzia il riquadro sopra\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Evidenzia il riquadro sotto\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Evidenzia il riquadro a sinistra\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Evidenzia il riquadro a destra\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Segui il tema di sistema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Carattere\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Per le scorciatoie da tastiera\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Forza CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Forza CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Forza LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Per la connessione SSH forza un tipo specifico di agente .\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Dimentica\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Inoltra porta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Porte inoltrate\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Dal tema in uso\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Di sistema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Dal tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Piena\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Generale\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Genera una segnalazione GitHub pre-compilata\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Ottieni\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Ottienilo dalla finestra delle impostazioni Web di Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Dona alla finestra una trasparenza sfocata per lo sfondo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Livello superiore\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Verde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Gruppo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hack\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Aiuta a tenere traccia del numero di installazioni di Tabby nel mondo!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Partecipa alla traduzione di Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Esadecimale\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Nascondi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Nascondi pulsante di chiusura schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Nascondi numerazione delle schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Pulsante per nascondere scheda opzioni\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Nascondi la finestra quando in secondo piano\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Nasconde il terminale agganciato quando si fa click fuori.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Pagina home\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Chiave host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Verifica della chiave host\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Tasti scelta rapida\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Come Tabby si presenta attraverso le variabili dell'ambiente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Host proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Porta proxy HTTP\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Icona\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dinamica\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Se disabilitato, solo i profili personalizzati verranno visualizzati nel selettore dei profili\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Riporta immediatamente gli input locali\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Aumenta la divisione orizzontale\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Aumenta la divisione verticale\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Input\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"L'input è inviato mentre digiti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modalità di inserimento\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Input ritorni a capo\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Installato\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"L'installazione dell'aggiornamento chiuderà tutte le schede e riavvierà Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Ctrl-C intelligente (copia/annulla)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interattivo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Sintassi non valida\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Salta host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Vai alla parola successiva\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Vai alla parola precedente\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Mantieni\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Intervallo keep alive (Millisecondi)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Mantieni il terminale agganciato sempre in primo piano\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Chiave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Scambio chiavi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Tastiera\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autenticazione interattiva da tastiera\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Forza chiusura\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Lingua\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Ultima firma nota chiave host\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Avvia WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Avvia WinSCP per la sessione SSH attuale\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Scopri come consentire a Tabby di rilevare la cartella di lavoro della shell remota.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"A sinistra\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Consenti alla shell di definire il tasto Meta al posto del sistema operativo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Modalità chiara\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Riga per riga\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Editor in linea, l'input viene inviato dopo aver premuto Invio\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Riempimento riga\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Caricamento\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Caricamento configurazioni...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Locale\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Eco locale\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminale locale\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Script di accesso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Clic prolungato per il menu contestuale\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Gestione profili\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Numero massimo keep Alive\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Massimizza il riquadro attivo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Rapporto minimo di contrasto\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Modificato il {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Mouse\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Sposta scheda a sinistra\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Sposta scheda a destra\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Sposta in \\\"Non raggruppate\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Spostare il mouse su un riquadro inattivo lo farà attivare\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nome\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nome per la nuova configurazione\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nome della nuova cartella\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativa\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nuovo\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nuova scheda amministratore\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nuova configurazione IN {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nome nuovo gruppo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nuovo elemento\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nuovo nome\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nuovo profilo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nome del nuovo profilo di gruppo\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nuovo nome profilo\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nuova scheda\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nuova scheda: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nuovo terminale\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nuova finestra\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nuova Finestra\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nuovo terminale con\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Scheda successiva\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Nessun colore\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Nessun modificatore\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Nessuno\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Peso font normale\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Non trovato\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Notifica sull'attività\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Notifica quando terminato\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Numero di righe conservate nel buffer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Disattivo\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Ufficiale\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Nelle discussioni di GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Chiudi la scheda solo quando la sessione è esplicitamente terminata\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacità\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Apri strumenti di sviluppo\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Apri Impostazioni\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Apri scheda impostazioni: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Apri pannello SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opzionale\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opzioni\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Arancione\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Predefinito S.O.\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Predefinito S.O. ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"L'output è visualizzato come un dump esadecimale\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"L'output è visualizzato come viene ricevuto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Modalità di output\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Output ritorni a capo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Sovrascrivi il display X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Sovrascrivi locale e sincronizza\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Sovrascrivi remoto e sincronizza\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Sovrascrivere la configurazione remota e iniziare la sincronizzazione?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Sovrascrivere la configurazione locale e iniziare la sincronizzazione?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Progressi di ridimensionamento\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Riquadri\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Carta (legacy)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parità\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"La sincronizzazione parziale della configurazione non è possibile quando questa è cifrata all'interno della cassaforte.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Pass-through\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Frase segreta per la chiave privata con hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Password\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Incolla\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Incolla dagli appunti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Incolla quando non selezionato, altrimenti copia\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Vuoi incollare righe multiple?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Incolla con il tasto centrale\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Percorso o indirizzo del socket locale X11\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Fissa\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Plugin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Cartella plugin\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Porta\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Porta aperta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Porte\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Premi un tasto per riconnetterti\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Premi un tasto adesso\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Previene la chiusura accidentale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Impedisci l'esecuzione accidentale di comandi incollati\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Scheda precedente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Chiavi private\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Processo completato\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nome profilo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profili\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profili e connessioni\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Programma\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Comando proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Viola\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Trasferisci tutta la configurazione di Tabby all'interno della cassaforte\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Connessione rapida\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Esci\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Connessione raw socket\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Tempo stato pronto (millisecondi)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Recente\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Riconnetti\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Riconnetti la scheda attuale (serial/telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Rosso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Espressione regolare\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Note di rilascio\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Ricorda per {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Remoto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Rimuovi spazi bianchi e a ritorni a capo dal testo copiato\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Rinomina\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Rinomina scheda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Rendering\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Riapri l'ultima scheda\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Sostituisci\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Segnala un problema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Richiedi una chiave per fare clic sui collegamenti\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Reimposta zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Riavvia la sessione seriale attuale\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Riavvia la sessione SSH attuale\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Riavvia la sessione telnet attuale\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Riavvia scheda\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Riavvia l'app per applicare le modifiche\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Vuoi ripristinare le impostazioni predefinite?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Vuoi ripristinare le impostazioni predefinite ereditate?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Ripristina le schede del terminale all'avvio dell'app\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Riusa la sessione per più schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"A destra\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Clic destro\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Esegui come amministratore\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Salva\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Salva una password nel portachiavi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Salva e applica\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Salva come profilo\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Salva layout come profilo\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Salvato\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Layout salvato\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Scorri durante la digitazione\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Scorri il terminale di una pagina verso il basso\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Scorri il terminale di una pagina verso l'alto\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Scorri il terminale fino in fondo\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Scorri il terminale fino in cima\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Scorrimento\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Scorri il terminale in basso durante l'input utente\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Cerca\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Cerca tema terminale\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Cerca combinazioni\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Cerca plugin\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Token di sincronizzazione segreto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Seleziona\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Seleziona un profilo di base da usare come modello\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Seleziona tutto\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Seleziona archiviazione\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Seleziona profilo\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Seleziona profilo o inserisci indirizzo\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Invia byte digitando valori esadecimali\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Invia dati un byte alla volta\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Seriale\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Connessione seriale\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Seriale: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Imposta la frase segreta principale\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Imposta frase segreta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Imposta password\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Imposta Tabby come %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Impostare a 0 per disabilitare i profili recenti\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Imposta il percorso named pipe dell'agente SSH.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Impostazioni\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"La shell non supporta il rilevamento del percorso attuale\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integrazione shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Visualizza\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Visualizza il selettore profilo {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Visualizza una casella di conferma quando incolli più righe\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Visualizza profili integrati nel selettore\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Visualizza selettore comandi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Visualizza file di configurazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Visualizza predefiniti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Visualizza mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Visualizza etichette riquadro (per riorganizzare)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Visualizza l'icona del profilo nella scheda\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Visualizza selettore profilo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Visualizza i profili recenti nel selettore\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Visualizza note di rilascio\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Visualizza connessioni seriali\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Visualizza schede in modalità schermo intero\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Visualizza barra degli strumenti\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Visualizza contenuto della cassaforte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Supporto grafico Sixel (sperimentale)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Salta MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Avanzamento lento\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Aggancia la finestra su un lato dello schermo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"Proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Host proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Porta proxy SOCKS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Notifiche\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Codice sorgente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Vuoto\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Dividi\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Dividi in basso\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Dividi in basso\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Dividi a sinistra\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Dividi a destra\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Dividi in alto\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Dividi in alto\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Connessione SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"La gestione della connessione SSH è ora fatta attraverso la scheda \\\"Profili e connessioni\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Password SSH per {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standard (legacy)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Avvio\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Bit stop\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Striscia\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Iscriviti agli aggiornamenti\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Sostituzioni consentite.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Cambia schema colore\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Cambia profilo\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Cambia profilo nel riquadro attivo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Cambia l'implementazione del frontend del terminale (sperimentale)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sincronizzazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sincronizza automaticamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Host di sincronizzazione\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sincronizza tasti di scelta rapida\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sincronizza cassaforte\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sincronizza impostazioni finestra\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Tab {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Attività della scheda\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby non può avviarsi con i plugin, quindi tutti i plugin di terze parti sono stati disabilitati in questa sessione. \\n\"\n\"L'errore era:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Notizie e aggiornamenti di Tabby su Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Posizione delle schede\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Larghezza schede\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sessione telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Sfondo del terminale\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Notifiche del terminale\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identificazione del terminale\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Grazie per aver scaricato Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Ci sono trasferimenti di file attivi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Per questa connessione è presente una password salvata\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Questi si applicano a tutti i profili di un dato tipo\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Questa modifica si applica a tutti i profili di un dato tipo in questo gruppo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Sottile\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Seleziona se stai sperimentando aliasing, ghosting o altri problemi visivi\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Attiva/disattiva schermo intero\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Attiva/disattiva ultima scheda\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Attiva/disattiva finestra terminale\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Attiva/disattiva visibilità della finestra di Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"In alto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Riduci spazi bianchi e a capo\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Prova di nuovo\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Prova la password salvata\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Separa i pannelli della tab selezionata in nuovi pannelli\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Non raggruppate\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Disinstalla\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Sconosciuto\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Codice segreto sconosciuto di tipo {type} per {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Sgancia\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"In alto\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Aggiorna\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Aggiorna alla {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Carica\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Carica come nuova configurazione\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Come chiave meta usa {altKeyName} \"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Usa ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Predefinito\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nome utente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Attraverso il metodo CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Usa password preimpostata\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Cassaforte\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"La cassaforte è un contenitore protetto da cifratura per proteggere password SSH e frasi segrete delle chiavi private.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"La cassaforte è vuota\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Cassaforte bloccata\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"La cassaforte non è configurata\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Per consentire la memorizzazione di dati cifrati deve essere impostata la frase segreta principale della cassaforte\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verifica le chiavi host durante la connessione\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Versione\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Versione: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Trasparenza\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visive\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Avvisa prima di incollare righe multiple\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Avvisa quando chiudi le connessioni attive\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Attenzione: la chiave dell'host remoto è improvvisamente cambiata!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Monitoreremo soltanto le versioni di Tabby e del Sistema Operativo.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Benvenuto\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Novità\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Quando termina una sessione\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Quando abilitato, i collegamentisono cliccabili solo tenendo premuto questo tasto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Quando viene rilevato WinSCP, è possibile avviare una sessione SCP dal menu contestuale.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Indica se usare una cornice personalizzata o nativa del sistema operativo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Impedirà l'apparizione dei Greeting SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Finestra\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimensione finestra lungo il bordo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimensione finestra fuori dal bordo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Cornice della finestra\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 build 18309 o superiore è raccomandato per ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Percorso WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Separatori di parole\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Cartella di lavoro\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Rilevamento cartella di lavoro\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Gli avvisi del terminale WSL possono essere silenziati soltanto tramite il regolatore di volume\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"Il terminale WSL supporta solo TrueColor con ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Inoltro X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Giallo\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Si può modificare più tardi, ma è irrecuperabile se dimenticata.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"In questo momento potresti essere sotto un attacco man-in-the-middle, o la chiave dell'host potrebbe essere stata appena cambiata.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Zoom avanti\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Zoom indietro\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dinamico\"\n\n"
  },
  {
    "path": "locale/ja-JP.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: ja\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Japanese\\n\"\n\"Language: ja_JP\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\"が実行中です。閉じてもよろしいですか？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} コピー\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"メインフォントに不足している文字を表示する際に使用されます\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"すべて中止\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"承認してキーを記憶\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"一度だけ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"アクセシビリティ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"アクリル風ウィンドウ\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"追加\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"ポート転送を追加\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"秘密鍵を追加\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"追加...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"行と行の間隔を広げます\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"詳細\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"SSHエージェント\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"SSHエージェント転送\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"SSHエージェントのパイプ名\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"SSHエージェントの指定\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \".batファイルを開くことを許可 (シェルが正常に動作しない可能性があります)\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"フォルダから端末を素早く開けるようになります\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"常にダーク\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"常にライト\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"外観\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"アプリ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"アプリケーションの設定\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Tabbyを閉じてもよろしいですか？この画面は設定 -> ウィンドウから無効にすることができます。\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"本当によろしいですか？\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"引数\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"質問する\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"ブラウザタブを閉じる前に確認する\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"サウンド再生\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"認証方法\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"作者\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"自動\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"起動時に新しい端末を自動で開く\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"自動\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"自動アップデート\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"変更を自動的にアップロードし、一分ごとに更新を確認します。\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"利用可能\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"透過の種類\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Backspaceキー\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"伝送速度\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"行頭に移動\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"カーソルの点滅\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"青色\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"ぼかし\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"太字フォントの太さ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"下部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"ブラケットペースト (シェルが対応している必要があります)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"ブロードキャストモードです。中断するにはクリックしてください。\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"標準\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"キャンセル\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"転送速度の変更\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"タブの色を変更\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"マスターパスフレーズを変更\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"アップデートを確認\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"暗号方式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"クリア\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"最近使用したプロファイルをクリア\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"端末をクリア\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"接続後に端末をクリア\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"クリップボード\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"閉じる\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"閉じて今後表示しない\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"フォーカスしているペインを閉じる\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"他のタブを閉じる\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"タブを閉じる\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"左のタブを閉じる\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"右のタブを閉じる\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"最後のタブを閉じた時にウィンドウも閉じる\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"色\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"配色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"配色\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"配色\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"すべてのタブを現在開いているタブに統合\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"コマンドライン\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"ネットワーク接続の代わりにコマンドの stdin/stdout を使用します\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"コマンド\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"コンパクト (非推奨)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"設定が消去されました\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"設定をダウンロードしました\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"設定ファイル\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"設定の同期\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"設定をアップロードしました\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"設定\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"プロキシサーバー経由で接続\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"'%s' に接続中...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"最初に別のホストに接続し、プロキシとして使用します\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"接続中\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"接続\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"接続に失敗しました: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"代わりに接続名が使用されます\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"コンテキストメニュー\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"UI要素間の間隔を変更します\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"コピーしました\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"コピー\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"カレントパスをコピー\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"フルパスをコピー\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"選択時にコピー\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"クリップボードにコピー\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"書式付きコピー\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"設定を復号できませんでした\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"新規作成\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"新規ディレクトリを作成\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"現在\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"使用中の配色\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"現在のホスト鍵のフィンガープリント\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"現在のプロセス: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"カーソルの形状\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"カスタム\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"カスタムCSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"ダークモード\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"データ長\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"デバッグ\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"水平方向の分割サイズを縮小\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"垂直方向の分割サイズを縮小\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"既定の接続方式\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"クイック接続時にデフォルトで使用する接続の種類 (SSH、Telnetなど)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"新しいタブの既定プロファイル\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"既定のグループ設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"既定プロファイルの設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"既定\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"{type} の既定値\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"削除\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"{name} を削除しますか？\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"{fullPath} を削除しますか？\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"行全体を削除\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"次の単語を削除\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"前の単語を削除\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"リモート上の設定を消去しますか？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"グループのプロファイルを削除しますか？\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"このスクリプトを削除しますか？\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Vaultのデータを削除しますか？\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"削除中\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"デバイス\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"直接接続\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"無効\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"動的なタブ名を無効にする\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"ドラッグ中はFluent背景を無効化する\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"GPUアクセラレーションを無効にする\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"無効化\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"切断\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"現在のタブを切断する (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"{host} から切断しますか？\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Sixelエスケープシーケンスによって画像を表示します\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"表示\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"中止しない\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"閉じない\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"常にパスワードを要求\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"ドックを常に最前面表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"端末をドック表示する\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"ドック時の端末のサイズ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"ドック時の端末のスペース\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"ドック表示\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"ダブルクリックによるテキスト選択時に区切りとなる文字を設定できます\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"下へ\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"ダウンロード\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"太字のテキストを明るい色で表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"複製\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"管理者として複製\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"タブを複製\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"編集\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"ローカル上で編集する\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"有効\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"統計情報を有効化\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"アニメーションを有効化\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"アップデートが利用可能になったら自動的にインストールを開始します。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Fluent背景オプションを有効にする\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"合字フォントを有効化\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"グローバルホットキーを有効にする (Ctrl+Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"実験的な Windows ConPTY API を有効にする\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"設定ファイルを暗号化する\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"行末に移動\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"環境\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"設定を消去\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Vaultを消去\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"{plugin} のエラー:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"完全一致\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"例:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"不具合が報告されているWindows10風の実験的な背景\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"エクスポート\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"フォールバックフォント\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"ファイル転送\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"ファイル: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"フィルター\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"固定\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Fluent背景はドラッグ中にラグを発生させることがあります\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"すべてのペインにフォーカス\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"一度にすべてのペインをフォーカス (ブロードキャスト)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"すべてのタブにフォーカスする\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"一度にすべてのタブにフォーカス (ブロードキャスト)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"マウスに合わせてフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"次のペインにフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"ペイン {number} にフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"前のペインにフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"上のペインにフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"下のペインにフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"左側のペインにフォーカス\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"右側のペインにフォーカス\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"配色設定に合わせる\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"フォント\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"キーボードショートカット利用時に反映されます\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"強制 CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"強制 CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"強制 LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"指定されたSSHエージェントを強制的に使用します。\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"破棄\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"ポート転送\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"転送済みポート\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"使用中の配色から\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"システムに従う\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"使用中のテーマから\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"フロントエンド\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"フル\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"全般\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Githubに新しいissueを投稿\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"インストール\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Tabby Web版の設定画面から確認することができます\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"ぼかしの入った透過ウィンドウに変更します\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"上へ\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"緑色\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"グループ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"詳細\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"世界中のTabbyのインストール数の調査にご協力ください！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Tabbyの翻訳に参加する\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"16進数\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"非表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"タブの閉じるボタンを非表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"タブのインデックスを非表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"タブの詳細設定ボタンを非表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"フォーカスが外れた時にウィンドウを非表示にする\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"画面外をクリックするとドックした端末が非表示になります\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"ホームページ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"ホスト\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"ホスト鍵\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"ホスト鍵の検証\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"ホットキー\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"環境変数を利用して、Tabbyを他の端末として認識させます\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTPプロキシ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTPプロキシホスト\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTPプロキシポート\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"アイコン\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"可変\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"無効にした場合、プロファイルセレクターにカスタムプロファイルのみが表示されます\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"送信した入力をローカル上で直ちに表示します\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"水平方向の分割サイズを拡大\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"垂直方向の分割サイズを拡大\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"入力\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"入力する度に入力が送信されます\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"入力モード\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"入力の改行\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"インストール済み\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"アップデートをインストールすると、すべてのタブが閉じられ、Tabbyを再起動します。\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"スマートなCtrl+C (コピー/中止)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"インタラクティブ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"無効な構文\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"踏み台サーバー\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"次の単語に移動\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"前の単語に移動\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"維持\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Keep-Alive 間隔 (ミリ秒)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"ドックされた端末を常に最前面に表示\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"キー\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"鍵交換\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"キーボード\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"キーボードインタラクティブ認証\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"強制終了\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"言語\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"最後に使われたホスト鍵のフィンガープリント\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"WinSCPを起動\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"現在のSSHセッションでWinSCPを起動\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"リモート上の作業ディレクトリを自動検出する方法をご紹介します。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"左側\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"OSの代わりにシェルにメタキーを処理させます\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"ライトモード\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"一行ごとに\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Enterキーを押すと入力が送信されます\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"行間\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"読み込み中\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"設定を読み込み中...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"ローカル\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"ローカルエコー\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"ローカル端末\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"ログインスクリプト\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"長押しするとコンテキストメニューが表示されます\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"プロファイルの管理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"最大Keep-Alive\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"アクティブなペインを最大化\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"最小コントラスト比\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"更新日 {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"マウス\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"タブを左に移動\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"タブを右に移動\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"\\\"未分類\\\" に移動\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"マウスの移動に合わせてアクティブなペインを切り替えます。\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"名前\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"新しい設定の名前\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"新しいディレクトリの名前\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"標準\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"新規\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"新しい管理者権限タブ\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"{platform} の新しい設定\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"新しいグループ名\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"新しい項目\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"新しい名前\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"新規プロファイル\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"新規グループ\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"新しいプロファイル名\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"新しいタブを開く\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"新しいタブ: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"新しい端末\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"新しいウィンドウを開く\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"新しいウィンドウ\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"新しいプロファイルを追加\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"次のタブ\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"色指定なし\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"変更しない\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"なし\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"標準\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"標準フォントの太さ\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"見つかりませんでした\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"アクティビティを通知する\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"完了時に通知する\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"バッファに保持される行数\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"オフ\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"公式\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"セッションが明確に終了した場合のみタブを閉じます\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"不透明度\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"DevToolsを開く\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"設定を開く\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"設定タブを開く: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"SFTP パネルを開く\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"オプション\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"設定\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"橙色\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"OSの既定\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"OSの既定 ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"16進ダンプとして出力されます\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"受信したデータがそのまま出力されます\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"出力モード\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"出力の改行\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"X11ディスプレイを上書きする\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"ローカルを上書きして同期\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"リモートを上書きして同期\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"リモート上の設定を上書きして、同期を開始しますか？\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"現在のローカル上の設定を上書きして、同期を開始しますか？\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"ペインサイズの変更幅\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"ペイン\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"ペーパー (非推奨)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"パリティ\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Vaultによって設定ファイルを暗号化した場合、設定の一部だけを同期から外すことはできません。\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"パススルー\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"秘密鍵のパスフレーズ ハッシュ値 {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"パスワード\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"貼り付け\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"クリップボードから貼り付け\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"通常は貼り付け、テキスト選択時のみコピー\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"複数行貼り付けを実行してもよろしいですか？\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"中クリックで貼り付け\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"ローカル上のX11ソケットのパスまたはアドレス\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"ピン留めする\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"プラグイン\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"プラグインのフォルダー\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"ポート\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"ポートが開いています\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"ポート\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"再接続するには何かキーを押してください\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"キーを押してください\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"偶発的な終了を防止\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"貼り付けたコマンドの偶発的な実行を防止することができます\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"前のタブ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"秘密鍵\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"処理完了\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"プロファイル名\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"プロファイル\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"プロファイルと接続\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"プログラム\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"プロキシコマンド\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"紫色\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Tabbyの設定をすべてVaultに保存します\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"クイック接続\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"終了\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Rawソケット接続\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"タイムアウト (ミリ秒)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"最近\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"再接続\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"現在のタブを再接続する (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"赤色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"正規表現（Regex）\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"リリースノート\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"{time} 後に再認証\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"リモート\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"コピーしたテキストに含まれる前後の余分なスペースや改行を除去します\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"名前を変更\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"タブの名前を変更\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"レンダリング\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"最後に閉じたタブを開く\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"置換\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"問題を報告\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"特定のキーを使用してリンクを開く\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"拡大/縮小をリセット\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"現在のシリアルセッションを再起動\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"現在のSSHセッションを再起動\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"現在のTelnetセッションを再起動\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"タブを再起動\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"変更を反映するには再起動が必要です\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"設定を既定に戻してもよろしいですか?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"設定を継承元の既定に戻してもよろしいですか?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"起動時に以前開いていたタブを復元する\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"複数のタブでセッションを再利用する\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"右側\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"右クリック\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"管理者として実行\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"保存\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"キーチェーンにパスワードを保存する\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"保存して反映\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"プロファイルとして保存\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"プロファイルとしてレイアウトを保存\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"保存しました\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"保存されたレイアウト\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"入力時にスクロール\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"1ページ分下にスクロール\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"1ページ分上にスクロール\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"端末を最下部までスクロール\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"端末を最上部までスクロール\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"バックスクロール\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"入力時に端末を最下部にスクロールします\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"検索\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"配色を検索\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"ホットキーを検索\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"プラグインを検索\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"シークレット同期トークン\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"選択\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"テンプレートとして使用する基本プロファイルを選択\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"すべて選択\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"ファイルストレージを選択\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"プロファイルを選択\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"プロファイルの選択、またはアドレスを入力\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"16進数で入力したバイトを送信\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"1バイトごとにデータを送信します\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"シリアル\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"シリアル接続\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"シリアル: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"マスターパスフレーズを設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"パスフレーズを設定\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"パスワードを設定\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Tabbyを %COMSPEC% に設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"セレクターに最近使用したプロファイルを表示したくない場合は、0に設定してください\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"SSHエージェントの名前付きパイプのパスを指定します。\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"設定\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"シェル\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"シェルがカレントパスの検出に対応していません\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"シェル統合\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"表示\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"{type} プロファイルセレクターを表示\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"複数行の貼り付けをする際に確認画面を表示します\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"標準プロファイルをセレクターに表示\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"コマンドセレクターを表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"設定ファイルを表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"既定を表示\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"ミキサーを表示\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"ペインラベルを表示 (再配置向け)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"タブにプロファイルアイコンを表示\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"プロファイルセレクターを表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"最近使用したプロファイルの表示数\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"リリースノートを表示\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"シリアル接続を表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"全画面表示時にタブを表示\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"ツールバーを表示\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Vaultのデータを表示\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Sixel Graphicsのサポート (実験的)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"MoTD/バナーをスキップ\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"低速送信\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"画面の端にウィンドウをスナップします\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKSプロキシ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKSプロキシホスト\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKSプロキシポート\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"サウンド\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"ソースコード\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"UI間隔\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"分割\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"下部に分割\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"下部に分割\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"左側に分割\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"右側に分割\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"上部に分割\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"上部に分割\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH接続\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH接続の管理は「プロファイルと接続」からできるようになりました。\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"{user}@{host}:{port} のSSHパスワード\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"標準 (非推奨)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"起動時\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"ストップビット\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"ストリップ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"最新情報を受け取る\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"置き換えに対応しています\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"配色切り替え\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"プロファイルを切り替える\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"アクティブなペインのプロファイルを切り替える\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"端末のフロントエンド実装を切り替える (実験的)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"同期\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"自動同期\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"同期サーバー\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"ホットキーの同期\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Vaultの同期\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"ウィンドウ設定の同期\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"タブ {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"タブのアクティビティ\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"プラグインが原因でTabbyの起動に失敗しました。このセッションではすべてのサードパーティ製のプラグインが無効になっています。エラー:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"TwitterでTabbyの最新情報やアップデートを配信中\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"タブ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"タブの位置\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"タブの幅\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnetセッション\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"端末\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"端末の背景\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"端末音\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"端末の識別情報\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Tabbyをダウンロードしてくださり、ありがとうございます！\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"テーマ\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"ファイル転送を使用中\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"この接続に使用するパスワードを保存しています。\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"すべての同一プロファイルに反映されます\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"グループ内のすべての同一プロファイルに反映されます\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"スリム\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"画像のギザギザやずれて見えるなど表示の乱れが軽減される場合があります\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"全画面表示に切り替え\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"最後のタブに切り替え\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"端末ウィンドウの切り替え\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Tabbyウィンドウの表示を切り替え\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"上部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"スペースや改行を取り除く\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"再試行\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"保存されたパスワードを試みています\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"現在のタブペインを分割\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"未分類\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"アンインストール\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"不明\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"タイプ {type} の {key} の不明なシークレット\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"ピン留めを外す\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"上へ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"アップデート\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"{version} にアップグレード\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"アップロード\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"新しい設定としてアップロード\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"メタキーとして {altKeyName} を使用する\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"ConPTYを使用する\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"ユーザーの既定\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"ユーザー名\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"CONNECTメソッドを使用します\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"プリセットパスワードの使用\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Vault\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"VaultはSSHパスワードや秘密鍵パスフレーズなどの機密性の高い情報を保存するための常時暗号化されたコンテナです。\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Vaultにデータは保存されていません\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Vaultはロックされています\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Vaultが設定されていません\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"機密性の高い情報を保存するには、Vaultにマスターパスフレーズを設定する必要があります\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"接続時にホスト鍵を検証\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"バージョン\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"バージョン: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"磨りガラス\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"グラフィック表示\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"複数行貼り付け時に警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"使用中の接続を閉じる際に警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"警告: リモートホストのキーが突然変更されました！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"TabbyとOSのバージョンのみを収集しています。\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"ようこそ\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"最新情報\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"セッション終了時\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"有効にすると、特定のキーを押しながらクリックした時のみリンクを開きます\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"WinSCPが検出されると、コンテキストメニューからSCPセッションを起動することができます。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"カスタムウィンドウを使用するか、OSの標準ウィンドウを使用するかを選択できます。\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"SSH接続時のメッセージが表示されなくなります\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"ウィンドウ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"画面の端から平行方向の幅\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"画面の端から垂直方向の幅\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"ウィンドウのフレーム\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"ウィンドウ\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"ConPTYにはWindows 10ビルド18309以上を推奨します\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCPのパス\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"区切り文字\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"作業ディレクトリ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"作業ディレクトリの検出\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSLによる端末ベルは音量ミキサーでのみミュートすることができます\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL端末はConPTYによるTrueColorのみをサポートしています\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11転送\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"黄色\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"後から変更できますが、忘れた場合復元することはできません。\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"現在中間者攻撃を受けているか、もしくはホスト鍵が変更された可能性があります。\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"拡大\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"縮小\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"ダイナミック\"\n\n"
  },
  {
    "path": "locale/ko-KR.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: ko\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Korean\\n\"\n\"Language: ko_KR\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" 명령어가 동작중입니다. 창을 닫으시겠습니까?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} 복사\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"설정된 폰트 누락시 대체하기 위한 폰트\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"모두 중지\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"허용 후 키 저장\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"지금만 허용하기\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"접근성\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"아크릴 스타일의 배경\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"추가\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"포트 포워딩 추가\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"개인 키(Private key) 추가\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"추가...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"행간 간격\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"고급\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"에이전트\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"에이전트 포워딩\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"에이전트 연계 경로\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"에이전트 유형\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"탭에 .bat 파일 열기를 허용합니다. 몇몇 쉘 환경에서 동작하지 않을 수 있습니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"일부 폴더에서 터미널을 빨리 열 수 있도록 합니다\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"다크 모드\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"라이트 모드\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"모양\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"응용 프로그램\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"응용 프로그램 설정\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Tabby를 정말로 닫으시겠습니까? 더 이상 이 질문을 보지 않으려면 설정 -> 창 에서 변경할 수 있습니다.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"확실한가요?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"매개 변수\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"질문하기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"브라우저 탭을 닫기 전에 물어보기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"소리\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"인증 방법\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"만든 사람\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"자동\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"앱 시작 시 터미널을 자동으로 열기\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"자동\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"자동 업데이트\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"자동으로 변경사항 업로드 후 매 분마다 갱신 확인\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"사용 가능\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"배경 유형\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"백스페이스 키 동작\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"전송 속도\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"행 시작 부분\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"커서 깜박임\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"파란색\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"흐림 효과\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"굵은 글꼴 두께\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"아래\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"괄호(Bracketed)식 붙여넣기 (쉘 지원 필요)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"브로드캐스트 모드. 취소하려면 아무 곳이나 클릭하세요.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"빌트인\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"취소\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"baud rate 속도를 변경합니다\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"탭 색상 변경\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"마스터 비밀번호 변경\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"업데이트 확인\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"암호화\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"지우기\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"최근 프로필 삭제\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"터미널 비우기\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"연결 후 터미널 지우기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"클립보드\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"닫기\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"닫고 다시 보여주지 않음\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"보고 있는 항목 닫기\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"다른 탭 닫기\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"탭 닫기\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"왼쪽 탭들 모두 닫기\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"오른쪽 탭들 모두 닫기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"마지막 탭을 닫은 후 창 닫기\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"색상\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"색상 구성\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"색상 구성\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"색상\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"모든 탭을 현재 탭으로 합치기\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"명령줄\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"명령어의 네트워크 연결 대신 표준 입출력이 사용됩니다.\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"명령어\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"컴팩트 (레거시)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"설정 삭제됨\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"설정 다운로드됨\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"설정 파일\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"설정 동기화\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"설정 업로드됨\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"설정\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"프록시 서버를 통해 연결하기\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"\\\"%s\\\"에 연결하기\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"다른 호스트에 먼저 연결 후 프록시로 사용\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"연결 중\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"연결\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"연결 실패: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"연결 이름이 대신 사용됩니다.\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"컨텍스트 메뉴\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"UI 요소 간 간격을 변경합니다\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"복사됨\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"복사\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"현재 경로 복사\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"전체 경로 복사\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"선택 영역 복사\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"클립보드에 복사\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"포맷과 함께 복사\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"설정 해독에 실패했습니다.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"생성\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"디렉토리 생성\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"현재\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"현재 색상 구성\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"현재 호스트 키 핑거프린트\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"현재 프로세스: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"커서 모양\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"사용자 정의\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"사용자 정의 CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"다크 모드\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"데이터 비트\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"디버깅\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"가로 분할 크기 작게\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"세로 분할 크기 작게\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"기본 연결 타입\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"빠른 연결에서 사용될 기본 연결 타입을 지정합니다. (ex. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"새 탭의 기본 프로필\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"기본 프로필 그룹 설정\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"기본 프로필 설정\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"기본값\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"{type} 의 기본값\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"삭제\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"{name} 을/를 삭제하시겠습니까?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"{fullPath} 를 삭제할까요?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"전체 라인 삭제\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"다음 단어 삭제\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"이전 단어 삭제\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"리모트 설정을 삭제하시겠습니까?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"그룹의 프로필을 삭제하시겠습니까?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"이 스크립트를 삭제하시겠습니까?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Vault 내용을 삭제하시겠습니까?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"삭제 중\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"장치\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"직접 연결\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"비활성화\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"동적 탭 제목 비활성화\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"창 이동하는 동안 반투명 배경 끄기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"GPU 가속 비활성화\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"비활성화됨\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"연결 끊기\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"현재 탭 연결 해제 (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"{host} 로부터 연결을 끊으시겠습니까?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Sixel 이스케이프 시퀀스로 이미지 표시\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"표시할 곳\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"중단하지 않음\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"닫지 않음\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"기억하지 않기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"독을 항상 맨 위에\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"터미널 도킹\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"도킹된 터미널 크기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"도킹된 터미널 공간\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"도킹\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"더블 클릭으로 선택하여 해당 문자 끝에 중단\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"아래\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"다운로드\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"밝은 색으로 굵은 글꼴 채우기\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"복제\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"관리자에서 복제\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"탭 복제\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"편집\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"로컬 편집\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"활성화\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"통계 전송 허용\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"애니메이션 활성화\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"업데이트 가능할 때 자동으로 설치하도록 활성\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"fluent 배경 활성화\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"합자(ligature) 활성화\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"전역 단축키 활성 (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"실험적인 Windows ConPTY API 사용\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"설정 파일 암호화\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"줄 끝\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"환경\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"설정 지우기\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Vault 지우기\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"{plugin} 오류:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"완전 일치\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"예시:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"실험 버전의 Windows 10에서 배경 스타일이 충돌할 수 있습니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"내보내기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"대체 글꼴\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"파일 전송\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"파일: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"필터\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"고정\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"반투명 배경으로 인해 창 이동 지연이 발생할 수도 있습니다\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"모든 항목 포커스\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"모든 항목을 한번에 포커스 (방영)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"모든 탭 포커스\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"모든 탭을 한번에 포커스 (브로드캐스트)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"마우스를 따라 포커스\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"다음 항목 포커스\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"창 {number} 포커스\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"이전 항목 포커스\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"위 항목 포커스\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"아래 항목 포커스\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"왼쪽 항목 포커스\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"오른쪽 항목 포커스\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"색상표 설정을 따릅니다\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"글꼴\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"키보드 단축키 사용시\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"CR 강제\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"CRLF 강제\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"LF 강제\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"특정 SSH 에이전트로 연결 유형 강제\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"소거\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"포트 포워딩\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"포워딩된 포트\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"색상 구성에서\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"시스템에 따름\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"테마에서\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"프론트앤드\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"전체\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"일반\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"미리 지정된 양식을 생성하여 Github 이슈 작성\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"받기\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Tabby 웹 설정 창에서 받기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"배경을 투명하고 흐릿하게 표시합니다.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"상위 폴더로\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"녹색\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"그룹\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"핵\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"전 세계적으로 Tabby 가 설치되어 어떻게 사용하는지 추적을 도와주세요!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Tabby 번역 돕기\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"16진수\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"숨기기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"탭 닫기 버튼 숨기기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"탭 번호 숨기기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"탭 옵션 버튼 숨기기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"포커스 해제 시 창 숨기기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"터미널 밖으로 클릭 시 도킹된 터미널 숨기기\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"홈페이지\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"호스트\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"호스트 키\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"호스트 키 확인\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"단축키\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Tabby가 환경 변수에서 표시되는 방식\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP 프록시\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP 프록시 호스트\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP 프록시 포트\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"아이콘\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"가변\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"비활성화 시, 사용자 지정 프로필만 표시됩니다\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"로컬 입력 란에 즉시 출력\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"가로 분할 크기 크게\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"세로 분할 크기 크게\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"입력\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"입력한 그대로 입력\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"입력 모드\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"개행 입력\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"설치됨\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"업데이트 설치 시 모든 탭이 닫히고 Tabby 가 재시작됩니다.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"지능적인 Ctrl-C (복사/중단)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"상호작용\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"올바르지 않은 구문입니다.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"점프 호스트\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"다음 단어로 이동\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"이전 단어로 이동\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"유지\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"유지 주기 (밀리초)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"도킹된 터미널을 항상 위로 유지\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"키\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"키 교환\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"키보드\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"키보드 상호작용 인증\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"종료\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"언어\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"최근 알려진 호스트 키 지문\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"WinSCP 실행\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"현재 SSH 세션용으로 WinSCP 실행\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Tabby가 원격 쉘에서 작업 디렉토리 감지를 허용하는 방법 알아보기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"왼쪽\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"메타 키 입력을 OS 대신 쉘에서 결정\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"라이트 모드\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"라인별\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"줄 편집기, 입력한 내용을 Enter 키 누른 후 전송\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"줄 간격\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"불러오는 중\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"설정을 불러오는 중...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"로컬\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"로컬 echo\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"로컬 터미널\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"로그인 스크립트\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"길게 클릭하여 메뉴 표시\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"프로필 관리\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"최대 유지 횟수\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"활성 항목 최대화\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"최소 명암비\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"{date} 에 수정\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"마우스\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"탭을 왼쪽으로 이동\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"탭을 오른쪽으로 이동\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"\\\"그룹화되지 않음\\\"으로 이동\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"마우스를 비활성 창 위로 이동하면 창이 활성화됩니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"이름\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"새 설정 이름\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"새 디렉토리 이름\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"네이티브\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"추가\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"새 관리자 탭\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"{platform} 새 구성\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"새 그룹 이름\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"새 아이템\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"새 이름\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"새 프로필\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"새 프로필 그룹\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"새 프로필 이름\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"새 탭\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"새 탭: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"새 터미널\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"새 창\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"새 윈도우\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"기본 프로필로 새로 만들기\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"다음 탭\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"색 없음\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"키 조합 없음\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"없음\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"일반\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"일반 글꼴 두께\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"검색된 결과 없음\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"활동 알림\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"완료되면 알림\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"버퍼에 유지할 라인 수\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"끄기\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"공식\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"GitHub 토론에서\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"세션이 명확하게 종료된 경우에만 탭을 닫습니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"불투명도\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"DevTools 열기\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"설정 열기\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"설정 탭 열기: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"SFTP 패널 열기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"선택사항\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"옵션\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"주황색\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"OS 기본값\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"OS 기본값 ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"16진수 덤프로 출력이 표시됩니다\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"수신되는 대로 출력이 표시됩니다\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"출력 모드\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"개행 출력\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"X11 디스플레이 오버라이드\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"로컬 덮어쓰기 및 동기화\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"원격 덮어쓰기 및 동기화\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"원격 구성을 덮어쓰고 동기화를 시작할까요?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"로컬 구성을 덮어쓰고 동기화를 시작할까요?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"창 크기 조절 단계\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"패널\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"종이 (레거시)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"패리티\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"구성이 Vault를 통해 암호화된 경우 부분 구성 동기화를 수행할 수 없습니다.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"왼쪽 글자 삭제\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"해시 {hash} 의 개인 키(Private key) 암호...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"비밀번호\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"붙여넣기\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"클립보드에서 붙여넣기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"선택 항목이 없으면 붙여넣기, 있으면 복사\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"여러 줄을 붙여 넣을까요?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"가운데 클릭으로 붙여넣기\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"로컬 X11 소켓의 경로 혹은 주소\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"고정\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"플러그인\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"플러그인 폴더\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"포트\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"포트 열림\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"포트\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"다시 연결하려면 아무 키나 누르세요\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"지금 키를 누르세요\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"실수로 창을 닫는 것을 방지합니다\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"붙여넣은 명령이 실수로 실행되는 것을 방지합니다\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"이전 탭\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"비밀 키\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"처리 완료\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"프로필 이름\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"프로필\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"프로필 및 연결\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"프로그램\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"프록시 명령어\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"보라\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Tabby의 모든 설정을 vault에 기록합니다\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"빠른 연결\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"끝내기\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Raw 소켓 연결\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"타임아웃 (밀리초)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"최근\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"재접속\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"현재 탭 재연결 (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"빨강\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"정규식\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"릴리스 노트\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"{time} 동안 기억\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"원격\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"복사된 텍스트 양 끝의 공백과 줄바꿈을 제거합니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"이름 바꾸기\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"탭 이름 수정\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"렌더링\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"마지막 탭 다시 열기\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"덮어쓰기\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"문제 신고하기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"링크를 클릭할 때 필요한 키 조합\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"확대/축소 초기화\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"현재 Serial 세션 재시작\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"현재 SSH 세션 재시작\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"현재 텔넷 세션 재시작\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"탭 다시시작\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"변경 사항을 적용하려면 앱을 다시 시작하세요\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"기본 설정으로 복원할까요?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"기본 프로필 설정으로 복원할까요?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"앱 시작 시 터미널 탭 복원\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"여러 탭에 세션 재사용\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"오른쪽\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"오른쪽 클릭\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"관리자 권한으로 실행\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"저장하기\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"비밀번호를 키체인에 저장\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"저장 및 적용\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"프로필로 저장\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"프로파일로 레이아웃 저장\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"저장됨\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"저장된 레이아웃\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"입력 시 스크롤\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"한 페이지 아래로 스크롤\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"한 페이지 위로 스크롤\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"맨 아래로 스크롤\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"맨 위로 스크롤\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"스크롤백\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"사용자 입력 시 터미널을 맨 아래로 스크롤 합니다\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"검색\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"색상 구성 검색\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"단축키 검색\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"플러그인 검색\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"비밀 동기화 토큰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"선택\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"템플릿으로 사용할 프로필 선택\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"전체 선택\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"저장소에서 파일 선택\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"프로필 선택\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"프로필 선택 또는 주소 입력\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"16진수 값을 입력하여 바이트 전송\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"데이터를 한 번에 한 바이트씩 전송합니다\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serial\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Serial 연결\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serial: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"마스터 암호 설정\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"암호 설정\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"비밀번호 설정\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Tabby를 %COMSPEC%로 설정\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"최근 프로필 목록을 숨기려면 0을 입력하세요\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"SSH 에이전트의 명명된 파이프 경로를 설정합니다.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"설정\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"셸\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell이 현재 경로 감지를 지원하지 않습니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"셸 통합\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"보이기\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"{type} 프로필 선택창 열기\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"여러 줄을 붙여넣을 때 확인 상자 표시\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"프로필 선택창에 기본 프로필 표시\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"명령 선택창 열기\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"구성 파일 보기\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"기본값 표시\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"믹서 표시\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"항목 라벨 표시 (재배열 용도)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"탭에 프로필 아이콘 표시\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"프로필 선택창 열기\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"프로필 선택창에 최근 프로필 표시\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"릴리스 노트 보기\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Serial 연결 보기\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"전체화면 모드에서 탭 보이기\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"도구모음 표시\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Vault 내용 확인\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Sixel 그래픽 지원 (실험)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"MoTD/banner 무시\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"저속 전송\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"화면 가장자리에 창을 스냅합니다.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS 프록시\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS 프록시 호스트\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS 프록시 포트\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"사운드\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"소스 코드\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"UI 간격\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"분할\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"아래쪽으로 분할\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"아래쪽으로 분할\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"왼쪽으로 분할\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"오른쪽으로 분할\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"위쪽으로 분할\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"위쪽으로 분할\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH 연결\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"이제 \\\"프로필 및 연결\\\" 탭을 통해 SSH 연결 관리가 수행됩니다.\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"{user}@{host}:{port} 의 SSH 비밀번호\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"기본 (레거시)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"시작\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"정지 비트\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"스트립(Strip)\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"새로운 소식 구독하기\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"대체를 허용합니다.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"색상 구성 전환\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"프로필 전환\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"활성화된 패널의 프로파일을 전환\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"터미널 프론트엔드 구현 변경 (실험적)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"동기화\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"자동으로 동기화\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"호스트 동기화\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"단축키 동기화\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Vault 동기화\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"창 구성 동기화\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"탭 {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"탭 활동\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby가 플러그인과 함께 시작할 수 없으므로, 이 세션에서 모든 타사 플러그인이 비활성화되었습니다. 오류는 다음과 같습니다:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Twitter에서 Tabby의 최신 정보를 받을 수 있습니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"탭\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"탭 위치\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"탭 너비\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"텔넷 세션\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"터미널\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"터미널 배경색\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"터미널 벨\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"터미널 식별 방식\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Tabby를 다운로드 해주셔서 감사합니다!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"테마\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"활성화된 파일 전송이 있습니다\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"이 연결에 대해 저장된 비밀번호가 있습니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"이와 같은 유형의 모든 프로필에 적용됩니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"이 그룹의 해당 유형을 가진 모든 프로필에 적용됩니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"얇게\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"계단 현상이나 고스팅 현상 등, 시각적 문제가 있을 경우 이 옵션을 활성화하세요.\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"전체화면 전환\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"마지막 탭 전환\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"터미널 창 전환\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Tabby 창 표시 전환\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"위\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"공백 및 개행문자 제거\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"다시 시도\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"저장된 비밀번호로 시도 중\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"현재 탭의 창을 별도의 탭으로 전환\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"그룹 해제됨\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"설치 제거\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"알 수 없음\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"{key} 에 대한 알 수 없는 타입 {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"고정 해제\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"위\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"업데이트\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"{version} 로 업그레이드\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"업로드\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"새로운 설정으로 업로드\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"{altKeyName} 을 메타 키로 사용\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"ConPTY 사용\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"사용자 기본값\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"사용자 이름\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"CONNECT 메서드 사용\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"사전 설정된 비밀번호 사용\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Vault\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Vault는 SSH 암호 및 개인 키 암호와 같은 비밀을 위한 항상 암호화된 컨테이너입니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Vault가 비어있음\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Vault가 잠겨 있음\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Vault가 설정되어 있지 않습니다.\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"비밀 저장을 허용하려면 Vault 마스터 암호를 설정해야 합니다\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"연결 시 호스트 키 확인\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"버전\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"버전: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"생동감\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"시각 효과\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"여러 줄을 붙여넣을 때 경고\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"활성 연결을 종료할 때 경고\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"경고: 원격 호스트의 키가 갑자기 변경되었습니다!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"귀하의 Tabby 및 OS 버전만 추적합니다.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"환영합니다\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"새로운 기능\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"세션이 종료될 때\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"활성화되면 키 조합을 누른 상태에서만 링크를 클릭할 수 있습니다\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"WinSCP가 발견되면 컨텍스트 메뉴에서 SCP 세션을 시작할 수 있습니다.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"사용자 지정 창 또는 OS 기본 창 사용 여부\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"SSH 연결 시 메세지 표시하지 않음\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"창\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"화면 가장자리부터 수평 너비\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"화면 가장자리부터 수직 너비\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"창 프레임\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"창\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"ConPTY를 위해서는 Windows 10 빌드 18309 이상이 권장됩니다\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP 경로\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"단어 구분 기호\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"작업 폴더\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"작업 디렉토리 감지\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL 터미널의 벨은 오직 볼륨 믹서를 통해서만 음소거할 수 있습니다.\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL terminal의 TrueColor는 ConPTY가 활성화 되어있을 때만 지원됨\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 포워딩\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"노랑\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"나중에 변경할 수 있으나, 비밀번호를 잊으면 복구할 수 없습니다.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"지금 중간자 공격을 받고 있거나 호스트 키가 방금 변경되었을 수도 있습니다.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"확대\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"축소\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"동적\"\n\n"
  },
  {
    "path": "locale/pl-PL.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: pl\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Polish\\n\"\n\"Language: pl_PL\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" jest nadal uruchomiony. Zamknąć?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"Kopia {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Druga rodzina czcionek używana do wyświetlania brakujących znaków w głównym foncie\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Przerwij wszystkie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Akceptuj i zapamiętaj klucz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Zaakceptuj tylko tym razem\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Dostępność\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Akrylowe tło\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Dodaj\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Dodaj przekierowanie portów\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Dodaj klucz prywatny\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Dodaj...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Dodatkowy odstęp między liniami\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Zaawansowane\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Przekierowanie Agenta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Ścieżka potoku Agenta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Typ agenta\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Pozwala na otwieranie plików .bat w zakładkach, ale psuje niektóre powłoki\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Pozwala na szybkie otwarcie terminalu w wybranym folderze\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Zawsze ciemny\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Zawsze jasny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Wygląd\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplikacja\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Ustawienia aplikacji\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Czy na pewno chcesz zamknąć Tabby? Możesz wyłączyć ten monit w Ustawienia -> Okno.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Czy jesteś pewien?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumenty\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Zadaj pytanie\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Zapytaj przed zamknięciem karty przeglądarki\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Dźwiękowy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Metoda uwierzytelniania\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Auto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Automatycznie otwórz terminal przy starcie aplikacji\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatycznie\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatyczne aktualizacje\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Automatycznie wysyłaj zmiany i sprawdzaj aktualizacje co minutę\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Dostępne\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Typ tła\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Tryb klawisza Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Prędkość transmisji szeregowej (boud)\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Początek wiersza\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Migający kursor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Niebieski\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Rozmycie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Rozmiar pogrubionej czcionki\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Dół\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Wklejanie cudzysłowu (wymaga wsparcia powłoki)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Broadcast mode. Kliknij gdziekolwiek, aby anulować.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Wbudowane\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Anuluj\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Zmień współczynnik baud\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Zmień kolor zakładki\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Zmień hasło główne\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Sprawdź dostępność aktualizacji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Szyfry\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Wyczyść\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Wyczyść ostatnie profile\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Wyczyść terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Wyczyść terminal po nawiązaniu połączenia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Schowek\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Zamknij\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Zamknij i nie pokazuj ponownie\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Zamknij wyróżniony panel\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Zamknij inne karty\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Zamknij kartę\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Zamknij karty na lewo\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Zamknij karty na prawo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Zamknij okno po zamknięciu ostatniej zakładki\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Kolor\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Schemat kolorów\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Schematy kolorów\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Kolory\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Scal wszystkie inne karty z aktywną kartą\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Wiersz poleceń\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Zamiast połączenia sieciowego użyto komendy stdin/stdout\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Polecenia\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Compact (legacy)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfiguracja usunięta\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfiguracja pobrana\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Plik konfiguracyjny\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Synchronizacja konfiguracji\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfiguracja przesłana\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfiguracje\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Połącz się przez serwer proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Połącz z \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Połącz się najpierw z innym hostem i użyj go jako proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Łączenie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Połączenie\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Połączenie nie powiodło się: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Zamiast tego użyta zostanie nazwa połączenia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu kontekstowe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Kontroluje odstępy między elementami\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Skopiowano\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopiuj\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Skopiuj bieżącą ścieżkę\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopiuj pełną ścieżkę\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopiuj przy wybraniu\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Skopiuj do schowka\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopiuj wraz z formatowaniem\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Nie można odszyfrować konfiguracji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Stwórz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Stwórz folder\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Aktualny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Aktualny schemat kolorów\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Odcisk klucza bieżącego hosta\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Bieżący proces: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Kształt kursora\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Własny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Niestandardowy CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Tryb ciemny\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bity danych\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Debugowanie\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Zmniejsz rozmiar poziomego rozkładu\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Zmniejsz rozmiar pionowego podziału\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Domyślny typ połączeń\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Domyślny typ łączności używany przez funkcję \\\"szybkie połączenie\\\" (np. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Domyślny profil dla nowych kart\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Domyślne ustawienia profilu grupy\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Domyślne ustawienia profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Domyślne\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Domyślne dla {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Usuń\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Usunąć {name}?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Usuń {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Usuń całą linijkę\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Usuń następne słowo\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Usuń poprzednie słowo\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Usunąć konfigurację po stronie zdalnej?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Usunąć profile grupy?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Usunąć ten skrypt?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Usunąć zawartość sejfu?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Usuwanie\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Urządzenie\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Bezpośrednio\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Wyłącz\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Wyłącz dynamiczny tytuł karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Wyłącz płynne tło podczas przeciągania\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Wyłącz przyspieszenie GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Wyłączone\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Rozłącz\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Rozłącz aktywną kartę (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Odłączyć od {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Wyświetlaj grafiki w sekwencjach wyjściowych Sixeli\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Wyświetl na\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Nie przerywaj\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Nie zamykaj\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Nie zapamiętuj\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Okno zawsze na wierzchu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Dokuj terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Rozmiar zadokowanego terminalu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Zadokowane miejsce w terminalu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Dokowanie\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Zaznaczenie podwójnego kliknięcia zatrzyma się na tych znakach\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"W dół\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Pobierz\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Rysuj pogrubiony tekst w jasnych kolorach\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplikuj\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplikuj jako administrator\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplikuj kartę\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Edytuj\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Edytuj lokalnie\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Włącz\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Włącz Analitykę\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Włącz animacje\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Włącz automatyczną instalację aktualizacji, gdy będą dostępne.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Włącz opcję płynnego tła\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Włącz ligaturę czcionek\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Włącz globalny skrót klawiszowy (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Włącza eksperymentalne API ConPTY Windows\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Szyfruj plik konfiguracyjny\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Koniec linii\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Środowisko\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Usuń konfigurację\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Wyczyść sejf\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Błąd w {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Dokładne dopasowanie\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Przykład:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Eksperymentalny styl tła Windows 10 mogący powodować problemy\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportuj\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Awaryjna czcionka\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Przesyłanie plików\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Plik: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtruj\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Poprawiony\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Płynne tło czasami powoduje opóźnienie przeciągnięcia\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Podświetl wszystkie panele\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Wyróżnij wszystkie panele jednocześnie (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Podświetl wszystkie zakładki\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Podświetl wszystkie zakładki na raz (Broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Fokus podąża za myszą\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Wyróżnij następny panel\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Skup widok na panel {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Wyróżnij poprzedni panel\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Wyróżnij panel powyżej\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Wyróżnij panel poniżej\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Wyróżnij panel po lewej stronie\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Wyróżnij panel na prawej\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Powiel schemat kolorów\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Czcionka\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Dla skrótów klawiszowych\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Wymuś CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Wymuś CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Wymuś LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Wymusza określony typ połączenia agenta SSH.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Zapomnij\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Przekierowanie portu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Przekierowane porty\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Ze schematu kolorów\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Z systemu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Z motywu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Strona\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Gruba\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Ogólne\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Wygeneruj wstepnie opisany problem na GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Pobierz\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Pobierz z okna ustawień zakładki\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Ustawia w oknie rozmyte przezroczyste tło\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Idź w górę\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Zielony\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupa\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Haki\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Pomóż śledzić liczbę instalacji Tabby na całym świecie!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Pomóż przetłumaczyć Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Heksadecymalny\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Ukryj\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Ukryj przycisk zamykania karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Ukryj numerację kart\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Ukryj przycisk z opcjami karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Ukryj okno po utracie wyróżnienia\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Ukrywa zadokowany terminal, gdy klikniesz obok.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Strona główna\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Gospodarz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Klucz hosta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Weryfikacja klucza hosta\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Klawisze skrótów\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"W jaki sposób Tabby prezentuje się w zmiennych środowiskach\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP proxy host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP proxy port\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikona\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamiczny\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Jeśli wyłączone, tylko niestandardowe profile pojawią się w selektorze profilu\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Natychmiastowo wywołuje echo dla Twoich danych wejściowych lokalnie\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Zwiększ rozmiar poziomego podziału\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Zwiększ rozmiar pionowego podziału\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Polecenie\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Dane wejściowe są wysyłane podczas pisania\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Tryb wejścia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Nowe linie wejściowe\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Zainstalowane\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Instalacja aktualizacji zamknie wszystkie karty i zrestartuje Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Inteligentne Ctrl-C (kopiuj/przerwij)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktywny\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Nieprawidłowa składnia\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Przeskocz host\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Przejdź do następnego słowa\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Przejdź do poprzedniego słowa\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Zachowaj\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Interwał podtrzymania aktywności (Milisekundy)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Trzymaj zadokowany terminal zawsze na górze\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Klucz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Wymiana kluczy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Klawiatura\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autoryzacja przy pomocy interaktywnej klawiatury\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Zabij\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Język\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Ostatni znany odcisk klucza hosta\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Uruchom WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Uruchom WinSCP dla bieżącej sesji SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Dowiedz się, jak zezwolić Tabby na wykrycie katalogu roboczego zdalnej powłoki.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Lewy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Pozwala, aby powłoka obsługiwała klawisz Meta zamiast systemu operacyjnego\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Tryb jasny\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Linia po linii\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Edytor linii, dane wejściowe są wysyłane po naciśnięciu Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Wypełnienie linii\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Ładowanie\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Ładowanie konfiguracji...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokalny\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokalne echo\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Lokalny terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Skrypty logowania\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Długie kliknięcie, aby uzyskać menu kontekstowe\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Zarządzaj profilami\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Max Keep Alive Count\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maksymalizuj aktywny panel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minimalny stosunek kontrastu\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Zmodyfikowano {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Mysz\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Przenieś kartę w lewo\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Przenieś kartę w prawo\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Przenieś do \\\"Bez grupowania\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Najechanie myszy na nieaktywny panel spowoduje jego aktywacje\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nazwa\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nazwa nowej konfiguracji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nazwa nowego folderu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Natywna\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Nowy\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nowa karta admina\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nowa konfiguracja na {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nazwa nowej grupy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nowa pozycja\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nowa nazwa\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Nowy profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Nowy grupa profili\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nowa nazwa profilu\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nowa karta\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nowa karta: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Nowy terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nowe okno\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nowe okno\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nowy z profilem\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Następna karta\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Brak koloru\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Brak Modyfikatora\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Żaden\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normalny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Normalny rozmiar czcionki\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Nie znaleziono\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Powiadom o aktywności\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Powiadom o zakończeniu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Ilość linijek utrzymywanych w buforze\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Wyłączony\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Oficjalny\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Dyskusje na GitHubie\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Karta pozostanie otwarta aż zakończysz sesję\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Przezroczystość\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Otwórz narzędzia deweloperskie\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Otwórz Ustawienia\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Otwórz kartę ustawień: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Otwórz panel SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opcjonalnie\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opcje\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Pomarańczowy\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Domyślny system operacyjny\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Domyślny system operacyjny ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Dane wyjściowe są pokazane jako hexdump\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Dane wyjściowe są wyświetlane w momencie otrzymania\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Tryb wyjścia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Nowe linie wyjściowe\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Zastąp wyświetlacz X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Nadpisz lokalnie i synchronizuj\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Nadpisz zdalnie i synchronizuj\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Zastąpić konfigurację zdalną i rozpocząć synchronizację?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Zastąpić konfigurację lokalną i rozpocząć synchronizację?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Etap zmiany rozmiaru panelu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Panele\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papier (legacy)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parzystość\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Częściowa synchronizacja konfiguracji nie jest możliwa, gdy konfiguracja jest zaszyfrowana przez Vault.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Przepustowość\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Hasło do klucza prywatnego z hash'em {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Hasło\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Wklej\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Wklej ze schowka\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Wklej jeśli nie wybrano, w przeciwnym razie skopiuj\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Wkleić wiele linii?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Wklej po kliknięciu środkowym przyciskiem myszy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Ścieżka lub adres lokalnego gniazda X11\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Pin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Rozszerzenia\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Folder wtyczek\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port otwarty\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Porty\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Naciśnij dowolny klawisz, aby ponownie połączyć\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Naciśnij wybrany klawisz\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Zapobiega przypadkowemu zamknięciu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Zapobiega przypadkowemu wykonaniu wklejonych poleceń\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Poprzednia karta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Klucze prywatne\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Proces zakończony\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nazwa profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profile\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profile i połączenia\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Polecenie proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Fioletowy\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Wstawia całą konfigurację Tabby do sejfu\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Szybkie połączenie\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Wyjdź\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Raw socket connection\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Limit czasu gotowości (Milisekundy)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Ostatnie\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Połącz ponownie\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Odnów połączenie aktywnej karty (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Czerwony\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Lista zmian\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Zapamiętaj na {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Zdalny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Usuń spacje i nowe linie wokół skopiowanego tekstu\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Zmień nazwę\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Zmień nazwę zakładki\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Renderowanie\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Otwórz ostatnią kartę\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Zastąp\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Zgłoś Problem\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Wymagaj dodatkowego klawisza, aby otworzyć link\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Zresetuj powiększenie\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Uruchom ponownie bieżącą sesję szeregową\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Uruchom ponownie bieżącą sesję SSH\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Uruchom ponownie bieżącą sesję Telnet\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Zrestartuj kartę\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Zresetuj aplikację, aby zastosować zmiany\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Przywrócić ustawienia domyślne?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Przywrócić ustawienia do odziedziczonych domyślnych?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Przywróć karty terminali przy starcie aplikacji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Ponownie użyj sesji dla wielu kart\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Prawa\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Prawy przycisk myszy\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Uruchom jako administrator\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Zapisz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Zapisz hasło w pęku kluczy (keychain)\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Zapisz i zastosuj\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Zapisz jako profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Zapisz układ jako profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Zapisane\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Zapisany układ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Przewiń przy wprowadzaniu poleceń\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Przewiń terminal w dół o jedną stronę\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Przewiń terminal w górę o jedną stronę\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Przewiń terminal do samego dołu\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Przewiń terminal do samej góry\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Przewijanie wstecz\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Przewiń terminal do dołu, kiedy wprowadzane jest polecenie\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Szukaj\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Szukaj schematów kolorów\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Szukaj skrótów klawiszy\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Szukaj wtyczek\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Sekretny token synchronizacji\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Wybierz\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Wybierz profil podstawowy do użycia jako szablon\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Zaznacz wszystko\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Wybierz miejsce przechowywania plików\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Wybierz profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Wybierz profil lub wprowadź adres\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Wyślij bajty wpisując wartości szesnastkowe\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Wysyła dane jeden bajt na raz\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Szeregowy\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Połączenie szeregowe\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Szeregowy: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Ustaw hasło główne\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Ustaw hasło\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Ustaw hasło\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Ustaw Tabby jako %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Ustaw 0 aby wyłączyć ostatnie profile\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Ustawia agentowi SSH nazwaną ścieżkę potoku.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Ustawienia\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Powłoka\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Powłoka nie obsługuje wykrywania bieżącej ścieżki\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integracja powłoki\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Wyświetl\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Pokaż selektor profilu {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Pokaż pole potwierdzenia podczas wklejania wielu linii\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Pokaż wbudowane profile w selektorze\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Pokaż selektor poleceń\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Pokaż plik konfiguracyjny\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Pokaż domyślne\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Pokaż mikser\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Pokaż etykiety (aby zmienić kolejność)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Pokaż ikonę profilu na karcie\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Pokaż selektor profilu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Pokaż ostatnie profile w selektorze\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Pokaż informacje o wydaniu\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Pokaż połączenia szeregowe\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Pokaż karty w trybie pełnoekranowym\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Pokaż pasek narzędzi\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Pokaż zawartość sejfu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Wsparcie dla grafiki sixelowej (eksperymentalne)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Pomiń MoTD/baner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Powolne przesyłanie (bit po bicie)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Przyciąga okno w wybrane miejsce ekranu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxy port\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Dźwięk\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Kod źródłowy\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Przestrzeń\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Podziel\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Podziel na dół\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Podziel na dół\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Podziel na lewo\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Podziel na prawo\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Podziel na górę\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Podziel na górę\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Połączenie SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Zarządzanie połączeniami SSH odbywa się teraz za pomocą zakładki \\\"Profile i połączenia\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Hasło SSH dla {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standardowe (legacy)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Uruchamianie\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Bity stopu\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Pasek\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Subskrybuj aktualizacje\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Zastępstwa dozwolone.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Zmień schemat kolorów\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Zmień profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Przełącz profil w aktywnym panelu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Przełącza warstwę graficzną terminali (eksperymentalne)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synchronizacja\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Synchronizuj automatycznie\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Synchronizuj host\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Synchronizuj klawisze skrótów\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Synchronizuj sejf\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Synchronizuj ustawienia okna\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Karta {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Aktywność zakładki\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby nie mógł rozpocząć z zainstalowanymi wtyczkami, więc wtyczki firm trzecich zostały wyłączone w tej sesji. Błąd:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Nowości i aktualizacje Tabby na Twitterze\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Karty\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Położenie kart\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Szerokość karty\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sesja Telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Tło Terminala\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Dzwonek Terminalu\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identyfikacja terminala\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Dziękujemy za pobranie Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Motyw\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Istnieją aktywne transfery plików\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Istnieje zapisane hasło dla tego połączenia\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Dotyczy to wszystkich profili danego typu\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Cienka\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Zaznacz to, jeśli doświadczasz aliasingu, ghostingu lub innych problemów wizualnych\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Przełącza na pełny ekran\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Przełącz ostatnią kartę\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Przełącz okno terminala\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Przełącza widoczność okna Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Góra\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Przytnij białą przestrzeń i nowe linie\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Spróbuj ponownie\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Próba zapisanego hasła\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Zamień panele bieżącej karty w oddzielne karty\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Bez grupy\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Odinstaluj\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Nieznane\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Nieznane dane poufne typu {type} dla {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Odepnij\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Góra\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Aktualizacja\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Uaktualnij do {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Prześlij\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Prześlij jako nową konfigurację\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Użyj {altKeyName} jako klawisza Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Użyj ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Domyślny użytkownik\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nazwa Użytkownika\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Użycie metody CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Używanie ustawionego hasła\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Sejf\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Sejf jest szyfrowanym kontenerem dla danych poufnych, takich jak hasła SSH i hasła klucza prywatnego.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Sejf jest pusty\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Sejf jest zablokowany\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Sejf nie jest skonfigurowany\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Hasło główne sejfu musi być ustawione, aby umożliwić przechowywanie danych poufnych\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Sprawdź klucze hosta podczas łączenia\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Wersja\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Wersja: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Transparentne tło\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Wizualny\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Ostrzegaj przy wklejaniu wieloliniowym\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Ostrzegaj przy zamykaniu aktywnych połączeń\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Ostrzeżenie: klucz zdalnego hosta został nagle zmieniony!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Śledzimy tylko wersje Tabby i Twojego systemu operacyjnego.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Witaj\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Nowości\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Kończąc sesję\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Po włączeniu, linki można klikać tylko podczas przytrzymania tego klawisza\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Po wykryciu WinSCP możesz uruchomić sesję SCP z menu kontekstowego.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Użyj do wyboru niestandardowego lub natywnego wyglądu dla okna terminalu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Zapobiegnie pokazywaniu powitania SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Okno\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Wymiar okna wzdłuż krawędzi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Wymiar okna z dala od krawędzi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Ramka okna\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 build 18309 lub nowszy jest zalecany dla ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Ścieżka WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Separatory słów\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Katalog roboczy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Wykrywanie katalogu roboczego\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Dzwonek terminala WSL może być wyciszony tylko przez miksera głośności\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"Terminal WSL obsługuje tylko TrueColor z włączonym ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Przekazywanie X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Żółty\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Możesz zmienić to hasło poźniej, ale jeśli je zgubisz/zapomnisz, to nie będzie możliwości jego odzyskania.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Możesz być w trakcie ataku \\\"człowiek w środku\\\" lub klucz hosta mógł właśnie zostać zmieniony.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Powiększ\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Pomniejsz\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamiczny\"\n\n"
  },
  {
    "path": "locale/pt-BR.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: pt-BR\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Portuguese, Brazilian\\n\"\n\"Language: pt_BR\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" ainda está em execução. Fechar?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} Copiar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Uma segunda família de fontes usada para exibir caracteres faltando na fonte principal\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Abortar tudo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Aceitar e salvar a tecla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Aceitar apenas desta vez\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Acessibilidade\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Fundo acrílico\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Adicionar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Adicionar um redirecionamento de porta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Adicionar uma chave privada\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Adicionar...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Espaço adicional entre as linhas\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"\\\"Avançado\\\"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Encaminhamento de agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Caminho do agente pipe\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Tipo de agente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Permite abrir arquivos .bat em abas, mas quebra em alguns shells\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Permite abrir rapidamente um terminal na pasta selecionada\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Sempre escuro\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Sempre claro\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Aparência\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplicação\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Configurações do aplicativo\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Tem certeza que deseja fechar a \\\"Tabby\\\"? Você pode desativar essa mensagem em Configurações -> Janela.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Você tem certeza?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumentos\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Faça uma pergunta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Perguntar antes de fechar a aba do navegador\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Audível\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Método de autenticação\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automático\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Abrir automaticamente um terminal no início da aplicação\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automático\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Atualizações automáticas\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Carregar automaticamente alterações e procurar por atualizações a cada minuto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Disponível\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Tipo de fundo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Modo botão Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Taxa de dados (Baud Rate)\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Começo da linha\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Piscar cursor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Azul\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Desfocar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Peso da fonte em negrito\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Inferior\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Colar entre colchetes (requer suporte ao \\\"shell\\\")\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Modo de transmissão. Clique em qualquer lugar para cancelar.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Embutido\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Cancelar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Alterar taxa de dados\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Mudar cor da aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Alterar a senha mestra\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Buscar atualizações\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Cifras\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Limpar\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Limpar perfis recentes\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Limpar terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Limpar terminal após conexão\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Área de Transferência\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Fechar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Fechar e nunca mais mostrar novamente\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Fechar o painel em foco\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Fechar as outras abas\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Fechar aba\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Fechar abas à esquerda\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Fechar abas à direita\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Fechar a janela depois de fechar a última aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Cor\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Esquema de cores\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Esquema de cores\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Cores\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Combinar todas as abas na aba atual\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Linha de comando\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"stdin/stdout do comando é usado ao invés de uma conexão de rede\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Comandos\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Compactado (legado)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Configuração excluída\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Configuração baixada\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Arquivo de configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Configurar sincronização\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Configuração carregada\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Configurações\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Conectar-se através de um servidor proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Conectando a %s...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Conecte-se a um host diferente primeiro e use-o como um proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Conectando\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Conexão\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"A conexão falhou: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"O nome da conexão será usado no lugar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu de contexto\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Controla a quantidade de espaço entre elementos\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Copiado\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Copiar\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Copiar o caminho atual\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Copiar caminho completo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Copiar a seleção\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Copiar para área de transferência\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Copiar com formatação\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Não foi possível descriptografar a configuração\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Criar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Criar diretório\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Atual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Esquema de cores atual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Impressão digital da chave do host atual\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Processo atual: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Formato do cursor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS Personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Modo escuro\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bits de dados\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Depurando\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Diminuir tamanho de divisão horizontal\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Diminuir tamanho de divisão horizontal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Tipo de \\\"Conectar a \\\" padrão\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Tipo de conexão padrão usado pelo recurso de conexão rápida (ex. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Perfil padrão para novas abas\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Configurações de grupo de perfil padrão\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Configurações do perfil padrão\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Padrões\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Padrões para {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Excluir\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Excluir {name}?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Excluir {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Apagar linha inteira\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Excluir a próxima palavra\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Excluir palavra anterior\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Excluir a configuração do lado remoto?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Excluir os perfis do grupo?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Excluir esse script?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Excluir conteúdo do vault?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Apagando\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Dispositivo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Desabilitar\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Desativar título da aba dinâmica\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Desativar fundo fluente enquanto arrasta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Desativar aceleração de GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Desabilitado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Desconectar\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Desconectar aba atual (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Desconectar de {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Exibir imagens através de sequências de escape Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Exibir em\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Não abortar\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Não feche\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Não me lembre\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Janela sempre no topo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Encaixe o terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Tamanho do terminal encaixado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Espaço do terminal encaixado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Encaixando\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"A seleção com clique duplo irá parar nesses caracteres\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Abaixo\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Download\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Desenhar texto em negrito em cores brilhantes\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplicar\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplicar como administrador\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplicar Aba\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Editar\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Editar localmente\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Habilitar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Habilitar análises\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Permitir animações\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Permite a instalação automática de atualizações quando elas estiverem disponíveis.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Habilitar opção de fundo fluente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Habilitar ligaduras de fonte\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Ativar atalho global (Ctrl-Espaço)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Habilita a API \\\"ConPTY\\\" experimental do Windows\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Criptografar arquivo de configuração\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Fim da linha\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Ambiente\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Apagar configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Apagar o Cofre\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Erro em {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Correspondência exata\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Exemplo:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Estilo experimental do Windows 10 conhecido por causar problemas\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Fonte alternativa\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Transferências de arquivos\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Arquivo: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtro\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Corrigido\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Fundo fluente às vezes causa atraso de arrastar\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Focar todos os painéis\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Focar todos os painéis de uma vez (Transmissão)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Focar todas as abas\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Focar todos os painéis de uma vez (broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"O foco segue o mouse\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Focar próximo painel\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Foco do painel {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Focar no painel anterior\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Focar no painel acima\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Focar no painel abaixo\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Concentre no painel à esquerda\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Focar no painel à direita\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Seguir o esquema de cores\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Fonte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Para atalhos de teclado\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Forçar CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Forçar CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Forçar LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Força um tipo de conexão com agente SSH específico.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Esquecer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Encaminhar porta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Portas encaminhadas\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Do esquema de cores\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Do sistema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Do tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Interface\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Preencher\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Geral\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Gerar uma issue pré-preenchida no GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Obter\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Obtenha-o na janela de configurações da Tabby Web\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Dá à janela um fundo transparente borrado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Ir para cima\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Verde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacks\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Ajude a acompanhar o número de instalações do Tabby pelo mundo!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Ajude a traduzir o tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Ocultar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Ocultar botão de fechar aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Ocultar índice da aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Ocultar botão de opções de aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Ocultar janela em perda de foco\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Oculta o terminal quando você clica longe.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Página Inicial\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Chave do host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Verificação da chave do host\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Teclas de atalho\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Como Tabby se apresenta através de variáveis de ambiente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Host do proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Porta do Proxy HTTP\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ícone\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dinâmico\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Se desativado, somente perfis personalizados aparecerão no seletor de perfil\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Imediatamente repete sua entrada localmente\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Aumentar tamanho de divisão horizontal\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Aumentar o tamanho da divisão vertical\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Entrada\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"O texto é enviado enquanto você digita\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modo de entrada\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Novas linhas de entrada\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Instalado\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Ao instalar a atualização, todas as abas serão fechadas e o Tabby reiniciará.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Ctrl-C Inteligente (copiar/cancelar)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Sintaxe inválida\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Servidor de Pulo\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Pular para a próxima palavra\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Pular para a palavra anterior\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Manter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Manter o intervalo vivo (milissegundos)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Mantenha o terminal encaixado sempre no topo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Chave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Troca de chaves\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Teclado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autenticação interativa do teclado\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Finalizar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Idioma\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Última impressão digital da chave de host é conhecida\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Abrir \\\"WinSCP\\\"\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Inicie o \\\"WinSCP\\\" na sessão SSH atual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Aprenda como permitir que o \\\"Tabby\\\" detecte o diretório de trabalho da \\\"Shell\\\" remota.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Esquerda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Permite que o shell manipule Meta key em vez de S.O\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Modo claro\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Linha por linha\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Editor de linha, a entrada é enviada depois que você pressionar Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Linha de preenchimento\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Carregando\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Carregando configurações...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Local\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Efeito local\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminal local\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Scripts de login\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Clique longo para menu de contexto\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Gerenciar perfil\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Manter a contagem máxima viva\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximizar o painel ativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Relação de contraste mínima\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Modificado em {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"mouse\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Mover a aba para a esquerda\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Mover a aba para a direita\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Mover para \\\"Desagrupado\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Mover o mouse sobre um painel inativo fará com que ele seja ativado\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nome\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nome para a nova configuração\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Nome para o novo diretório\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Novo\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Nova aba admin\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nova configuração em {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nome do novo grupo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Novo item\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Novo nome\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Novo perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Novo Grupo de Perfil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Novo nome do perfil\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Nova aba\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Nova aba: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Novo terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nova janela\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nova Janela\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Novo com perfil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Próxima aba\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Sem cor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Não modificar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Nenhum\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Peso da fonte normal\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Não encontrado\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Notificar sobre a atividade\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Notificar quando terminar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Número de linhas contidas no buffer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Desligado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Oficial\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Nas discussões no GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Só fechar a aba quando a sessão for terminada explicitamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacidade\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Abrir ferramentas de desenvolvimento\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Abrir configurações\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Abrir guia de configurações: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Abrir painel SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opcional\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opções\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Laranja\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Padrão do sistema\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Padrão do sistema ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"A saída é mostrada como um hexadecimal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"A saída é mostrada como é recebida\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Mode de saída\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Novas linhas de saída\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Sobrepor a tela X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Sobrescrever local e sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Sobrescrever local e sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Substituir as configurações no lado remoto e começar a sincronizar?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Sobrescrever as configurações locais e começar a sincronizar?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Passo de redimensionamento\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Painéis\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papel (legado)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paridade\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Sincronização parcial de configuração não é possível quando a configuração é criptografada pelo Cofre.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Passar\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Frase de senha para uma chave privada com hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Senha\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Colar\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Colar da área de transferência\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Cola se não selecionado, senão copia selecionado\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Colar várias linhas?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Colar com clique central\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Caminho ou endereço do soquete X11 local\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Pin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Plugins\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Pasta de plugins\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Porta\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Porta aberta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Portas\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Pressione qualquer tecla para reconectar\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Pressione a tecla agora\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Impede fechamento acidental\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Prevenir a execução acidental de comandos colados\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Aba anterior\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Chaves privadas\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Processo concluído\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nome do Perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Perfils\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Perfis e conexões\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Programa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Comando do proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Roxo\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Coloca todas as configurações da Tabby no cofre\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Conexão rápida\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Sair\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Conexão de soquete pura\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Tempo limite em(milissegundos)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Récente\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Reconectar\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Reconectar a aba atual (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Vermelho\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Notas da versão\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Lembrar do {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Remoto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Remover espaços em branco e novas linhas em torno do texto copiado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Renomear\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Renomear aba\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Renderização\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Reabrir ultima aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Substituir\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Reportar um problema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Exigir uma tecla para clicar em links\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Redefinir Zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Reiniciar a sessão serial atual\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Reiniciar a sessão SSH atual\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Reiniciar sessão de Telnet atual\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Reiniciar aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Reinicie o aplicativo para aplicar as alterações\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Restaurar as configurações para o padrão?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Restaurar configurações para padrões herdados ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Restaurar abas de terminal na inicialização do aplicativo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Reutilizar a sessão para multiplas abas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Direita\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Clique direito\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Executar como administrador\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Salvar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Salvar uma senha no teclado\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Salvar e aplicar\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Salvar como perfil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Salvar layout como perfil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Salvo\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Layout salvo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Rolar na entrada\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Rolar terminal uma página para baixo\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Rolar o terminal uma página para cima\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Rolar terminal para baixo\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Rolar o terminal para o topo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Reverter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Rola o terminal para a parte inferior na entrada do usuário\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Pesquisar\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Pesquisar esquemas de cores\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Procurar atalhos\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Buscar plugins\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Token de sincronização secreta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Selecionar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Selecione um perfil base para usar como um modelo\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Selecionar tudo\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Selecionar armazenamento de arquivos\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Selecione o perfil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Selecione o perfil ou insira um endereço\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Enviar bytes digitando em valores hexadecimais\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Envia dados um byte por vez\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Série\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Conexão Serial\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Série: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Definir senha mestre\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Definir senha\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Definir senha\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Definir Tabby como %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Defina 0 para desativar os perfis recentes\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Define o caminho de tubo do agente SSH.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Configurações\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell não suporta a detecção de caminho atual\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integração com o Shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Mostrar\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Exibir seletor de perfil {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Mostrar uma caixa de confirmação quando colar várias linhas\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Mostrar perfis integrados no seletor\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Mostrar seletor de comandos\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Mostrar arquivo de configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Mostrar padrões\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Mostrar Mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Mostrar etiquetas do painel (para reorganização)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Mostrar ícone do perfil na aba\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Mostrar seletor de perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Mostrar perfis recentes no seletor\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Mostrar notas de lançamento\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Mostrar conexões em série\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Mostrar abas no modo de tela cheia\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Mostrar barra de ferramentas\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Mostrar conteúdo do cofre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Suporte gráfico Sixel (experimental)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Pular banner do MoTD/\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Feed lento\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Toca a janela em um lado da tela\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"Usar proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Host do proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Porta do proxy SOCKS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Som\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Código-fonte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Espaçamento\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Dividir\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Dividir para baixo\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Dividir para baixo\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Dividir para a esquerda\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Dividir para a direita\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Rolar para o topo\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Dividir para cima\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"Conexão SSH\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"O gerenciamento de conexões SSH é feito através da aba \\\"Perfis e Conexões\\\"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Senha SSH para {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Padrão (legado)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Startup\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Pare os bits\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Tirar\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Inscrever-se para atualizações\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Substituições permitidas.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Alternar esquema de cores\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Alternar perfil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Trocar perfil no painel ativo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Alterna a implementação do terminal frontend (experimental)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sincronizar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sincronizar automaticamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Sincronizar host\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Sincronizar atalhos\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sincronizar Cofre\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sincronizar configurações de janela\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Aba {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Atividade da aba\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby não pôde iniciar com seus plugins, então todos os plugins de terceiros foram desativados nesta sessão. O erro foi:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Notícias e atualizações do Tabby no Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Abas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Localização das abas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Largura da aba\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sessão telefônica\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Fundo do terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Aviso do terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Identificação do terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Obrigado por baixar Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Existem transferências de arquivos ativas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Existe uma senha salva para esta conexão\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Estas se aplicam a todos os perfis de um determinado tipo\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Estas se aplicam a todos os perfis de um determinado tipo neste grupo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Fina\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Marque isto se estiver enfrentando problemas visuais, como aliasing, fantasmas ou outros problemas visuais\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Ativar/desativar modo tela cheia\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Alternar última aba\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Alternar janela do terminal\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Alterna a visibilidade da janela da aba\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Topo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Aparar espaços em branco e linhas novas\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Tentar novamente\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Tentando salvar a senha\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Transformar painéis da aba atual em abas separadas\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Desagrupado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Desinstalar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Desconhecido\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Chave desconhecida do tipo {type} para {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Liberar guia\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Para cima\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Atualizar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Fazer upgrade para {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Transferir\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Fazer upload como uma nova configuração\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Use {altKeyName} como Meta key\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Usar ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Usuário padrão\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nome de usuário\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Usando o método CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Usando a senha predefinida\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Cofre\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"O Cofre é um contêiner sempre criptografado para segredos, como senhas de SSH e senhas de chave privada.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"O cofre está vazio\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"O cofre está trancado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"O cofre não está configurado\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"A senha mestre do cofre precisa ser definida para permitir armazenamento\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verificar as chaves do host ao conectar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Versão\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Versão: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibração\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Avisar ao colar multi-linha\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Avisar ao fechar conexões ativas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Aviso: a chave do host remoto mudou repentinamente!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Estamos rastreando apenas as versões de Tabby e OS.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Bem-vindo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Novidades\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Quando uma sessão termina\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Quando ativado, os links só são clicáveis enquanto segura esta chave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Quando o WinSCP é detectado, você pode iniciar uma sessão SCP no menu de contexto.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Se uma janela personalizada ou uma janela nativa do sistema deve ser usada\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Impede que a saudação por SSH apareça\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Janela\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimensão da janela ao longo da borda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimensão da janela fora da borda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Quadro de janela\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Janelas\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 Compilação 18309 ou superior é recomendada para ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Caminho do WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Separadores de palavra\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Diretório de trabalho\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detectar de diretório de trabalho\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"O terminal WSL só pode ser silenciado pelo volume do mixer\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"O terminal WSL só suporta TrueColor com ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Encaminhamento X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Amarelo\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Você pode mudá-lo mais tarde, mas é inrecuperável se esquecido.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Você pode estar sob um ataque no meio agora mesmo, ou a chave do anfitrião poderia ter sido alterada.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Aumentar zoom\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Diminuir zoom\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dinâmico\"\n"
  },
  {
    "path": "locale/pt-PT.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: pt-PT\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Portuguese\\n\"\n\"Language: pt_PT\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" ainda está em execução. Fechar?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} cópia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"एक दूसरा फ़ॉन्ट परिवार मुख्य फ़ॉन्ट में लापता वर्णों को प्रदर्शित करता था\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Abortar tudo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Aceitar e lembrar a chave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Aceitar apenas desta vez\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"acessibilidade\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Fundo acrítico\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Adicionar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Adicionar uma porta de encaminhamento\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Adicionar uma chave privada\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Adicionar...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Espaço adicional entre linhas\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avançado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agente\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agente de encaminhamento\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Tipo de agente\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Permite abrir ficheiros .bat em separadores, mas parte algumas linhas de comando\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Permite abrir um terminal rapidamente na pasta selecionada\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"sempre escuro\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Sempre luminoso\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Aparência\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Aplicação\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Definições da aplicação\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Tem a certeza que quer fechar o Tabby? Pode desativar este aviso em Configurações -> Janela.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Tens a certeza?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argumentos\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Faça uma pergunta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Perguntar antes de fechar o separador do browser\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Audível\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Método de autenticação\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Autor\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Automático\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Abrir automaticamente um terminal no início da aplicação\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automático\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Atualizações automáticas\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Enviar alterações automaticamente e procurar por atualizações a cada minuto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Disponível\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Tipo de fundo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Taxa de transmissão\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Início de linha\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Piscar cursor\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Azul\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Desfocar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Baixo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Embutido\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Cancelar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Alterar taxa de transmissão\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Alterar a senha mestra\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Verificar atualizações\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Cifras\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Limpar perfis recentes\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Limpar terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Área de Transferência\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Fechar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Fechar e não mostrar novamente\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Fechar o painel ativo\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Fechar os outros separadores\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Fechar separador\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Fechar os separadores à esquerda\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Fechar os separadores à direita\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Cor\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Esquema de cores\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Combinar todas as abas na aba atual\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Linha de comandos\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Configuração transferida\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Ficheiro de configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Configurar sincronização\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Configuração enviada\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Configuração\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Conectar através de um servidor proxy\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"A ligar a %s...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Conectar a um anfitrião diferente primeiro e use-o como um proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"A ligar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Ligação\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"A ligação falhou: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Menu de contexto\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Copiado\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Copiar\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Copiar o caminho atual\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Copiar ao selecionar\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Copiar para área de transferência\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Não foi possível desencriptar a configuração\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Atual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Esquema de cores atual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Processo atual: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Formato do cursor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"CSS Personalizado\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Bits de dados\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Perfil padrão para novas abas\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Parâmetros do grupo de perfis por defeito\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Configurações de perfil padrão\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Predefinições\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Padrões para {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Apagar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Apagar \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Apagar {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Apagar palavra seguinte\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Apagar palavra anterior\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Eliminar os perfis do grupo?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Eliminar este script?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Apagar conteúdo do cofre?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"A apagar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Dispositivo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direto\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Desativar\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Desativar titulo dinâmico do separador\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Desativar acelerador GPU\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Inativo\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Desligar\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Desligar {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Ecrã ligado\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Não abortar\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Não fechar\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Não lembrar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Ancorar sempre no topo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Ancorar o terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Tamanho do terminal ancorado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Espaço do terminal ancorado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"A ancorar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"A seleção com clique duplo irá parar nesses caracteres\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Baixo\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Descarregar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplicar\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplicar como administrador\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplicar separador\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Editar\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Editar localmente\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Ativar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Ativar recolha de dados\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Ativar instalação automática de atualizações quando estiverem disponíveis.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Ativar ligaduras de fonte tipográfica\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Ativar atalho global (Ctrl + Espaço)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Ativar a API ConPTY experimental do Windows\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Encriptar ficheiro de configuração\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Fim de linha\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Ambiente\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Apagar configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Eliminar o cofre\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Erro em {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Correspondência exata\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Exemplo:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Fonte de reserva\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Transferências de ficheiros\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Ficheiro: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fixado\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Focar todos os painéis\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Focar todos os painéis de uma vez (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Focar no painel seguinte\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Focar no painel anterior\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Focar o painel acima\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Focar o painel abaixo\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Focar o painel à esquerda\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Focar o painel à direita\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Fonte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Forçar CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Forçar CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Forçar LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Forçar um agente específico para a ligação SSH.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Esquecer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Encaminhar porta\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Portas encaminhadas\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"A partir do esquema de cores\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"A partir do tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Completo\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Geral\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Gerar uma issue pré-preenchida no GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Obter\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Obtenha-o da janela de configurações da Tabby Web\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Dá à janela um fundo transparente desfocado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Subir\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Verde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupo\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Ajude a seguir o número de instalações do Tabby pelo mundo!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Esconder o botão para fechar o separador\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Ocultar índice do separador\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Ocultar janela quando perde o foco\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Página inicial\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Servidor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Chave do servidor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Verificação da chave do servidor\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Teclas de atalho\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Proxy HTTP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Proxy HTTP - Servidor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Proxy HTTP - Porta\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ícone\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dinâmico\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"O texto é enviado enquanto digitas\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Modo de Entrada\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Instalado\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Ao instalar a atualização, todos os separadores serão fechadas e o Tabby reiniciará.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interactivo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Sintaxe inválida\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Saltar para a palavra seguinte\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Saltar para a palavra anterior\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Manter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Chave\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Troca de chaves\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Teclado\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Autenticação do teclado interativa\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Terminar\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Idioma\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Última impressão digital da chave de anfitrião conhecida\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Abrir WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Iniciar o WinSCP para a sessão SSH atual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Aprenda a permitir que o Tabby detecte o diretório de trabalho da shell remota.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Esquerda\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Linha por linha\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Espaçamento entre linhas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"A carregar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"A carregar configurações...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Terminal local\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Scripts de login\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Clique longo para menu de contexto\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Gerir perfis\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximizar o painel ativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Modificado em {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Rato\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Mover separador para a esquerda\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Mover separador para a direita\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Mover para \\\"Desagrupado\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Nome\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Nome para a nova configuração\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Nativo\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Novo separador de administração\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Nova configuração em {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Novo item\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Novo nome\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Novo perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nome do novo perfil\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Novo separador\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Novo separador: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Novo terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nova janela\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Novo com perfil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Separador seguinte\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Sem cor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Nenhum Modificador\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Nenhum\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Não encontrado\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Notificar quando houver atividade\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Notificar quando terminar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Número de linhas mantidas no buffer\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Desligado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Oficial\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"Nas discussões no GitHub\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacidade\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Abrir ferramentas de programador\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Abrir Configurações\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Abrir separador de configurações: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Abrir separador de SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Opcional\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Opções\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Cor de laranja\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Padrão do SO\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Padrão do SO ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"A visualização é mostrada em hexadecimal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"A visualização é mostrada tal como é recebida\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Modo de saída\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Novas linhas da visualização\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Sobrepor o ecrã X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Sobrescrever local e sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Sobrescrever remoto e sincronizar\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Rescrever as configurações do lado remoto e começar a sincronizar?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Rescrever as configurações locais e começar a sincronizar?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paridade\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Sincronização parcial de configuração não é possível quando a configuração é criptografada pelo Cofre.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Palavra-passe para uma chave privada com hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Palavra-Passe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Colar\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Colar da área de transferência\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Colar várias linhas?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Colar com botão do meio do rato\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Caminho ou endereço do socket X11 local\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Afixar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Extensões\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Pasta de extensões\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Porto\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Porto aberto\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Portos\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Pressione qualquer tecla para reconectar\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Pressione a tecla agora\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Impede o fecho acidental\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Impede a execução acidental de comandos colados\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Separador anterior\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Chaves privadas\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Processo concluído\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Nome do perfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Perfis\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Perfis e ligações\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Programa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Comando do proxy\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Roxo\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Colocar todas as configurações do Tabby no cofre\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Ligação rápida\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Sair\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Ligação por socket\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Tempo limite (milissegundos)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Recente\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Voltar a ligar\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Vermelho\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Expressão Regular\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Notas de lançamento\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Lembrar durante {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Remoto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Renomear\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Guardar e aplicar\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Guardar como perfil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Salvo\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Layout salvo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Procurar\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Selecionar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Selecionar armazenamento\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Selecionar perfil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Selecionar perfil ou introduza um endereço\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Envia um byte de dados de cada vez\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serial\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Conexão Serial\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serial: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Definir palavra-passe\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Definir Tabby como %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Defina o valor 0 para desativar perfis recentes\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Configurações\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Linha de Comando\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"A linha de comandos não suporta a deteção do caminho atual\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Integração da linha de comandos\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Mostra o ficheiro de configuração\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Mostrar valores por defeito\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Mostrar Mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Mostrar ícone do perfil no separador\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Mostrar conteúdo do cofre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"Proxy SOCKS\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Proxy SOCKS - Servidor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Proxy SOCKS - Porto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Iniciar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Substituições permitidas.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Mudar de perfil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Sincronizar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Sincronizar automaticamente\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Sincronizar Cofre\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Sincronizar configurações da janela\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Separador {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Atividade do separador\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Separadores\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Localização do separador\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Largura do separador\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Sessão telnet\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Fundo do terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Campainha do terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Obrigado por descarregar o Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Existem transferências de ficheiros ativas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Existe uma senha guardada para esta conexão\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Estas aplicam-se a todos os perfis de um determinado tipo\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Fino\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Marque isto se tiver problemas visuais, como aliasing, ghosting ou outros problemas visuais\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Ativar/desativar o modo ecrã inteiro\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Ativar/desativar o último separador\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Ativar/desativar a janela\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Ativa/desativa a visibilidade da janela\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Topo\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Tente novamente\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Tentando senha guardada\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Desagrupado\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Desinstalar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Desconhecido\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Segredo desconhecido do tipo {type} para {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Desafixar\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Cima\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Atualizar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Atualizar para {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Carregar (upload)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Fazer upload como uma nova configuração\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Use {altKeyName} como chave Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Usar ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Utilizador Padrão\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Nome de utilizador\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"A usar o método CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Usando a senha predefinida\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Cofre\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"O Cofre é um contentor sempre encriptado para segredos como senhas de SSH e frases de chave privada.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"O cofre está vazio\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"O cofre está trancado\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"O cofre não está configurado\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"A senha mestra do cofre precisa de ser definida para permitir o armazenamento de segredos\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verificar as chaves do host ao conectar\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Versão\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Versão: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Cores vibrantes\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Avisar ao colar várias linhas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Avisar ao fechar conexões ativas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Aviso: a chave do host remoto mudou repentinamente!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Estamos rastreando apenas as suas versões de Tabby e de sistema operativo.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Bem-vindo\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Novidades\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Quando ativado, as ligações só são clicáveis enquanto prime esta tecla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Quando o WinSCP é detectado, você pode iniciar uma sessão SCP no menu de contexto.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Se uma janela personalizada ou uma janela nativa do sistema operativo deve ser usada\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Janela\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Dimensão da janela ao longo da borda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Dimensão da janela fora da borda\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Quadro da janela\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Versão 18309 ou superior do Windows 10 é recomendada para ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Caminho WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Separadores de palavras\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Diretório atual\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detecção do diretório atual\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"O terminal WSL só pode ser silenciado pelo misturador de volume\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"O terminal WSL só suporta TrueColor com ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Encaminhamento X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Amarelo\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Você poderá mudá-lo mais tarde, mas é irrecuperável se esquecido.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Você pode estar sob um ataque man-in-the-middle agora mesmo, ou a chave do anfitrião pode ter sido alterada.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Aumentar zoom\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Diminuir zoom\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dinâmico\"\n\n"
  },
  {
    "path": "locale/ru-RU.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: ru\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Russian\\n\"\n\"Language: ru_RU\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" всё ещё выполняется. Желаете закрыть?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"Копия {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Семейство шрифтов, используемое для отображения символов, отсутствующих в основном шрифте\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Прервать все\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Принять и запомнить ключ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Принять только в этот раз\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Специальные возможности\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Акриловый фон\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Добавить\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Добавить перенаправление порта\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Добавить приватный ключ\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Добавить...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Доп. пространство между строками\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Расширенные\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Агент\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Перенаправление агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Путь к pipe SSH-агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Тип агента\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Позволяет открывать .bat файлы во вкладках, но ломает некоторые оболочки\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Позволяет быстро открыть терминал в выбранной папке\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Всегда тёмная\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Всегда светлая\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Внешний вид\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Приложение\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Настройки приложения\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Вы уверены, что хотите закрыть Tabby? Это предупреждение можно отключить в Настройках -> Окно.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Вы уверены?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Аргументы\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Задать вопрос\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Спрашивать перед закрытием вкладки\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Метод аутентификации\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Автор\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Автоматически\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Автооткрытие терминала при запуске приложения\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Автоматически\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Обновлять автоматически\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Автоматически загружать изменения и проверять наличие обновлений каждую минуту\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Доступно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Тип фона\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Режим работы клавиши Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Скорость передачи\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Начало строки\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Мигающий курсор\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Синий\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Размытие\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Величина жирности шрифта\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Снизу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Bracketed-вставка (требует поддержки оболочки)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Широковещательный режим. Нажмите в любом месте для отмены.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Встроенные\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Отмена\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Изменить скорость передачи\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Изменить цвет вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Изменить мастер-пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Проверить обновления\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Шифры\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Очистить\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Очистить недавние профили\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Очистить терминал\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Очистить терминал после подключения\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Буфер обмена\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Закрыть\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Закрыть и не показывать снова\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Закрыть активную панель\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Закрыть другие вкладки\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Закрыть вкладку\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Закрыть вкладки слева\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Закрыть вкладки справа\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Закрывать окно после закрытия последней вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Цвет\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Цветовая схема\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Цветовая схема\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Стиль\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Объединить все вкладки в текущую\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Командная строка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Вместо сетевого соединения используется stdin/stdout команды\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Команды\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Компактная (legacy)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Настройка удалена\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Конфигурация скачана\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Файл настроек\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Синхронизация конфигурации\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Конфигурация загружена\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Конфигурации\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Подключиться через прокси-сервер\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Подключиться к \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Подключиться к другому хосту и использовать его как прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Соединение\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Соединение\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Ошибка соединения: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Вместо этого будет использоваться имя соединения\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Контекстное меню\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Управляет расстоянием между элементами\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Скопировано\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Копировать\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Копировать текущий путь\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Копировать полный путь\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Копировать при выделении\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Копировать в буфер обмена\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Копировать с форматированием\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Не удалось расшифровать конфигурацию\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Создать\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Создать каталог\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Текущий\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Текущая цветовая схема\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Отпечаток ключа текущего хоста\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Текущий процесс: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Форма курсора\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Пользовательская\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Пользовательский CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Тёмная тема\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Биты данных\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Отладка\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Уменьшить размер разделения по горизонтали\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Уменьшить размер разделения по вертикали\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"«Подключиться к» по умолчанию\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Подключение по умолчанию, используемое быстрым подключением (например, SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Профиль по умолчанию для новых вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Настройки группы профилей по умолчанию\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Настройки профилей по умолчанию\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Значения по умолчанию\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"По умолчанию для {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Удалить\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Удалить \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Удалить {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Удалить всю строку\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Удалить следующее слово\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Удалить предыдущее слово\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Удалить конфигурацию с удаленной стороны?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Удалить профили этой группы?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Удалить этот скрипт?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Удалить содержимое хранилища?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Удаление\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Устройство\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Напрямую\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Отключить\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Отключить динамический заголовок вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Отключить прозрачный фон на время перетаскивания окна\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Отключить GPU-ускорение\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Отключено\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Отсоединиться\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Отключиться в текущей вкладке (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Отключиться от {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Отображать изображения при помощи управляющей последовательности Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Отобразить на\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Не прерывать\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Не закрывать\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Не запоминать\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Закрепить поверх всех окон\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Закрепить терминал\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Размер закреплённого терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Отступы закреплённого терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Закрепление\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Выделение по двойному щелчку остановится на этих символах\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Вниз\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Скачать\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Выделять полужирный текст ярким цветом\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Дублировать\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Дублировать как администратор\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Дублировать вкладку\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Изменить\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Изменить локально\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Включить\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Включить аналитику\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Включить анимацию\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Включить автоматическую установку обновлений, когда они доступны.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Включить опцию свободного фона\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Включить лигатуры шрифтов\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Включить глобальную горячую клавишу (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Включить экспериментальный API Windows ConPTY\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Зашифровать файл конфигурации\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Конец строки\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Окружение\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Очистить конфигурацию\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Очистить хранилище\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Ошибка в {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Точное совпадение\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Например:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Экспериментальный стиль фона Windows 10 вызывает проблемы\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Экспорт\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Запасной шрифт\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Передача файлов\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Файл: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Фильтр\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Фиксированная\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Иногда прозрачный фон вызывает лаги при перетаскивании\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Фокус на все панелях\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Фокус на все панели сразу (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Фокус на всех панелях\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Фокус на всех панелях сразу (broadcast)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Фокус следует за курсором\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Фокус на следующей панели\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Фокус на панели {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Фокус на предыдущей панели\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Фокус на панели сверху\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Фокус на панели снизу\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Фокус на панели слева\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Фокус на панели справа\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Следовать цветовой схеме\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Шрифт\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Для сочетаний клавиш\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Изменить на CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Изменить на CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Изменить на LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Принудительно устанавливает определенный тип подключения к SSH-агенту.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Забыть\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Перенаправить порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Перенаправленные порты\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Из цветовой схемы\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Системная\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Из темы\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Фронтенд\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Полный\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Общие\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Открыть пред-заполненный отчет на GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Получить\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Скопируйте его из окна настроек web-версии Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Придает окну размытый прозрачный фон\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Вверх\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Зелёный\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Группа\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Проблемы\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Помогите отслеживать количество установок Tabby по всему миру!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Помогите с переводом Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Шестнадцатеричный\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Скрыть\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Скрыть кнопку закрытия вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Скрыть нумерацию вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Скрыть параметры вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Скрыть окно при потере фокуса\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Скрывает закреплённый терминал при нажатии вне его.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Главная страница\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Хост\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Ключ хоста\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Проверка ключа хоста\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Горячие клавиши\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Как Tabby обозначает себя в глобальных переменных\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP-прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Хост HTTP-прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Порт HTTP-прокси\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Иконка\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Динамическая\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Если отключено, при выборе профиля будут отображаться только пользовательские профили\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Мгновенно локально отображает ваш ввод\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Увеличить размер разделения по горизонтали\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Увеличить размер разделения по вертикали\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Ввод\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Введённые данные передаются во время ввода\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Режим ввода\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Переносы строк во вводе\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Установлено\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Установка обновления приведет к закрытию всех вкладок и перезапуску Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Умный Ctrl-C (копировать/отменить)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Интерактивная\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Неверный синтаксис\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Промежуточный хост\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Перейти к следующему слову\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Перейти к предыдущему слову\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Оставить\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Интервал проверки соединения (мс)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Отображать закреплённый терминал всегда поверх всех окон\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Ключ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Обмен ключами\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Клавиатура\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Интерактивная аутентификация\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Завершить принудительно\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Язык\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Последний известный отпечаток ключа хоста\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Запустить WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Запустить WinSCP для текущей SSH сессии\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Узнайте, как разрешить Tabby определять рабочий каталог удалённой оболочки.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Слева\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Позволяет оболочке обрабатывать клавишу Meta вместо ОС\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Светлая тема\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Построчно\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Редактор строк, ввод отправляется после нажатия Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Междустрочный интервал\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Загрузка\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Загрузка конфигураций...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Локальное\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Локальное эхо\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Локальный терминал\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Скрипты входа\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Долгое нажатие для контекстного меню\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Управление профилями\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Максимальное количество проверок соединения\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Развернуть активную панель\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Минимальное контрастное соотношение\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Изменено {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Мышь\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Переместить вкладку влево\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Переместить вкладку вправо\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Переместить в «Без группы»\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Наведение мыши на неактивную панель приведёт к её активации\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Имя\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Имя для новой конфигурации\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Имя для новой папки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Системная\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Новый\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Новый как администратор\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Новая конфигурация на {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Имя новой группы\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Новый элемент\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Новое имя\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Новый профиль\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Новая группа профилей\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Новое имя профиля\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Новая вкладка\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Новая вкладка: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Новый терминал\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Новое окно\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Новое окно\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Новый с профилем\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Следующая вкладка\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Без цвета\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Без модификатора\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Нет\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Нормальный\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Нормальный размер шрифта\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Не найдено\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Уведомить об активности\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Уведомить о завершении\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Количество строк, сохраняемых в буфере\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Выкл.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Официальный\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"На GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Закрывать вкладки только при явном закрытии сеанса\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Прозрачность\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Открыть DevTools\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Открыть настройки\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Открыть вкладку настроек: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Открыть панель SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Опциональный\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Параметры\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Оранжевый\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"По умолчанию для ОС\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"По умолчанию для ОС ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Вывод показан в шестнадцатеричном виде\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Вывод показан в изначальном виде\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Режим вывода\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Переносы строк в выводе\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Переопределить дисплей X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Перезаписать локальную конфигурацию и синхронизировать\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Перезаписать удаленную конфигурацию и синхронизировать\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Перезаписать удаленную конфигурацию и начать синхронизацию?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Перезаписать локальную конфигурацию и начать синхронизацию?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Шаг изменения размера панели\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Панели\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Бумага (legacy)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Контроль чётности\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Частичная синхронизация конфигурации невозможна, если конфигурация зашифрована с помощью хранилища.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Пропускать насквозь\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Парольная фраза для приватного ключа с хэшем {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Пароль\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Вставить\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Вставить из буфера обмена\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Вставить, если нет выделения, иначе скопировать\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Вставить несколько строк?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Вставить средней кнопкой мыши\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Путь или адрес локального сокета X11\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Закрепить\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Плагины\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Папка с плагинами\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Порт\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Порт открыт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Порты\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Нажмите любую клавишу для переподключения\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Нажмите клавишу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Предотвращает случайное закрытие\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Предотвращает случайное выполнение вставленных команд\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Предыдущая вкладка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Приватные ключи\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Процесс завершён\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Название профиля\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Профили\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Профили и соединения\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Программа\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Прокси-команда\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Фиолетовый\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Помещает всю конфигурацию Tabby в зашифрованное хранилище\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Быстрое подключение\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Выйти\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Подключение через сокет\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Таймаут подключения (мс)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Недавние\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Переподключение\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Переподключиться в текущей вкладке (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Красный\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Список изменений\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Запомнить на {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Удаленное\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Удалить пробелы и новые строки вокруг скопированного текста\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Переименовать\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Переименовать вкладку\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Отображение\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Восстановить последнюю вкладку\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Заменить\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Сообщить о проблеме\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Требовать зажатие клавишы для перехода по ссылкам\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Сбросить масштабирование\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Перезапустить текущую последовательную сессию\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Перезапустить текущую SSH сессию\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Перезапустить текущую сессию Telnet\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Перезапуск вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Перезапустите приложение, чтобы применить изменения\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Восстановить настройки по умолчанию?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Восстановить унаследованные настройки по умолчанию?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Восстанавливать вкладки терминала при запуске приложения\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Повторное использование сессии для нескольких вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Справа\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Правый клик\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Запустить от имени администратора\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Сохранить\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Сохранение пароля в связке ключей\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Сохранить и применить\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Сохранить как профиль\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Сохранить как профиль\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Сохранено\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Сохранённое расположение\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Прокручивать при вводе\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Прокрутить терминал на одну страницу вниз\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Прокрутить терминал на одну страницу вверх\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Прокрутить терминал вниз\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Прокрутить терминал до верха\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Буфер обратной прокрутки\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Прокручивает терминал вниз при вводе\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Поиск\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Поиск цветовых схем\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Поиск горячих клавиш\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Поиск плагинов\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Секретный токен синхронизации\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Выбрать\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Выберите базовый профиль для использования в качестве шаблона\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Выбрать всё\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Выберите хранилище файлов\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Выбрать профиль\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Выберите профиль или введите адрес\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Отправлять байты, вводя шестнадцатеричные значения\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Отправляет данные по одному байту за раз\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Последовательный порт\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Соединение по последовательному порту\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Последовательный порт: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Установить мастер-пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Установить мастер-пароль\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Установить пароль\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Установить Tabby как %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"0 отключает последние профили\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Установка пути для named pipe SSH-агента.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Настройки\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell не поддерживает обнаружение текущего пути\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Интеграция в систему\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Показать\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Показать селектор профиля {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Показывать окно подтверждения при вставке нескольких строк\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Показывать встроенные профили при выборе\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Показать справку команды\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Показать файл настроек\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Показать значения по умолчанию\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Показать микшер\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Показать названия панелей (для перестановки)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Показать значок профиля на вкладке\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Показать выбор профиля\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Показать последние профили при выборе\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Посмотреть изменения в релизе\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Показать соединения по последовательному порту\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Показывать вкладки в полноэкранном режиме\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Показать панель инструментов\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Показать содержимое хранилища\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Поддержка Sixel графики (экспериментальная)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Пропустить MoTD/баннер\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Медленная отсылка\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Закрепляет окно к выбранному краю экрана\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Хост SOCKS прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Порт SOCKS прокси\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Исходный код\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Расстояние между элементами\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Разделить\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Разделить снизу\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Разделить снизу\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Разделить слева\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Разделить справа\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Разделить сверху\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Разделить сверху\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH-соединение\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Управление SSH-подключениями теперь производится во вкладке «Профили и подключения»\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Пароль SSH для {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Стандартная (legacy)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"При запуске\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Стоп-биты\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Удалить\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Подпишитесь на обновления\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Допускаются подстановки.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Переключить цветовую схему\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Сменить профиль\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Сменить профиль в активной панели\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Переключение реализации frontend для терминала (экспериментально)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Синхронизация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Автоматическая синхронизация\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Хост синхронизации\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Синхронизация горячих клавиш\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Синхронизация хранилища\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Синхронизация настроек окна\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Вкладка {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Активность во вкладке\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby не смог запуститься с вашими плагинами, поэтому все сторонние плагины были отключены в этой сессии. Ошибка в следующем:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Новости и обновления Tabby в Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Расположение вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Ширина вкладки\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet сессия\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Терминал\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Фон терминала\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Звуковой сигнал терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Идентификация терминала\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Благодарим за загрузку Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Тема\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Есть активные передачи файлов\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Для этого соединения сохранён пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Применяются для всех профилей данного типа\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Они применяются ко всем профилям данного типа в группе\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Тонкая\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Включите, если испытываете алиасинг, гостинг или иные проблемы с отображением\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Переход в полноэкранный режим и обратно\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Переключиться на последнюю вкладку\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Скрыть/показать окно терминала\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Переключает видимость окна Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Сверху\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Обрезать пробелы и новые строки\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Повторить\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Пробуем сохранённый пароль\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Превратить панели текущей вкладки в отдельные вкладки\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Без группы\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Удалить\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Неизвестно\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Неизвестный тип секретных данных {type} для {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Открепить\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Вверх\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Обновить\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Обновить до {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Загрузить\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Загрузить как новую конфигурацию\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Использовать {altKeyName} в качестве клавиши Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Использовать ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"По умолчанию для пользователя\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Имя пользователя\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Использовать метод CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Используем предустановленный пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Хранилище\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Хранилище представляет собой постоянно зашифрованный контейнер, содержащий такие секретные данные, как SSH-пароли и парольные фразы приватных ключей.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Хранилище пусто\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Хранилище закрыто\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Хранилище не настроено\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Для сохранения секретных данных должен быть задан мастер-пароль хранилища\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Проверять ключ хоста при подключении\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Версия\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Версия: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Размытый фон\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Визуально\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Предупреждать при многострочной вставке\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Предупреждать при закрытии активных соединений\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Предупреждение: ключ удалённого хоста неожиданно изменился!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Отслеживается только версия ОС и приложения.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Добро пожаловать\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Что нового\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"При завершении сеанса\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Когда включено, ссылки можно нажимать, только удерживая эту клавишу\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Если WinSCP обнаружен, можно запускать SCP-сессии из контекстного меню.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Должно ли использоваться кастомное оформление окна или системное\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Запретит отправку SSH-приветствия\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Окно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Размеры окна вдоль края\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Размеры окна от края\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Рамка окна\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Windows\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Для ConPTY рекомендуется Windows 10 build 18309 или выше\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Путь к WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Разделители слов\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Рабочий каталог\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Определение рабочего каталога\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Колокольчик терминала WSL может быть заглушён только при помощи микшера громкости\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"Терминал WSL поддерживает TrueColor только с ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Перенаправление X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Жёлтый\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Вы можете изменить его позже, но, если забудете, восстановить будет невозможно.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Возможно, прямо сейчас вы подвергаетесь атаке посредника (man-in-the-middle), или ключ хоста мог быть просто изменён.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Приблизить\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Отдалить\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Динамическое\"\n\n"
  },
  {
    "path": "locale/sr-SP.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: sr\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Serbian (Cyrillic)\\n\"\n\"Language: sr_SP\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" је и даље покренута. Затворити?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"копирај {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Друга породица фонта се користи за приказивање карактера који недостају у главном фонту\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Откажи све\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Прихвати и запамти кључ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Прихвати га само једном\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Приступачност\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Акрилична позадина\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Додај\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Додај прослеђивање порта\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Додај приватни кључ\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Додај...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Додатни размак између линија\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Напредно\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Агент\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Прослеђивање агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Путања агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Тип агента\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Омогућава отварање .bat у картицама, али квари неке шкољке\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Омогућава брзо отварање терминала у изабраном директоријуму\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Изглед\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Апликација\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Поставке апликације\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Да ли сте сигурни да желите да затворите Tabby? Можете онемогућити овај упит у Подешавања -> Прозор.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Да ли сте сигурни?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Аргументи\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Поставите питање\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Питајте пре затварања картица претраживача\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Чијно\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Метода аутентификације\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Аутор\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Аутоматски\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Аутоматски отвори терминал приликом покретања апликације\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Аутоматско\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Аутоматска ажурирања\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Аутоматски отпреми промене и провери ажурирања сваког минута\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Доступно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Тип позадине\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Број бауда\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Почетак линије\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Трепћући курсор\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Плава\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Замагљено\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Јачина подебљања фонта\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Дно\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Лепљење са заградама (захтева подршку за шкољку)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Режим емитовања. Кликните било где да откажете.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Уграђено\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Откажи\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Измени број бауда\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Промени боју картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Промени мастер фразу\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Провери ажурирања\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Шифре\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Очисти\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Очисти недавне профиле\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Очисти терминал\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Очисти терминал након конектовања\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Привремена меморија\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Затвори\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Затвори и не приказуј више\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Затвори фокусирано окно\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Затвори друге картице\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Затвори картицу\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Затвори картице са леве стране\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Затвори картице са десне стране\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Затвори прозор после затварања последње картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Боја\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Шема боја\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Боје\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Комбинуј све картице у тренутну картицу\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Командна линија\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Команде\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Конфигурација је обрисана\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Конфигурација је преузета\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Конфигурациона датотека\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Синхронизовање конфигурације\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Конфигурација је отпремљена\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Конфигурације\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Повежи се кроз прокси сервер\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Повежи се на \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Повежи се на различитог домаћина прво и користи га као прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Повезивање\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Повезивање\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Повезивање није успело: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Име конекције ће бити коришћено уместо\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Контекстни мени\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Копирано\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Копирај\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Копирај тренутну путању\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Копирај целу путању\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Копирај приликом селектовања\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Копирај у привремену меморију\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Копирај са форматирањем\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Немогуће је дешифровати конфигурацију\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Направи\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Направи директоријум\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Тренутно\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Тренутна шема боја\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Тренутни кључ отиска домаћина\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Тренутни процес: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Облик курсора\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Прилагођено\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Прилагођени CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Битови података\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Отклањање грешака\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Смањите величину хоризонталне поделе\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Смањите величину хоризонталне поделе\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Подразумевани профил за нове картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Подрзумевана подешавања профила\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Подразумевано\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Подразумевано за {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Обриши\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Обриши {name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Обриши {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Обриши целу линију\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Обриши следећу реч\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Обриши претходну реч\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Обрисати конфигурацију на удаљеном делу?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Обрисати профиле група?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Обрисати ову скрипту?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Обрисати садржај трезора?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Брисање\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Уређај\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Директно\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Онемогући\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Онемогући динамички наслов картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Онемогући течну позадину приликом превлачења\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Онемогући убрзање графичке јединице\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Онемогућено\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Прекини везу\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Прекинути везу са {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Прикажи слике преко Sixel излазних секвенци\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Прикажи на\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Не отказуј\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Не затварај\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Не памти\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"На врху осталих прозора\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Избор двоструким кликом ће се зауставити на овим карактерима\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Доле\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Преузми\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Нацртај подебљани текст јарким бојама\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Умножи\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Умножи као администратор\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Умножи картицу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Уреди\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Уреди локално\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Омогући\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Омогући аналитику\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Омогући анимације\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Омогући аутоматско инсталирање надоградњи када постану доступна.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Омогући опцију течне позадине\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Омогући лигатуре фонта\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Омогући глобалну пречицу (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Омогући експерименталан Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Шифруј конфигурациону датотеку\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Крај линије\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Окружење\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Обриши конфигурацију\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Обриши трезор\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Грешка у {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Тачно подударање\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Пример:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Експерименталан стил позадине за Windows 10 уме да проузрокује проблеме\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Извези\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Резервни фонт\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Преноси датотека\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Датотека: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Филтер\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Фиксно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Течна позадина понекад узрокује кашњење у повлачењу\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Фокусирај сва окна\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Фокусирај сва окна одједном (емитовање)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Фокусирај све картице\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Фокусирај све картице одједном (емитовање)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Фокусирај праћење миша\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Фокусирај следеће окно\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Фокусирај окно {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Фокусирај претходно окно\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Фокусирај окно изнад\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Фокусирај окно испод\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Фокусирај окно са леве стране\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Фокусирај окно на десну страну\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Фонт\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"За тастерске пречице\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Форсирај CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Форсирај CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Форсирај LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Форсира специфичан тип конекције SSH агента.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Заборави\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Проследи порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Прослеђени портови\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Из шеме боја\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Из теме\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Предњи крај\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Цео\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Опште\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Преузми\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Преузми из подешавања прозора за Tabby Web\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Даје прозору замућену провидну позадину\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"На врх\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Зелено\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Група\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Хакови\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Помози праћењу броја инсталација Tabby-ја у целом свету!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Помози у превођењу Tabby-ја\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Хексадецимални\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Сакриј дугме за затварање картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Сакриј индекс картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Сакриј дугме за опције картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Сакриј прозор приликом губитка фокуса\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Почетна страна\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Домаћин\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Кључ домаћина\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Верификација кључа домаћина\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Тастерске пречице\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP прокси\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Домаћин HTTP прокси-ја\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Порт HTTP прокси-ја\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Икона\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Уколико је онемогућено, само прилагођени профили ће се приказати у одабиру профила\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Одмах локално одзвања ваш унос\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Повећај величину хоризонталне поделе\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Повећај величину хоризонталне поделе\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Унос се шаље како куцате\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Режим уноса\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Унос нових линија\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Инсталирано\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Инсталирање надоградње ће затворити све картице и поново покренути Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Интерактивно\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Неисправна синтакса\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Кључ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Тастатура\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Језик\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Покрени WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Покрени WinSCP за тренутну SSH сесију\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Лево\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Дозвољава љусци да рукује Мета кључем уместо ОС-а\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Линија по линију\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Уређивач линија, унос се шаље након што притиснете ентер\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Водећи размак линије\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Учитавање\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Учитавање конфигурација...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Локално\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Локални ехо\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Локални терминал\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Скрипте за учитавање\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Дуги клик за контекстни мени\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Управљање профилима\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Максималан Keep Alive Count\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Максимизирај активно окно\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Минимални однос контраста\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Измењено у {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Миш\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Помери картицу лево\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Помери картицу десно\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Помери у ”Негруписано”\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Померање миша преко неактивног окна ће га активирати\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Име\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Име нове конфигурације\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Име новог директоријума\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Изворно\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Нова администраторска картица\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Нова конфигурација на {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Нова ставка\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Ново име\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Нови профил\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Ново име профила\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Нова картица\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Нова картица: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Нови терминал\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Нови прозор\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Нови прозор\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Ново са профилом\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Следећа картица\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Без боје\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Без модификатора\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ништа\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Нормално\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Нормално подебљање фонта\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Није пронађено\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Обавести приликом активности\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Обавести када је завршено\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Број битова остављених у баферу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Искључено\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Званично\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Непрозирност\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Отвори алатке за развој\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Отвори подешавања\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Отвори картицу подешавања: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Отвори SFTP панел\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Опцинално\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Опције\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Наранџастo\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"Подразумевано за ОС\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"Подразумевано за ОС ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Режим излаза\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Излаз нових линија\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Окна\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Паритет\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Лозинка\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Налепи\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Налепи из оставе\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Налепи ако нема избора, иначе копирај\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Налепи више линија?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Закачи\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Додаци\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Директоријум са додацима\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Порт\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Отворен порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Портови\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Притисните било који тастер да би сте се поново повезали\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Притисните било који тастер сада\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Спречава случајно затварање\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Спречава случајно покретање налепљених команда\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Претходна картица\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Приватни кључеви\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Процес је завршен\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Име профила\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Профили\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Профили и конекције\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Програм\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Команда за прокси\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Љубичасто\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Ставља сву Tabby-јеву конфигурацију у трезор\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Брзо повезивање\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Изађи\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Необрађена конекција сокетом\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Време спремности (милисекунде)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Недавно\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Повежи се поново\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Црвено\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Регуларни израз\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Белешке о издању\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Запамти за {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Удаљено\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Уклони размаке и празне линије око копираног текста\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Преименуј\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Преименуј картицу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Рендеровање\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Поново отвори последњу картицу\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Замени\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Пријави проблем\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Захтевај кључ како би кликнули на везе\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Ресетуј зумирање\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Поново покрени тренутну серијску сесију\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Поново покрени тренутну SSH сесију\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Поново покрени тренутну Telnet сесију\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Поново покрени картицу\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Поново покрените апликацију да се примене промене\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Поврати картице терминала приликом покретања апликације\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Поново користи сесију за више картица\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Десно\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Десни клик\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Покрени као администратор\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Сачувај\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Сачувај лозинку у keychain-у\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Сачувај и примени\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Сачувај као профил\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Сачувај изглед као профил\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Сачувано\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Сачуван распоред\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Помери на унос\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Помери терминал једну страницу доле\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Помери терминал једну страницу горе\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Помери терминал на дно\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Помери терминал на врх\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Померање уназад\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Помера терминал на дно корисничког уноса\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Претрага\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Претражи шеме боја\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Претражи тастерске пречице\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Претражи додатке\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Тајни токен за синхронизацију\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Изабери\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Изаберите основни профил који ћете користити као шаблон\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Изабери све\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Избор складишта датотека\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Избор профила\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Изаберите профил или унесите адресу\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Серијски\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Серијска конекција\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Серијски: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Постави мастер фразу\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Постави фразу\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Постави лозинку\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Постави Tabby као %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Поставите на 0 да би сте онемогућили скорашње профиле\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Подешавања\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Шкољка\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Шкољка не подржава детекцију тренутне путање\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Интеграција шкољке\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Прикажи прозор за потврду приликом лепљења више линија\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Прикажи конфигурациону датотеку\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Прикажи подразумевана\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Прикажи миксер\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Прикажи иконицу профила у картици\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Прикажи одабирач профила\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Прикажи скорашње профиле у одабирачу\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Прикажи белешке о издању\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Прикажи серијске конекције\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Прикажи траку са алаткама\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Прикажи садржаје сефа\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Графичка подршка за Sixel (експериментално)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Изворни код\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Подели\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Подели на дно\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Подели на доле\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Подели на лево\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Подели на десно\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Подели на врх\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Подели на дно\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH конекција\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Управљање SSH конекцијом се сада врши кроз картицу ”Профили и конекције”\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH лозинка за {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Покретање\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Заустави битове\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Трака\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Претплатите се на ажурирања\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Замене су дозвољене.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Пребаци профил\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Пребаци профил у активном окну\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Пребацује спољну имплементацију терминала (експериментално)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Синхронизација\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Синхронизуј аутоматски\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Синхронизуј домаћина\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Синхронизуј тастерске пречице\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Синхронизуј сеф\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Синхронизуј подешавања прозора\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Картица {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Активност картице\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby није могао да се покрене са вашим додацима, тако да су сви додаци треће стране онемогућеи у овој сесији. Грешка је:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Вести и ажурирања на Твитеру за Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Картице\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Локација картица\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Ширина картица\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet сесија\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Терминал\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Позадина терминала\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Звоно терминала\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Идентификација терминала\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Хвала вам што сте преузели Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Изглед\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"У току су активни преноси датотека\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Постоји сачувана лозинка за ову конекцију\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Ово се односи на све профиле датог типа\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Танко\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Пребаци се на режим приказа на целом екрану\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Пребаци се на последњу картицу\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Пребаци се на прозор терминала\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Пребацује се на видљивост Tabby-јевог прозора\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Врх\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Скрати размак и нове редове\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Покушајте поново\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Покушавам са сачуваном лозинком\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Претвори окна тренутне картице у засебне картице\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Негруписано\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Деинсталирај\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Непознато\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Непозната тајта типа {type} за {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Откачи\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Горе\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Ажурирање\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Ажурирај на {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Отпремање\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Отпреми као нову конфигурацију\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Користи {altKeyName} као Мета кључ\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Користи ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Подразумевано за корисника\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Корисничко име\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Коришћење CONNECT методе\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Коришћење унапред постављене лозинке\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Трезор\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Трезор је увек-енкриптован контејнер за тајне попут лозинки за SSH и приступне фазе за приватни кључ.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Трезор је празан\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Трезор је закључан\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Трезор није конфигурисан\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Мастер приступна фаза за трезор мора да буде постављена коришћењем тајни за чување\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Верификуј кључеве домаћина приликом повезивања\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Верзија\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Верзија: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Вибрантност\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Визуелно\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Упозори приликом лепљења више линија\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Добро дошли\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Шта је ново\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Прозор\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Оквир прозора\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Путања за WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Одвајачи речи\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Радни директоријум\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Детекција радног директоријума\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Жуто\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Увећај\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Умањи\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "locale/sv-SE.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: sv-SE\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Swedish\\n\"\n\"Language: sv_SE\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" körs fortfarande. Stäng?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} kopia\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"En andra typsnittsfamilj som används för att visa tecken som saknas i huvudtypsnittet\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Avbryt alla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Acceptera och kom ihåg nyckel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Acceptera bara den här gången\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Tillgänglighet\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Akryl bakgrund\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Lägg till\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Lägg till en vidarebefordrad port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Lägg till en privat nyckel\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Lägg till...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Ytterligare utrymme mellan raderna\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Avancerat\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Agent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agent vidarebefordran\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent processökväg\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Agent typ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Tillåter att öppna .bat-filer i flikar, men kraschar några skal\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Tillåter att snabbt öppna en terminal i den valda mappen\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Alltid mörk\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Alltid ljus\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Utseende\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Applikation\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Applikationsinställningar\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Är du säker på att du vill stänga Tabby? Du kan inaktivera denna prompt i Inställningar -> Fönster.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Är du säker?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Argument\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Ställ en fråga\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Fråga innan webbläsarfliken stängs\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Hörbar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Autentiseringsmetod\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Författare\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Auto\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Öppna en terminal automatiskt vid appstart\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Automatisk\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Automatiska uppdateringar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Ladda automatiskt upp ändringar och sök efter uppdateringar varje minut\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Tillgänglig\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Bakgrundstyp\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Tangentläge för backsteg\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Baudhastighet\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Början av raden\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Blinkande markör\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Blå\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Oskärpa\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Fet teckensnittsvikt\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Botten\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Inklistring inom parentes (kräver stöd för skal)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Sändningsläge. Klicka var som helst för att avbryta.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Inbyggt\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Avbryt\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Ändra baudhastighet\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Ändra flikfärg\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Ändra huvudlösenordsfrasen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Sök efter uppdateringar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Chiffer\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Rensa\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Rensa senaste profilerna\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Rensa terminal\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Rensa terminal efter anslutning\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Urklipp\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Stäng\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Stäng och visa aldrig igen\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Stäng fokuserad panel\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Stäng andra flikar\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Stäng flik\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Stäng flikar till vänster\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Stäng flikar till höger\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Stäng fönstret efter att ha stängt den sista fliken\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Färg\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Färgschema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Färgschema\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Färger\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Kombinera alla flikar till den aktuella fliken\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Kommandorad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Kommandot stdin/stdout används istället för en nätverksanslutning\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Kommandon\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Kompakt (legacy)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Konfiguration borttagen\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Konfiguration nerladdad\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Konfigurationsfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Konfigurationssynkronisering\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Konfiguration uppladdad\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Konfigurationer\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Anslut via en proxyserver\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"Anslut till \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Anslut först till en annan värd och använd den som proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Ansluter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Anslutning\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Anslutning misslyckades: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Anslutningsnamn kommer att användas istället\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Snabbmeny\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Styr mängden utrymme mellan element\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Kopierad\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopiera\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Kopiera aktuell sökväg\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Kopiera fullständig sökväg\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Kopiera vid val\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Kopiera till urklipp\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Kopiera med formatering\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Kunde inte dekryptera konfigurationen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Skapa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Skapa mapp\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Nuvarande\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Nuvarande färgschema\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Aktuell värdnyckels fingeravtryck\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Aktuell process: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Markörens form\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Anpassad\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Anpassad CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Mörkt läge\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Databitar\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Felsökning\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Minska storlek på horisontellt delad vy\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Minska storlek på vertikalt delad vy\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Standardtyp \\\"Anslut till\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Standard anslutningstyp som används av snabbanslutningsfunktionen (ex. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Standardprofil för nya flikar\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Inställningar för standardprofil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Inställningar för standardprofil\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Standardvärden\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"Standardvärden för {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Radera\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Radera \\\"{name}\\\"?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Radera {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Radera hela raden\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Radera nästa ord\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Radera föregående ord\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Ta bort konfigurationen på fjärrsidan?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Radera gruppens profiler?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Radera det här skriptet?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Radera innehållet i valvet?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Raderar\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Enhet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direkt\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Inaktivera\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Inaktivera dynamisk fliktitel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Inaktivera flytande bakgrund medan du drar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Inaktivera GPU-acceleration\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Inaktiverad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Koppla ifrån\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Koppla från aktuell flik (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Koppla bort från {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Visa bilder via Sixel escape-sekvenser\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Display på\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Avbryt inte\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Stäng inte\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Kom inte ihåg\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Dock alltid på toppen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Docka terminalen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Dockad terminalstorlek\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Dockat terminalutrymme\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Dockning\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Dubbelklicka val kommer att stanna vid dessa tecken\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Ner\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Ladda ner\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Rita fet text i ljusa färger\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Duplicera\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Duplicera som administratör\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Duplicera flik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Redigera\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Redigera lokalt\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Aktivera\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Aktivera analyser\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Aktivera animationer\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Aktivera automatisk installation av uppdateringar när de blir tillgängliga.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Aktivera flytande bakgrundsalternativ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Aktivera teckensnittsligaturer\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Aktivera global snabbtangent (Ctrl-Mellanslag)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Aktiverar det experimentella Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Kryptera konfigurationsfil\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Slutet av raden\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Miljö\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Radera konfiguration\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Radera valvet\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Fel i {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Exakt matchning\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Exempel:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Experimentella Windows 10 bakgrundsstilar som är kända för att orsaka problem\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Exportera\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Reservtypsnitt\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Filöverföringar\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Fil: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtrera\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Fast\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Flytande bakgrund orsakar ibland draglag\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Fokusera alla paneler\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Fokusera alla paneler samtidigt (sändning)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Fokusera alla flikar\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Fokusera alla flikar samtidigt (sändning)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Fokus följer mus\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Fokusera nästa panel\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Fokusera panel {nummer}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Fokusera föregående panel\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Fokusera panelen ovan\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Fokusera panelen under\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Fokusera panelen till vänster\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Fokusera panelen till höger\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Följ färgschemat\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Typsnitt\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"För kortkommandon\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Tvinga CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Tvinga CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Tvinga LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Framtvingar en specifik SSH-agentanslutningstyp.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Glöm bort\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Vidarebefordra port\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Vidarebefordrade portar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Från färgschema\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Från systemet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Från tema\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Frontend\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Full\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Allmän\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Generera ett förifyllt GitHub-problem\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Hämta\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Hämta det från fönstret Tabby Web-inställningar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Ger fönstret en suddig transparent bakgrund\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Gå upp\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Grön\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grupp\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Hacks\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Hjälp till att spåra antalet Tabby-installationer över hela världen!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Hjälp till att översätta Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Hexadecimal\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Dölj\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Dölj flikstängningsknappen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Dölj flikindex\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Dölj flikalternativsknappen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Dölj fönstret vid fokusförlust\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Döljer den dockade terminalen när du klickar bort.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Hemsida\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Värd\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Värdnyckel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Värdnyckelverifiering\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Snabbtangenter\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Hur Tabby presenterar sig genom miljövariabler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP-proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP-proxy-värd\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP-proxyport\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Ikon\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Dynamic\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Om inaktiverad, kommer endast anpassade profiler att visas i profilväljaren\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Ekar omedelbart din inmatning lokalt\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Öka storlek på horisontellt delad vy\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Öka storlek på vertikalt delad vy\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Inmatning\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Inmatning skickas när du skriver\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Inmatningsläge\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Inmatningsradbrytning\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Installerad\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Om du installerar uppdateringen stängs alla flikar och Tabby startas om.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Intelligent Ctrl-C (kopiera/avbryt)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Interaktiv\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Felaktig syntax\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Mellanvärd\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Hoppa till nästa ord\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Hoppa till föregående ord\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Behåll\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Håll-vid-liv-intervall (millisekunder)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Håll dockad terminal alltid överst\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Nyckel\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Nyckelbyte\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Tangentbord\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Tangentbordsinteraktiv autentisering\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Döda\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Språk\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Senast kända värdnyckelfingeravtryck\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Starta WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Starta WinSCP för aktuell SSH-session\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Lär dig hur du tillåter Tabby att upptäcka fjärrskalets arbetskatalog.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Vänster\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Låter skalet hantera Meta-nyckeln istället för OS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Ljust läge\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Rad för rad\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Radredigerare, inmatning skickas efter att du tryckt på Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Linjestoppning\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Laddar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Läser in konfigurationer...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Lokal\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Lokalt eko\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Lokal terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Inloggningsskript\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Långklicka för snabbmeny\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Hantera profiler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Max Håll-vid-liv-antal\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Maximera den aktiva panelen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minsta kontrastförhållande\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Ändrad den {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Mus\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Flytta fliken till vänster\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Flytta fliken till höger\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Flytta till \\\"Ogrupperad\\\"\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Om du flyttar musen över en inaktiv panel kommer den att aktiveras\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Namn\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Namn på den nya konfigurationen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Namn på den nya mappen\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Inbyggd\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Ny\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Ny adminflik\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Ny konfiguration på {plattform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Nytt gruppnamn\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Nytt objekt\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Nytt namn\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Ny profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Ny profilgrupp\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Nytt profilnamn\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Ny flik\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Ny flik: {profil}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Ny terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Nytt fönster\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Nytt fönster\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Nytt med profil\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Nästa flik\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Ingen färg\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Ingen modifierare\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ingen\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Normal teckensnittsvikt\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Hittades inte\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Meddela om aktivitet\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Meddela när du är klar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Antal rader i bufferten\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Av\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Officiell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"På GitHub-diskussioner\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Stäng bara fliken när sessionen uttryckligen avslutas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Opacitet\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Öppna DevTools\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Öppna Inställningar\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Öppna fliken Inställningar: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Öppna SFTP-panelen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Frivillig\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Alternativ\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Orange\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"OS standard\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"OS standard ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Utdata visas som en hexdump\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Utdata visas när den tas emot\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Utgångsläge\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Utgångsradbrytningar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Åsidosätt X11-skärm\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Skriv över lokal och synkronisera\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Skriv över fjärr och synkronisera\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Skriv över konfigurationen på fjärrsidan och börja synkronisera?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Vill du skriva över den lokala konfigurationen och börja synkronisera?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Panelomskalningssteg\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Paneler\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Papper (legacy)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Paritet\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Delvis konfigurationssynkronisering är inte möjlig när konfigurationen är krypterad via Valvet.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Genomgång\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Lösenfras för en privat nyckel med hash {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Lösenord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Klistra in\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Klistra in från urklipp\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Klistra in om inget val, annars kopiera\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Klistra in flera rader?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Klistra in vid mittenklick\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Sökväg eller adress till det lokala X11-uttaget\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Fäst\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Plugins\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Plugins-mappen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port öppnad\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Portar\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Tryck på valfri tangent för att återansluta\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Tryck på knappen nu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Förhindrar oavsiktlig stängning\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Förhindrar oavsiktlig exekvering av inklistrade kommandon\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Föregående flik\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Privata nycklar\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Processen avslutad\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Profilnamn\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profiler\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profiler & anslutningar\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Proxy kommando\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Lila\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Lägger in hela Tabbys konfiguration i valvet\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Snabbanslutning\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Avsluta\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Raw socket anslutning\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Klar timeout (millisekunder)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Nyligen\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Återanslut\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Återanslut aktuell flik (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Röd\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Versionsinformation\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Kom ihåg för {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Fjärr\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Ta bort blanksteg och radbrytningar runt den kopierade texten\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Döp om\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Byt namn på fliken\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Rendering\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Öppna senast stängda flik\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Byta ut\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Rapportera ett problem\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Kräv en nyckel för att klicka på länkar\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Återställ zoom\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Starta om aktuell seriell session\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Starta om aktuell SSH-session\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Starta om aktuell Telnet-session\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Starta om fliken\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Starta om appen för att tillämpa ändringar\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Återställ inställningar till standard?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Återställ inställningar till ärvda standardinställningar?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Återställ terminalflikar vid appstart\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Återanvänd session för flera flikar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Höger\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Högerklicka\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Kör som administratör\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Spara\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Spara ett lösenord i nyckelringen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Spara och tillämpa\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Spara som profil\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Spara layout som profil\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Sparad\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Sparad layout\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Bläddra vid inmatning\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Skrolla terminalen en sida ner\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Skrolla terminalen en sida upp\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Skrolla terminalen till botten\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Skrolla terminalen till toppen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Historik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Skrollar terminalen till botten vid användarinmatning\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Sök\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Sök efter färgscheman\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Sök snabbtangenter\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Sök plugins\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Hemligt synkroniseringstoken\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Välj\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Välj en basprofil att använda som mall\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Välj alla\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Välj fillagring\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Välj profil\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Välj profil eller ange en adress\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Skicka byte genom att skriva in hexadecimala värden\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Skickar data en byte i taget\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Serie\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Seriell anslutning\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Serienummer: {beskrivning}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Ställ in huvudlösenfras\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Ställ in lösenordsfras\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Välj lösenord\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Ställ in Tabby som %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Ställ in 0 för att inaktivera senaste profiler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Ställer in SSH-agentens namngivna processökväg.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Inställningar\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Skal\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Skalet stöder inte detektering av strömväg\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Skalintegration\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Visa\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Visa profilväljaren {typ}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Visa en bekräftelseruta när du klistrar in flera rader\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Visa inbyggda profiler i väljaren\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Visa kommandoväljare\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Visa konfigurationsfil\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Visa standardinställningar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Visa mixer\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Visa paneletiketter (för att ordna om)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Visa profilikon på fliken\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Visa profilväljare\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Visa senaste profiler i väljaren\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Visa release notes\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Visa seriella anslutningar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Visa flikar i helskärmsläge\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Visa verktygsfält\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Visa valvets innehåll\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Stöd för Sixel-grafik (experimentellt)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Hoppa över MoTD/banner\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Långsam matning\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Fäster fönstret mot en sida av skärmen\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy värd\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxyport\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Ljud\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Källkod\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Rymlighet\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Dela\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Dela till botten\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Dela till nedåt\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Dela åt vänster\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Dela till höger\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Dela till toppen\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Dela uppåt\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH-anslutning\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH-anslutningshantering görs nu via fliken \\\"Profiler & anslutningar\\\".\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH-lösenord för {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standard (legacy)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Börja\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Stoppa bitar\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Remsa\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Prenumerera på uppdateringar\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Byten tillåtna.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Byt färgschema\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Byt profil\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Byt profil i den aktiva panelen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Switchar terminal frontend implementering (experimentell)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Synkronisera\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Synkronisera automatiskt\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Synkronisera värd\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Synkronisera snabbtangenter\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Synkronisera valv\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Synkronisera fönsterinställningar\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Flik {nummer}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Flikaktivitet\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby kunde inte starta med dina plugins, så alla tredjeparts plugins har inaktiverats i den här sessionen. Felet var:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Tabby nyheter och uppdateringar på Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Flikar\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Flikplacering\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Flikarnas bredd\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet-session\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Terminal bakgrund\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminalklocka\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Terminal identifiering\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Tack för att du laddade ner Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Det finns aktiva filöverföringar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Det finns ett sparat lösenord för denna anslutning\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Dessa gäller alla profiler av en angiven typ\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Dessa gäller alla profiler av en angiven typ\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Tunn\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Kryssa för detta om du upplever aliaseffekt, spökbilder eller andra visuella problem\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Växla helskärmsläge\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Växla sista fliken\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Växla terminalfönster\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Växlar synlighet för Tabby-fönstret\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Toppen\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Trimma blanksteg och radbrytningar\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Försök igen\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Försöker sparat lösenord\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Förvandla nuvarande fliks paneler till separata flikar\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Ogrupperad\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Avinstallera\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Okänd\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Okänd hemlighet av typen {type} för {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Lossa\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Upp\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Uppdatera\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Uppgradera till {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Ladda upp\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Ladda upp som en ny konfiguration\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Använd {altKeyName} som Meta-nyckel\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Använd ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Användarstandard\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Användarnamn\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Använder CONNECT-metoden\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Använder förinställt lösenord\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Valv\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Valvet är en alltid-krypterad behållare för hemligheter så som SSH-lösenord och privata nyckellösenfraser.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Valvet är tomt\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Valvet är låst\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Valvet är inte konfigurerat\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Valv-huvudlösenord måste ställas in för att tillåta lagring av hemligheter\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Verifiera värdnycklar när du ansluter\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Version\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Version: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibrans\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Visuell\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Varna för flerraders inklistring\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Varna när aktiva anslutningar stängs\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Varning: fjärrvärdens nyckel har plötsligt ändrats!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Vi spårar bara dina Tabby- och OS-versioner.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Välkommen\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Vad är nytt\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"När en session slutar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"När aktiverad, är länkar endast klickbara medans du håller ned denna tangent\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"När WinSCP upptäcks kan du starta en SCP-session från snabbmenyn.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Om ett anpassat fönster eller ett OS-inbyggt fönster ska användas\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Kommer att förhindra att SSH-hälsning visas\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Fönster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Fönstermått längs kanten\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Fönstermått bort från kanten\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Fönsterram\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Fönster\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 build 18309 eller högre rekommenderas för ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP sökväg\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Ordavgränsare\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Arbetskatalog\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Detektering av arbetskatalog\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL-terminalklockan kan endast stängas av via Ljudmixeralternativ\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL-terminalen stöder endast TrueColor med ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 vidarebefordran\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Gul\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Du kan ändra det senare, men det går inte att återställa om det glöms bort.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Du kan vara under en man-in-the-middle-attack just nu, eller så kan värdnyckeln bara ha ändrats.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Zooma in\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Zooma ut\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Dynamic\"\n\n"
  },
  {
    "path": "locale/tr-TR.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: tr\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Turkish\\n\"\n\"Language: tr_TR\\n\"\n\"PO-Revision-Date: 2025-01-22 22:02\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" halen çalışıyor. Kapatılsın mı?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} kopyalandı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Varsayılan yazı tipinde eksik karakterleri görüntülemek için kullanılan ikinci yazı tipi\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Tümünü iptal et\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Kabul et ve hatırla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Yalnızca bu seferlik\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Erişilebilirlik\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Saydam arkaplan\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Ekle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Yeni port yönlendirmesi ekle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Özel anahtar ekle\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Ekle...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Satırlar arasındaki ek boşluk\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Gelişmiş\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Anonim\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Anonim yönlendirme\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Anonim ayar dosyası\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Gizlilik Türü\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \".bat dosyalarının yeni sekmelerde açılmasına izin verir, ancak bazı Terminallerde çalışmayabilir\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Seçilen klasörde hızlı bir şekilde bir terminal açılmasına izin verir\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Daima Aydınlık\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Görünüm / Kişileştirme\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Uygulama\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Uygulama ayarları\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Tabby'i kapatmak istediğinizden emin misiniz? \\n\"\n\"Bu işlemi Ayarlar -> Pencere'den devre dışı bırakabilirsiniz.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Emin misiniz?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Değişkenler\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Soru sorun\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Tarayıcı sekmesini kapatmadan önce sor\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Sesli\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Kimlik doğrulama yöntemi\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Sahibi\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Otomatik\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Uygulama başlangıcında bir terminali otomatik aç\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Otomatik\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Otomatik güncellemeler\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Değişiklikleri otomatik olarak yükleyin ve güncellemeleri her dakika kontrol edin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Mevcut\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Arkaplan Türü\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Backspace tuşu modu\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Bit hızı\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Satır başlangıcı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Yanıp sönen imleç\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Mavi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Bulanık\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Kalın harf genişliği\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Alt\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Köşe Parantezli yapıştırma(kabuk desteği gerektirir)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Yayın modundasınız. İptal etmek için herhangi bir yere tıklayın.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Dahili\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"İptal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Baud hızını değiştir\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Sekme renklerini değiştir\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Ana parolayı değiştirin\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Güncellemeleri kontrol et\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"şifreler\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Temizle\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Son profilleri temizle\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Terminali Temizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Bağlantıdan sonra terminali temizle\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Pano\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Kapat\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Kapat ve tekrar gösterme\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Bu ekranı kapat\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Diğer sekmeleri kapat\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Sekmeyi kapat\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Soldaki sekmeleri kapat\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Sağdaki sekmeleri kapat\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Son sekmeyi kapattıktan sonra pencereyi de kapat\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Renk\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Renk düzeni\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Renk şemaları\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Renkler\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Tüm sekmeleri geçerli sekmede birleştir\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Komut satırı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Ağ bağlantısı yerine komutun standart giriş/çıkışı kullanılıyor\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Komutlar\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Sıkı (eski)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Yapılandırma silindi\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Yapılandırma indirildi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Yapılandırma dosyası\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Yapılandırma senkronize\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Yapılandırma yüklendi\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Yapılandırmalar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Bağlanırken vekil sunucu kullan\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"\\\"%s\\\" bağlan...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Önce farklı bir ana bilgisayara bağlanın ve onu vekil olarak kullanın\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"Bağlanıyor\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Bağlantı\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Bağlantı başarısız: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Bunun yerine bağlantı adı kullanılacak\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"İçerik Menüsü\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Elementler arasındaki mesafeyi kontrol eder\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Kopyalandı\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Kopyala\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Şu anki yolu kopyala\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Dosya yolunu kopyala\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Seçileni kopyala\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Panoya Kopyala\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Biçimlendirme ile kopyalayın\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Yapılandırma dosyasının şifresi çözülemedi\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Oluştur\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Dizin oluştur\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Geçerli\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Mevcut renk şeması\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Geçerli ana bilgisayar anahtarı parmak izi\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Mevcut işlem :{name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"İmleç şekli\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Özel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Özel CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Koyu mod\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Veri Biti\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Hata ayıklama\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Yatay bölme boyutunu küçült\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Dikey bölme boyutunu küçült\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"Varsayılan \\\"Bağlan\\\" tipi\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Hızlı bağlanma özelliği için varsayılan bağlantı türü (örn. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Yeni sekmeler için varsayılan profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Varsayılan profil grup ayarları\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Varsayılan Profil Ayarları\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"Varsayılanlar\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"{type} için varsayılanlar\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Sil\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Sil {name}?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"{fullPath} sil?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Bütün satırı sil\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Sonraki sözcüğü sil\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Önceki sözlüğü sil\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Sunucudaki yapılandırma silinsin mi?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Grubun profillerini sil?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Bu komut dosyası silinsin mi?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"İçeriği sil?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Siliniyor\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Aygıt\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Direk\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Devre Dışı Bırak\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Dinamik sekme başlığını devre dışı bırak\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Sürüklerken akıcı arka planı devre dışı bırak\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"GPU hızlandırmasını devre dışı bırak\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Devre dışı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Bağlantıyı Kes\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Geçerli sekmenin bağlantısını kes (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"{host} bağlantısı kesilsin mi?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Fotoğrafları Sixel yoluyla görüntüleyin\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Ekran açık\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"İptal etme\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Kapatma\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Beni hatırlama\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Dock her zaman üstte\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Terminali kenetle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Kenetlenmiş terminal yüksekliği\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Kenetlenmiş terminal genişliği\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Kenetlenme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Çift tıklama seçimi bu karakterlerde duracak\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Aşağı\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"İndir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Kalın metinleri parlak renkler ile göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Kopyasını oluştur\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Yönetici olarak çoğalt\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Sekmeyi çoğalt\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Düzenle\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Yerel olarak düzenle\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Etkinleştir\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Analizleri aktifleştir\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Animasyonları etkinleştir\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Güncellemeler kullanıma sunulduğunda otomatik olarak yüklenmesini etkinleştirin.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Akıcı arka plan seçeneğini etkinleştir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Yazı tipi bağlamayı etkinleştir\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Evrensel kısayol tuşunu etkinleştir (Ctrl-Boşluk)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Deneysel Windows ConPTY API'ı etkinleştir\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Konfigürasyon dosyasını şifrele\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Satır sonu\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Ortam\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Konfigürasyonu sil\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Şifreleri Sil\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Eklenti hatası \\\" {plugin} \\\":\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Tam eşleşme\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Örnek:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Sorunlara neden olduğu bilinen deneysel Windows 10 arka plan stili\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Dışa Aktar\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Yedek yazı tipi\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Dosya aktarımları\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"{description}: Dosyası\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Filtre\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Sabit\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Akışkan arkaplan bazen kasmalara sebep olabilir\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Tüm bölmelere odaklan\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Tüm bölmelere aynı anda odaklanın (yayın)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Tüm sekmelere odaklan\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Tüm sekmeler aynı anda odaklanın (yayın)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Odak imleci takip eder\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Sonraki bölmeye odaklan\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Odak bölmesi {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Önceki bölmeye odaklan\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Yukarıdaki bölmeye odaklanın\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Aşağıdaki bölmeye odaklan\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Soldaki bölmeye odaklan\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Sağdaki bölmeye odaklan\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Renk düzenini takip et\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Yazı tipi\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Klavye kısayolları için\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"CR'yi zorla\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"CRLF'i zorla\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"LF'yi zorla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Belirli bir SSH Doğrulama türünü zorlar.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Unut\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"bağlantı noktası Yönlendirme\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Yönlendirilen bağlantı noktaları\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"Renk şemasından\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"Sistemden\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"Temadan\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Ön yüz\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Tam\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Genel\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Hazır bir GitHub sorunu oluşturun\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Yükle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Tabby Web ayarları penceresinden alın\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Pencereye bulanık şeffaf bir arka plan verir\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Yukarı çık\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Yeşil\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Grup\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Özel bilgiler\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Dünya çapında Tabby yüklemelerinin sayısını takip etmeye yardımcı olun!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Çeviriye yardım et\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"onaltılık\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Gizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Sekmeyi kapat düğmesini gizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Sekme dizinini gizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Sekmeyi kapat düğmesini gizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Odaklanma kaybolduğunda pencereyi gizle\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Uzakta tıkladığınızda yerleşik terminali gizler.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Anasayfa\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Sunucu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"sunucu anahtarı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Sunucu anahtarı doğrulaması\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Kısayol tuşları\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Tabby kendisini ortam değişkenleri aracılığıyla nasıl sunar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"Vekil Sunucu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP proxy sunucu\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP proxy portu\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Simge\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"id.sekme-genişliği.dinamik\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Devre dışı bırakılırsa, profil seçicide yalnızca özel profiller görünür\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Girişinizi hemen yerel olarak yankılar\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Yatay bölme boyutunu büyüt\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Dikey bölme boyutunu büyüt\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Girdi\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Siz yazarken girdi gönder\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Giriş modu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Yeni satırları girin\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Yüklendi\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Güncellemeyi yüklemek tüm sekmeleri kapatacak ve Tabby'yi yeniden başlatacaktır.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Akıllı Ctrl-C (kopyala/iptal)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Etkişimli\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Geçersiz komut\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Ev sahibine atla\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Sonraki kelimeye atla\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Önceki kelimeye atla\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Tut\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Canlı Tutma Aralığı (Milisaniye)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Yerleşik terminali her zaman üstte tutun\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Anahtar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Anahtar değişimi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Klavye\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Klavye etkileşimli kimlik doğrulama\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Öldür\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Dil\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Son bilinen ana bilgisayar anahtarı parmak izi\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"WinSCP'yi Başlat\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Şu andaki SSH oturumu için WinSCP'yi Başlatın\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Tabby'nin uzak kabuğun çalışma dizinini algılamasına nasıl izin verileceğini öğrenin.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Sol\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Shell Kabuğa Meta anahtarını işlemesine izin verir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Aydınlık mod\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Satır satır\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Satır düzenleyicisi, Enter tuşuna bastıktan sonra gönderilir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Sıra Öteleme\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Yükleniyor\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Ayarlar Yükleniyor...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Yerel\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Yerel yankı\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Yerel terminal\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Oturum açma betikleri\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Bağlam menüsü için uzun tıklama\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Profilleri yönet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Maksimum Canlı Tutma Sayısı\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Aktif bölmeyi büyüt\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Minimum kontrast oranı\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Değiştirme tarihi {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Fare\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Soldaki sekmeye geç\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Sağdaki sekmeye geç\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"\\\"Ungrouped\\\"a taşı\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Fareyi etkin olmayan bir bölmenin üzerine getirmek bölmenin etkinleşmesine neden olur\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"İsim\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Yeni yapılandırmanızın adı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Yeni klasörün adı\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Yerel\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Yeni\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Yeni yönetici sekmesi\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"{platform} üzerinde yeni konfigürasyon\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Yeni Grup Adı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Yeni öge\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Yeni isim\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Yeni profil\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Yeni profil grubu\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Yeni profil adı\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Yeni sekme\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Yeni sekme: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Yeni terminal\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Yeni pencere\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Yeni Pencere\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Profil ile yeni\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Sonraki sekme\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Renk yok\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Değiştirici yok\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Hiçbiri\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Normal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Normal yazı tipi kalınlığı\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Bulunamadı\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Etkinlik anında bilgilendir\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Tamamlandığında bildir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Tamponda tutulan satır sayısı\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Kapalı\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Resmi\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"GitHub tartışmalarında üzerinde\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Sekmeyi yalnızca oturum sonlandırıldığında kapatın\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Saydamlık\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Geliştirici araçlarını aç\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Ayarları Aç\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Ayarlar sekmesini aç: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"SFTP panelini aç\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"İsteğe bağlı\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Seçenekler\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Turuncu\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"İşletim sistemi varsayılanı\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"İşletim sistemi varsayılanı ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Çıktı hexdump olarak gösterilir\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Çıktı alındığı gibi gösterilir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Çıkış modu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Çıktı yeni satırları\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"X11 görüntüsünü bastır\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Yerelin üzerine yaz ve senkronize et\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Uzak dosyanın üzerine yaz ve senkronize et\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Uzak taraftaki yapılandırmanın üzerine yazılsın ve senkronizasyon başlatılsın mı?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Yerel yapılandırmanın üzerine yazılsın ve senkronizasyon başlatılsın mı?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Bölmeyi yeniden boyutlandırma adımı\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Bölmeler\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Kağıt (eski)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Parite\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Yapılandırma Vault aracılığıyla şifrelendiğinde kısmi yapılandırma senkronizasyonu mümkün değildir.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Doğrudan geçiş(Pass-through)\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"{hash} hash'li özel anahtar için parola ifadesi...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Şifre\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Yapıştır\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Panodan yapıştır\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Seçim yoksa yapıştır, aksi durumda kopyala\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Birden çok satır yapıştırılsın mı?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Orta tıklamayla yapıştır\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Yerel X11 soketinin yolu veya adresi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Sabitle\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Eklentiler\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Eklenti Klasörü\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Port\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Port açıldı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Bağlantı noktaları\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Tekrar bağlanmak için bir tuşa basın\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Şimdi tuşa basın\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Yanlışlıkla kapanmayı önle\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Yapıştırılan komutların yanlışlıkla çalıştırılmasını önler\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Önceki sekme\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Özel anahtarlar\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"İşlem tamamlandı\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Profil adı\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Profiller\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Profiller ve bağlantılar\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Program\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Proxy komutu\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Mor\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Tabby'nin tüm konfigürasyonunu kasaya koy\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Hızlı bağlan\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Çık\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Yerel soket bağlantısını kullan\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Hazır Zaman Aşımı (Milisaniye)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"En Son\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Tekrar bağlan\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Geçerli sekmeye yeniden bağlan (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Kırmızı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Sürüm notları\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"{time} için hatırla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Uzak Bağlantı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Kopyalanan metnin etrafındaki boşlukları ve yeni satırları kaldırın\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Yeniden adlandır\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Sekmeyi yeniden adlandır\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"İşleniyor\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Son sekmeyi yeniden aç\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Değiştir\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Sorun Bildir\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Bağlantıları tıklamak için bir anahtar gerekir\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Yakınlaştırmayı sıfırla\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Mevcut seri bağlantısını yeniden başlat\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Mevcut SSH oturumunu yeniden başlat\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Mevcut Telnet oturumunu yeniden başlat\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Sekmeyi yeniden başlat\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Değişiklikleri uygulamak için uygulamayı yeniden başlatın\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Ayarları varsayılanlara geri yükle?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Ayarları önceki varsayılan değerlere geri yükle?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Uygulama başlangıcında terminal sekmelerini geri yükle\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Oturumu birden fazla sekme için yeniden kullanma\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Sağ\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"Sağ tık\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Yönetici olarak çalıştır\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Kaydet\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Anahtar zincirine bir parola kaydedin\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Kaydet ve uygula\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Profil olarak kaydet\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Düzeni profil olarak kaydet\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Kaydedildi\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Düzeni kaydet\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Girdide kaydır\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Terminali bir sayfa aşağı kaydır\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Terminali bir sayfa yukarı kaydır\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Terminali en alta kaydır\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Terminali en üste kaydır\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Geriye kaydır\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Kullanıcı girdisinde terminali en alta kaydır\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Ara\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Renk şemalarını ara\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Kısayolları ara\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Eklenti ara\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Gizli senkronizasyon anahtarı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Seç\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Kalıp olarak kullanmak için temel bir profil seç\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Tümünü Seç\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Depolama seç\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Profil seçin\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Profil seçin ya da bir adres girin\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Hex değerleri yazarak bayt gönderme\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Her seferinde bir bayt veri gönderir\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Seri\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"Seri bağlantı\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Seri: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Ana parolayı ayarla\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Parolayı ayarla\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Şifreyi ayarla\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Tabby'yi %COMSPEC% olarak ayarla\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"Son profilleri devre dışı bırakmak için 0'a ayarlayın\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"SSH aracısının adlandırılmış yöneltme yolunu ayarlar.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Ayarlar\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Kabuk\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell geçerli yol algılamayı desteklemiyor\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Kabuk bütünleşmesi\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Göster\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Profil {type} seçiciyi göster\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Birden fazla satır yapıştırırken onay kutusu göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Yerleşik profilleri seçicide göster\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Komut seçiciyi göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Yapılandırma dosyasını aç\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Varsayılanları göster\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Mikseri Göster\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Bölme etiketlerini göster (yeniden düzenlemek için)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Profil ikonunu sekmede göster\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Profil seçiciyi göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Son profilleri seçicide göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Sürüm notlarını göster\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Seri bağlantıları göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Tam ekran modunda sekmeleri göster\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Araç Çubuğunu Göster\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Kasa içeriğini göster\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Sixel grafik desteği (deneysel)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"MoTD/banner'ı atla\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Yavaş besleme\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Pencereyi ekranın bir tarafına yaslar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS Proxy\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS proxy host\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS proxy port\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Ses\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Kaynak kodu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Uzaklık\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Ayır\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Ekranı alta ayır\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Aşağı doğru böl\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Ekranı sola ayır\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Ekranı sağa ayır\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Ekranı üste ayır\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Yukarı doğru böl\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH bağlantısı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH bağlantı yönetimi artık \\\"Profiller ve bağlantılar\\\" sekmesinden yapılıyor\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"SSH şifresi için {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Standart (eski)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"Başlangıç\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Durdurma Biti\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Şerit\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Güncellemeler için abone ol\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Değiştirmeye izin verildi.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Renk şemasını değiştir\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Profili değiştirin\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Etkin bölmede profil değiştirme\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Switchler Terminal Frontend implementasyonu (deneysel)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Eşitle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Otomatik eşitle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Ana bilgisayarı senkronize et\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Kısayolları Eşitle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Kasayı eşitle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Pencere ayarlarını eşitle\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Tab {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Sekme aktivitesi\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby, eklentilerinizle başlatılamadı, bu nedenle bu oturumda tüm üçüncü taraf eklentileri devre dışı bırakıldı. Hata:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Twitter'da Tabby haberleri ve güncellemeleri\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Sekmeler\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Sekme konumu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Sekme genişliği\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet oturumu\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Terminal\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Terminal arka planı\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Terminal zili\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Terminal tanımlama\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Tabby'i indirdiğiniz için teşekkür ederiz!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Tema\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Aktif dosya transferleri var\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Bu bağlantı için kaydedilmiş parola mevcut\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Bunlar, seçilen türdeki tüm profiller için geçerlidir\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"Bunlar, bu gruptaki verilen türdeki tüm profiller için geçerlidir\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"İnce\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Örtüşme, gölgelenme veya diğer görsel sorunlar yaşıyorsanız bunu işaretleyin\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Tam Ekran Kipini Aç/Kapat\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Son sekmeyi değiştir\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Terminal penceresini aç/kapat\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Sekmeli pencere görünürlüğünü değiştirir\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Üst\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Boşlukları ve yeni satırları kaldırın\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Tekrar deneyin\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Kaydedilmiş parolayı deniyor\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Geçerli sekmenin bölmelerini ayrı sekmelere dönüştür\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Gruplandırılmamış\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Yüklemeyi Kaldır\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Bilinmeyen\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"{key} için {type} türünde bilinmeyen mutabakat\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Sabitlemeyi kaldır\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Yukarı\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Güncelle\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"{version} sürümüne yükselt\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Yükle\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Yeni bir konfigürasyon olarak yükle\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Meta anahtarı olarak {altKeyName} kullanın\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"ConPTY kullan\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"Kullanıcı Varsayılanları\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Kullanıcı Adı\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"CONNECT yöntemini kullanma\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Önceden ayarlanmış parolayı kullanma\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Kasa\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Vault, SSH şifreleri ve özel anahtar parolaları gibi gizli içerikler için her zaman şifrelenmiş bir alandır.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Kasa boş\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Kasa kilitli\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Kasa yapılandırılmamış\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Gizli dizilerin saklanmasına izin vermek için kasa ana parolasının ayarlanması gerekir\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Bağlanırken ana bilgisayar anahtarlarını doğrulayın\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Sürüm\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Sürüm: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Titreşim\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Görsel\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Çok satırlı yapıştırmada uyar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Aktif bağlantıları kapatırken uyar\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Uyarı: Uzak ana bilgisayarın anahtarı aniden değişti!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Yalnızca Tabby ve İşletim Sistemi sürümlerinizi izliyoruz.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Hoşgeldiniz\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Yenilikler\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Oturum sona erdiğinde\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Etkinleştirildiğinde, bağlantılar yalnızca bu tuş basılıyken tıklanabilir\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"WinSCP algılandığında, içerik menüsünden bir SCP oturumu başlatabilirsiniz.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Özel bir pencerenin mi yoksa bir İşletim Sistemi yerel penceresinin mi kullanılması gerektiği\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"SSH selamlamasının görünmesini engelleyecek\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Pencere\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Kenar boyunca pencere boyutu\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Pencere boyutu kenardan uzakta\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Pencere çerçevesi\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Pencere\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"ConPTY için Windows 10 build 18309 veya üstü önerilir\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP yolu\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Kelime ayracı\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Çalışma dizini\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Çalışma dizini tespiti\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL terminal zili yalnızca Volume Mixer aracılığıyla kapatılabilir\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL terminali yalnızca ConPTY ile TrueColor'u destekler\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 yönlendirme\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Sarı\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Daha sonra değiştirebilirsiniz, ancak unutulursa kurtarılamaz.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Şu anda bir man-in-the-middle saldırısı altında olabilirsiniz veya ana bilgisayar anahtarı yeni değiştirilmiş olabilir.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Yakınlaştır\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Uzaklaştır\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"id.port-forwarding.dynamic\"\n\n"
  },
  {
    "path": "locale/uk-UA.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: uk\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Ukrainian\\n\"\n\"Language: uk_UA\\n\"\n\"PO-Revision-Date: 2024-12-24 22:58\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" все ще запущено. Закрити?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} копія\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"Друге сімейство шрифтів, для відображення символів, відсутніх в основному шрифті\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"Скасувати все\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"Прийняти і запам'ятати ключ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"Прийняти лише один раз\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"Спеціальні можливості\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"Акриловий фон\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"Додати\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"Додати перенаправлення порту\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"Додати приватний ключ\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"Додати...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"Додатковий простір між рядками\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"Додатково\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"Агент\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Перенаправлення агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Шлях до pipe SSH-агента\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Тип агента\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"Дозволяє відкривати файли .bat у вкладках, але ламає деякі оболонки\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"Дозволяє швидко відкрити термінал у вибраній папці\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"Завжди темна\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"Завжди світла\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"Відображення\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"Додаток\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"Налаштування\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"Ви впевнені, що хочете закрити Tabby? Це попередження можна вимкнути в Налаштування -> Вікно.\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"Ви впевнені?\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"Аргументи\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"Задати питання\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"Запитати перед закриттям вкладки\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"Метод автентифікації\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"Автор\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"Авто\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"Автоматично відкривати термінал при запуску програми\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"Автоматично\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"Оновлювати автоматично\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"Автоматично завантажувати зміни і перевіряти оновлення щохвилини\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"Доступно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"Тип фону\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Режим клавіші Backspace\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"Швидкість передачі даних\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"Початок рядка\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"Миготливий курсор\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"Синій\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"Розмиття\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"Жирний шрифт\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"Знизу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Bracketed вставка (потрібна підтримка оболонки)\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"Режим трансляції. Натисніть будь-де, щоб скасувати.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"Вбудовані\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"Скасувати\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"Змінити швидкість передачі\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"Змінити колір вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"Змінити майстер-пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"Перевірити оновлення\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"Шифри\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"Очистити\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"Очистити останні профілі\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"Очистити термінал\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"Очистити термінал після підключення\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"Буфер обміну\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"Закрити\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"Закрити і більше не показувати\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"Закрити активну панель\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"Закрити інші вкладки\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"Закрити вкладку\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"Закрити вкладки ліворуч\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"Закрити вкладки праворуч\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"Закрити вікно після закриття останньої вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"Колір\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"Кольорова схема\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"Кольорові схеми\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"Кольори\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"Об'єднати всі вкладки в поточну\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"Командний рядок\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"Замість мережного з'єднання використовується stdin/stdout команди\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"Команди\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"Компактний (застаріло)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"Конфігурацію видалено\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"Конфігурацію завантажено\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"Файл конфігурації\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"Синхронізація конфігурації\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"Конфігурацію завантажено\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"Конфігурація\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"Підключення через проксі-сервер\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"З’єднання з \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"Підключитися до іншого хосту та використовувати його як проксі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"З'єднання\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"Підключення\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"Помилка підключення: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"Замість цього буде використовуватися ім'я з'єднання\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"Контекстне меню\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"Контролює відстань між елементами\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"Скопійовано\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"Копіювати\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"Копіювати поточний шлях\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"Копіювати повний шлях\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"Копіювати при виділенні\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"Копіювати в буфер обміну\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"Копіювати з форматуванням\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"Не вдалося розшифрувати конфігурацію\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"Створити\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"Створити директорію\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"Поточний\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"Поточна схема оформлення\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"Відбиток ключа поточного хоста\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"Поточний процес: {name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"Форма курсору\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"Користувацька\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"Користувацький CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"Темна тема\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"Біти даних\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"Дебаг\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"Зменшити розмір поділу по горизонталі\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"Зменшити розмір поділу по вертикалі\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"За замовчуванням \\\"Під'єднатись до\\\" тип\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"Тип підключення за замовчуванням використовується для швидкого з'єднання (напр., SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"Зменшити розмір поділу по вертикалі\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"Налаштування групи за замовчуванням\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"Налаштування профілів за замовчуванням\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"За замовчуванням\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"За замовчуванням для {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"Видалити\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"Видалити {name}?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"Видалити {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"Видалити увесь рядок\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"Видалити наступне слово\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"Видалити попереднє слово\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"Видалити конфіг на віддаленій стороні?\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"Видалити профілі цієї групи?\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"Видалити цей скрипт?\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"Видалити вміст сховища?\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"Видалення\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"Пристрій\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"Безпосередньо\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"Вимкнути\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"Вимкнути динамічний заголовок вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"Вимкнути прозорий фон під час перетягування вікна\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"Вимкнути апаратне прискорення\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"Вимкнено\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"Від'єднатися\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Відключити поточну вкладку (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"Від'єднатися від {host}?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"Показувати зображення з допомогою послідовності Sixel\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"Відобразити на\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"Не перервати\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"Не закривати\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"Не запам'ятовувати\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"Закріпити поверх усіх вікон\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"Закріпити термінал\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"Розмір закріпленого терміналу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"Відступи закріпленого терміналу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"Закріплення\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"Виділення за подвійним клацанням зупиниться на цих символах\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"Вниз\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"Завантажити\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"Малює жирний текст яскравими кольорами\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"Дублювати\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"Дублювати як адміністратор\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"Дублювати вкладку\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"Редагувати\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"Редагувати локально\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"Увімкнути\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"Увімкнути аналітику\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"Увімкнути анімації\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"Увімкнути автоматичне встановлення оновлень, коли вони стануть доступними.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"Увімкнути опцію вільного фону\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"Увімкнути лігатури шрифтів\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"Увімкнути глобальні сполучення клавіш (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"Вмикає експериментальне API ConPTY Windows\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"Шифрувати файл конфігурації\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"Кінець рядка\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"Середовище\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"Очистити конфігурацію\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"Очистити сховище\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"Помилка в {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"Точна відповідність\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"Наприклад:\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"Експериментальний стиль фону Windows 10 (може працювати не стабільно)\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"Експорт\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"Запасний шрифт\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"Передача файлів\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"Файл: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"Фільтр\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"Фіксований\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Іноді прозорий фон викликає лаги під час перетягування\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"Сфокусуватися на всіх панелях\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"Фокус на всі панелі одразу (broadcast)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"Сфокусуватися на всіх вкладках\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"Фокус на всіх вкладках одночасно (трансляція)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"Фокус слідує за курсором\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"Фокус на наступній панелі\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"Фокус на панелі {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"Фокус на попередній панелі\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"Фокус на панелі вище\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"Фокус на панелі нижче\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"Фокус на панелі ліворуч\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"Фокус на панелі праворуч\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"Дотримуватись колірної схеми\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"Шрифт\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"Комбінації клавіш\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"Змінити на CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"Змінити на CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"Змінити на LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"Примусово встановлює певний тип підключення до агента SSH.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"Забути\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"Перенаправити порт\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"Перенаправлені порти\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"З колірної схеми\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"З системи\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"З теми\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"Фронтенд\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"Повний\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"Загальні\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"Відкрити попередньо заповнений звіт на GitHub\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"Отримати\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"Скопіюйте з вікна налаштувань web-версії Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"Надає вікну розмитий прозорий фон\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"Вгору\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"Зелений\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"Група\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"Проблеми\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"Допоможіть відстежувати скільки встановлено Tabby по всьому світу!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"Допоможіть перекласти Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"Шістнадцятковий\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"Приховати\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"Приховати кнопку закриття вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"Приховати нумерацію вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"Приховати кнопку опцій вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"Приховати вікно під час втрати фокусу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"Приховує закріплений термінал при натисканні поза ним.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"Домашня сторінка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"Хост\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"Ключ хоста\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"Перевірка ключа хоста\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"Гарячі клавіші\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Як Tabby представляє себе за допомогою змінних оточення\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP-проксі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"Хост HTTP-проксі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"Порт HTTP-проксі\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"Іконка\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"Динамічна\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"Якщо вимкнено, у селекторі профілю відображатимуться лише користувацькі профілі\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"Миттєво локально відображає ваше введення\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"Збільшити розмір поділу по горизонталі\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"Збільшити розмір поділу по вертикалі\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"Input\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"Введені дані передаються під час введення\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"Режим введення\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"Перенесення рядків у введенні\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"Встановлено\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"Встановлення оновлення закриє всі вкладки й перезавантажить Tabby.\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"Інтелектуальний Ctrl-C (копіювати/скасувати)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"Інтерактивний\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"Некоректний синтаксис\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"Проміжний хост\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"Перейти до наступного слова\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"Перейти до попереднього слова\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"Залишити\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Інтервал перевірки з'єднання (мс)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"Відображати закріплений термінал завжди поверх усіх вікон\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"Ключ\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"Обмін ключами\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"Клавіатура\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"Інтерактивна автентифікація\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"Закінчити примусово\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"Мова\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"Останній відомий відбиток ключа хоста\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"Запустити WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"Запустити WinSCP для поточної SSH сесії\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"Дізнайтеся, як дозволити Tabby визначати робочий каталог віддаленої оболонки.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"Ліворуч\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"Дозволяє оболонці обробляти клавішу Meta замість ОС\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"Світла тема\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"Рядок до рядка\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"Редактор рядків, введення надсилається після натискання Enter\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"Міжстроковий інтервал\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"Завантаження\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"Завантаження налаштувань...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"Локальний\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"Локальне ехо\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"Локальний термінал\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"Скрипти входу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"Довге натискання для контекстного меню\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"Керування профілями\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"Максимальна кількість перевірок з'єднання\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"Розгорнути активну панель\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"Мінімальний контрастність\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"Змінено {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"Миша\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"Перенести вкладку ліворуч\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"Перенести вкладку праворуч\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"Перемістити до «Без групи»\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"Наведення курсора на неактивну панель зробить її активною\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"Ім’я\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"Ім'я для нової конфігурації\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"Ім'я для нового каталогу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"Рідний\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"Новий\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"Нова вкладка від імені адміністратора\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"Нова конфігурація на {platform}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"Нова назва групи\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"Новий елемент\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"Нове ім'я\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"Новий профіль\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"Нова група профілів\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"Нове ім'я профілю\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"Нова вкладка\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"Нова вкладка: {profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"Новий термінал\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"Нове вікно\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"Нове Вікно\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"Новий з профілем\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"Наступна вкладка\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"Без кольору\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"Без модифікатора\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"Ні\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"Нормальний\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"Стандартний розмір шрифта\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"Не знайдено\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"Повідомляти про активність\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"Повідомити про завершення\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"Кількість рядків, що зберігаються в буфері\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"Вимк.\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"Офіційний\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"На GitHub Discussions\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"Закривати вкладку при явному припиненні сеансу\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"Прозорість\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"Відкрити DevTools\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"Відкрити налаштування\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"Відкрити вкладку параметрів: {tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"Відкрити панель SFTP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"Опціональний\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"Параметри\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"Помаранчевий\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"За замовчуванням для ОС\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"За замовчуванням для ОС ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"Вивід показується у шістнадцятковому вигляді\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"Висновок показаний у первісному вигляді\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"Режим виводу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"Перенесення рядків у виводі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"Перевизначити дисплей X11\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"Перезаписати локальну конфігурацію та синхронізувати\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"Перезаписати віддалену конфігурацію та синхронізувати\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"Перезаписати віддалену конфігурацію та почати синхронізацію?\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"Перезаписати локальну конфігурацію та розпочати синхронізацію?\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"Крок зміни розміру панелі\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"Панелі\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"Папір (застаріло)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"Контроль парності\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"Часткова синхронізація конфігурації неможлива, якщо конфігурація зашифрована за допомогою сховища.\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"Дохід\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"Парольна фраза для приватного ключа з хешем {hash}...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"Пароль\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"Вставити\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"Вставити з буферу обміну\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"Вставити якщо немає виділення, інакше копіювати\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"Вставити кілька рядків?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"Вставити середньою кнопкою миші\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"Шлях або адреса локального сокету X11\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"Закріпити\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"Плагіни\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"Папка з плагінами\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"Порт\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"Порт відкрито\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"Порти\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"Натисніть будь-яку клавішу, щоб повторно підключитися\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"Натисніть кнопку\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"Запобігає випадковому закриттю\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"Запобігає випадковому виконанню вставлених команд\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"Попередня вкладка\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"Приватні ключі\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"Процес завершено\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"Ім'я профілю\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"Профілі\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"Профілі й підключення\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"Програма\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"Команда проксі\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"Фіолетовий\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"Поміщає конфігурацію Tabby у зашифроване сховище\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"Швидке з'єднання\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"Вихід\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"Підключення через сокет\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"Таймаут підключення (мс)\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"Останні\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"Відновити з'єднання\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"Повторне підключення поточної вкладки (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"Червоний\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"Regex\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"Замітки до випуску\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"Запам'ятати на {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"Дистанційне\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"Видалити пробіли і нові рядки навколо скопійованого тексту\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"Перейменувати\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"Перейменувати вкладку\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"Відображення\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"Відновити останню вкладку\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"Замінити\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"Повідомити про проблему\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"Вимагати натискання кнопки для переходу за посиланнями\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"Скинути масштаб\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"Перезапустити поточний послідовний сеанс\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"Перезапустити поточну SSH сесію\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"Перезапустити поточну сесію Telnet\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"Перезапуск вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"Перезапустіть програму, щоб застосувати зміни\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"Відновити налаштування за замовчуванням?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"Відновити параметри до типових значень?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"Відновлювати вкладки терміналу під час запуску програми\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"Повторне використання сесії для кількох вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"Праворуч\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"ПКМ\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"Запустити від імені адміністратора\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"Зберегти\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"Збережіть пароль у зв'язку ключів\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"Зберегти та застосувати\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"Зберегти як профіль\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"Зберегти макет як профіль\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"Збережено\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"Збережений макет\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"Прокручувати під час введення\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"Прокрутити на одну сторінку донизу\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"Прокрутити на одну сторінку вгору\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"Прокрутка терміналу донизу\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"Прокрутка терміналу вгору\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"Буфер зворотного прокручування\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"Прокручує термінал вниз під час введення\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"Пошук\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"Пошук кольорових схем\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"Пошук гарячих клавіш\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"Пошук плагінів\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"Секретний токен синхронізації\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"Обрати\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"Виберіть базовий профіль для використання в якості шаблону\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"Вибрати всі\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"Виберіть сховище файлів\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"Вибрати профіль\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"Виберіть профіль або введіть адресу\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"Відправляти байти, вводячи шістнадцяткові значення\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"Відправляє дані по одному байту за раз\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"Послідовний порт\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"З'єднання по послідовному порту\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"Послідовний порт: {description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"Встановити майстер-пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"Встановити парольну фразу\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"Встановити пароль\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"Встановити Tabby як %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"0 вимикає останні профілі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"Встановити шлях для named pipe SSH-агента.\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"Налаштування\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell не підтримує виявлення поточного шляху\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Інтеграція в систему\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"Показати\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"Показати селектор профілю {type}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"Підтвердження при вставці кількох рядків\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"Показувати вбудовані профілі під час вибору\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"Показати селектор команди\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"Показати файл конфігурації\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"Показувати за замовчуванням\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"Показати Мікшер\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"Показати назви панелей (для перестановки)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"Показувати іконку профілю на вкладці\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"Показати вибір профілю\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"Показати останні профілі під час вибору\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"Показати замітки до випуску\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"Показати з'єднання по послідовному порту\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"Відображати вкладки в повноекранному режимі\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"Показати панель інструментів\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"Показати вміст сховища\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"Підтримка графіки Sixel (експериментальна)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"Пропустити MoTD/банер\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"Повільна стрічка\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"Закріплює вікно до вибраного краю екрана\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS проксі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"Хост SOCKS проксі\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"Порт SOCKS проксі\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"Звук\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"Вихідний код\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"Простір\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"Розділити\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"Розділити знизу\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"Розділити вниз\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"Розділити ліворуч\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"Розділити праворуч\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"Розділити зверху\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"Розділити вверх\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH зʼєднання\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"Управління SSH-підключеннями тепер здійснюється у вкладці «Профілі та підключення»\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"Пароль SSH для {user}@{host}:{port}\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"Стандартний (застаріло)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"При запуску\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"Стоп-біти\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"Видалити\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"Підписатись на оновлення\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"Допускаються заміни.\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"Переключити колірну схему\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"Змінити профіль\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"Переключити профіль на активній панелі\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"Переключення реалізації frontend для терміналу (експериментально)\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"Синхронізація\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"Автоматична синхронізація\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"Хост синхронізації\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"Синхронізувати гарячі клавіші\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"Синхронізувати сховище\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"Синхронізувати налаштування вікна\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"Вкладка {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"Активність вкладки\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby не зміг запуститися з вашими плагінами, тому всі сторонні плагіни були відключені у цій сесії. Помилка:\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Новини та оновлення Tabby у Twitter\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"Вкладки\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"Розташування вкладок\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"Ширина вкладки\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet сесія\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"Термінал\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"Фон терміналу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"Звуковий сигнал терміналу\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"Ідентифікація терміналу\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"Дякуємо що завантажили Tabby!\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"Тема\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"Є активні передачі файлів\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"Для цього з'єднання збережено пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"Це застосовується до всіх профілів заданого типу\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"До всіх профілів даного типу в цій групі\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"Тонкий\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"Увімкніть, якщо бачите aliasing, ghosting або інші проблеми з відображенням\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"Перехід у повноекранний режим та назад\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"Перемкнути на останню вкладку\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"Приховати/показати вікно терміналу\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"Перемикає видимість вікна Tabby\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"Зверху\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"Обрізати пробіли і нові рядки\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"Повторити\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"Пробуємо збережений пароль\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"Перетворити панелі поточної вкладки на окремі вкладки\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"Без групи\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"Видалити\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"Невідомо\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"Невідомий тип секретних даних {type} для {key}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"Відкріпити\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"Вгору\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"Оновити\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"Оновити до {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"Завантажити\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"Завантажити як нову конфігурацію\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"Використовувати {altKeyName} як клавішу Meta\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"Використовувати ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"За замовчуванням для користувача\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"Ім'я користувача\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"Використовувати метод CONNECT\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"Використовуємо встановлений пароль\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"Сховище\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Сховище є постійно зашифрованим контейнером, що містить такі секретні дані, як SSH-паролі та парольні фрази приватних ключів.\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"Сховище пусте\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"Сховище закрите\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"Сховище не налаштоване\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"Для збереження секретних даних має бути заданий майстер-пароль сховища\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"Перевірка ключів хоста при підключенні\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"Версія\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"Версія: {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Розмитий фон\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"Візуально\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"Попереджати при багаторядковій вставці\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"Попереджати при закритті активних з'єднань\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"Попередження: ключ віддаленого хоста раптом змінився!\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"Відстежується лише версія ОС і Tabby.\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"Вітаємо\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"Що нового\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"Коли сесія закінчиться\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"Коли увімкнено, посилання можна натискати, утримуючи цю клавішу\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"Якщо WinSCP виявлено, можна запускати SCP-сесії з контекстного меню.\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"Чи має використовуватися кастомне оформлення вікна чи системне\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"Не показувати привітання SSH\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"Вікно\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"Розміри вікна вздовж краю\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"Розмір вікна від краю\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"Рамка вікна\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"Вікна\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Для ConPTY рекомендується Windows 10 build 18309 або вище\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"Шлях до WinSCP\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"Розділювачі слів\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"Робочий каталог\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"Визначення робочого каталогу\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"Дзвінок терміналу WSL може бути заглушений тільки за допомогою мікшера гучності\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"Термінал WSL підтримує TrueColor лише з ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"Переспрямування X11\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"Жовтий\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"Ви можете змінити його пізніше, але якщо забудете, відновити буде неможливо.\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"Можливо, зараз ви перебуваєте під атакою «man-in-the-middle», або ключ хоста міг бути змінений.\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"Збільшити\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"Зменшити\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"Динамічне\"\n\n"
  },
  {
    "path": "locale/zh-CN.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: zh-CN\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Chinese Simplified\\n\"\n\"Language: zh_CN\\n\"\n\"PO-Revision-Date: 2025-01-22 22:02\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" 仍在运行。是否需要关闭？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} 副本\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"首选字体缺失时使用备选字体显示字符\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"中止全部\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"接受并记住密钥\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"只接受本次\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"辅助功能\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"毛玻璃背景\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"添加\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"添加端口转发\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"添加私钥\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"添加…\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"行间距\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"高级设置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"Agent 转发\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent pipe 路径\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"Agent 类型\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"允许在标签页中打开.bat文件，但会中断某些shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"允许在选定的文件夹中快速打开终端\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"始终使用暗色\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"始终使用亮色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"外观\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"应用\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"应用程序设置\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"您确定要关闭 Tabby 吗？您可以在 设置 -> 窗口 中关闭此提示。\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"您确定吗？\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"参数\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"提出问题\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"关闭标签页前询问\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"有声\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"身份验证方法\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"作者\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"自动\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"在应用程序启动时自动打开一个终端窗口\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"自动\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"自动更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"每分钟自动上传更改，并自动检查更新\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"可用\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"背景类型\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"背空键模式\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"波特率\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"行首\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"光标闪烁\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"蓝色\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"模糊\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"粗体字体粗细\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"底部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Bracketed 粘贴（需要 Shell 支持）\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"广播模式。点击任意位置取消。\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"内置\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"取消\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"更改波特率\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"更改标签颜色\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"更改主密码\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"检查更新\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"加密方法\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"清除\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"清除最近使用的配置\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"清空终端内容\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"连接后清空终端\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"剪贴板\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"关闭\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"关闭且不再提示\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"关闭已聚焦窗格\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"关闭其它标签页\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"关闭标签页\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"关闭左侧标签页\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"关闭右侧标签页\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"所有标签都关闭时关闭主窗口\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"颜色\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"配色方案\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"配色方案\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"色彩\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"将所有标签页合并到当前页\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"命令行\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"使用命令的 stdin/stdout，而不是网络连接。\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"命令\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"紧凑模式（旧版）\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"配置已删除\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"配置已下载\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"配置文件\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"配置同步\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"配置已上传\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"配置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"通过代理服务器连接\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"正在连接到 \\\"%s\\\"…\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"首先连接至另一主机，并将其作为代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"正在连接\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"连接\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"连接失败: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"将使用连接名称代替\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"右键菜单\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"控制元素之间的间隔\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"已复制\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"复制\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"复制当前路径\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"复制完整路径\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"选中时复制\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"复制到剪贴板\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"复制带格式\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"无法解密配置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"创建\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"创建文件夹\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"当前\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"当前配色方案\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"当前主机密钥指纹\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"当前进程：{name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"光标形状\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"自定义\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"自定义 CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"夜间模式\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"数据位数\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"调试\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"减少水平分割大小\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"减少垂直分割大小\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"默认“连接到”类型\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"快速连接功能使用的默认连接类型 (例如SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"新标签页的默认配置\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"默认配置设置\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"默认配置设置\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"默认值\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"{type} 的默认值\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"删除\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"删除\\\"{name}\\\"？\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"是否删除 {fullPath} ？\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"删除整行\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"删除下一个单词\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"删除上一个单词\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"是否删除远程配置？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"删除此分组所有配置？\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"删除此脚本？\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"删除保险库内容？\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"正在删除\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"设备\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"直连\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"禁用\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"禁用动态标签页标题\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"拖动时禁用 Fluent 背景\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"禁用 GPU 加速\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"已禁用\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"断开连接\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"重新连接当前标签页 (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"断开与 {host} 的连接？\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"由六像素转义序列显示图像\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"显示于\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"不要中止\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"不要关闭\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"不记住\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"窗口保持置顶\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"停靠终端\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"停靠的终端大小\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"停靠的终端空间\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"停靠\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"双击选择将在这些字符处停止\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"向下\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"下载\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"以亮色显示粗体\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"克隆\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"以管理员身份克隆\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"克隆标签页\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"编辑\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"本地编辑\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"启用\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"启用分析\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"开启动画效果\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"当更新可用时，启用自动安装\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"启用Fluent背景\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"启用连结字\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"启用全局快捷键 (Ctrl-Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"启用实验性 Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"加密配置文件\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"行尾\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"环境变量\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"擦除配置\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"擦除保险库\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"{plugin} 中的错误：\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"完全匹配\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"示例：\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"实验性Windows 10 背景风格已知会导致问题\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"导出\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"备用字体\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"文件传输\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"文件： {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"筛选\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"固定\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Fluent 背景有时会导致拖动延迟\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"聚焦所有窗格\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"同时聚焦所有窗格 (广播)\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"聚焦所有标签页\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"同时聚焦所有标签页 (广播)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"焦点跟随鼠标\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"聚焦下一个窗格\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"焦点窗格 {number}\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"聚焦上一个窗格\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"聚焦上面的窗格\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"聚焦下面的窗格\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"聚焦左方的窗格\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"聚焦右方的窗格\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"依照配色方案\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"字体\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"对于键盘快捷键\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"强制使用 CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"强制使用 CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"强制使用 LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"强制特定的 SSH Agent 连接类型\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"忘记\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"转发端口\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"已转发端口\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"取自配色方案\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"来自系统\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"取自主题\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"前端\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"完整\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"通用\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"生成一个预填写的 GitHub 问题\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"获取\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"从 Tabby 网页设置窗口获取\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"使窗口具有模糊透明的背景\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"上一级\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"绿色\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"分组\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"调整\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"帮助追踪 Tabby 在世界各地的安装次数！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"帮助翻译Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"十六进制\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"隐藏\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"隐藏标签页关闭按钮\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"隐藏标签页索引\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"隐藏标签页选项按钮\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"失去聚焦时隐藏窗口\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"点击别处时隐藏停靠的终端\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"主页\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"主机\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"主机密钥\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"主机密钥校验\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"快捷键\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Tabby如何通过环境变量呈现自己\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP 代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP 代理主机\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP 代理端口\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"图标\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"动态\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"如果禁用，则只在配置选择器中显示自定义配置\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"立刻在本地回显您的输入\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"增加水平分割大小\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"增加垂直分割大小\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"输入\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"按您输入时发送\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"输入模式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"输入换行符\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"已安装\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"安装更新将关闭全部标签页并重启 Tabby。\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"智能 Ctrl-C (复制/中止)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"交互式\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"无效的语法\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"跳板机\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"跳到下一个单词\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"跳到上一个单词\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"保留\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"保活间隔（毫秒）\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"保持停靠终端置顶\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"密钥\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"密钥交换\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"键盘\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"键盘交互认证\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"结束进程\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"语言\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"最后已知的主机密钥指纹\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"启动 WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"为当前的 SSH 会话启动 WinSCP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"了解如何让 Tabby 检测远程 shell 的工作目录。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"左侧\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"使用 Shell 替代操作系统处理 Meta 键\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"亮色主题\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"逐行\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"行编辑器，按回车后发送输入的内容\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"行间距\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"加载中\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"正在加载配置...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"本地\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"本地回显\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"本地终端\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"登录脚本\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"长按右键菜单\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"管理配置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"最大保活次数\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"最大化活动窗格\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"最低对比度\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"修改于 {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"鼠标\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"将标签页移至左侧\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"将标签页移至右侧\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"移动到 “未分组”\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"鼠标移到非活动窗格时会激活它\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"名称\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"新配置名称\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"为新文件夹命名\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"原生\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"新建\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"新的管理标签页\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"{platform} 上的新配置\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"新建群组名称\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"新建项\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"新名称\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"新配置\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"新建配置文件组\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"新配置名称\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"新标签页\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"新标签页：{profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"新终端\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"新窗口\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"新建窗口\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"依据配置新建\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"下一个标签页\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"无色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"关闭\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"无\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"一般\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"正常字体粗细\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"未找到\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"活动时通知\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"完成时通知\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"保存在缓冲区的行数\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"关闭\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"官方\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"在 GitHub 讨论\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"仅当会话被明确终止时关闭标签\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"不透明度\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"开启开发者工具\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"打开设置\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"打开设置标签页：{tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"打开 SFTP 面板\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"选填\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"选项\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"橙色\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"系统默认\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"系统默认 ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"输出显示为十六进制转储\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"按收到的原有样式显示输出\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"输出模式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"输出换行符\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"覆盖 X11 显示\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"覆盖本地并同步\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"覆盖远程并同步\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"覆盖远程的配置并开始同步？\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"覆盖本地配置并开始同步？\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"窗格大小调整阶梯\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"窗格\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"纸张（旧版）\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"奇偶校验\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"当配置通过保险库加密时，部分配置同步不可用\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"穿透模式\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"带哈希值 {hash} 的私钥口令...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"密码\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"粘贴\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"从剪贴板中粘贴\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"未选择内容时粘贴，否则复制\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"粘贴多行？\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"按下鼠标滚轮（或中间按键）时粘贴\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"本地 X11 socket 的路径或地址\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"固定\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"插件\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"插件目录\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"端口\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"端口已打开\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"端口\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"按任意键重新连接\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"请输入按键\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"防止意外关闭\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"防止意外执行粘贴的命令\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"上一个标签页\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"私钥\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"处理完成\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"配置名称\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"配置\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"配置和连接\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"程序\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"代理命令\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"紫色\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"将 Tabby 的所有配置放入保险库\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"快速连接\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"退出\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"原始套接字连接\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"准备超时（毫秒）\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"最近\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"重新连接\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"重新连接当前标签页 (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"红色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"正则表达式\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"更新日志\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"记住密码 {time}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"远程\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"删除复制文本周围的空格和换行\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"重命名\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"重命名标签\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"渲染\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"重新打开最后的标签页\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"替换\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"报告问题\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"需要同时按下按键来点击链接\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"重置缩放\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"重启当前串口会话\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"重启当前 SSH 会话\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"重启当前的 Telnet 会话\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"重启标签页\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"重新启动应用以使更改生效\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"还原为默认设置\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"还原为默认设置\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"应用程序启动时恢复终端标签页\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"为多个标签页重用会话\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"右侧\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"右键点击\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"以管理员身份运行\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"保存\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"在钥匙串中保存密码\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"保存并应用\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"另存为配置\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"保存布局为配置\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"已保存\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"已保存的布局\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"输入时滚动\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"向下滑动终端一页\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"向上滑动终端一页\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"滚动终端到底部\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"滑动终端到顶端\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"回滚\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"在用户输入时，将终端滚动至底部\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"搜索\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"搜索配色方案\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"搜索快捷键\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"搜索插件\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"加密同步令牌\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"选择\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"选择一个基本配置作为模板\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"全选\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"选择文件存储\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"选择配置\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"选择配置或输入地址\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"通过输入十六进制值发送字节\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"一次发送一个字节数据\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"串口\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"串口连接\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"串口：{description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"设置主密码\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"设置密码\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"设置密码\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"将 Tabby 设置为 %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"设置为 0 以禁用最近的配置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"设置 SSH agent 的命名 pipe 路径\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"设置\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell 不支持当前路径检测\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Shell 集成\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"显示\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"显示 {type} 配置选择器\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"当粘贴多行时，显示确认对话框\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"在选择器中显示内置配置\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"显示命令选择器\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"显示配置文件\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"显示默认值\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"显示音量合成器\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"显示窗格标签（用于重新排列）\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"在标签上显示配置文件图标\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"显示配置选择器\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"在选择器中显示最近的配置\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"显示更新日志\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"显示串口连接\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"全屏模式下显示标签栏\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"显示工具栏\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"显示保险库内容\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"六像素图形支持 (实验)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"跳过 MoTD/横幅消息\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"逐字节接收\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"将窗口贴靠至屏幕的一侧\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS 代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS 代理主机\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS 代理端口\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"声音\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"源码\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"间隔\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"拆分\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"向下拆分\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"向下拆分\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"向左拆分\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"向右拆分\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"向上拆分\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"向上拆分\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH 连接\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"现在，通过“配置和连接”选项对 SSH 连接进行管理\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"{user}@{host}:{port} 的 SSH 密码\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"标准模式（旧版）\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"启动时\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"停止位\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"过滤\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"订阅更新\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"允许替换\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"切换配色方案\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"切换配置\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"在活动窗格中切换配置\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"切换终端前端实现（实验性）\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"同步\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"自动同步\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"同步主机\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"同步快捷键\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"同步保险库\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"同步窗口设置\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"标签页 {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"标签页活动\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby 不能使用您的插件启动，因此本次会话中禁用了所有第三方插件。错误信息：\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Tabby 在 Twitter 的新闻和更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"标签页\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"标签页位置\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"标签页宽度\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet 会话\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"终端\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"终端背景\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"终端提示音\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"终端标识\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"感谢您下载 Tabby！\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"主题\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"当前有活动的文件传输\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"此连接已保存密码\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"应用于给定类型的所有配置文件\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"这些适用于此组中给定类型的所有配置文件\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"简约\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"如果您遇到锯齿、重影或其他视觉问题，请打开此选项\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"切换全屏模式\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"切换到最后一个标签页\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"切换终端窗口\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"切换 Tabby 显示或隐藏\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"顶部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"缩减空格和换行\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"再试一次\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"尝试已保存的密码\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"将当前标签所在的窗格更改为单独的标签页\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"未分组\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"卸载\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"未知\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"{key} 的 {type} 类型的未知密钥\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"取消固定\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"向上\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"更新\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"升级至 {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"上传\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"上传为新配置\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"使用 {altKeyName} 作为 Meta 键\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"使用 ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"用户默认\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"用户名\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"使用 CONNECT 方法\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"使用预设密码\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"保险库\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"保险库是一个始终加密的容器，用于存放SSH密码和私钥。\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"保险库为空\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"保险库已锁定\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"保险库未配置\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"为允许存储密钥，您必须设置保险库的主密码\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"连接时校验主机密钥\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"版本\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"版本：{version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"鲜明\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"可视化\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"多行粘贴时显示警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"当关闭活动连接时，显示警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"警告：远程主机密钥突然改变！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"我们只获取您的 Tabby 和操作系统版本信息。\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"欢迎\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"最近更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"在会话结束时\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"如果启用，链接只有在按住此键时可被点击\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"检测到 WinSCP 时，您可以从右键菜单中启动一个 SCP 会话。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"使用自定义窗口或操作系统原生窗口\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"不显示 SSH 问候语\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"窗口\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"沿边缘的窗口尺寸\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"远离边缘的窗口尺寸\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"窗口框架样式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"窗口\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"Windows 10 版本 18309 以上推荐 ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP 路径\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"单词分隔符\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"工作目录\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"查找工作目录\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL 终端提示音只能通过音量混合器关闭\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL 终端仅支持 ConPTY 真彩\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 转发\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"黄色\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"您可以稍后更改，但在忘记时无法恢复\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"您可能正在遭受中间人攻击，或您的主机密钥已经被更改。\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"放大\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"缩小\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"动态端口转发\"\n\n"
  },
  {
    "path": "locale/zh-TW.po",
    "content": "msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Crowdin-Project: tabby\\n\"\n\"X-Crowdin-Project-ID: 493349\\n\"\n\"X-Crowdin-Language: zh-TW\\n\"\n\"X-Crowdin-File: /locale/app.pot\\n\"\n\"X-Crowdin-File-ID: 75\\n\"\n\"Project-Id-Version: tabby\\n\"\n\"Language-Team: Chinese Traditional\\n\"\n\"Language: zh_TW\\n\"\n\"PO-Revision-Date: 2025-01-22 22:02\\n\"\n\n#: tabby-local/src/components/terminalTab.component.ts:113\nmsgid \"\\\"{command}\\\" is still running. Close?\"\nmsgstr \"\\\"{command}\\\" 正在執行。是否結束？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:78\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:88\nmsgid \"{name} copy\"\nmsgstr \"{name} 複製\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77\nmsgid \"A second font family used to display characters missing in the main font\"\nmsgstr \"備用字型用於顯示主字型中缺少的字元\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:49\nmsgid \"Abort all\"\nmsgstr \"全部中止\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24\nmsgid \"Accept and remember key\"\nmsgstr \"接受並記住金鑰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25\nmsgid \"Accept just this once\"\nmsgstr \"只接受一次\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84\nmsgid \"Accessibility\"\nmsgstr \"輔助\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27\nmsgid \"Acrylic background\"\nmsgstr \"壓克力背景\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11\nmsgid \"Add\"\nmsgstr \"新增\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16\nmsgid \"Add a port forward\"\nmsgstr \"新增通訊埠轉送\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115\nmsgid \"Add a private key\"\nmsgstr \"新增私鑰\"\n\n#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8\nmsgid \"Add...\"\nmsgstr \"新增...\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84\nmsgid \"Additional space between lines\"\nmsgstr \"行與行之間的額外空間\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:124\nmsgid \"Advanced\"\nmsgstr \"進階\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:90\nmsgid \"Agent\"\nmsgstr \"代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134\nmsgid \"Agent forwarding\"\nmsgstr \"代理轉送\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35\nmsgid \"Agent pipe path\"\nmsgstr \"Agent Pipe 路徑\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24\nmsgid \"Agent type\"\nmsgstr \"代理類型\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169\nmsgid \"Allows opening .bat files in tabs, but breaks some shells\"\nmsgstr \"允許在分頁中打開 bat 檔案，但會打斷一些 Shell\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:60\nmsgid \"Allows quickly opening a terminal in the selected folder\"\nmsgstr \"允許在所選資料夾中快速打開終端\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11\nmsgid \"Always dark\"\nmsgstr \"永久深色\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13\nmsgid \"Always light\"\nmsgstr \"永久明亮\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2\n#: tabby-terminal/src/settings.ts:14\nmsgid \"Appearance\"\nmsgstr \"外觀設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:4\nmsgid \"Application\"\nmsgstr \"應用程式\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:47\nmsgid \"Application settings\"\nmsgstr \"應用程式設定\"\n\n#: tabby-web/src/services/hostWindow.service.ts:19\nmsgid \"Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.\"\nmsgstr \"你確定要關閉 Tabby 嗎？您可以在設定 -> 視窗中停用此提示。\"\n\n#: tabby-core/src/services/config.service.ts:440\nmsgid \"Are you sure?\"\nmsgstr \"您確定嗎？\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:18\nmsgid \"Arguments\"\nmsgstr \"參數\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"Ask a question\"\nmsgstr \"提出問題\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20\nmsgid \"Ask before closing the browser tab\"\nmsgstr \"在關閉分頁之前詢問\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141\nmsgid \"Audible\"\nmsgstr \"音效\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:74\nmsgid \"Authentication method\"\nmsgstr \"認證方法\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79\nmsgid \"Author\"\nmsgstr \"作者\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:50\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:78\nmsgid \"Auto\"\nmsgstr \"自動\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153\nmsgid \"Auto-open a terminal on app start\"\nmsgstr \"在應用程式啟動時自動打開終端\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:28\nmsgid \"Automatic\"\nmsgstr \"自動\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:73\nmsgid \"Automatic Updates\"\nmsgstr \"自動更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:54\nmsgid \"Automatically upload changes and check for updates every minute\"\nmsgstr \"每分鐘自動上傳更變並檢查更新\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10\nmsgid \"Available\"\nmsgstr \"可用\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35\nmsgid \"Background type\"\nmsgstr \"背景類別\"\n\n#: locale/tmp-html/tabby-terminal/src/components/inputProcessingSettings.component.html:4\nmsgid \"Backspace key mode\"\nmsgstr \"Backspace鍵模式\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14\n#: tabby-serial/src/components/serialTab.component.ts:93\n#: tabby-serial/src/profiles.ts:88\nmsgid \"Baud rate\"\nmsgstr \"串列傳輸速率\"\n\n#: tabby-terminal/src/hotkeys.ts:22\nmsgid \"Beginning of the line\"\nmsgstr \"行首\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:64\nmsgid \"Blink cursor\"\nmsgstr \"閃爍游標\"\n\n#: tabby-core/src/utils.ts:60\nmsgid \"Blue\"\nmsgstr \"藍色\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39\nmsgid \"Blur\"\nmsgstr \"模糊\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:28\nmsgid \"Bold font weight\"\nmsgstr \"粗體文字寬度\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80\nmsgid \"Bottom\"\nmsgstr \"底部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109\nmsgid \"Bracketed paste (requires shell support)\"\nmsgstr \"Bracketed 貼上（需要 Shell 支援）\"\n\n#: tabby-terminal/src/services/multifocus.service.ts:19\nmsgid \"Broadcast mode. Click anywhere to cancel.\"\nmsgstr \"廣播模式。點擊任何位置以取消。\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\n#: tabby-core/src/services/profiles.service.ts:411\nmsgid \"Built-in\"\nmsgstr \"內建\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:28\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:71\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:14\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:12\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:10\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:31\n#: tabby-electron/src/services/updater.service.ts:134\n#: tabby-local/src/components/terminalTab.component.ts:118\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99\n#: tabby-ssh/src/sftpContextMenu.ts:40\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:522\nmsgid \"Cancel\"\nmsgstr \"取消\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:4\nmsgid \"Change baud rate\"\nmsgstr \"更改傳輸速率\"\n\n#: tabby-core/src/tabContextMenu.ts:133\nmsgid \"Change tab color\"\nmsgstr \"改變分頁標籤顏色\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Change the master passphrase\"\nmsgstr \"更改主密碼\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:13\nmsgid \"Check for updates\"\nmsgstr \"檢查更新\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:172\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:176\nmsgid \"Ciphers\"\nmsgstr \"密碼（Cipher）\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5\nmsgid \"Clear\"\nmsgstr \"清除\"\n\n#: tabby-core/src/services/profiles.service.ts:248\nmsgid \"Clear recent profiles\"\nmsgstr \"清除最近的設定檔\"\n\n#: tabby-terminal/src/hotkeys.ts:50\nmsgid \"Clear terminal\"\nmsgstr \"清除終端內容\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:58\nmsgid \"Clear terminal after connection\"\nmsgstr \"連線後清除終端畫面\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94\nmsgid \"Clipboard\"\nmsgstr \"剪貼簿\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:53\n#: locale/tmp-html/tabby-settings/src/components/showSecretModal.component.html:10\n#: tabby-core/src/tabContextMenu.ts:33\nmsgid \"Close\"\nmsgstr \"關閉\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:45\nmsgid \"Close and never show again\"\nmsgstr \"關閉並不再顯示\"\n\n#: tabby-core/src/hotkeys.ts:240\nmsgid \"Close focused pane\"\nmsgstr \"關閉聚焦窗格\"\n\n#: tabby-core/src/tabContextMenu.ts:48\nmsgid \"Close other tabs\"\nmsgstr \"關閉其他標籤\"\n\n#: tabby-core/src/hotkeys.ts:28\n#: tabby-core/src/tabContextMenu.ts:34\nmsgid \"Close tab\"\nmsgstr \"關閉標籤\"\n\n#: tabby-core/src/tabContextMenu.ts:64\nmsgid \"Close tabs to the left\"\nmsgstr \"關閉左側標籤\"\n\n#: tabby-core/src/tabContextMenu.ts:56\nmsgid \"Close tabs to the right\"\nmsgstr \"關閉右側標籤\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182\nmsgid \"Close the window after closing the last tab\"\nmsgstr \"在關閉最後標籤頁後關閉視窗\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33\n#: tabby-core/src/tabContextMenu.ts:132\nmsgid \"Color\"\nmsgstr \"顏色\"\n\n#: tabby-terminal/src/settings.ts:29\nmsgid \"Color scheme\"\nmsgstr \"顏色機制\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2\nmsgid \"Color schemes\"\nmsgstr \"配色方案\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216\nmsgid \"Colors\"\nmsgstr \"顏色\"\n\n#: tabby-core/src/hotkeys.ts:72\nmsgid \"Combine all tabs into the current tab\"\nmsgstr \"整合所有分頁到目前的分頁\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4\nmsgid \"Command line\"\nmsgstr \"指令行\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13\nmsgid \"Command's stdin/stdout is used instead of a network connection\"\nmsgstr \"使用 stdin/stdout 指令代替網絡連線\"\n\n#: tabby-core/src/services/commands.service.ts:105\nmsgid \"Commands\"\nmsgstr \"指令\"\n\n#: tabby-core/src/theme.ts:16\nmsgid \"Compact (legacy)\"\nmsgstr \"緊湊 (舊版)\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126\nmsgid \"Config deleted\"\nmsgstr \"設定檔已刪除\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108\nmsgid \"Config downloaded\"\nmsgstr \"設定檔已下載\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120\nmsgid \"Config file\"\nmsgstr \"設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:73\nmsgid \"Config sync\"\nmsgstr \"同步設定檔\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90\nmsgid \"Config uploaded\"\nmsgstr \"設定檔已上傳\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:31\nmsgid \"Configs\"\nmsgstr \"設定\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21\nmsgid \"Connect through a proxy server\"\nmsgstr \"通過代理伺服器連線\"\n\n#: tabby-core/src/index.ts:220\n#: tabby-core/src/services/profiles.service.ts:296\nmsgid \"Connect to \\\"%s\\\"...\"\nmsgstr \"正在連線到 \\\"%s\\\"...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17\nmsgid \"Connect to a different host first and use it as a proxy\"\nmsgstr \"先連線到其它主機並將其作為代理伺服器\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19\n#: tabby-serial/src/components/serialTab.component.ts:60\n#: tabby-ssh/src/components/sshTab.component.ts:130\n#: tabby-telnet/src/components/telnetTab.component.ts:54\nmsgid \"Connecting\"\nmsgstr \"正在連線\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7\nmsgid \"Connection\"\nmsgstr \"連線\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:26\nmsgid \"Connection failed: {error}\"\nmsgstr \"連線失敗: {error}\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:40\nmsgid \"Connection name will be used instead\"\nmsgstr \"連線名稱將被使用\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61\nmsgid \"Context menu\"\nmsgstr \"快顯功能表\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14\nmsgid \"Controls the amount of space between elements\"\nmsgstr \"調整各元件之間的間距\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:240\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:248\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:591\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:811\n#: tabby-terminal/src/tabContextMenu.ts:34\nmsgid \"Copied\"\nmsgstr \"已複製\"\n\n#: tabby-terminal/src/tabContextMenu.ts:30\nmsgid \"Copy\"\nmsgstr \"複製\"\n\n#: tabby-terminal/src/hotkeys.ts:70\n#: tabby-terminal/src/tabContextMenu.ts:70\nmsgid \"Copy current path\"\nmsgstr \"複製目前路徑\"\n\n#: tabby-electron/src/sftpContextMenu.ts:29\nmsgid \"Copy full path\"\nmsgstr \"複製完整路徑\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97\nmsgid \"Copy on select\"\nmsgstr \"選取時即複製\"\n\n#: tabby-terminal/src/hotkeys.ts:10\nmsgid \"Copy to clipboard\"\nmsgstr \"複製到剪貼簿\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103\nmsgid \"Copy with formatting\"\nmsgstr \"複製文字格式\"\n\n#: tabby-core/src/services/config.service.ts:425\nmsgid \"Could not decrypt config\"\nmsgstr \"無法解密設定檔\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9\nmsgid \"Create\"\nmsgstr \"建立\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7\n#: tabby-ssh/src/sftpContextMenu.ts:29\nmsgid \"Create directory\"\nmsgstr \"建立資料夾\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90\nmsgid \"Current\"\nmsgstr \"目前\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:3\nmsgid \"Current color scheme\"\nmsgstr \"目前配色方案\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17\nmsgid \"Current host key fingerprint\"\nmsgstr \"目前主機金輪指紋\"\n\n#: tabby-core/src/tabContextMenu.ts:184\nmsgid \"Current process: {name}\"\nmsgstr \"目前的處理程序：{name}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:51\nmsgid \"Cursor shape\"\nmsgstr \"游標形狀\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46\nmsgid \"Custom\"\nmsgstr \"自訂\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90\nmsgid \"Custom CSS\"\nmsgstr \"自訂 CSS\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17\nmsgid \"Dark mode\"\nmsgstr \"深色模式\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26\nmsgid \"Data bits\"\nmsgstr \"資料位元\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:80\nmsgid \"Debugging\"\nmsgstr \"除錯\"\n\n#: tabby-core/src/hotkeys.ts:256\nmsgid \"Decrease horizontal split size\"\nmsgstr \"縮小水平分割大小\"\n\n#: tabby-core/src/hotkeys.ts:248\nmsgid \"Decrease vertical split size\"\nmsgstr \"縮小垂直分割大小\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92\nmsgid \"Default \\\"Connect to\\\" type\"\nmsgstr \"預設的 \\\"連線到\\\" 類型\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93\nmsgid \"Default connection type used by quick connect feature (ex. SSH, Telnet)\"\nmsgstr \"預設的快速連線功能類型 (ex. SSH, Telnet)\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:8\nmsgid \"Default profile for new tabs\"\nmsgstr \"新分頁的預設設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16\nmsgid \"Default profile group settings\"\nmsgstr \"預設設定檔群組設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101\nmsgid \"Default profile settings\"\nmsgstr \"預設設定檔設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124\nmsgid \"Defaults\"\nmsgstr \"預設\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:6\nmsgid \"Defaults for {type}\"\nmsgstr \"預設為 {type}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:44\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:51\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:29\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:8\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:116\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:38\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:130\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:215\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:229\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:318\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:52\n#: tabby-ssh/src/sftpContextMenu.ts:39\n#: tabby-ssh/src/sftpContextMenu.ts:47\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:92\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:32\nmsgid \"Delete\"\nmsgstr \"刪除\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:128\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:213\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:90\nmsgid \"Delete \\\"{name}\\\"?\"\nmsgstr \"刪除 “{name}”?\"\n\n#: tabby-ssh/src/sftpContextMenu.ts:35\nmsgid \"Delete {fullPath}?\"\nmsgstr \"刪除 {fullPath}?\"\n\n#: tabby-terminal/src/hotkeys.ts:42\nmsgid \"Delete entire line\"\nmsgstr \"刪除整行\"\n\n#: tabby-terminal/src/hotkeys.ts:46\nmsgid \"Delete next word\"\nmsgstr \"刪除下一個單字\"\n\n#: tabby-terminal/src/hotkeys.ts:38\nmsgid \"Delete previous word\"\nmsgstr \"刪除上一個單字\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114\nmsgid \"Delete the config on the remote side?\"\nmsgstr \"是否刪除遠端設定檔？\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:226\nmsgid \"Delete the group's profiles?\"\nmsgstr \"是否刪除群組内所有設定檔？\"\n\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29\nmsgid \"Delete this script?\"\nmsgstr \"刪除此腳本？\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:50\nmsgid \"Delete vault contents?\"\nmsgstr \"删除金鑰庫中的所有內容？\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3\nmsgid \"Deleting\"\nmsgstr \"正在刪除\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:8\nmsgid \"Device\"\nmsgstr \"裝置\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10\nmsgid \"Direct\"\nmsgstr \"直接連線\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57\nmsgid \"Disable\"\nmsgstr \"停用\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:39\nmsgid \"Disable dynamic tab title\"\nmsgstr \"停用動態分頁標題\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218\nmsgid \"Disable fluent background while dragging\"\nmsgstr \"拖曳時停用 fluent 背景\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204\nmsgid \"Disable GPU acceleration\"\nmsgstr \"停用顯示卡（GPU）加速\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50\nmsgid \"Disabled\"\nmsgstr \"已停用\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:26\n#: tabby-ssh/src/components/sshTab.component.ts:200\n#: tabby-telnet/src/components/telnetTab.component.ts:83\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:36\n#: tabby-terminal/src/tabContextMenu.ts:106\n#: tabby-terminal/src/tabContextMenu.ts:110\nmsgid \"Disconnect\"\nmsgstr \"中斷連線\"\n\n#: tabby-terminal/src/hotkeys.ts:106\nmsgid \"Disconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"中斷目前分頁的連線 (Serial/Telnet/SSH)\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:198\n#: tabby-telnet/src/components/telnetTab.component.ts:81\nmsgid \"Disconnect from {host}?\"\nmsgstr \"與 {host} 中斷連線嗎?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30\nmsgid \"Display images via Sixel escape sequences\"\nmsgstr \"透過Sixel跳脫序列顯示圖片\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85\nmsgid \"Display on\"\nmsgstr \"顯示在\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:50\nmsgid \"Do not abort\"\nmsgstr \"不要中止\"\n\n#: tabby-ssh/src/components/sshTab.component.ts:201\n#: tabby-telnet/src/components/telnetTab.component.ts:84\nmsgid \"Do not close\"\nmsgstr \"不要關閉\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:8\nmsgid \"Do not remember\"\nmsgstr \"不要記住\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97\nmsgid \"Dock always on top\"\nmsgstr \"永遠貼齊在最上方\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67\nmsgid \"Dock the terminal\"\nmsgstr \"貼齊終端機\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104\nmsgid \"Docked terminal size\"\nmsgstr \"已貼齊終端機大小\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111\nmsgid \"Docked terminal space\"\nmsgstr \"已貼齊終端機空間\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64\nmsgid \"Docking\"\nmsgstr \"貼齊\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75\nmsgid \"Double-click selection will stop at these characters\"\nmsgstr \"點兩下選擇將停在該字元處\"\n\n#: tabby-core/src/tabContextMenu.ts:79\nmsgid \"Down\"\nmsgstr \"下方\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43\nmsgid \"Download\"\nmsgstr \"下載\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:23\nmsgid \"Draw bold text in bright colors\"\nmsgstr \"用亮色繪製粗體\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:48\n#: tabby-core/src/tabContextMenu.ts:127\nmsgid \"Duplicate\"\nmsgstr \"複製\"\n\n#: tabby-local/src/tabContextMenu.ts:72\nmsgid \"Duplicate as administrator\"\nmsgstr \"以管理員權限複製\"\n\n#: tabby-core/src/hotkeys.ts:60\n#: tabby-core/src/tabContextMenu.ts:128\nmsgid \"Duplicate tab\"\nmsgstr \"複製分頁\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:6\nmsgid \"Edit\"\nmsgstr \"編輯\"\n\n#: tabby-electron/src/sftpContextMenu.ts:35\nmsgid \"Edit locally\"\nmsgstr \"在本機編輯\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58\nmsgid \"Enable\"\nmsgstr \"啟用\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:32\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:66\nmsgid \"Enable analytics\"\nmsgstr \"啟用統計資料\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:87\nmsgid \"Enable animations\"\nmsgstr \"啟用動畫\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:74\nmsgid \"Enable automatic installation of updates when they become available.\"\nmsgstr \"啟用當有新的版本可使用時自動安裝更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211\nmsgid \"Enable fluent background option\"\nmsgstr \"啟用 fluent 背景\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16\nmsgid \"Enable font ligatures\"\nmsgstr \"啟用合字\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:39\nmsgid \"Enable global hotkey (Ctrl-Space)\"\nmsgstr \"啟用全域快速鍵 (Ctrl+Space)\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6\nmsgid \"Enables the experimental Windows ConPTY API\"\nmsgstr \"啟用實驗性 Windows ConPTY API\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:37\nmsgid \"Encrypt config file\"\nmsgstr \"加密設定檔\"\n\n#: tabby-terminal/src/hotkeys.ts:26\nmsgid \"End of the line\"\nmsgstr \"行尾\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:17\nmsgid \"Environment\"\nmsgstr \"環境\"\n\n#: tabby-core/src/services/config.service.ts:429\n#: tabby-core/src/services/config.service.ts:443\nmsgid \"Erase config\"\nmsgstr \"清除設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12\nmsgid \"Erase the Vault\"\nmsgstr \"清除金鑰庫\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:6\nmsgid \"Error in {plugin}:\"\nmsgstr \"套件中的錯誤 {plugin}:\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Exact match\"\nmsgstr \"完全符合\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15\nmsgid \"Example:\"\nmsgstr \"範例：\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212\nmsgid \"Experimental Windows 10 background style known to cause issues\"\nmsgstr \"已知會導致問題的實驗性Windows 10背景樣式\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:28\nmsgid \"Export\"\nmsgstr \"匯出\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76\nmsgid \"Fallback font\"\nmsgstr \"備用字型\"\n\n#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3\nmsgid \"File transfers\"\nmsgstr \"檔案傳輸\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:96\nmsgid \"File: {description}\"\nmsgstr \"檔案描述: {description}\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:9\nmsgid \"Filter\"\nmsgstr \"篩選器\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147\nmsgid \"Fixed\"\nmsgstr \"固定寬度\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219\nmsgid \"Fluent background sometimes causes drag lag\"\nmsgstr \"Fluent 背景有時會導致拖曳延遲\"\n\n#: tabby-terminal/src/tabContextMenu.ts:82\nmsgid \"Focus all panes\"\nmsgstr \"聚焦所有窗格\"\n\n#: tabby-terminal/src/hotkeys.ts:78\nmsgid \"Focus all panes at once (broadcast)\"\nmsgstr \"同時聚焦所有窗格（廣播）\"\n\n#: tabby-terminal/src/tabContextMenu.ts:75\nmsgid \"Focus all tabs\"\nmsgstr \"聚焦所有分頁\"\n\n#: tabby-terminal/src/hotkeys.ts:82\nmsgid \"Focus all tabs at once (broadcast)\"\nmsgstr \"同時聚焦所有分頁 (廣播)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196\nmsgid \"Focus follows mouse\"\nmsgstr \"焦點隨滑鼠移動\"\n\n#: tabby-core/src/hotkeys.ts:196\nmsgid \"Focus next pane\"\nmsgstr \"聚焦至下一個窗格\"\n\n#: tabby-core/src/hotkeys.ts:200\n#: tabby-core/src/hotkeys.ts:204\n#: tabby-core/src/hotkeys.ts:208\n#: tabby-core/src/hotkeys.ts:212\n#: tabby-core/src/hotkeys.ts:216\n#: tabby-core/src/hotkeys.ts:220\n#: tabby-core/src/hotkeys.ts:224\n#: tabby-core/src/hotkeys.ts:228\n#: tabby-core/src/hotkeys.ts:232\nmsgid \"Focus pane {number}\"\nmsgstr \"聚焦{number}號窗格\"\n\n#: tabby-core/src/hotkeys.ts:192\nmsgid \"Focus previous pane\"\nmsgstr \"聚焦前一個窗格\"\n\n#: tabby-core/src/hotkeys.ts:176\nmsgid \"Focus the pane above\"\nmsgstr \"聚焦上方的窗格\"\n\n#: tabby-core/src/hotkeys.ts:180\nmsgid \"Focus the pane below\"\nmsgstr \"聚焦下方的窗格\"\n\n#: tabby-core/src/hotkeys.ts:184\nmsgid \"Focus the pane on the left\"\nmsgstr \"聚焦左邊的窗格\"\n\n#: tabby-core/src/hotkeys.ts:188\nmsgid \"Focus the pane on the right\"\nmsgstr \"聚焦右邊的窗格\"\n\n#: tabby-core/src/theme.ts:34\nmsgid \"Follow the color scheme\"\nmsgstr \"遵循色彩搭配方案\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5\nmsgid \"Font\"\nmsgstr \"字型\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190\nmsgid \"For keyboard shortcuts\"\nmsgstr \"對於鍵盤快速鍵\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:53\nmsgid \"Force CR\"\nmsgstr \"強制使用 CR\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:55\nmsgid \"Force CRLF\"\nmsgstr \"強制使用 CRLF\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:54\nmsgid \"Force LF\"\nmsgstr \"強制使用 LF\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25\nmsgid \"Forces a specific SSH agent connection type.\"\nmsgstr \"強制 SSH使用特定的連線類型\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105\nmsgid \"Forget\"\nmsgstr \"清除\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:45\nmsgid \"Forward port\"\nmsgstr \"通訊埠轉發\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3\nmsgid \"Forwarded ports\"\nmsgstr \"已轉發通訊埠\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:46\nmsgid \"From color scheme\"\nmsgstr \"從配色方案\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:23\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:9\nmsgid \"From system\"\nmsgstr \"跟隨系統\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44\nmsgid \"From theme\"\nmsgstr \"從佈景風格\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6\nmsgid \"Frontend\"\nmsgstr \"前端\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61\nmsgid \"Full\"\nmsgstr \"全寬\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:3\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:3\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:3\nmsgid \"General\"\nmsgstr \"一般設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Generate a pre-filled GitHub issue\"\nmsgstr \"產成一個預填寫的 GitHub 問題\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:25\nmsgid \"Get\"\nmsgstr \"取得\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:18\nmsgid \"Get it from the Tabby Web settings window\"\nmsgstr \"從 Tabby 網頁設定視窗獲取\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29\nmsgid \"Gives the window a blurred transparent background\"\nmsgstr \"使視窗具有模糊透明的背景\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24\nmsgid \"Go up\"\nmsgstr \"往上\"\n\n#: tabby-core/src/utils.ts:61\nmsgid \"Green\"\nmsgstr \"綠色\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:16\nmsgid \"Group\"\nmsgstr \"群組\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201\nmsgid \"Hacks\"\nmsgstr \"修正\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:33\nmsgid \"Help track the number of Tabby installs across the world!\"\nmsgstr \"協助追蹤 Tabby 在全球的安裝數量！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Help translate Tabby\"\nmsgstr \"協助我們翻譯 Tabby\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:32\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:45\nmsgid \"Hexadecimal\"\nmsgstr \"十六進制\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:49\nmsgid \"Hide\"\nmsgstr \"隱藏\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176\nmsgid \"Hide tab close button\"\nmsgstr \"隱藏關閉分頁按鈕\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158\nmsgid \"Hide tab index\"\nmsgstr \"隱藏分頁索引\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170\nmsgid \"Hide tab options button\"\nmsgstr \"隱藏分頁設定按鈕\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118\nmsgid \"Hide window on focus loss\"\nmsgstr \"非聚焦時隱藏視窗\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119\nmsgid \"Hides the docked terminal when you click away.\"\nmsgstr \"點擊別處時隱藏停靠的終端\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:26\nmsgid \"Homepage\"\nmsgstr \"首頁\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:34\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:6\nmsgid \"Host\"\nmsgstr \"主機\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206\nmsgid \"Host key\"\nmsgstr \"主機金鑰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3\nmsgid \"Host key verification\"\nmsgstr \"主機金鑰驗證\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:15\nmsgid \"Hotkeys\"\nmsgstr \"快速鍵\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:83\nmsgid \"How Tabby presents itself through environment vars\"\nmsgstr \"Tabby 如何透過環境變數呈現\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24\nmsgid \"HTTP proxy\"\nmsgstr \"HTTP 代理伺服器\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61\nmsgid \"HTTP proxy host\"\nmsgstr \"HTTP 代理主機位址\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65\nmsgid \"HTTP proxy port\"\nmsgstr \"HTTP 代理通訊埠\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20\nmsgid \"Icon\"\nmsgstr \"圖示\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145\nmsgid \"id.tab-width.dynamic\"\nmsgstr \"動態調整\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:76\nmsgid \"If disabled, only custom profiles will show up in the profile selector\"\nmsgstr \"如果關閉，只有自訂設定檔會被顯示在設定檔選擇器\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:23\nmsgid \"Immediately echoes your input locally\"\nmsgstr \"立刻在本機顯示您的輸入\"\n\n#: tabby-core/src/hotkeys.ts:252\nmsgid \"Increase horizontal split size\"\nmsgstr \"增加水平分割大小\"\n\n#: tabby-core/src/hotkeys.ts:244\nmsgid \"Increase vertical split size\"\nmsgstr \"增加垂直分割大小\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:91\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:226\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:21\nmsgid \"Input\"\nmsgstr \"輸入\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18\nmsgid \"Input is sent as you type\"\nmsgstr \"輸入在您鍵入時傳送\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4\nmsgid \"Input mode\"\nmsgstr \"輸入模式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:15\nmsgid \"Input newlines\"\nmsgstr \"換行\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:39\nmsgid \"Installed\"\nmsgstr \"已安裝\"\n\n#: tabby-electron/src/services/updater.service.ts:131\nmsgid \"Installing the update will close all tabs and restart Tabby.\"\nmsgstr \"安裝更新將關閉所有分頁並重新啟動 Tabby。\"\n\n#: tabby-terminal/src/hotkeys.ts:66\nmsgid \"Intelligent Ctrl-C (copy/abort)\"\nmsgstr \"智慧 Ctrl-C (複製/中止)\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:94\nmsgid \"Interactive\"\nmsgstr \"互動式\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130\nmsgid \"Invalid syntax\"\nmsgstr \"無效語法\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43\nmsgid \"Jump host\"\nmsgstr \"跳轉伺服器\"\n\n#: tabby-terminal/src/hotkeys.ts:34\nmsgid \"Jump to next word\"\nmsgstr \"跳轉至下個關鍵字\"\n\n#: tabby-terminal/src/hotkeys.ts:30\nmsgid \"Jump to previous word\"\nmsgstr \"跳轉至上個關鍵字\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:51\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:39\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:131\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:216\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:319\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:53\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:93\n#: tabby-terminal/src/components/loginScriptsSettings.component.ts:33\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51\nmsgid \"Keep\"\nmsgstr \"維持現狀\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154\nmsgid \"Keep Alive Interval (Milliseconds)\"\nmsgstr \"Keep-Alive 間隔(毫秒)\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98\nmsgid \"Keep docked terminal always on top\"\nmsgstr \"保持已貼齊終端機永遠在最上方\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:86\nmsgid \"Key\"\nmsgstr \"金鑰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:186\nmsgid \"Key exchange\"\nmsgstr \"金鑰交換\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:36\nmsgid \"Keyboard\"\nmsgstr \"鍵盤\"\n\n#: locale/tmp-html/tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.html:2\nmsgid \"Keyboard-interactive auth\"\nmsgstr \"鍵盤交互認證\"\n\n#: tabby-local/src/components/terminalTab.component.ts:117\nmsgid \"Kill\"\nmsgstr \"終止\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:10\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50\nmsgid \"Language\"\nmsgstr \"語言\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11\nmsgid \"Last known host key fingerprint\"\nmsgstr \"最後已知主機金輪指紋\"\n\n#: tabby-ssh/src/tabContextMenu.ts:32\nmsgid \"Launch WinSCP\"\nmsgstr \"啟動 WinSCP\"\n\n#: tabby-ssh/src/hotkeys.ts:14\nmsgid \"Launch WinSCP for current SSH session\"\nmsgstr \"為目前 SSH 階段啟動 WinSCP\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7\nmsgid \"Learn how to allow Tabby to detect remote shell's working directory.\"\nmsgstr \"得知如何讓 Tabby 偵測遠端工作目錄\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76\n#: tabby-core/src/tabContextMenu.ts:80\nmsgid \"Left\"\nmsgstr \"左側\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40\nmsgid \"Lets the shell handle Meta key instead of OS\"\nmsgstr \"使用 Shell 替代作業系統處理 Meta 鍵\"\n\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:22\nmsgid \"Light mode\"\nmsgstr \"淺色模式\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27\nmsgid \"Line by line\"\nmsgstr \"逐行\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28\nmsgid \"Line editor, input is sent after you press Enter\"\nmsgstr \"行編輯器，按Enter後傳送輸入\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83\nmsgid \"Line padding\"\nmsgstr \"行距\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21\nmsgid \"Loading\"\nmsgstr \"載入中\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:34\nmsgid \"Loading configs...\"\nmsgstr \"載入設定檔中...\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:39\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Local\"\nmsgstr \"本機\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:22\nmsgid \"Local echo\"\nmsgstr \"本機回覆\"\n\n#: tabby-local/src/profiles.ts:12\nmsgid \"Local terminal\"\nmsgstr \"本機終端機\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:86\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:221\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:16\nmsgid \"Login scripts\"\nmsgstr \"登入執行腳本\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:57\nmsgid \"Long-click for context menu\"\nmsgstr \"長按以叫出選單\"\n\n#: tabby-core/src/services/profiles.service.ts:279\nmsgid \"Manage profiles\"\nmsgstr \"管理設定檔\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:160\nmsgid \"Max Keep Alive Count\"\nmsgstr \"最大 Keep-Alive 次數\"\n\n#: tabby-core/src/hotkeys.ts:172\nmsgid \"Maximize the active pane\"\nmsgstr \"最大化目前窗格\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70\nmsgid \"Minimum contrast ratio\"\nmsgstr \"最低對比度\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:39\nmsgid \"Modified on {date}\"\nmsgstr \"修改於 {date}\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:53\nmsgid \"Mouse\"\nmsgstr \"滑鼠\"\n\n#: tabby-core/src/hotkeys.ts:48\nmsgid \"Move tab to the left\"\nmsgstr \"將分頁左移\"\n\n#: tabby-core/src/hotkeys.ts:52\nmsgid \"Move tab to the right\"\nmsgstr \"將分頁右移\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:228\nmsgid \"Move to \\\"Ungrouped\\\"\"\nmsgstr \"移至未分類\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197\nmsgid \"Moving the mouse over an inactive pane will cause it to activate\"\nmsgstr \"自動聚焦於滑鼠游標所在的窗格\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:9\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:13\nmsgid \"Name\"\nmsgstr \"名稱\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:60\nmsgid \"Name for the new config\"\nmsgstr \"新設定的名稱\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:3\nmsgid \"Name for the new directory\"\nmsgstr \"新目錄的名稱\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57\nmsgid \"Native\"\nmsgstr \"原生\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:21\nmsgid \"New\"\nmsgstr \"新增\"\n\n#: tabby-local/src/tabContextMenu.ts:53\nmsgid \"New admin tab\"\nmsgstr \"新的管理員分頁\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:58\nmsgid \"New config on {platform}\"\nmsgstr \"{platform} 上的新設定\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:144\nmsgid \"New group name\"\nmsgstr \"新增群組名稱\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:16\nmsgid \"New item\"\nmsgstr \"新增項目\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:133\nmsgid \"New name\"\nmsgstr \"新增名稱\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:23\nmsgid \"New profile\"\nmsgstr \"新設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:24\nmsgid \"New profile Group\"\nmsgstr \"新增設定檔群組\"\n\n#: tabby-terminal/src/tabContextMenu.ts:176\nmsgid \"New profile name\"\nmsgstr \"新設定檔名稱\"\n\n#: tabby-local/src/hotkeys.ts:10\nmsgid \"New tab\"\nmsgstr \"新增分頁\"\n\n#: tabby-core/src/hotkeys.ts:271\nmsgid \"New tab: {profile}\"\nmsgstr \"新分頁：{profile}\"\n\n#: tabby-local/src/buttonProvider.ts:20\n#: tabby-local/src/tabContextMenu.ts:27\nmsgid \"New terminal\"\nmsgstr \"新終端機\"\n\n#: tabby-electron/src/hotkeys.ts:10\nmsgid \"New window\"\nmsgstr \"新視窗\"\n\n#: tabby-electron/src/services/dockMenu.service.ts:62\nmsgid \"New Window\"\nmsgstr \"新視窗\"\n\n#: tabby-local/src/tabContextMenu.ts:37\nmsgid \"New with profile\"\nmsgstr \"新的設定檔\"\n\n#: tabby-core/src/hotkeys.ts:40\nmsgid \"Next tab\"\nmsgstr \"下一個分頁\"\n\n#: tabby-core/src/utils.ts:59\nmsgid \"No color\"\nmsgstr \"無色彩\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85\nmsgid \"No modifier\"\nmsgstr \"無修飾鍵\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:41\nmsgid \"None\"\nmsgstr \"無\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:17\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:40\nmsgid \"Normal\"\nmsgstr \"普通\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22\nmsgid \"Normal font weight\"\nmsgstr \"普通字型寬度\"\n\n#: tabby-terminal/src/components/searchPanel.component.ts:54\n#: tabby-terminal/src/components/searchPanel.component.ts:64\nmsgid \"Not found\"\nmsgstr \"找不到項目\"\n\n#: tabby-core/src/tabContextMenu.ts:209\nmsgid \"Notify on activity\"\nmsgstr \"有動作時通知\"\n\n#: tabby-core/src/tabContextMenu.ts:187\nmsgid \"Notify when done\"\nmsgstr \"完成後通知\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:17\nmsgid \"Number of lines kept in the buffer\"\nmsgstr \"有幾行被存進緩衝區\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60\nmsgid \"Off\"\nmsgstr \"關閉\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:81\nmsgid \"Official\"\nmsgstr \"官方\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:26\nmsgid \"On GitHub Discussions\"\nmsgstr \"GitHub 討論\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:47\nmsgid \"Only close the tab when session is explicitly terminated\"\nmsgstr \"只有在連線階段確定終止後才關閉分頁\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46\nmsgid \"Opacity\"\nmsgstr \"不透明度\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:82\nmsgid \"Open DevTools\"\nmsgstr \"開啟開發者工具\"\n\n#: tabby-settings/src/hotkeys.ts:11\nmsgid \"Open Settings\"\nmsgstr \"開啟設定\"\n\n#: tabby-settings/src/hotkeys.ts:25\nmsgid \"Open settings tab: {tab}\"\nmsgstr \"打開設定分頁：{tab}\"\n\n#: tabby-ssh/src/tabContextMenu.ts:25\nmsgid \"Open SFTP panel\"\nmsgstr \"開啟 SFTP 面板\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Optional\"\nmsgstr \"選用\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:34\nmsgid \"Options\"\nmsgstr \"選項\"\n\n#: tabby-core/src/utils.ts:62\nmsgid \"Orange\"\nmsgstr \"橘色\"\n\n#: tabby-electron/src/shells/macDefault.ts:25\nmsgid \"OS default\"\nmsgstr \"系統預設\"\n\n#: tabby-electron/src/shells/winDefault.ts:43\nmsgid \"OS default ({name})\"\nmsgstr \"系統預設 ({name})\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:46\nmsgid \"Output is shown as a hexdump\"\nmsgstr \"以16進位顯示輸出\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:41\nmsgid \"Output is shown as it is received\"\nmsgstr \"照原樣顯示輸出\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:23\nmsgid \"Output mode\"\nmsgstr \"輸出模式\"\n\n#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:34\nmsgid \"Output newlines\"\nmsgstr \"換行輸出\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:42\nmsgid \"Override X11 display\"\nmsgstr \"覆蓋 X11 顯示\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:98\nmsgid \"Overwrite local and sync\"\nmsgstr \"覆寫本機並同步\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:78\nmsgid \"Overwrite remote and sync\"\nmsgstr \"覆寫遠端並同步\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:76\nmsgid \"Overwrite the config on the remote side and start syncing?\"\nmsgstr \"覆寫遠端設定檔並開始同步？\"\n\n#: tabby-settings/src/components/configSyncSettingsTab.component.ts:96\nmsgid \"Overwrite the local config and start syncing?\"\nmsgstr \"覆寫本機設定檔並開始同步？\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189\nmsgid \"Pane resize step\"\nmsgstr \"窗格大小調整級距\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186\nmsgid \"Panes\"\nmsgstr \"窗格\"\n\n#: tabby-core/src/theme.ts:26\nmsgid \"Paper (legacy)\"\nmsgstr \"紙張 (舊版)\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38\nmsgid \"Parity\"\nmsgstr \"同位元\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64\nmsgid \"Partial config sync is not possible when the config is encrypted via Vault.\"\nmsgstr \"部分設定檔無法同步，因為已被金鑰庫加密\"\n\n#: tabby-terminal/src/components/inputProcessingSettings.component.ts:17\nmsgid \"Pass-through\"\nmsgstr \"直通\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:92\nmsgid \"Passphrase for a private key with hash {hash}...\"\nmsgstr \"一個雜湊私鑰的密碼{hash}\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:100\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:82\nmsgid \"Password\"\nmsgstr \"密碼\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:521\n#: tabby-terminal/src/tabContextMenu.ts:39\nmsgid \"Paste\"\nmsgstr \"貼上\"\n\n#: tabby-terminal/src/hotkeys.ts:14\nmsgid \"Paste from clipboard\"\nmsgstr \"從剪貼簿貼上\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63\nmsgid \"Paste if no selection, else copy\"\nmsgstr \"未選擇內容時貼上，否則複製\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:528\nmsgid \"Paste multiple lines?\"\nmsgstr \"貼上多行？\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68\nmsgid \"Paste on middle-click\"\nmsgstr \"按滑鼠中鍵時貼上\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43\nmsgid \"Path or address of the local X11 socket\"\nmsgstr \"本機 X11 socket 的路徑或位址\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Pin\"\nmsgstr \"釘選\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:3\nmsgid \"Plugins\"\nmsgstr \"擴充功能\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:4\nmsgid \"Plugins folder\"\nmsgstr \"擴充功能資料夾\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38\n#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10\nmsgid \"Port\"\nmsgstr \"通訊埠\"\n\n#: tabby-serial/src/components/serialTab.component.ts:65\nmsgid \"Port opened\"\nmsgstr \"通訊埠已打開\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12\nmsgid \"Ports\"\nmsgstr \"通訊埠\"\n\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:87\nmsgid \"Press any key to reconnect\"\nmsgstr \"按下任意鍵以重新連線\"\n\n#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3\nmsgid \"Press the key now\"\nmsgstr \"現在按下按鍵\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21\nmsgid \"Prevents accidental closing\"\nmsgstr \"防止意外關閉\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110\nmsgid \"Prevents accidental execution of pasted commands\"\nmsgstr \"防止意外貼上的指令執行\"\n\n#: tabby-core/src/hotkeys.ts:44\nmsgid \"Previous tab\"\nmsgstr \"上一個分頁\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:108\nmsgid \"Private keys\"\nmsgstr \"私鑰\"\n\n#: tabby-core/src/tabContextMenu.ts:195\nmsgid \"Process completed\"\nmsgstr \"處理完成\"\n\n#: tabby-core/src/tabContextMenu.ts:151\nmsgid \"Profile name\"\nmsgstr \"設定檔名稱\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4\n#: tabby-electron/src/services/dockMenu.service.ts:40\nmsgid \"Profiles\"\nmsgstr \"設定檔\"\n\n#: tabby-core/src/commands.ts:32\n#: tabby-settings/src/settings.ts:58\nmsgid \"Profiles & connections\"\nmsgstr \"設定檔與連線\"\n\n#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:12\nmsgid \"Program\"\nmsgstr \"程式\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:30\nmsgid \"Proxy command\"\nmsgstr \"代理指令\"\n\n#: tabby-core/src/utils.ts:63\nmsgid \"Purple\"\nmsgstr \"紫色\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:38\nmsgid \"Puts all of Tabby's configuration into the vault\"\nmsgstr \"將所有 Tabby 設定檔放入金鑰庫\"\n\n#: tabby-core/src/index.ts:219\n#: tabby-core/src/services/profiles.service.ts:295\nmsgid \"Quick connect\"\nmsgstr \"快速連線\"\n\n#: tabby-core/src/services/config.service.ts:430\n#: tabby-core/src/services/config.service.ts:444\nmsgid \"Quit\"\nmsgstr \"退出\"\n\n#: tabby-telnet/src/profiles.ts:50\nmsgid \"Raw socket connection\"\nmsgstr \"原始 socket 連線\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:166\nmsgid \"Ready Timeout (Milliseconds)\"\nmsgstr \"就緒超時（毫秒）\"\n\n#: tabby-core/src/services/profiles.service.ts:235\n#: tabby-core/src/services/profiles.service.ts:249\n#: tabby-electron/src/services/dockMenu.service.ts:28\nmsgid \"Recent\"\nmsgstr \"最近\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialTab.component.html:5\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:52\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:10\n#: locale/tmp-html/tabby-telnet/src/components/telnetTab.component.html:3\n#: tabby-terminal/src/api/connectableTerminalTab.component.ts:32\n#: tabby-terminal/src/tabContextMenu.ts:115\n#: tabby-terminal/src/tabContextMenu.ts:119\nmsgid \"Reconnect\"\nmsgstr \"重新連線\"\n\n#: tabby-terminal/src/hotkeys.ts:102\nmsgid \"Reconnect current tab (Serial/Telnet/SSH)\"\nmsgstr \"重新連線目前的分頁 (Serial/Telnet/SSH)\"\n\n#: tabby-core/src/utils.ts:64\nmsgid \"Red\"\nmsgstr \"紅色\"\n\n#: locale/tmp-html/tabby-terminal/src/components/loginScriptsSettings.component.html:10\nmsgid \"Regex\"\nmsgstr \"正規表示式\"\n\n#: tabby-settings/src/components/releaseNotesTab.component.ts:27\nmsgid \"Release notes\"\nmsgstr \"發行紀錄\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:6\nmsgid \"Remember for {time}\"\nmsgstr \"在 {time} 內記住\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:41\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgid \"Remote\"\nmsgstr \"遠端\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124\nmsgid \"Remove whitespace and newlines around the copied text\"\nmsgstr \"刪除複製文字周圍的空格和換行\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:26\n#: tabby-core/src/tabContextMenu.ts:120\nmsgid \"Rename\"\nmsgstr \"重新命名\"\n\n#: tabby-core/src/hotkeys.ts:24\n#: tabby-core/src/tabContextMenu.ts:121\nmsgid \"Rename tab\"\nmsgstr \"重新命名分頁\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3\nmsgid \"Rendering\"\nmsgstr \"彩現\"\n\n#: tabby-core/src/hotkeys.ts:32\nmsgid \"Reopen last tab\"\nmsgstr \"開啟最後關閉的分頁\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27\nmsgid \"Replace\"\nmsgstr \"取代\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:11\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21\nmsgid \"Report a problem\"\nmsgstr \"回報問題\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81\nmsgid \"Require a key to click links\"\nmsgstr \"需要按鍵以打開連結\"\n\n#: tabby-terminal/src/hotkeys.ts:62\nmsgid \"Reset zoom\"\nmsgstr \"重設縮放比\"\n\n#: tabby-serial/src/hotkeys.ts:14\nmsgid \"Restart current serial session\"\nmsgstr \"重啟目前的序列階段\"\n\n#: tabby-ssh/src/hotkeys.ts:10\nmsgid \"Restart current SSH session\"\nmsgstr \"重啟目前的 SSH 階段\"\n\n#: tabby-telnet/src/hotkeys.ts:10\nmsgid \"Restart current Telnet session\"\nmsgstr \"重啟目前的 Telnet 階段\"\n\n#: tabby-core/src/hotkeys.ts:64\nmsgid \"Restart tab\"\nmsgstr \"重新啟動分頁\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140\nmsgid \"Restart the app to apply changes\"\nmsgstr \"重新啟動應用程式以套用變更\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:316\nmsgid \"Restore settings to defaults ?\"\nmsgstr \"將設定還原為預設值?\"\n\n#: tabby-settings/src/components/editProfileGroupModal.component.ts:36\nmsgid \"Restore settings to inherited defaults ?\"\nmsgstr \"將設定還原為繼承的預設值 ?\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:159\nmsgid \"Restore terminal tabs on app start\"\nmsgstr \"應用程式啟動時回復先前的終端機分頁\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147\nmsgid \"Reuse session for multiple tabs\"\nmsgstr \"回復多個分頁的狀態\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78\n#: tabby-core/src/tabContextMenu.ts:78\nmsgid \"Right\"\nmsgstr \"右側\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56\nmsgid \"Right click\"\nmsgstr \"按下滑鼠右鍵\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5\nmsgid \"Run as administrator\"\nmsgstr \"以系統管理員身分執行\"\n\n#: locale/tmp-html/tabby-core/src/components/renameTabModal.component.html:6\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:27\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:70\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:29\nmsgid \"Save\"\nmsgstr \"儲存\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:101\nmsgid \"Save a password in the keychain\"\nmsgstr \"將密碼儲存至鑰匙圈\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129\nmsgid \"Save and apply\"\nmsgstr \"儲存並套用\"\n\n#: tabby-terminal/src/tabContextMenu.ts:173\nmsgid \"Save as profile\"\nmsgstr \"另存設定檔\"\n\n#: tabby-core/src/tabContextMenu.ts:148\nmsgid \"Save layout as profile\"\nmsgstr \"將排版儲存為設定檔\"\n\n#: tabby-terminal/src/tabContextMenu.ts:210\nmsgid \"Saved\"\nmsgstr \"已儲存\"\n\n#: tabby-core/src/profiles.ts:19\nmsgid \"Saved layout\"\nmsgstr \"已儲存排版\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46\nmsgid \"Scroll on input\"\nmsgstr \"輸入時自動捲動至底部\"\n\n#: tabby-terminal/src/hotkeys.ts:94\nmsgid \"Scroll terminal one page down\"\nmsgstr \"終端機向下捲動一頁\"\n\n#: tabby-terminal/src/hotkeys.ts:90\nmsgid \"Scroll terminal one page up\"\nmsgstr \"終端機向上捲動一頁\"\n\n#: tabby-terminal/src/hotkeys.ts:98\nmsgid \"Scroll terminal to bottom\"\nmsgstr \"捲動到終端機底部\"\n\n#: tabby-terminal/src/hotkeys.ts:86\nmsgid \"Scroll terminal to top\"\nmsgstr \"捲動到終端機頂部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16\nmsgid \"Scrollback\"\nmsgstr \"回捲\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47\nmsgid \"Scrolls the terminal to the bottom on user input\"\nmsgstr \"在用戶輸入時將終端捲動到底部\"\n\n#: tabby-terminal/src/hotkeys.ts:74\nmsgid \"Search\"\nmsgstr \"搜尋\"\n\n#: tabby-terminal/src/components/colorSchemeSelector.component.ts:9\n#: tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts:10\nmsgid \"Search color schemes\"\nmsgstr \"搜尋配色方案\"\n\n#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12\nmsgid \"Search hotkeys\"\nmsgstr \"搜尋快速鍵\"\n\n#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14\nmsgid \"Search plugins\"\nmsgstr \"搜尋套件\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:17\nmsgid \"Secret sync token\"\nmsgstr \"同步密鑰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:45\n#: tabby-electron/src/services/platform.service.ts:200\nmsgid \"Select\"\nmsgstr \"選擇\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:61\nmsgid \"Select a base profile to use as a template\"\nmsgstr \"選擇設定檔作為範本\"\n\n#: tabby-terminal/src/hotkeys.ts:18\nmsgid \"Select all\"\nmsgstr \"選取全部\"\n\n#: tabby-core/src/services/fileProviders.service.ts:47\nmsgid \"Select file storage\"\nmsgstr \"選取儲存位置\"\n\n#: tabby-core/src/index.ts:232\nmsgid \"Select profile\"\nmsgstr \"選擇設定檔\"\n\n#: tabby-core/src/services/profiles.service.ts:308\nmsgid \"Select profile or enter an address\"\nmsgstr \"選擇設定檔或輸入位址\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33\nmsgid \"Send bytes by typing in hex values\"\nmsgstr \"傳輸以十六進位輸入的位元組\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75\nmsgid \"Sends data one byte at a time\"\nmsgstr \"資料每次只傳送一個位元組\"\n\n#: tabby-serial/src/profiles.ts:14\n#: tabby-serial/src/profiles.ts:74\nmsgid \"Serial\"\nmsgstr \"序列\"\n\n#: tabby-serial/src/profiles.ts:53\n#: tabby-serial/src/profiles.ts:64\nmsgid \"Serial connection\"\nmsgstr \"序列埠連線\"\n\n#: tabby-serial/src/profiles.ts:73\nmsgid \"Serial: {description}\"\nmsgstr \"序列：{description}\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5\nmsgid \"Set master passphrase\"\nmsgstr \"設定主密碼\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:11\nmsgid \"Set passphrase\"\nmsgstr \"設定密碼\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:104\nmsgid \"Set password\"\nmsgstr \"設定密碼\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168\nmsgid \"Set Tabby as %COMSPEC%\"\nmsgstr \"設定 Tabby  為 %COMSPEC%\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:69\nmsgid \"Set to 0 to disable recent profiles\"\nmsgstr \"設為 0 時停用顯示最近的設定檔\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36\nmsgid \"Sets the SSH agent's named pipe path.\"\nmsgstr \"設定 SSH 代理的命名管道路徑\"\n\n#: tabby-settings/src/buttonProvider.ts:28\n#: tabby-settings/src/components/settingsTab.component.ts:57\nmsgid \"Settings\"\nmsgstr \"設定\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:2\nmsgid \"Shell\"\nmsgstr \"Shell\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:593\nmsgid \"Shell does not support current path detection\"\nmsgstr \"Shell 不支援目前路徑偵測\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:59\nmsgid \"Shell integration\"\nmsgstr \"Shell 整合\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:50\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25\nmsgid \"Show\"\nmsgstr \"顯示\"\n\n#: tabby-core/src/hotkeys.ts:275\nmsgid \"Show {type} profile selector\"\nmsgstr \"顯示 {type} 設定檔選擇器\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117\nmsgid \"Show a confirmation box when pasting multiple lines\"\nmsgstr \"當貼上多行內容時顯示確認視窗\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75\nmsgid \"Show built-in profiles in selector\"\nmsgstr \"在選擇器中顯示內建設定\"\n\n#: tabby-core/src/hotkeys.ts:12\nmsgid \"Show command selector\"\nmsgstr \"顯示指令選擇器\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132\nmsgid \"Show config file\"\nmsgstr \"顯示設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131\nmsgid \"Show defaults\"\nmsgstr \"顯示預設檔\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146\nmsgid \"Show Mixer\"\nmsgstr \"顯示混和器\"\n\n#: tabby-core/src/hotkeys.ts:56\nmsgid \"Show pane labels (for rearranging)\"\nmsgstr \"顯示窗格標籤（重新排列時）\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164\nmsgid \"Show profile icon on tab\"\nmsgstr \"在分頁上顯示設定檔圖示\"\n\n#: tabby-core/src/hotkeys.ts:16\nmsgid \"Show profile selector\"\nmsgstr \"顯示設定選擇器\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:68\nmsgid \"Show recent profiles in selector\"\nmsgstr \"在選擇器中顯示最近使用的設定\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"Show release notes\"\nmsgstr \"顯示發行紀錄\"\n\n#: tabby-serial/src/hotkeys.ts:10\nmsgid \"Show Serial connections\"\nmsgstr \"顯示序列連線\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152\nmsgid \"Show tabs in fullscreen mode\"\nmsgstr \"在全螢幕下顯示分頁\"\n\n#: tabby-terminal/src/tabContextMenu.ts:62\nmsgid \"Show toolbar\"\nmsgstr \"顯示工具列\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45\nmsgid \"Show vault contents\"\nmsgstr \"顯示金鑰庫的內容\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29\nmsgid \"Sixel graphics support (experimental)\"\nmsgstr \"(實驗性) Sixel圖形支援\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140\nmsgid \"Skip MoTD/banner\"\nmsgstr \"跳過MoTD\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:74\nmsgid \"Slow feed\"\nmsgstr \"逐字節接收\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86\nmsgid \"Snaps the window to a side of the screen\"\nmsgstr \"將視窗貼齊螢幕的其中一邊\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:22\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:9\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:20\nmsgid \"SOCKS proxy\"\nmsgstr \"SOCKS 代理\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:51\nmsgid \"SOCKS proxy host\"\nmsgstr \"SOCKS 代理主機\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:55\nmsgid \"SOCKS proxy port\"\nmsgstr \"SOCKS 代理埠\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130\nmsgid \"Sound\"\nmsgstr \"音效\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31\nmsgid \"Source code\"\nmsgstr \"原始碼\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13\nmsgid \"Spaciness\"\nmsgstr \"空間感\"\n\n#: tabby-core/src/tabContextMenu.ts:75\nmsgid \"Split\"\nmsgstr \"新增分割視窗於\"\n\n#: tabby-core/src/hotkeys.ts:160\nmsgid \"Split to the bottom\"\nmsgstr \"分離至底部\"\n\n#: tabby-core/src/tabContextMenu.ts:85\nmsgid \"Split to the down\"\nmsgstr \"分離至下方\"\n\n#: tabby-core/src/hotkeys.ts:164\n#: tabby-core/src/tabContextMenu.ts:86\nmsgid \"Split to the left\"\nmsgstr \"分離至左方\"\n\n#: tabby-core/src/hotkeys.ts:156\n#: tabby-core/src/tabContextMenu.ts:84\nmsgid \"Split to the right\"\nmsgstr \"分離至右方\"\n\n#: tabby-core/src/hotkeys.ts:168\nmsgid \"Split to the top\"\nmsgstr \"分離至上方\"\n\n#: tabby-core/src/tabContextMenu.ts:87\nmsgid \"Split to the up\"\nmsgstr \"分離至上方\"\n\n#: tabby-ssh/src/profiles.ts:82\nmsgid \"SSH connection\"\nmsgstr \"SSH 連線\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:47\nmsgid \"SSH connection management is now done through the \\\"Profiles & connections\\\" tab\"\nmsgstr \"SSH連線管理現在位於「設定檔與連線」分頁下\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:89\nmsgid \"SSH password for {user}@{host}:{port}\"\nmsgstr \"{user}@{host}:{port} 的 SSH 密碼\"\n\n#: tabby-core/src/theme.ts:8\nmsgid \"Standard (legacy)\"\nmsgstr \"標準 (舊版)\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:150\nmsgid \"Startup\"\nmsgstr \"啟動\"\n\n#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:32\nmsgid \"Stop bits\"\nmsgstr \"停止位元\"\n\n#: tabby-terminal/src/components/streamProcessingSettings.component.ts:52\nmsgid \"Strip\"\nmsgstr \"條\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Subscribe to updates\"\nmsgstr \"訂閱更新\"\n\n#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:13\nmsgid \"Substitutions allowed.\"\nmsgstr \"允許替換\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:19\n#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:5\nmsgid \"Switch color scheme\"\nmsgstr \"切換配色方案\"\n\n#: tabby-core/src/tabContextMenu.ts:290\nmsgid \"Switch profile\"\nmsgstr \"切換設定檔\"\n\n#: tabby-core/src/hotkeys.ts:236\nmsgid \"Switch profile in the active pane\"\nmsgstr \"切換活動中分頁的設定檔\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7\nmsgid \"Switches terminal frontend implementation (experimental)\"\nmsgstr \"（實驗性）更換終端機前端\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:4\nmsgid \"Sync\"\nmsgstr \"同步\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:53\nmsgid \"Sync automatically\"\nmsgstr \"自動同步\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:8\nmsgid \"Sync host\"\nmsgstr \"同步主機\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:68\nmsgid \"Sync hotkeys\"\nmsgstr \"同步快速鍵\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:80\nmsgid \"Sync Vault\"\nmsgstr \"同步金鑰庫\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:74\nmsgid \"Sync window settings\"\nmsgstr \"同步視窗設定\"\n\n#: tabby-core/src/hotkeys.ts:100\n#: tabby-core/src/hotkeys.ts:104\n#: tabby-core/src/hotkeys.ts:108\n#: tabby-core/src/hotkeys.ts:112\n#: tabby-core/src/hotkeys.ts:116\n#: tabby-core/src/hotkeys.ts:120\n#: tabby-core/src/hotkeys.ts:124\n#: tabby-core/src/hotkeys.ts:128\n#: tabby-core/src/hotkeys.ts:132\n#: tabby-core/src/hotkeys.ts:136\n#: tabby-core/src/hotkeys.ts:140\n#: tabby-core/src/hotkeys.ts:144\n#: tabby-core/src/hotkeys.ts:148\n#: tabby-core/src/hotkeys.ts:152\n#: tabby-core/src/hotkeys.ts:76\n#: tabby-core/src/hotkeys.ts:80\n#: tabby-core/src/hotkeys.ts:84\n#: tabby-core/src/hotkeys.ts:88\n#: tabby-core/src/hotkeys.ts:92\n#: tabby-core/src/hotkeys.ts:96\nmsgid \"Tab {number}\"\nmsgstr \"分頁 {number}\"\n\n#: tabby-core/src/tabContextMenu.ts:223\nmsgid \"Tab activity\"\nmsgstr \"分頁活動\"\n\n#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3\nmsgid \"Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\"\nmsgstr \"Tabby無法載入您的擴充套件，所以在所有第三方擴充套件已被停用。錯誤是：\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41\nmsgid \"Tabby news and updates on Twitter\"\nmsgstr \"Tabby 在 Twitter 上的新消息與更新\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123\nmsgid \"Tabs\"\nmsgstr \"分頁\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126\nmsgid \"Tabs location\"\nmsgstr \"分頁位置\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141\nmsgid \"Tabs width\"\nmsgstr \"標籤頁寬度\"\n\n#: tabby-telnet/src/profiles.ts:34\nmsgid \"Telnet session\"\nmsgstr \"Telnet 階段\"\n\n#: tabby-terminal/src/api/baseTerminalTab.component.ts:210\n#: tabby-terminal/src/settings.ts:43\nmsgid \"Terminal\"\nmsgstr \"終端機\"\n\n#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:40\nmsgid \"Terminal background\"\nmsgstr \"終端機背景\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133\nmsgid \"Terminal bell\"\nmsgstr \"終端鈴聲\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:82\nmsgid \"Terminal identification\"\nmsgstr \"終端標示\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7\nmsgid \"Thank you for downloading Tabby!\"\nmsgstr \"感謝您下載 Tabby！\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5\nmsgid \"Theme\"\nmsgstr \"風格\"\n\n#: tabby-core/src/components/transfersMenu.component.ts:47\nmsgid \"There are active file transfers\"\nmsgstr \"正在進行檔案傳輸\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102\nmsgid \"There is a saved password for this connection\"\nmsgstr \"此次連線可使用已儲存密碼\"\n\n#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102\nmsgid \"These apply to all profiles of a given type\"\nmsgstr \"這些影響所有給定類型的設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:17\nmsgid \"These apply to all profiles of a given type in this group\"\nmsgstr \"這些將套用於此群組中所有具有特定類型的設定檔\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59\nmsgid \"Thin\"\nmsgstr \"窄邊\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205\nmsgid \"Tick this if you're experiencing aliasing, ghosting or other visual issues\"\nmsgstr \"如果您看到鋸齒或鬼影，請勾選此選項\"\n\n#: tabby-core/src/hotkeys.ts:20\nmsgid \"Toggle fullscreen mode\"\nmsgstr \"全螢幕模式切換\"\n\n#: tabby-core/src/hotkeys.ts:36\nmsgid \"Toggle last tab\"\nmsgstr \"切換至最後一個分頁\"\n\n#: tabby-electron/src/hotkeys.ts:14\nmsgid \"Toggle terminal window\"\nmsgstr \"切換終端機視窗\"\n\n#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:40\nmsgid \"Toggles the Tabby window visibility\"\nmsgstr \"切換Tabby視窗的可見度\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74\nmsgid \"Top\"\nmsgstr \"頂部\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123\nmsgid \"Trim whitespace and newlines\"\nmsgstr \"去除空白和空行\"\n\n#: tabby-core/src/services/config.service.ts:428\nmsgid \"Try again\"\nmsgstr \"重試\"\n\n#: tabby-ssh/src/session/ssh.ts:476\nmsgid \"Trying saved password\"\nmsgstr \"以儲存的密碼嘗試\"\n\n#: tabby-core/src/hotkeys.ts:68\nmsgid \"Turn current tab's panes into separate tabs\"\nmsgstr \"把當前分頁的窗格轉換為分頁\"\n\n#: tabby-core/src/services/profiles.service.ts:418\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:10\nmsgid \"Ungrouped\"\nmsgstr \"未分類的\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:59\nmsgid \"Uninstall\"\nmsgstr \"解除安裝\"\n\n#: tabby-settings/src/components/profilesSettingsTab.component.ts:269\nmsgid \"Unknown\"\nmsgstr \"未知的\"\n\n#: tabby-settings/src/components/vaultSettingsTab.component.ts:98\nmsgid \"Unknown secret of type {type} for {key}\"\nmsgstr \"密鑰{key}的密鑰類型{type}未知\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4\nmsgid \"Unpin\"\nmsgstr \"取消釘選\"\n\n#: tabby-core/src/tabContextMenu.ts:81\nmsgid \"Up\"\nmsgstr \"上方\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14\n#: tabby-electron/src/services/updater.service.ts:133\nmsgid \"Update\"\nmsgstr \"更新\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:52\nmsgid \"Upgrade to {version}\"\nmsgstr \"升級至版本 {version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:42\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:10\nmsgid \"Upload\"\nmsgstr \"上傳\"\n\n#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:46\nmsgid \"Upload as a new config\"\nmsgstr \"以新的設定檔上傳\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:39\nmsgid \"Use {altKeyName} as the Meta key\"\nmsgstr \"使用{altKeyName}為Meta鍵\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:5\nmsgid \"Use ConPTY\"\nmsgstr \"使用 ConPTY\"\n\n#: tabby-electron/src/shells/linuxDefault.ts:31\n#: tabby-electron/src/shells/linuxDefault.ts:38\nmsgid \"User default\"\nmsgstr \"使用者預設\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:70\nmsgid \"Username\"\nmsgstr \"使用者名稱：\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25\nmsgid \"Using CONNECT method\"\nmsgstr \"連線方式\"\n\n#: tabby-ssh/src/session/ssh.ts:465\nmsgid \"Using preset password\"\nmsgstr \"使用預設密碼\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9\nmsgid \"Vault\"\nmsgstr \"金鑰庫\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:4\nmsgid \"Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\"\nmsgstr \"Vault是一個永遠加密的存儲空間，用來存放SSH密碼和私鑰的密碼。\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:17\nmsgid \"Vault is empty\"\nmsgstr \"金鑰庫是空的\"\n\n#: locale/tmp-html/tabby-core/src/components/unlockVaultModal.component.html:4\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:44\nmsgid \"Vault is locked\"\nmsgstr \"金鑰庫已被鎖定\"\n\n#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:3\nmsgid \"Vault is not configured\"\nmsgstr \"金鑰庫未設定\"\n\n#: tabby-core/src/services/fileProviders.service.ts:40\nmsgid \"Vault master passphrase needs to be set to allow storing secrets\"\nmsgstr \"須設定Vault的主密碼以存儲密鑰\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11\nmsgid \"Verify host keys when connecting\"\nmsgstr \"連線時驗證主機金鑰\"\n\n#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75\nmsgid \"Version\"\nmsgstr \"版本\"\n\n#: locale/tmp-html/tabby-core/src/components/startPage.component.html:13\nmsgid \"Version: {version}\"\nmsgstr \"版本：{version}\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28\nmsgid \"Vibrancy\"\nmsgstr \"Vibrancy\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:139\nmsgid \"Visual\"\nmsgstr \"視覺\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116\nmsgid \"Warn on multi-line paste\"\nmsgstr \"貼上多行時警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5\nmsgid \"Warn when closing active connections\"\nmsgstr \"關閉連線中的視窗時警告\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6\nmsgid \"Warning: remote host's key has suddenly changed!\"\nmsgstr \"警告：遠端主機金鑰突然改變！\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67\nmsgid \"We're only tracking your Tabby and OS versions.\"\nmsgstr \"我們只會記錄Tabby和作業系統版本。\"\n\n#: tabby-core/src/components/welcomeTab.component.ts:25\nmsgid \"Welcome\"\nmsgstr \"歡迎使用\"\n\n#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:36\nmsgid \"What's new\"\nmsgstr \"最新消息\"\n\n#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:46\nmsgid \"When a session ends\"\nmsgstr \"當連線階段結束\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82\nmsgid \"When enabled, links are only clickable while holding this key\"\nmsgstr \"啟用後，需按著此鍵才可打開連結\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18\nmsgid \"When WinSCP is detected, you can launch an SCP session from the context menu.\"\nmsgstr \"當偵測到WinSCP時，您可以通過快顯功能表開啟SCP階段\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53\nmsgid \"Whether a custom window or an OS native window should be used\"\nmsgstr \"使用自訂視窗或是使用作業系統視窗\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141\nmsgid \"Will prevent the SSH greeting from showing up\"\nmsgstr \"將防止顯示 SSH 問候語。\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2\n#: tabby-settings/src/settings.ts:30\nmsgid \"Window\"\nmsgstr \"視窗\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112\nmsgid \"Window dimension along the edge\"\nmsgstr \"沿著邊緣的視窗尺寸\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105\nmsgid \"Window dimension away from the edge\"\nmsgstr \"距離邊緣的視窗尺寸\"\n\n#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52\nmsgid \"Window frame\"\nmsgstr \"視窗邊框\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165\nmsgid \"Windows\"\nmsgstr \"視窗\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:11\nmsgid \"Windows 10 build 18309 or above is recommended for ConPTY\"\nmsgstr \"推薦在 Windows 10 版本 18309 或以上使用 ConPTY\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:17\nmsgid \"WinSCP path\"\nmsgstr \"WinSCP 路徑\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74\nmsgid \"Word separators\"\nmsgstr \"分隔字元\"\n\n#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10\nmsgid \"Working directory\"\nmsgstr \"工作目錄\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:15\n#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:6\nmsgid \"Working directory detection\"\nmsgstr \"偵測工作目錄\"\n\n#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:145\nmsgid \"WSL terminal bell can only be muted via Volume Mixer\"\nmsgstr \"WSL終端機鈴聲只能通過混音器靜音\"\n\n#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14\nmsgid \"WSL terminal only supports TrueColor with ConPTY\"\nmsgstr \"WSL終端機只支援ConPTY真彩色\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128\nmsgid \"X11 forwarding\"\nmsgstr \"X11 轉發\"\n\n#: tabby-core/src/utils.ts:65\nmsgid \"Yellow\"\nmsgstr \"黃色\"\n\n#: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:4\nmsgid \"You can change it later, but it's unrecoverable if forgotten.\"\nmsgstr \"您可以稍後修改，但如果忘了就沒了\"\n\n#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7\nmsgid \"You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\"\nmsgstr \"您可能正受到中間人攻擊，或是主機金鑰可能已經改變\"\n\n#: tabby-terminal/src/hotkeys.ts:54\nmsgid \"Zoom in\"\nmsgstr \"放大\"\n\n#: tabby-terminal/src/hotkeys.ts:58\nmsgid \"Zoom out\"\nmsgstr \"縮小\"\n\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43\n#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5\nmsgctxt \"[Dynamic] port forwarding\"\nmsgid \"id.port-forwarding.dynamic\"\nmsgstr \"動態通訊埠轉發\"\n\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"devDependencies\": {\n    \"@angular/animations\": \"^15.2.6\",\n    \"@angular/cdk\": \"^15.2.6\",\n    \"@angular/common\": \"^15.2.6\",\n    \"@angular/compiler\": \"^15.2.6\",\n    \"@angular/compiler-cli\": \"^15.2.6\",\n    \"@angular/core\": \"^15.2.6\",\n    \"@angular/forms\": \"^15.2.6\",\n    \"@angular/localize\": \"^15.2.9\",\n    \"@angular/platform-browser\": \"^15.2.6\",\n    \"@angular/platform-browser-dynamic\": \"^15.2.6\",\n    \"@biesbjerg/ngx-translate-extract-marker\": \"^1.0.0\",\n    \"@electron/notarize\": \"^1.2.3\",\n    \"@electron/rebuild\": \"^4\",\n    \"@fortawesome/fontawesome-free\": \"^6.4.0\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14.1.0\",\n    \"@ngtools/webpack\": \"^15.2.5\",\n    \"@popperjs/core\": \"^2.11.6\",\n    \"@sentry/cli\": \"^2.18.1\",\n    \"@sentry/electron\": \"^2.5.4\",\n    \"@tabby-gang/to-string-loader\": \"^1.1.7-beta.2\",\n    \"@types/deep-equal\": \"1.0.1\",\n    \"@types/electron-debug\": \"^2.1.0\",\n    \"@types/fs-extra\": \"^9.0.13\",\n    \"@types/js-yaml\": \"^4.0.5\",\n    \"@types/node\": \"^20.3.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.4.1\",\n    \"@typescript-eslint/parser\": \"^6.4.1\",\n    \"apply-loader\": \"2.0.0\",\n    \"axios\": \"^1.4.0\",\n    \"babel-loader\": \"^9.1.2\",\n    \"browserify-sign\": \"^4.2.1\",\n    \"clone-deep\": \"^4.0.1\",\n    \"compare-versions\": \"^5\",\n    \"core-js\": \"^3.31.0\",\n    \"core-js-pure\": \"^3.21.1\",\n    \"cross-env\": \"7.0.3\",\n    \"css-loader\": \"^6.7.3\",\n    \"deep-equal\": \"2.0.5\",\n    \"electron\": \"38\",\n    \"electron-builder\": \"^26.0\",\n    \"electron-download\": \"^4.1.1\",\n    \"electron-installer-snap\": \"^5.1.0\",\n    \"eslint\": \"^8.48.0\",\n    \"eslint-import-resolver-typescript\": \"^3.6.0\",\n    \"eslint-plugin-import\": \"^2.28.1\",\n    \"filesize\": \"^9\",\n    \"file-loader\": \"^6.2.0\",\n    \"gettext-extractor\": \"^3.8.0\",\n    \"graceful-fs\": \"^4.2.10\",\n    \"html-loader\": \"4.2.0\",\n    \"json-loader\": \"^0.5.7\",\n    \"lru-cache\": \"^6.0.0\",\n    \"macos-release\": \"^3.3.0\",\n    \"ngx-toastr\": \"^16.0.2\",\n    \"ngx-filesize\": \"^3.0.2\",\n    \"node-abi\": \"^4\",\n    \"npmlog\": \"6.0.2\",\n    \"npx\": \"^10.2.2\",\n    \"patch-package\": \"^6.4.7\",\n    \"po-gettext-loader\": \"^1.0.0\",\n    \"pug\": \"3\",\n    \"pug-cli\": \"^1.0.0-alpha6\",\n    \"pug-html-loader\": \"1.1.5\",\n    \"pug-lint\": \"^2.6.0\",\n    \"pug-loader\": \"^2.4.0\",\n    \"pug-static-loader\": \"2.0.0\",\n    \"raw-loader\": \"4.0.2\",\n    \"rxjs\": \"^7.5.7\",\n    \"sass\": \"^1.63.4\",\n    \"sass-loader\": \"^13.2.0\",\n    \"shell-quote\": \"^1.7.4\",\n    \"shelljs\": \"0.8.5\",\n    \"slugify\": \"^1.6.5\",\n    \"source-code-pro\": \"^2.38.0\",\n    \"source-map-loader\": \"^4.0.1\",\n    \"source-sans-pro\": \"3.6.0\",\n    \"style-loader\": \"^3.3.1\",\n    \"svg-inline-loader\": \"^0.8.2\",\n    \"thenby\": \"^1.3.4\",\n    \"ts-loader\": \"^9.4.2\",\n    \"tsimportlib\": \"^0.0.3\",\n    \"tslib\": \"^2.5.0\",\n    \"typedoc\": \"^0.22.18\",\n    \"typescript\": \"^4.9.5\",\n    \"utils-decorators\": \"^2.0.6\",\n    \"val-loader\": \"5.0.1\",\n    \"webpack\": \"^5.90.0\",\n    \"webpack-bundle-analyzer\": \"^4.7.0\",\n    \"webpack-cli\": \"^5.0.1\",\n    \"yaml-loader\": \"0.8.0\",\n    \"zone.js\": \"^0.13.0\"\n  },\n  \"resolutions\": {\n    \"*/pug\": \"^3\",\n    \"lzma-native\": \"^8.0.6\",\n    \"**/graceful-fs\": \"^4.2.4\",\n    \"nan\": \"2.22.2\",\n    \"node-abi\": \"^4\",\n    \"node-gyp\": \"^10.0.0\"\n  },\n  \"scripts\": {\n    \"build\": \"npm run build:typings && node scripts/build-modules.mjs\",\n    \"build:typings\": \"node scripts/build-typings.mjs\",\n    \"watch\": \"cross-env TABBY_DEV=1 webpack --progress --color --watch\",\n    \"start\": \"cross-env TABBY_DEV=1 electron app -d --inspect\",\n    \"start:prod\": \"electron app --debug\",\n    \"prod\": \"cross-env TABBY_DEV=1 electron app\",\n    \"docs\": \"node scripts/build-docs.mjs\",\n    \"lint\": \"eslint --ext ts */src */lib\",\n    \"postinstall\": \"patch-package && node ./scripts/install-deps.mjs && node ./scripts/build-native.mjs\",\n    \"i18n:pull\": \"crowdin pull --skip-untranslated-strings\",\n    \"i18n:extract\": \"node scripts/i18n-extract.mjs\",\n    \"i18n:push\": \"crowdin push\"\n  },\n  \"type\": \"module\",\n  \"private\": true,\n  \"dependencies\": {\n    \"dotenv\": \"^16.3.1\"\n  }\n}\n"
  },
  {
    "path": "patches/app-builder-lib+26.0.12.patch",
    "content": "diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js\nindex d159c17..eb48466 100644\n--- a/node_modules/app-builder-lib/out/appInfo.js\n+++ b/node_modules/app-builder-lib/out/appInfo.js\n@@ -116,9 +116,7 @@ class AppInfo {\n         return this.info.metadata.name;\n     }\n     get linuxPackageName() {\n-        const name = this.name;\n-        // https://github.com/electron-userland/electron-builder/issues/2963\n-        return name.startsWith(\"@\") ? this.sanitizedProductName : name;\n+        return 'tabby-terminal';\n     }\n     get sanitizedName() {\n         return (0, filename_1.sanitizeFileName)(this.name);\n"
  },
  {
    "path": "scripts/build-docs.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\n\nvars.packagesWithDocs.forEach(([dest, src]) => {\n    log.info('docs', src)\n    sh.exec(`yarn typedoc --out docs/api/${dest} --tsconfig ${src}/tsconfig.typings.json ${src}/src/index.ts`, { fatal: true })\n})\n"
  },
  {
    "path": "scripts/build-linux.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\nimport { build as builder } from 'electron-builder'\nimport * as vars from './vars.mjs'\n\nconst isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')\n\nprocess.env.ARCH = (process.env.ARCH || process.arch) === 'arm' ? 'armv7l' : process.env.ARCH || process.arch\n\nbuilder({\n    dir: true,\n    linux: ['deb', 'tar.gz', 'rpm', 'pacman', 'appimage'],\n    armv7l: process.env.ARCH === 'armv7l',\n    arm64: process.env.ARCH === 'arm64',\n    config: {\n        npmRebuild: false,\n        extraMetadata: {\n            version: vars.version,\n        },\n        publish: process.env.KEYGEN_TOKEN ? [\n            vars.keygenConfig,\n            {\n                provider: 'github',\n                channel: `latest-${process.env.ARCH}`,\n            },\n        ] : undefined,\n    },\n    publish: (process.env.KEYGEN_TOKEN && isTag) ? 'always' : 'never',\n}).catch(e => {\n    console.error(e)\n    process.exit(1)\n})\n"
  },
  {
    "path": "scripts/build-macos.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\nimport { build as builder } from 'electron-builder'\nimport * as vars from './vars.mjs'\n\nconst isTag = (process.env.GITHUB_REF || '').startsWith('refs/tags/')\n\nprocess.env.ARCH = process.env.ARCH || process.arch\n\nif (process.env.GITHUB_HEAD_REF) {\n    delete process.env.CSC_LINK\n    delete process.env.CSC_KEY_PASSWORD\n    process.env.CSC_IDENTITY_AUTO_DISCOVERY = 'false'\n}\n\nprocess.env.APPLE_ID ??= process.env.APPSTORE_USERNAME\nprocess.env.APPLE_APP_SPECIFIC_PASSWORD ??= process.env.APPSTORE_PASSWORD\n\nbuilder({\n    dir: true,\n    mac: ['dmg', 'zip'],\n    x64: process.env.ARCH === 'x86_64',\n    arm64: process.env.ARCH === 'arm64',\n    config: {\n        extraMetadata: {\n            version: vars.version,\n            teamId: process.env.APPLE_TEAM_ID,\n        },\n        mac: {\n            identity: !process.env.CI || process.env.CSC_LINK ? undefined : null,\n            notarize: !!process.env.APPLE_TEAM_ID,\n        },\n        npmRebuild: process.env.ARCH !== 'arm64',\n        publish: process.env.KEYGEN_TOKEN ? [\n            vars.keygenConfig,\n            {\n                provider: 'github',\n                channel: `latest-${process.env.ARCH}`,\n            },\n        ] : undefined,\n    },\n    publish: (process.env.KEYGEN_TOKEN && isTag) ? 'always' : 'never',\n}).catch(e => {\n    console.error(e)\n    process.exit(1)\n})\n"
  },
  {
    "path": "scripts/build-modules.mjs",
    "content": "#!/usr/bin/env node\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\nimport webpack from 'webpack'\nimport { promisify } from 'node:util'\n\nconst configs = [\n    '../app/webpack.config.main.mjs',\n    '../app/webpack.config.mjs',\n    ...vars.allPackages.map(x => `../${x}/webpack.config.mjs`),\n]\n\n;(async () => {\n    for (const c of configs) {\n        log.info('build', c)\n        const stats = await promisify(webpack)((await import(c)).default())\n        console.log(stats.toString({ colors: true }))\n        if (stats.hasErrors()) {\n            process.exit(1)\n        }\n    }\n})()\n"
  },
  {
    "path": "scripts/build-native.mjs",
    "content": "#!/usr/bin/env node\nimport { rebuild } from '@electron/rebuild'\nimport * as path from 'path'\nimport * as vars from './vars.mjs'\n\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\n\nif (process.platform === 'win32' || process.platform === 'linux') {\n    process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : process.env.ARCH || process.arch\n} else {\n    process.env.ARCH ??= process.arch\n}\n\nlet lifecycles = []\nfor (let dir of ['app', 'tabby-core', 'tabby-local', 'tabby-ssh', 'tabby-terminal']) {\n    const build = rebuild({\n        buildPath: path.resolve(__dirname, '../' + dir),\n        electronVersion: vars.electronVersion,\n        arch: process.env.ARCH,\n        force: true,\n    })\n    build.catch(e => {\n        console.error(e)\n        process.exit(1)\n    })\n    lifecycles.push([build.lifecycle, dir])\n}\n\nconsole.info('Building against Electron', vars.electronVersion)\n\nfor (let [lc, dir] of lifecycles) {\n    lc.on('module-found', name => {\n        console.info('Rebuilding', dir + '/' + name)\n    })\n}\n"
  },
  {
    "path": "scripts/build-typings.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\n\nvars.builtinPlugins.forEach(plugin => {\n    log.info('typings', plugin)\n    sh.exec(`yarn tsc --project ${plugin}/tsconfig.typings.json`, { fatal: true })\n})\n"
  },
  {
    "path": "scripts/build-windows.mjs",
    "content": "#!/usr/bin/env node\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\nimport { build as builder } from 'electron-builder'\nimport * as vars from './vars.mjs'\nimport { execSync } from 'child_process'\n\nconst isTag = (process.env.GITHUB_REF || process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')\nconst keypair = process.env.SM_KEYPAIR_ALIAS\n\nprocess.env.ARCH = process.env.ARCH || process.arch\n\nconsole.log('Signing enabled:', !!keypair)\n\nbuilder({\n    dir: true,\n    win: ['nsis', 'zip'],\n    arm64: process.env.ARCH === 'arm64',\n    config: {\n        extraMetadata: {\n            version: vars.version,\n        },\n        publish: process.env.KEYGEN_TOKEN ? [\n            vars.keygenConfig,\n            {\n                provider: 'github',\n                channel: `latest-${process.env.ARCH}`,\n            },\n        ] : undefined,\n        forceCodeSigning: !!keypair,\n        win: {\n            signtoolOptions: {\n                certificateSha1: process.env.SM_CODE_SIGNING_CERT_SHA1_HASH,\n                publisherName: process.env.SM_PUBLISHER_NAME,\n                signingHashAlgorithms: ['sha256'],\n                sign: keypair ? async function (configuration) {\n                    console.log('Signing', configuration)\n                    if (configuration.path) {\n                        try {\n                            const cmd = `smctl sign --keypair-alias=${keypair} --input \"${String(configuration.path)}\"`\n                            console.log(cmd)\n                            const out = execSync(cmd)\n                            if (out.toString().includes('FAILED')) {\n                                throw new Error(out.toString())\n                            }\n                            console.log(out.toString())\n                        } catch (e) {\n                            console.error(`Failed to sign ${configuration.path}`)\n                            if (e.stdout) {\n                                console.error('stdout:', e.stdout.toString())\n                            }\n                            if (e.stderr) {\n                                console.error('stderr:', e.stderr.toString())\n                            }\n                            console.error(e)\n                            process.exit(1)\n                        }\n                    }\n                } : undefined,\n            },\n        },\n    },\n\n    publish: (process.env.KEYGEN_TOKEN && isTag) ? 'always' : 'never',\n}).catch(e => {\n    console.error(e)\n    process.exit(1)\n})\n"
  },
  {
    "path": "scripts/generate-icon-metadata.mjs",
    "content": "#!/usr/bin/env node\nimport jsYaml from 'js-yaml'\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\n\nconst metadata = jsYaml.load(fs.readFileSync(path.resolve(__dirname, '../node_modules/@fortawesome/fontawesome-free/metadata/icons.yml')))\n\nlet result = {}\nfor (let key in metadata) {\n    result[key] = metadata[key].styles.map(x => x[0])\n}\n\nfs.writeFileSync(path.resolve(__dirname, '../tabby-core/src/icons.json'), JSON.stringify(result))\n"
  },
  {
    "path": "scripts/i18n-extract.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport fs from 'node:fs/promises'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\nimport { GettextExtractor, JsExtractors, HtmlExtractors } from 'gettext-extractor'\n\nlet extractor = new GettextExtractor()\n\nconst tempOutput = 'locale/app.new.pot'\nconst pot = 'locale/app.pot'\nconst tempHtml = 'locale/tmp-html'\n\n;(async () => {\n    sh.mkdir('-p', tempHtml)\n    for (const plugin of vars.builtinPlugins) {\n        log.info('compile-pug', plugin)\n\n        sh.exec(`yarn pug --doctype html -s --pretty -O '{require: function(){}}' -o ${tempHtml}/${plugin} ${plugin}`, { fatal: true })\n    }\n\n    log.info('extract-ts')\n    extractor.createJsParser([\n        JsExtractors.callExpression('this.translate.instant', {\n            arguments: { text: 0 },\n        }),\n        JsExtractors.callExpression('translate.instant', {\n            arguments: { text: 0 },\n        }),\n        JsExtractors.callExpression('_', {\n            arguments: { text: 0 },\n        }),\n    ]).parseFilesGlob('./tabby-*/src/**/*.ts')\n\n    log.info('extract-pug')\n    const options = {\n        attributes: {\n            context: 'translatecontext',\n        },\n    }\n    extractor.createHtmlParser([\n        HtmlExtractors.elementContent('translate, [translate=\"\"]', options),\n        HtmlExtractors.elementAttribute('[translate*=\" \"]', 'translate', options),\n    ]).parseFilesGlob(`${tempHtml}/**/*.html`)\n\n    extractor.savePotFile(tempOutput)\n    extractor.printStats()\n\n    sh.rm('-r', tempHtml)\n    sh.exec(`msgcat -s ${tempOutput} > ${pot}`, { fatal: true })\n\n    await fs.rename(tempOutput, pot)\n})()\n"
  },
  {
    "path": "scripts/install-deps.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\n\nlog.info('patch')\nsh.exec(`yarn patch-package`, { fatal: true })\n\nlog.info('deps', 'app')\n\nsh.cd('app')\nsh.exec(`yarn install --force --network-timeout 1000000`, { fatal: true })\n// Some native packages might fail to build before patch-package gets a chance to run via postinstall\nsh.exec(`yarn postinstall`, { fatal: false })\nsh.cd('..')\n\nsh.cd('web')\nsh.exec(`yarn install --force --network-timeout 1000000`, { fatal: true })\nsh.exec(`yarn patch-package`, { fatal: true })\nsh.cd('..')\n\nvars.allPackages.forEach(plugin => {\n    log.info('deps', plugin)\n    sh.cd(plugin)\n    sh.exec(`yarn install --force --network-timeout 1000000`, { fatal: true })\n    sh.cd('..')\n})\n\nif (['darwin', 'linux'].includes(process.platform)) {\n    sh.cd('node_modules')\n    for (let x of vars.builtinPlugins) {\n        sh.ln('-fs', '../' + x, x)\n    }\n    sh.cd('..')\n}\n"
  },
  {
    "path": "scripts/prepackage-plugins.mjs",
    "content": "#!/usr/bin/env node\nimport { rebuild } from '@electron/rebuild'\nimport sh from 'shelljs'\nimport path from 'node:path'\nimport fs from 'node:fs'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\n\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\n\nlet target = path.resolve(__dirname, '../builtin-plugins')\nsh.mkdir('-p', target)\nfs.writeFileSync(path.join(target, 'package.json'), '{}')\nsh.cd(target)\nvars.builtinPlugins.forEach(plugin => {\n    if (plugin === 'tabby-web') {\n        return\n    }\n    log.info('install', plugin)\n    sh.cp('-r', path.join('..', plugin), '.')\n    sh.rm('-rf', path.join(plugin, 'node_modules'))\n    sh.cd(plugin)\n    sh.exec(`yarn install --force --production`, { fatal: true })\n\n\n    log.info('rebuild', 'native')\n    if (fs.existsSync('node_modules')) {\n        rebuild({\n            buildPath: path.resolve('.'),\n            electronVersion: vars.electronVersion,\n            arch: process.env.ARCH ?? process.arch,\n            force: true,\n            useCache: false,\n        })\n    }\n    sh.cd('..')\n})\nfs.unlinkSync(path.join(target, 'package.json'), '{}')\n"
  },
  {
    "path": "scripts/publish-plugins.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport * as vars from './vars.mjs'\nimport log from 'npmlog'\nimport { execSync } from 'child_process'\n\nvars.allPackages.forEach(plugin => {\n    log.info('bump', plugin)\n    sh.cd(plugin)\n    sh.exec('npm --no-git-tag-version version ' + vars.version, { fatal: true })\n    execSync('npm publish --tag latest', { stdio: 'inherit' })\n    sh.cd('..')\n})\n"
  },
  {
    "path": "scripts/sentry-upload.mjs",
    "content": "#!/usr/bin/env node\nimport sh from 'shelljs'\nimport * as vars from './vars.mjs'\n\nconst sentryCli = process.platform === 'win32' ? 'node_modules\\\\.bin\\\\sentry-cli.cmd' : 'sentry-cli'\n\nsh.exec(`${sentryCli} releases new ${vars.version}`)\n\nif (process.platform === 'darwin') {\n    for (const path of [\n        'app/node_modules/@serialport/bindings/build/Release/bindings.node',\n        'app/node_modules/node-pty/build/Release/pty.node',\n        'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',\n        'app/node_modules/macos-native-processlist/build/Release/native.node',\n    ]) {\n        sh.exec('dsymutil ' + path)\n    }\n}\n\nsh.exec(`${sentryCli} upload-dif app/node_modules`)\nsh.exec(`${sentryCli} releases set-commits --auto ${vars.version}`)\nfor (const p of vars.builtinPlugins) {\n    sh.exec(`${sentryCli} releases files ${vars.version} upload-sourcemaps ${p}/dist -u ${p}/dist/ -d ${process.platform}-${p}`)\n}\n"
  },
  {
    "path": "scripts/vars.mjs",
    "content": "import * as path from 'path'\nimport * as fs from 'fs'\nimport * as semver from 'semver'\nimport * as childProcess from 'child_process'\n\nprocess.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : (process.env.ARCH || process.arch)\n\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nconst electronInfo = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../node_modules/electron/package.json')))\n\nexport let version = childProcess.execSync('git describe --tags', { encoding:'utf-8' })\nversion = version.substring(1).trim()\nversion = version.replace('-', '-c')\n\nif (version.includes('-c')) {\n    version = semver.inc(version, 'prepatch').replace('-0', `-nightly.${process.env.REV ?? 0}`)\n}\n\nexport const builtinPlugins = [\n    'tabby-core',\n    'tabby-settings',\n    'tabby-terminal',\n    'tabby-web',\n    'tabby-community-color-schemes',\n    'tabby-ssh',\n    'tabby-serial',\n    'tabby-telnet',\n    'tabby-local',\n    'tabby-electron',\n    'tabby-plugin-manager',\n    'tabby-linkifier',\n    'tabby-auto-sudo-password',\n]\n\nexport const packagesWithDocs = [\n    ['.', 'tabby-core'],\n    ['terminal', 'tabby-terminal'],\n    ['local', 'tabby-local'],\n    ['settings', 'tabby-settings'],\n]\n\nexport const allPackages = [\n    ...builtinPlugins,\n    'web',\n    'tabby-web-demo',\n]\n\nexport const bundledModules = [\n    '@angular',\n    '@ng-bootstrap',\n]\nexport const electronVersion = electronInfo.version\n\nexport const keygenConfig = {\n    provider: 'keygen',\n    account: 'a06315f2-1031-47c6-9181-e92a20ec815e',\n    channel: 'stable',\n    product: {\n        win32: {\n            x64: 'f481b9d6-d5da-4970-b926-f515373e986f',\n            arm64: '950999b9-371c-419b-b291-938c5e4d364c',\n        }[process.env.ARCH],\n        darwin: {\n            arm64: '98fbadee-c707-4cd6-9d99-56683595a846',\n            x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',\n            x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',\n        }[process.env.ARCH],\n        linux: {\n            x64: '7bf45071-3031-4a26-9f2e-72604308313e',\n            arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17',\n            armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409',\n            armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643',\n        }[process.env.ARCH],\n    }[process.platform],\n}\n\nif (!keygenConfig.product) {\n    throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH}`)\n}\n"
  },
  {
    "path": "snap/snapcraft.yaml",
    "content": "name: tabby\nversion: '1.0.0'\nsummary: A terminal for a modern age\ndescription: |\n  Tabby is a local, SSH and serial terminal heavily inspired by Hyper.\n\ngrade: devel\nconfinement: devmode\n\napps:\n  tabby:\n    command: opt/tabby/tabby\n\nparts:\n  app:\n    plugin: nodejs\n    source: .\n    build-packages:\n      - libfontconfig-dev\n    override-build: |\n      yarn\n      yarn run build\n      ./scripts/build-linux.js\n      mkdir -p $SNAPCRAFT_PART_INSTALL/opt/tabby || true\n      cp -ar dist/linux-unpacked/* $SNAPCRAFT_PART_INSTALL/opt/tabby/\n"
  },
  {
    "path": "tabby-auto-sudo-password/package.json",
    "content": "{\n  \"name\": \"tabby-auto-sudo-password\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Offers to automatically paste saved sudo password in SSH sessions\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"devDependencies\": {\n    \"ansi-colors\": \"^4.1.1\"\n  },\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "tabby-auto-sudo-password/src/decorator.ts",
    "content": "import colors from 'ansi-colors'\nimport { Injectable } from '@angular/core'\nimport { TerminalDecorator, BaseTerminalTabComponent, XTermFrontend, SessionMiddleware } from 'tabby-terminal'\nimport { SSHProfile, SSHTabComponent, PasswordStorageService } from 'tabby-ssh'\n\nconst SUDO_PROMPT_REGEX = /^\\[sudo\\] password for ([^:]+):\\s*$/im\n\nexport class AutoSudoPasswordMiddleware extends SessionMiddleware {\n    private pendingPasswordToPaste: string | null = null\n    private pasteHint = `${colors.black.bgBlackBright(' Tabby ')} ${colors.gray('Press Enter to paste saved password')}`\n    private pasteHintLength = colors.stripColor(this.pasteHint).length\n\n    constructor (\n        private profile: SSHProfile,\n        private ps: PasswordStorageService,\n    ) { super() }\n\n    feedFromSession (data: Buffer): void {\n        const text = data.toString('utf-8')\n        const match = SUDO_PROMPT_REGEX.exec(text)\n        if (match) {\n            const username = match[1]\n            this.handlePrompt(username)\n        }\n        this.outputToTerminal.next(data)\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        if (this.pendingPasswordToPaste) {\n            const backspaces = Buffer.alloc(this.pasteHintLength, 8) // backspace\n            const spaces = Buffer.alloc(this.pasteHintLength, 32) // space\n            const clear = Buffer.concat([backspaces, spaces, backspaces])\n            this.outputToTerminal.next(clear)\n            if (data.length === 1 && data[0] === 13) { // Enter key\n                this.outputToSession.next(Buffer.from(this.pendingPasswordToPaste + '\\n'))\n                this.pendingPasswordToPaste = null\n                return\n            } else {\n                this.pendingPasswordToPaste = null\n            }\n        }\n        this.outputToSession.next(data)\n    }\n\n    async handlePrompt (username: string): Promise<void> {\n        console.log(`Detected sudo prompt for user: ${username}`)\n        const pw = await this.ps.loadPassword(this.profile, username)\n        if (pw) {\n            this.outputToTerminal.next(Buffer.from(this.pasteHint))\n            this.pendingPasswordToPaste = pw\n        }\n    }\n\n    async loadPassword (username: string): Promise<string| null> {\n        if (this.profile.options.user !== username) {\n            return null\n        }\n        return this.ps.loadPassword(this.profile, username)\n    }\n}\n\n@Injectable()\nexport class AutoSudoPasswordDecorator extends TerminalDecorator {\n    constructor (\n        private ps: PasswordStorageService,\n    ) {\n        super()\n    }\n\n    private attachToSession (tab: SSHTabComponent) {\n        if (!tab.session) {\n            return\n        }\n        tab.session.middleware.unshift(new AutoSudoPasswordMiddleware(tab.profile, this.ps))\n    }\n\n    attach (tab: BaseTerminalTabComponent<any>): void {\n        if (!(tab.frontend instanceof XTermFrontend) || !(tab instanceof SSHTabComponent)) {\n            return\n        }\n\n        setTimeout(() => {\n            this.attachToSession(tab)\n            this.subscribeUntilDetached(tab, tab.sessionChanged$.subscribe(() => {\n                this.attachToSession(tab)\n            }))\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-auto-sudo-password/src/index.ts",
    "content": "/* eslint-disable @typescript-eslint/no-extraneous-class */\nimport { NgModule } from '@angular/core'\nimport { ToastrModule } from 'ngx-toastr'\nimport { TerminalDecorator } from 'tabby-terminal'\n\nimport { AutoSudoPasswordDecorator } from './decorator'\n\n@NgModule({\n    imports: [\n        ToastrModule,\n    ],\n    providers: [\n        { provide: TerminalDecorator, useClass: AutoSudoPasswordDecorator, multi: true },\n    ],\n})\nexport default class AutoSudoPasswordModule { }\n"
  },
  {
    "path": "tabby-auto-sudo-password/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n  }\n}\n"
  },
  {
    "path": "tabby-auto-sudo-password/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-auto-sudo-password/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'auto-sudo-password',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-community-color-schemes/.editorconfig",
    "content": "[schemes/*]\nindent_style = space\nindent_size = 15\n"
  },
  {
    "path": "tabby-community-color-schemes/package.json",
    "content": "{\n  \"name\": \"tabby-community-color-schemes\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Community color schemes for Tabby\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"peerDependencies\": {\n    \"@angular/core\": \"^15\",\n    \"tabby-core\": \"*\",\n    \"tabby-terminal\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/3024 Day",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #4a4543\n*.background:  #f7f7f7\n*.cursorColor: #4a4543\n!\n! Black\n*.color0:      #090300\n*.color8:      #5c5855\n!\n! Red\n*.color1:      #db2d20\n*.color9:      #e8bbd0\n!\n! Green\n*.color2:      #01a252\n*.color10:     #3a3432\n!\n! Yellow\n*.color3:      #fded02\n*.color11:     #4a4543\n!\n! Blue\n*.color4:      #01a0e4\n*.color12:     #807d7c\n!\n! Magenta\n*.color5:      #a16a94\n*.color13:     #d6d5d4\n!\n! Cyan\n*.color6:      #b5e4f4\n*.color14:     #cdab53\n!\n! White\n*.color7:      #a5a2a2\n*.color15:     #f7f7f7\n!\n! Bold, Italic, Underline\n*.colorBD:     #4a4543\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/3024 Night",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a5a2a2\n*.background:  #090300\n*.cursorColor: #a5a2a2\n!\n! Black\n*.color0:      #090300\n*.color8:      #5c5855\n!\n! Red\n*.color1:      #db2d20\n*.color9:      #e8bbd0\n!\n! Green\n*.color2:      #01a252\n*.color10:     #3a3432\n!\n! Yellow\n*.color3:      #fded02\n*.color11:     #4a4543\n!\n! Blue\n*.color4:      #01a0e4\n*.color12:     #807d7c\n!\n! Magenta\n*.color5:      #a16a94\n*.color13:     #d6d5d4\n!\n! Cyan\n*.color6:      #b5e4f4\n*.color14:     #cdab53\n!\n! White\n*.color7:      #a5a2a2\n*.color15:     #f7f7f7\n!\n! Bold, Italic, Underline\n*.colorBD:     #a5a2a2\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/AdventureTime",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f8dcc0\n*.background:  #1f1d45\n*.cursorColor: #efbf38\n!\n! Black\n*.color0:      #050404\n*.color8:      #4e7cbf\n!\n! Red\n*.color1:      #bd0013\n*.color9:      #fc5f5a\n!\n! Green\n*.color2:      #4ab118\n*.color10:     #9eff6e\n!\n! Yellow\n*.color3:      #e7741e\n*.color11:     #efc11a\n!\n! Blue\n*.color4:      #0f4ac6\n*.color12:     #1997c6\n!\n! Magenta\n*.color5:      #665993\n*.color13:     #9b5953\n!\n! Cyan\n*.color6:      #70a598\n*.color14:     #c8faf4\n!\n! White\n*.color7:      #f8dcc0\n*.color15:     #f6f5fb\n!\n! Bold, Italic, Underline\n*.colorBD:     #bd0013\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Afterglow",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d0d0d0\n*.background:  #212121\n*.cursorColor: #d0d0d0\n!\n! Black\n*.color0:      #151515\n*.color8:      #505050\n!\n! Red\n*.color1:      #ac4142\n*.color9:      #ac4142\n!\n! Green\n*.color2:      #7e8e50\n*.color10:     #7e8e50\n!\n! Yellow\n*.color3:      #e5b567\n*.color11:     #e5b567\n!\n! Blue\n*.color4:      #6c99bb\n*.color12:     #6c99bb\n!\n! Magenta\n*.color5:      #9f4e85\n*.color13:     #9f4e85\n!\n! Cyan\n*.color6:      #7dd6cf\n*.color14:     #7dd6cf\n!\n! White\n*.color7:      #d0d0d0\n*.color15:     #f5f5f5\n!\n! Bold, Italic, Underline\n*.colorBD:     #d0d0d0\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/AlienBlood",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #637d75\n*.background:  #0f1610\n*.cursorColor: #73fa91\n!\n! Black\n*.color0:      #112616\n*.color8:      #3c4812\n!\n! Red\n*.color1:      #7f2b27\n*.color9:      #e08009\n!\n! Green\n*.color2:      #2f7e25\n*.color10:     #18e000\n!\n! Yellow\n*.color3:      #717f24\n*.color11:     #bde000\n!\n! Blue\n*.color4:      #2f6a7f\n*.color12:     #00aae0\n!\n! Magenta\n*.color5:      #47587f\n*.color13:     #0058e0\n!\n! Cyan\n*.color6:      #327f77\n*.color14:     #00e0c4\n!\n! White\n*.color7:      #647d75\n*.color15:     #73fa91\n!\n! Bold, Italic, Underline\n*.colorBD:     #7afa87\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Argonaut",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #fffaf4\n*.background:  #0e1019\n*.cursorColor: #ff0018\n!\n! Black\n*.color0:      #232323\n*.color8:      #444444\n!\n! Red\n*.color1:      #ff000f\n*.color9:      #ff2740\n!\n! Green\n*.color2:      #8ce10b\n*.color10:     #abe15b\n!\n! Yellow\n*.color3:      #ffb900\n*.color11:     #ffd242\n!\n! Blue\n*.color4:      #008df8\n*.color12:     #0092ff\n!\n! Magenta\n*.color5:      #6d43a6\n*.color13:     #9a5feb\n!\n! Cyan\n*.color6:      #00d8eb\n*.color14:     #67fff0\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #9e9c9a\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Arthur",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ddeedd\n*.background:  #1c1c1c\n*.cursorColor: #e2bbef\n!\n! Black\n*.color0:      #3d352a\n*.color8:      #554444\n!\n! Red\n*.color1:      #cd5c5c\n*.color9:      #cc5533\n!\n! Green\n*.color2:      #86af80\n*.color10:     #88aa22\n!\n! Yellow\n*.color3:      #e8ae5b\n*.color11:     #ffa75d\n!\n! Blue\n*.color4:      #6495ed\n*.color12:     #87ceeb\n!\n! Magenta\n*.color5:      #deb887\n*.color13:     #996600\n!\n! Cyan\n*.color6:      #b0c4de\n*.color14:     #b0c4de\n!\n! White\n*.color7:      #bbaa99\n*.color15:     #ddccbb\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/AtelierSulphurpool",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #979db4\n*.background:  #202746\n*.cursorColor: #979db4\n!\n! Black\n*.color0:      #202746\n*.color8:      #6b7394\n!\n! Red\n*.color1:      #c94922\n*.color9:      #c76b29\n!\n! Green\n*.color2:      #ac9739\n*.color10:     #293256\n!\n! Yellow\n*.color3:      #c08b30\n*.color11:     #5e6687\n!\n! Blue\n*.color4:      #3d8fd1\n*.color12:     #898ea4\n!\n! Magenta\n*.color5:      #6679cc\n*.color13:     #dfe2f1\n!\n! Cyan\n*.color6:      #22a2c9\n*.color14:     #9c637a\n!\n! White\n*.color7:      #979db4\n*.color15:     #f5f7ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #979db4\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Atom",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c5c8c6\n*.background:  #161719\n*.cursorColor: #d0d0d0\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #fd5ff1\n*.color9:      #fd5ff1\n!\n! Green\n*.color2:      #87c38a\n*.color10:     #94fa36\n!\n! Yellow\n*.color3:      #ffd7b1\n*.color11:     #f5ffa8\n!\n! Blue\n*.color4:      #85befd\n*.color12:     #96cbfe\n!\n! Magenta\n*.color5:      #b9b6fc\n*.color13:     #b9b6fc\n!\n! Cyan\n*.color6:      #85befd\n*.color14:     #85befd\n!\n! White\n*.color7:      #e0e0e0\n*.color15:     #e0e0e0\n!\n! Bold, Italic, Underline\n*.colorBD:     #c5c8c6\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/AtomOneLight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #2a2c33\n*.background:  #f9f9f9\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #de3e35\n*.color9:      #de3e35\n!\n! Green\n*.color2:      #3f953a\n*.color10:     #3f953a\n!\n! Yellow\n*.color3:      #d2b67c\n*.color11:     #d2b67c\n!\n! Blue\n*.color4:      #2f5af3\n*.color12:     #2f5af3\n!\n! Magenta\n*.color5:      #950095\n*.color13:     #a00095\n!\n! Cyan\n*.color6:      #3f953a\n*.color14:     #3f953a\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #000000\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Base16 Default Dark",
    "content": "! Base16 Default Dark\n! Scheme: Chris Kempson (http://chriskempson.com)\n\n#define base00 #181818\n#define base01 #282828\n#define base02 #383838\n#define base03 #585858\n#define base04 #b8b8b8\n#define base05 #d8d8d8\n#define base06 #e8e8e8\n#define base07 #f8f8f8\n#define base08 #ab4642\n#define base09 #dc9656\n#define base0A #f7ca88\n#define base0B #a1b56c\n#define base0C #86c1b9\n#define base0D #7cafc2\n#define base0E #ba8baf\n#define base0F #a16946\n\n*.foreground:   base05\n#ifdef background_opacity\n*.background:   [background_opacity]base00\n#else\n*.background:   base00\n#endif\n*.cursorColor:  base05\n\n*.color0:       base00\n*.color1:       base08\n*.color2:       base0B\n*.color3:       base0A\n*.color4:       base0D\n*.color5:       base0E\n*.color6:       base0C\n*.color7:       base05\n\n*.color8:       base03\n*.color9:       base08\n*.color10:      base0B\n*.color11:      base0A\n*.color12:      base0D\n*.color13:      base0E\n*.color14:      base0C\n*.color15:      base07\n\n! Note: colors beyond 15 might not be loaded (e.g., xterm, urxvt),\n! use 'shell' template to set these if necessary\n*.color16:      base09\n*.color17:      base0F\n*.color18:      base01\n*.color19:      base02\n*.color20:      base04\n*.color21:      base06\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Batman",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #6f6f6f\n*.background:  #1b1d1e\n*.cursorColor: #fcef0c\n!\n! Black\n*.color0:      #1b1d1e\n*.color8:      #505354\n!\n! Red\n*.color1:      #e6dc44\n*.color9:      #fff78e\n!\n! Green\n*.color2:      #c8be46\n*.color10:     #fff27d\n!\n! Yellow\n*.color3:      #f4fd22\n*.color11:     #feed6c\n!\n! Blue\n*.color4:      #737174\n*.color12:     #919495\n!\n! Magenta\n*.color5:      #747271\n*.color13:     #9a9a9d\n!\n! Cyan\n*.color6:      #62605f\n*.color14:     #a3a3a6\n!\n! White\n*.color7:      #c6c5bf\n*.color15:     #dadbd6\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Belafonte Day",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #45373c\n*.background:  #d5ccba\n*.cursorColor: #45373c\n!\n! Black\n*.color0:      #20111b\n*.color8:      #5e5252\n!\n! Red\n*.color1:      #be100e\n*.color9:      #be100e\n!\n! Green\n*.color2:      #858162\n*.color10:     #858162\n!\n! Yellow\n*.color3:      #eaa549\n*.color11:     #eaa549\n!\n! Blue\n*.color4:      #426a79\n*.color12:     #426a79\n!\n! Magenta\n*.color5:      #97522c\n*.color13:     #97522c\n!\n! Cyan\n*.color6:      #989a9c\n*.color14:     #989a9c\n!\n! White\n*.color7:      #968c83\n*.color15:     #d5ccba\n!\n! Bold, Italic, Underline\n*.colorBD:     #45373c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Belafonte Night",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #968c83\n*.background:  #20111b\n*.cursorColor: #968c83\n!\n! Black\n*.color0:      #20111b\n*.color8:      #5e5252\n!\n! Red\n*.color1:      #be100e\n*.color9:      #be100e\n!\n! Green\n*.color2:      #858162\n*.color10:     #858162\n!\n! Yellow\n*.color3:      #eaa549\n*.color11:     #eaa549\n!\n! Blue\n*.color4:      #426a79\n*.color12:     #426a79\n!\n! Magenta\n*.color5:      #97522c\n*.color13:     #97522c\n!\n! Cyan\n*.color6:      #989a9c\n*.color14:     #989a9c\n!\n! White\n*.color7:      #968c83\n*.color15:     #d5ccba\n!\n! Bold, Italic, Underline\n*.colorBD:     #968c83\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/BirdsOfParadise",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e0dbb7\n*.background:  #2a1f1d\n*.cursorColor: #573d26\n!\n! Black\n*.color0:      #573d26\n*.color8:      #9b6c4a\n!\n! Red\n*.color1:      #be2d26\n*.color9:      #e84627\n!\n! Green\n*.color2:      #6ba18a\n*.color10:     #95d8ba\n!\n! Yellow\n*.color3:      #e99d2a\n*.color11:     #d0d150\n!\n! Blue\n*.color4:      #5a86ad\n*.color12:     #b8d3ed\n!\n! Magenta\n*.color5:      #ac80a6\n*.color13:     #d19ecb\n!\n! Cyan\n*.color6:      #74a6ad\n*.color14:     #93cfd7\n!\n! White\n*.color7:      #e0dbb7\n*.color15:     #fff9d5\n!\n! Bold, Italic, Underline\n*.colorBD:     #fff8d8\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Blazer",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d9e6f2\n*.background:  #0d1926\n*.cursorColor: #d9e6f2\n!\n! Black\n*.color0:      #000000\n*.color8:      #262626\n!\n! Red\n*.color1:      #b87a7a\n*.color9:      #dbbdbd\n!\n! Green\n*.color2:      #7ab87a\n*.color10:     #bddbbd\n!\n! Yellow\n*.color3:      #b8b87a\n*.color11:     #dbdbbd\n!\n! Blue\n*.color4:      #7a7ab8\n*.color12:     #bdbddb\n!\n! Magenta\n*.color5:      #b87ab8\n*.color13:     #dbbddb\n!\n! Cyan\n*.color6:      #7ab8b8\n*.color14:     #bddbdb\n!\n! White\n*.color7:      #d9d9d9\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Borland",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffff4e\n*.background:  #0000a4\n*.cursorColor: #ffa560\n!\n! Black\n*.color0:      #4f4f4f\n*.color8:      #7c7c7c\n!\n! Red\n*.color1:      #ff6c60\n*.color9:      #ffb6b0\n!\n! Green\n*.color2:      #a8ff60\n*.color10:     #ceffac\n!\n! Yellow\n*.color3:      #ffffb6\n*.color11:     #ffffcc\n!\n! Blue\n*.color4:      #96cbfe\n*.color12:     #b5dcff\n!\n! Magenta\n*.color5:      #ff73fd\n*.color13:     #ff9cfe\n!\n! Cyan\n*.color6:      #c6c5fe\n*.color14:     #dfdffe\n!\n! White\n*.color7:      #eeeeee\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffff4e\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Bright Lights",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b3c9d7\n*.background:  #191919\n*.cursorColor: #f34b00\n!\n! Black\n*.color0:      #191919\n*.color8:      #191919\n!\n! Red\n*.color1:      #ff355b\n*.color9:      #ff355b\n!\n! Green\n*.color2:      #b7e876\n*.color10:     #b7e876\n!\n! Yellow\n*.color3:      #ffc251\n*.color11:     #ffc251\n!\n! Blue\n*.color4:      #76d4ff\n*.color12:     #76d5ff\n!\n! Magenta\n*.color5:      #ba76e7\n*.color13:     #ba76e7\n!\n! Cyan\n*.color6:      #6cbfb5\n*.color14:     #6cbfb5\n!\n! White\n*.color7:      #c2c8d7\n*.color15:     #c2c8d7\n!\n! Bold, Italic, Underline\n*.colorBD:     #9fb3c1\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Broadcast",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e6e1dc\n*.background:  #2b2b2b\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #323232\n!\n! Red\n*.color1:      #da4939\n*.color9:      #ff7b6b\n!\n! Green\n*.color2:      #519f50\n*.color10:     #83d182\n!\n! Yellow\n*.color3:      #ffd24a\n*.color11:     #ffff7c\n!\n! Blue\n*.color4:      #6d9cbe\n*.color12:     #9fcef0\n!\n! Magenta\n*.color5:      #d0d0ff\n*.color13:     #ffffff\n!\n! Cyan\n*.color6:      #6e9cbe\n*.color14:     #a0cef0\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #e6e1dc\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Brogrammer",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d6dbe5\n*.background:  #131313\n*.cursorColor: #b9b9b9\n!\n! Black\n*.color0:      #1f1f1f\n*.color8:      #d6dbe5\n!\n! Red\n*.color1:      #f81118\n*.color9:      #de352e\n!\n! Green\n*.color2:      #2dc55e\n*.color10:     #1dd361\n!\n! Yellow\n*.color3:      #ecba0f\n*.color11:     #f3bd09\n!\n! Blue\n*.color4:      #2a84d2\n*.color12:     #1081d6\n!\n! Magenta\n*.color5:      #4e5ab7\n*.color13:     #5350b9\n!\n! Cyan\n*.color6:      #1081d6\n*.color14:     #0f7ddb\n!\n! White\n*.color7:      #d6dbe5\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #d6dbe5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/C64",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #7869c4\n*.background:  #40318d\n*.cursorColor: #7869c4\n!\n! Black\n*.color0:      #090300\n*.color8:      #000000\n!\n! Red\n*.color1:      #883932\n*.color9:      #883932\n!\n! Green\n*.color2:      #55a049\n*.color10:     #55a049\n!\n! Yellow\n*.color3:      #bfce72\n*.color11:     #bfce72\n!\n! Blue\n*.color4:      #40318d\n*.color12:     #40318d\n!\n! Magenta\n*.color5:      #8b3f96\n*.color13:     #8b3f96\n!\n! Cyan\n*.color6:      #67b6bd\n*.color14:     #67b6bd\n!\n! White\n*.color7:      #ffffff\n*.color15:     #f7f7f7\n!\n! Bold, Italic, Underline\n*.colorBD:     #a5a2a2\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/CLRS",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #262626\n*.background:  #ffffff\n*.cursorColor: #6fd3fc\n!\n! Black\n*.color0:      #000000\n*.color8:      #555753\n!\n! Red\n*.color1:      #f8282a\n*.color9:      #fb0416\n!\n! Green\n*.color2:      #328a5d\n*.color10:     #2cc631\n!\n! Yellow\n*.color3:      #fa701d\n*.color11:     #fdd727\n!\n! Blue\n*.color4:      #135cd0\n*.color12:     #1670ff\n!\n! Magenta\n*.color5:      #9f00bd\n*.color13:     #e900b0\n!\n! Cyan\n*.color6:      #33c3c1\n*.color14:     #3ad5ce\n!\n! White\n*.color7:      #b3b3b3\n*.color15:     #eeeeec\n!\n! Bold, Italic, Underline\n*.colorBD:     #1a1a1a\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Chalk",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d2d8d9\n*.background:  #2b2d2e\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #7d8b8f\n*.color8:      #888888\n!\n! Red\n*.color1:      #b23a52\n*.color9:      #f24840\n!\n! Green\n*.color2:      #789b6a\n*.color10:     #80c470\n!\n! Yellow\n*.color3:      #b9ac4a\n*.color11:     #ffeb62\n!\n! Blue\n*.color4:      #2a7fac\n*.color12:     #4196ff\n!\n! Magenta\n*.color5:      #bd4f5a\n*.color13:     #fc5275\n!\n! Cyan\n*.color6:      #44a799\n*.color14:     #53cdbd\n!\n! White\n*.color7:      #d2d8d9\n*.color15:     #d2d8d9\n!\n! Bold, Italic, Underline\n*.colorBD:     #ececec\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Chalkboard",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d9e6f2\n*.background:  #29262f\n*.cursorColor: #d9e6f2\n!\n! Black\n*.color0:      #000000\n*.color8:      #323232\n!\n! Red\n*.color1:      #c37372\n*.color9:      #dbaaaa\n!\n! Green\n*.color2:      #72c373\n*.color10:     #aadbaa\n!\n! Yellow\n*.color3:      #c2c372\n*.color11:     #dadbaa\n!\n! Blue\n*.color4:      #7372c3\n*.color12:     #aaaadb\n!\n! Magenta\n*.color5:      #c372c2\n*.color13:     #dbaada\n!\n! Cyan\n*.color6:      #72c2c3\n*.color14:     #aadadb\n!\n! White\n*.color7:      #d9d9d9\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #d96f5f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Ciapre",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #aea47a\n*.background:  #191c27\n*.cursorColor: #92805b\n!\n! Black\n*.color0:      #181818\n*.color8:      #555555\n!\n! Red\n*.color1:      #810009\n*.color9:      #ac3835\n!\n! Green\n*.color2:      #48513b\n*.color10:     #a6a75d\n!\n! Yellow\n*.color3:      #cc8b3f\n*.color11:     #dcdf7c\n!\n! Blue\n*.color4:      #576d8c\n*.color12:     #3097c6\n!\n! Magenta\n*.color5:      #724d7c\n*.color13:     #d33061\n!\n! Cyan\n*.color6:      #5c4f4b\n*.color14:     #f3dbb2\n!\n! White\n*.color7:      #aea47f\n*.color15:     #f4f4f4\n!\n! Bold, Italic, Underline\n*.colorBD:     #f4f4f4\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Cobalt Neon",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #8ff586\n*.background:  #142838\n*.cursorColor: #c4206f\n!\n! Black\n*.color0:      #142631\n*.color8:      #fff688\n!\n! Red\n*.color1:      #ff2320\n*.color9:      #d4312e\n!\n! Green\n*.color2:      #3ba5ff\n*.color10:     #8ff586\n!\n! Yellow\n*.color3:      #e9e75c\n*.color11:     #e9f06d\n!\n! Blue\n*.color4:      #8ff586\n*.color12:     #3c7dd2\n!\n! Magenta\n*.color5:      #781aa0\n*.color13:     #8230a7\n!\n! Cyan\n*.color6:      #8ff586\n*.color14:     #6cbc67\n!\n! White\n*.color7:      #ba46b2\n*.color15:     #8ff586\n!\n! Bold, Italic, Underline\n*.colorBD:     #248b70\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Cobalt2",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #132738\n*.cursorColor: #f0cc09\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff0000\n*.color9:      #f40e17\n!\n! Green\n*.color2:      #38de21\n*.color10:     #3bd01d\n!\n! Yellow\n*.color3:      #ffe50a\n*.color11:     #edc809\n!\n! Blue\n*.color4:      #1460d2\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #ff005d\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #00bbbb\n*.color14:     #6ae3fa\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #f7fcff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/CrayonPonyFish",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #68525a\n*.background:  #150707\n*.cursorColor: #68525a\n!\n! Black\n*.color0:      #2b1b1d\n*.color8:      #3d2b2e\n!\n! Red\n*.color1:      #91002b\n*.color9:      #c5255d\n!\n! Green\n*.color2:      #579524\n*.color10:     #8dff57\n!\n! Yellow\n*.color3:      #ab311b\n*.color11:     #c8381d\n!\n! Blue\n*.color4:      #8c87b0\n*.color12:     #cfc9ff\n!\n! Magenta\n*.color5:      #692f50\n*.color13:     #fc6cba\n!\n! Cyan\n*.color6:      #e8a866\n*.color14:     #ffceaf\n!\n! White\n*.color7:      #68525a\n*.color15:     #b0949d\n!\n! Bold, Italic, Underline\n*.colorBD:     #c8381d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Dark Pastel",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #000000\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff5555\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #55ff55\n*.color10:     #55ff55\n!\n! Yellow\n*.color3:      #ffff55\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #5555ff\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #ff55ff\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #55ffff\n*.color14:     #55ffff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ff5e7d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Darkside",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bababa\n*.background:  #222324\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #e8341c\n*.color9:      #e05a4f\n!\n! Green\n*.color2:      #68c256\n*.color10:     #77b869\n!\n! Yellow\n*.color3:      #f2d42c\n*.color11:     #efd64b\n!\n! Blue\n*.color4:      #1c98e8\n*.color12:     #387cd3\n!\n! Magenta\n*.color5:      #8e69c9\n*.color13:     #957bbe\n!\n! Cyan\n*.color6:      #1c98e8\n*.color14:     #3d97e2\n!\n! White\n*.color7:      #bababa\n*.color15:     #bababa\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Desert",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #333333\n*.cursorColor: #00ff00\n!\n! Black\n*.color0:      #4d4d4d\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff2b2b\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #98fb98\n*.color10:     #55ff55\n!\n! Yellow\n*.color3:      #f0e68c\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #cd853f\n*.color12:     #87ceff\n!\n! Magenta\n*.color5:      #ffdead\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #ffa0a0\n*.color14:     #ffd700\n!\n! White\n*.color7:      #f5deb3\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffd700\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/DimmedMonokai",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b9bcba\n*.background:  #1f1f1f\n*.cursorColor: #f83e19\n!\n! Black\n*.color0:      #3a3d43\n*.color8:      #888987\n!\n! Red\n*.color1:      #be3f48\n*.color9:      #fb001f\n!\n! Green\n*.color2:      #879a3b\n*.color10:     #0f722f\n!\n! Yellow\n*.color3:      #c5a635\n*.color11:     #c47033\n!\n! Blue\n*.color4:      #4f76a1\n*.color12:     #186de3\n!\n! Magenta\n*.color5:      #855c8d\n*.color13:     #fb0067\n!\n! Cyan\n*.color6:      #578fa4\n*.color14:     #2e706d\n!\n! White\n*.color7:      #b9bcba\n*.color15:     #fdffb9\n!\n! Bold, Italic, Underline\n*.colorBD:     #feffb2\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/DotGov",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ebebeb\n*.background:  #262c35\n*.cursorColor: #d9002f\n!\n! Black\n*.color0:      #191919\n*.color8:      #191919\n!\n! Red\n*.color1:      #bf091d\n*.color9:      #bf091d\n!\n! Green\n*.color2:      #3d9751\n*.color10:     #3d9751\n!\n! Yellow\n*.color3:      #f6bb34\n*.color11:     #f6bb34\n!\n! Blue\n*.color4:      #17b2e0\n*.color12:     #17b2e0\n!\n! Magenta\n*.color5:      #7830b0\n*.color13:     #7830b0\n!\n! Cyan\n*.color6:      #8bd2ed\n*.color14:     #8bd2ed\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #fbab19\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Dracula",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f8f8f2\n*.background:  #1e1f29\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff5555\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #50fa7b\n*.color10:     #50fa7b\n!\n! Yellow\n*.color3:      #f1fa8c\n*.color11:     #f1fa8c\n!\n! Blue\n*.color4:      #bd93f9\n*.color12:     #bd93f9\n!\n! Magenta\n*.color5:      #ff79c6\n*.color13:     #ff79c6\n!\n! Cyan\n*.color6:      #8be9fd\n*.color14:     #8be9fd\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Duotone Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b7a1ff\n*.background:  #1f1d27\n*.cursorColor: #ff9839\n!\n! Black\n*.color0:      #1f1d27\n*.color8:      #353147\n!\n! Red\n*.color1:      #d9393e\n*.color9:      #d9393e\n!\n! Green\n*.color2:      #2dcd73\n*.color10:     #2dcd73\n!\n! Yellow\n*.color3:      #d9b76e\n*.color11:     #d9b76e\n!\n! Blue\n*.color4:      #ffc284\n*.color12:     #ffc284\n!\n! Magenta\n*.color5:      #de8d40\n*.color13:     #de8d40\n!\n! Cyan\n*.color6:      #2488ff\n*.color14:     #2488ff\n!\n! White\n*.color7:      #b7a1ff\n*.color15:     #eae5ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #b7a2ff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/ENCOM",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #00a595\n*.background:  #000000\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #9f0000\n*.color9:      #ff0000\n!\n! Green\n*.color2:      #008b00\n*.color10:     #00ee00\n!\n! Yellow\n*.color3:      #ffd000\n*.color11:     #ffff00\n!\n! Blue\n*.color4:      #0081ff\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #bc00ca\n*.color13:     #ff00ff\n!\n! Cyan\n*.color6:      #008b8b\n*.color14:     #00cdcd\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #4cf1e1\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Earthsong",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e5c7a9\n*.background:  #292520\n*.cursorColor: #f6f7ec\n!\n! Black\n*.color0:      #121418\n*.color8:      #675f54\n!\n! Red\n*.color1:      #c94234\n*.color9:      #ff645a\n!\n! Green\n*.color2:      #85c54c\n*.color10:     #98e036\n!\n! Yellow\n*.color3:      #f5ae2e\n*.color11:     #e0d561\n!\n! Blue\n*.color4:      #1398b9\n*.color12:     #5fdaff\n!\n! Magenta\n*.color5:      #d0633d\n*.color13:     #ff9269\n!\n! Cyan\n*.color6:      #509552\n*.color14:     #84f088\n!\n! White\n*.color7:      #e5c6aa\n*.color15:     #f6f7ec\n!\n! Bold, Italic, Underline\n*.colorBD:     #f6f7ec\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Elemental",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #807a74\n*.background:  #22211d\n*.cursorColor: #facb80\n!\n! Black\n*.color0:      #3c3c30\n*.color8:      #555445\n!\n! Red\n*.color1:      #98290f\n*.color9:      #e0502a\n!\n! Green\n*.color2:      #479a43\n*.color10:     #61e070\n!\n! Yellow\n*.color3:      #7f7111\n*.color11:     #d69927\n!\n! Blue\n*.color4:      #497f7d\n*.color12:     #79d9d9\n!\n! Magenta\n*.color5:      #7f4e2f\n*.color13:     #cd7c54\n!\n! Cyan\n*.color6:      #387f58\n*.color14:     #59d599\n!\n! White\n*.color7:      #807974\n*.color15:     #fff1e9\n!\n! Bold, Italic, Underline\n*.colorBD:     #fae679\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Elementary",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #efefef\n*.background:  #181818\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #242424\n*.color8:      #4b4b4b\n!\n! Red\n*.color1:      #d71c15\n*.color9:      #fc1c18\n!\n! Green\n*.color2:      #5aa513\n*.color10:     #6bc219\n!\n! Yellow\n*.color3:      #fdb40c\n*.color11:     #fec80e\n!\n! Blue\n*.color4:      #063b8c\n*.color12:     #0955ff\n!\n! Magenta\n*.color5:      #e40038\n*.color13:     #fb0050\n!\n! Cyan\n*.color6:      #2595e1\n*.color14:     #3ea8fc\n!\n! White\n*.color7:      #efefef\n*.color15:     #8c00ec\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Espresso",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #323232\n*.cursorColor: #d6d6d6\n!\n! Black\n*.color0:      #353535\n*.color8:      #535353\n!\n! Red\n*.color1:      #d25252\n*.color9:      #f00c0c\n!\n! Green\n*.color2:      #a5c261\n*.color10:     #c2e075\n!\n! Yellow\n*.color3:      #ffc66d\n*.color11:     #e1e48b\n!\n! Blue\n*.color4:      #6c99bb\n*.color12:     #8ab7d9\n!\n! Magenta\n*.color5:      #d197d9\n*.color13:     #efb5f7\n!\n! Cyan\n*.color6:      #bed6ff\n*.color14:     #dcf4ff\n!\n! White\n*.color7:      #eeeeec\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Espresso Libre",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b8a898\n*.background:  #2a211c\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #555753\n!\n! Red\n*.color1:      #cc0000\n*.color9:      #ef2929\n!\n! Green\n*.color2:      #1a921c\n*.color10:     #9aff87\n!\n! Yellow\n*.color3:      #f0e53a\n*.color11:     #fffb5c\n!\n! Blue\n*.color4:      #0066ff\n*.color12:     #43a8ed\n!\n! Magenta\n*.color5:      #c5656b\n*.color13:     #ff818a\n!\n! Cyan\n*.color6:      #06989a\n*.color14:     #34e2e2\n!\n! White\n*.color7:      #d3d7cf\n*.color15:     #eeeeec\n!\n! Bold, Italic, Underline\n*.colorBD:     #d3c1af\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Fideloper",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dbdae0\n*.background:  #292f33\n*.cursorColor: #d4605a\n!\n! Black\n*.color0:      #292f33\n*.color8:      #092028\n!\n! Red\n*.color1:      #cb1e2d\n*.color9:      #d4605a\n!\n! Green\n*.color2:      #edb8ac\n*.color10:     #d4605a\n!\n! Yellow\n*.color3:      #b7ab9b\n*.color11:     #a86671\n!\n! Blue\n*.color4:      #2e78c2\n*.color12:     #7c85c4\n!\n! Magenta\n*.color5:      #c0236f\n*.color13:     #5c5db2\n!\n! Cyan\n*.color6:      #309186\n*.color14:     #819090\n!\n! White\n*.color7:      #eae3ce\n*.color15:     #fcf4df\n!\n! Bold, Italic, Underline\n*.colorBD:     #6b7c7c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/FirefoxDev",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #7c8fa4\n*.background:  #0e1011\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #002831\n*.color8:      #001e27\n!\n! Red\n*.color1:      #e63853\n*.color9:      #e1003f\n!\n! Green\n*.color2:      #5eb83c\n*.color10:     #1d9000\n!\n! Yellow\n*.color3:      #a57706\n*.color11:     #cd9409\n!\n! Blue\n*.color4:      #359ddf\n*.color12:     #006fc0\n!\n! Magenta\n*.color5:      #d75cff\n*.color13:     #a200da\n!\n! Cyan\n*.color6:      #4b73a2\n*.color14:     #005794\n!\n! White\n*.color7:      #dcdcdc\n*.color15:     #e2e2e2\n!\n! Bold, Italic, Underline\n*.colorBD:     #a7acb2\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Firewatch",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #9ba2b2\n*.background:  #1e2027\n*.cursorColor: #f6f7ec\n!\n! Black\n*.color0:      #585f6d\n*.color8:      #585f6d\n!\n! Red\n*.color1:      #d95360\n*.color9:      #d95360\n!\n! Green\n*.color2:      #5ab977\n*.color10:     #5ab977\n!\n! Yellow\n*.color3:      #dfb563\n*.color11:     #dfb563\n!\n! Blue\n*.color4:      #4d89c4\n*.color12:     #4c89c5\n!\n! Magenta\n*.color5:      #d55119\n*.color13:     #d55119\n!\n! Cyan\n*.color6:      #44a8b6\n*.color14:     #44a8b6\n!\n! White\n*.color7:      #e6e5ff\n*.color15:     #e6e5ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #e6e5ff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/FishTank",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ecf0fe\n*.background:  #232537\n*.cursorColor: #fecd5e\n!\n! Black\n*.color0:      #03073c\n*.color8:      #6c5b30\n!\n! Red\n*.color1:      #c6004a\n*.color9:      #da4b8a\n!\n! Green\n*.color2:      #acf157\n*.color10:     #dbffa9\n!\n! Yellow\n*.color3:      #fecd5e\n*.color11:     #fee6a9\n!\n! Blue\n*.color4:      #525fb8\n*.color12:     #b2befa\n!\n! Magenta\n*.color5:      #986f82\n*.color13:     #fda5cd\n!\n! Cyan\n*.color6:      #968763\n*.color14:     #a5bd86\n!\n! White\n*.color7:      #ecf0fc\n*.color15:     #f6ffec\n!\n! Bold, Italic, Underline\n*.colorBD:     #f6ffeb\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Flat",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #2cc55d\n*.background:  #002240\n*.cursorColor: #e5be0c\n!\n! Black\n*.color0:      #222d3f\n*.color8:      #212c3c\n!\n! Red\n*.color1:      #a82320\n*.color9:      #d4312e\n!\n! Green\n*.color2:      #32a548\n*.color10:     #2d9440\n!\n! Yellow\n*.color3:      #e58d11\n*.color11:     #e5be0c\n!\n! Blue\n*.color4:      #3167ac\n*.color12:     #3c7dd2\n!\n! Magenta\n*.color5:      #781aa0\n*.color13:     #8230a7\n!\n! Cyan\n*.color6:      #2c9370\n*.color14:     #35b387\n!\n! White\n*.color7:      #b0b6ba\n*.color15:     #e7eced\n!\n! Bold, Italic, Underline\n*.colorBD:     #e7eced\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Flatland",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b8dbef\n*.background:  #1d1f21\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #1d1d19\n*.color8:      #1d1d19\n!\n! Red\n*.color1:      #f18339\n*.color9:      #d22a24\n!\n! Green\n*.color2:      #9fd364\n*.color10:     #a7d42c\n!\n! Yellow\n*.color3:      #f4ef6d\n*.color11:     #ff8949\n!\n! Blue\n*.color4:      #5096be\n*.color12:     #61b9d0\n!\n! Magenta\n*.color5:      #695abc\n*.color13:     #695abc\n!\n! Cyan\n*.color6:      #d63865\n*.color14:     #d63865\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Floraverse",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dbd1b9\n*.background:  #0e0d15\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #08002e\n*.color8:      #331e4d\n!\n! Red\n*.color1:      #64002c\n*.color9:      #d02063\n!\n! Green\n*.color2:      #5d731a\n*.color10:     #b4ce59\n!\n! Yellow\n*.color3:      #cd751c\n*.color11:     #fac357\n!\n! Blue\n*.color4:      #1d6da1\n*.color12:     #40a4cf\n!\n! Magenta\n*.color5:      #b7077e\n*.color13:     #f12aae\n!\n! Cyan\n*.color6:      #42a38c\n*.color14:     #62caa8\n!\n! White\n*.color7:      #f3e0b8\n*.color15:     #fff5db\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/ForestBlue",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e2d8cd\n*.background:  #051519\n*.cursorColor: #9e9ecb\n!\n! Black\n*.color0:      #333333\n*.color8:      #3d3d3d\n!\n! Red\n*.color1:      #f8818e\n*.color9:      #fb3d66\n!\n! Green\n*.color2:      #92d3a2\n*.color10:     #6bb48d\n!\n! Yellow\n*.color3:      #1a8e63\n*.color11:     #30c85a\n!\n! Blue\n*.color4:      #8ed0ce\n*.color12:     #39a7a2\n!\n! Magenta\n*.color5:      #5e468c\n*.color13:     #7e62b3\n!\n! Cyan\n*.color6:      #31658c\n*.color14:     #6096bf\n!\n! White\n*.color7:      #e2d8cd\n*.color15:     #e2d8cd\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/FrontEndDelight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #adadad\n*.background:  #1b1c1d\n*.cursorColor: #cdcdcd\n!\n! Black\n*.color0:      #242526\n*.color8:      #5fac6d\n!\n! Red\n*.color1:      #f8511b\n*.color9:      #f74319\n!\n! Green\n*.color2:      #565747\n*.color10:     #74ec4c\n!\n! Yellow\n*.color3:      #fa771d\n*.color11:     #fdc325\n!\n! Blue\n*.color4:      #2c70b7\n*.color12:     #3393ca\n!\n! Magenta\n*.color5:      #f02e4f\n*.color13:     #e75e4f\n!\n! Cyan\n*.color6:      #3ca1a6\n*.color14:     #4fbce6\n!\n! White\n*.color7:      #adadad\n*.color15:     #8c735b\n!\n! Bold, Italic, Underline\n*.colorBD:     #cdcdcd\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/FunForrest",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dec165\n*.background:  #251200\n*.cursorColor: #e5591c\n!\n! Black\n*.color0:      #000000\n*.color8:      #7f6a55\n!\n! Red\n*.color1:      #d6262b\n*.color9:      #e55a1c\n!\n! Green\n*.color2:      #919c00\n*.color10:     #bfc65a\n!\n! Yellow\n*.color3:      #be8a13\n*.color11:     #ffcb1b\n!\n! Blue\n*.color4:      #4699a3\n*.color12:     #7cc9cf\n!\n! Magenta\n*.color5:      #8d4331\n*.color13:     #d26349\n!\n! Cyan\n*.color6:      #da8213\n*.color14:     #e6a96b\n!\n! White\n*.color7:      #ddc265\n*.color15:     #ffeaa3\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffeaa3\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Galaxy",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #1d2837\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #f9555f\n*.color9:      #fa8c8f\n!\n! Green\n*.color2:      #21b089\n*.color10:     #35bb9a\n!\n! Yellow\n*.color3:      #fef02a\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #589df6\n*.color12:     #589df6\n!\n! Magenta\n*.color5:      #944d95\n*.color13:     #e75699\n!\n! Cyan\n*.color6:      #1f9ee7\n*.color14:     #3979bc\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Github",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #3e3e3e\n*.background:  #f4f4f4\n*.cursorColor: #3f3f3f\n!\n! Black\n*.color0:      #3e3e3e\n*.color8:      #666666\n!\n! Red\n*.color1:      #970b16\n*.color9:      #de0000\n!\n! Green\n*.color2:      #07962a\n*.color10:     #87d5a2\n!\n! Yellow\n*.color3:      #f8eec7\n*.color11:     #f1d007\n!\n! Blue\n*.color4:      #003e8a\n*.color12:     #2e6cba\n!\n! Magenta\n*.color5:      #e94691\n*.color13:     #ffa29f\n!\n! Cyan\n*.color6:      #89d1ec\n*.color14:     #1cfafe\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #c95500\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Glacier",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #0c1115\n*.cursorColor: #6c6c6c\n!\n! Black\n*.color0:      #2e343c\n*.color8:      #404a55\n!\n! Red\n*.color1:      #bd0f2f\n*.color9:      #bd0f2f\n!\n! Green\n*.color2:      #35a770\n*.color10:     #49e998\n!\n! Yellow\n*.color3:      #fb9435\n*.color11:     #fddf6e\n!\n! Blue\n*.color4:      #1f5872\n*.color12:     #2a8bc1\n!\n! Magenta\n*.color5:      #bd2523\n*.color13:     #ea4727\n!\n! Cyan\n*.color6:      #778397\n*.color14:     #a0b6d3\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Grape",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #9f9fa1\n*.background:  #171423\n*.cursorColor: #a288f7\n!\n! Black\n*.color0:      #2d283f\n*.color8:      #59516a\n!\n! Red\n*.color1:      #ed2261\n*.color9:      #f0729a\n!\n! Green\n*.color2:      #1fa91b\n*.color10:     #53aa5e\n!\n! Yellow\n*.color3:      #8ddc20\n*.color11:     #b2dc87\n!\n! Blue\n*.color4:      #487df4\n*.color12:     #a9bcec\n!\n! Magenta\n*.color5:      #8d35c9\n*.color13:     #ad81c2\n!\n! Cyan\n*.color6:      #3bdeed\n*.color14:     #9de3eb\n!\n! White\n*.color7:      #9e9ea0\n*.color15:     #a288f7\n!\n! Bold, Italic, Underline\n*.colorBD:     #9f87ff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Grass",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #fff0a5\n*.background:  #13773d\n*.cursorColor: #8c2800\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #bb0000\n*.color9:      #bb0000\n!\n! Green\n*.color2:      #00bb00\n*.color10:     #00bb00\n!\n! Yellow\n*.color3:      #e7b000\n*.color11:     #e7b000\n!\n! Blue\n*.color4:      #0000a3\n*.color12:     #0000bb\n!\n! Magenta\n*.color5:      #950062\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #00bbbb\n*.color14:     #55ffff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffb03b\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Gruvbox Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e6d4a3\n*.background:  #1e1e1e\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #161819\n*.color8:      #7f7061\n!\n! Red\n*.color1:      #f73028\n*.color9:      #be0f17\n!\n! Green\n*.color2:      #aab01e\n*.color10:     #868715\n!\n! Yellow\n*.color3:      #f7b125\n*.color11:     #cc881a\n!\n! Blue\n*.color4:      #719586\n*.color12:     #377375\n!\n! Magenta\n*.color5:      #c77089\n*.color13:     #a04b73\n!\n! Cyan\n*.color6:      #7db669\n*.color14:     #578e57\n!\n! White\n*.color7:      #faefbb\n*.color15:     #e6d4a3\n!\n! Bold, Italic, Underline\n*.colorBD:     #978771\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Hardcore",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a0a0a0\n*.background:  #121212\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #1b1d1e\n*.color8:      #505354\n!\n! Red\n*.color1:      #f92672\n*.color9:      #ff669d\n!\n! Green\n*.color2:      #a6e22e\n*.color10:     #beed5f\n!\n! Yellow\n*.color3:      #fd971f\n*.color11:     #e6db74\n!\n! Blue\n*.color4:      #66d9ef\n*.color12:     #66d9ef\n!\n! Magenta\n*.color5:      #9e6ffe\n*.color13:     #9e6ffe\n!\n! Cyan\n*.color6:      #5e7175\n*.color14:     #a3babf\n!\n! White\n*.color7:      #ccccc6\n*.color15:     #f8f8f2\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Harper",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a8a49d\n*.background:  #010101\n*.cursorColor: #a8a49d\n!\n! Black\n*.color0:      #010101\n*.color8:      #726e6a\n!\n! Red\n*.color1:      #f8b63f\n*.color9:      #f8b63f\n!\n! Green\n*.color2:      #7fb5e1\n*.color10:     #7fb5e1\n!\n! Yellow\n*.color3:      #d6da25\n*.color11:     #d6da25\n!\n! Blue\n*.color4:      #489e48\n*.color12:     #489e48\n!\n! Magenta\n*.color5:      #b296c6\n*.color13:     #b296c6\n!\n! Cyan\n*.color6:      #f5bfd7\n*.color14:     #f5bfd7\n!\n! White\n*.color7:      #a8a49d\n*.color15:     #fefbea\n!\n! Bold, Italic, Underline\n*.colorBD:     #a8a49d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Highway",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ededed\n*.background:  #222225\n*.cursorColor: #e0d9b9\n!\n! Black\n*.color0:      #000000\n*.color8:      #5d504a\n!\n! Red\n*.color1:      #d00e18\n*.color9:      #f07e18\n!\n! Green\n*.color2:      #138034\n*.color10:     #b1d130\n!\n! Yellow\n*.color3:      #ffcb3e\n*.color11:     #fff120\n!\n! Blue\n*.color4:      #006bb3\n*.color12:     #4fc2fd\n!\n! Magenta\n*.color5:      #6b2775\n*.color13:     #de0071\n!\n! Cyan\n*.color6:      #384564\n*.color14:     #5d504a\n!\n! White\n*.color7:      #ededed\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #fff8d8\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Hipster Green",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #84c138\n*.background:  #100b05\n*.cursorColor: #23ff18\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #b6214a\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #86a93e\n!\n! Yellow\n*.color3:      #bfbf00\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #246eb2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #00db00\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Homebrew",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #00ff00\n*.background:  #000000\n*.cursorColor: #23ff18\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #990000\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #00d900\n!\n! Yellow\n*.color3:      #999900\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #0000b2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #00ff00\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Hurtado",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dbdbdb\n*.background:  #000000\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #575757\n*.color8:      #262626\n!\n! Red\n*.color1:      #ff1b00\n*.color9:      #d51d00\n!\n! Green\n*.color2:      #a5e055\n*.color10:     #a5df55\n!\n! Yellow\n*.color3:      #fbe74a\n*.color11:     #fbe84a\n!\n! Blue\n*.color4:      #496487\n*.color12:     #89beff\n!\n! Magenta\n*.color5:      #fd5ff1\n*.color13:     #c001c1\n!\n! Cyan\n*.color6:      #86e9fe\n*.color14:     #86eafe\n!\n! White\n*.color7:      #cbcccb\n*.color15:     #dbdbdb\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Hybrid",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b7bcba\n*.background:  #161719\n*.cursorColor: #b7bcba\n!\n! Black\n*.color0:      #2a2e33\n*.color8:      #1d1f22\n!\n! Red\n*.color1:      #b84d51\n*.color9:      #8d2e32\n!\n! Green\n*.color2:      #b3bf5a\n*.color10:     #798431\n!\n! Yellow\n*.color3:      #e4b55e\n*.color11:     #e58a50\n!\n! Blue\n*.color4:      #6e90b0\n*.color12:     #4b6b88\n!\n! Magenta\n*.color5:      #a17eac\n*.color13:     #6e5079\n!\n! Cyan\n*.color6:      #7fbfb4\n*.color14:     #4d7b74\n!\n! White\n*.color7:      #b5b9b6\n*.color15:     #5a626a\n!\n! Bold, Italic, Underline\n*.colorBD:     #b7bcba\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/IC_Green_PPL",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d9efd3\n*.background:  #3a3d3f\n*.cursorColor: #42ff58\n!\n! Black\n*.color0:      #1f1f1f\n*.color8:      #032710\n!\n! Red\n*.color1:      #fb002a\n*.color9:      #a7ff3f\n!\n! Green\n*.color2:      #339c24\n*.color10:     #9fff6d\n!\n! Yellow\n*.color3:      #659b25\n*.color11:     #d2ff6d\n!\n! Blue\n*.color4:      #149b45\n*.color12:     #72ffb5\n!\n! Magenta\n*.color5:      #53b82c\n*.color13:     #50ff3e\n!\n! Cyan\n*.color6:      #2cb868\n*.color14:     #22ff71\n!\n! White\n*.color7:      #e0ffef\n*.color15:     #daefd0\n!\n! Bold, Italic, Underline\n*.colorBD:     #9fff6d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/IC_Orange_PPL",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffcb83\n*.background:  #262626\n*.cursorColor: #fc531d\n!\n! Black\n*.color0:      #000000\n*.color8:      #6a4f2a\n!\n! Red\n*.color1:      #c13900\n*.color9:      #ff8c68\n!\n! Green\n*.color2:      #a4a900\n*.color10:     #f6ff40\n!\n! Yellow\n*.color3:      #caaf00\n*.color11:     #ffe36e\n!\n! Blue\n*.color4:      #bd6d00\n*.color12:     #ffbe55\n!\n! Magenta\n*.color5:      #fc5e00\n*.color13:     #fc874f\n!\n! Cyan\n*.color6:      #f79500\n*.color14:     #c69752\n!\n! White\n*.color7:      #ffc88a\n*.color15:     #fafaff\n!\n! Bold, Italic, Underline\n*.colorBD:     #fafaff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/IR_Black",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f1f1f1\n*.background:  #000000\n*.cursorColor: #808080\n!\n! Black\n*.color0:      #4f4f4f\n*.color8:      #7b7b7b\n!\n! Red\n*.color1:      #fa6c60\n*.color9:      #fcb6b0\n!\n! Green\n*.color2:      #a8ff60\n*.color10:     #cfffab\n!\n! Yellow\n*.color3:      #fffeb7\n*.color11:     #ffffcc\n!\n! Blue\n*.color4:      #96cafe\n*.color12:     #b5dcff\n!\n! Magenta\n*.color5:      #fa73fd\n*.color13:     #fb9cfe\n!\n! Cyan\n*.color6:      #c6c5fe\n*.color14:     #e0e0fe\n!\n! White\n*.color7:      #efedef\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Iceberg",
    "content": "! Iceberg\n! https://cocopon.github.io/iceberg.vim/\n*.foreground:  #c6c8d1\n*.background:  #161821\n*.cursorColor: #c6c8d1\n!\n! Black\n*.color0:      #1e2132\n*.color8:      #6b7089\n!\n! Red\n*.color1:      #e27878\n*.color9:      #e98989\n!\n! Green\n*.color2:      #b4be82\n*.color10:     #c0ca8e\n!\n! Yellow\n*.color3:      #e2a478\n*.color11:     #e9b189\n!\n! Blue\n*.color4:      #84a0c6\n*.color12:     #91acd1\n!\n! Magenta\n*.color5:      #a093c7\n*.color13:     #ada0d3\n!\n! Cyan\n*.color6:      #89b8c2\n*.color14:     #95c4ce\n!\n! White\n*.color7:      #c6c8d1\n*.color15:     #d2d4de\n!\n! Bold, Italic, Underline\n*.colorBD:     #c6c8d1\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Jackie Brown",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffcc2f\n*.background:  #2c1d16\n*.cursorColor: #23ff18\n!\n! Black\n*.color0:      #2c1d16\n*.color8:      #666666\n!\n! Red\n*.color1:      #ef5734\n*.color9:      #e50000\n!\n! Green\n*.color2:      #2baf2b\n*.color10:     #86a93e\n!\n! Yellow\n*.color3:      #bebf00\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #246eb2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #d05ec1\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00acee\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffcc2f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Japanesque",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f7f6ec\n*.background:  #1e1e1e\n*.cursorColor: #edcf4f\n!\n! Black\n*.color0:      #343935\n*.color8:      #595b59\n!\n! Red\n*.color1:      #cf3f61\n*.color9:      #d18fa6\n!\n! Green\n*.color2:      #7bb75b\n*.color10:     #767f2c\n!\n! Yellow\n*.color3:      #e9b32a\n*.color11:     #78592f\n!\n! Blue\n*.color4:      #4c9ad4\n*.color12:     #135979\n!\n! Magenta\n*.color5:      #a57fc4\n*.color13:     #604291\n!\n! Cyan\n*.color6:      #389aad\n*.color14:     #76bbca\n!\n! White\n*.color7:      #fafaf6\n*.color15:     #b2b5ae\n!\n! Bold, Italic, Underline\n*.colorBD:     #fffffa\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Jazz",
    "content": "!\n! Generated with :\n! XRDB2Xresources.py\n!\n*.foreground:  #3f3f3f\n*.background:  #f3f2f1\n*.cursorColor: #9acf9f\n!\n! Black\n*.color0:      #282c34\n*.color8:      #548962\n!\n! Red\n*.color1:      #e06c75\n*.color9:      #d19a66\n!\n! Green\n*.color2:      #668e3d\n*.color10:     #668e3d\n!\n! Yellow\n*.color3:      #c49041\n*.color11:     #c49041\n!\n! Blue\n*.color4:      #8c71bf\n*.color12:     #8c71bf\n!\n! Magenta\n*.color5:      #c678dd\n*.color13:     #c678dd\n!\n! Cyan\n*.color6:      #878b91\n*.color14:     #5e6091\n!\n! White\n*.color7:      #abb2bf\n*.color15:     #f2f7ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #33374c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Jellybeans",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dedede\n*.background:  #121212\n*.cursorColor: #ffa560\n!\n! Black\n*.color0:      #929292\n*.color8:      #bdbdbd\n!\n! Red\n*.color1:      #e27373\n*.color9:      #ffa1a1\n!\n! Green\n*.color2:      #94b979\n*.color10:     #bddeab\n!\n! Yellow\n*.color3:      #ffba7b\n*.color11:     #ffdca0\n!\n! Blue\n*.color4:      #97bedc\n*.color12:     #b1d8f6\n!\n! Magenta\n*.color5:      #e1c0fa\n*.color13:     #fbdaff\n!\n! Cyan\n*.color6:      #00988e\n*.color14:     #1ab2a8\n!\n! White\n*.color7:      #dedede\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/JetBrains Darcula",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #adadad\n*.background:  #202020\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #fa5355\n*.color9:      #fb7172\n!\n! Green\n*.color2:      #126e00\n*.color10:     #67ff4f\n!\n! Yellow\n*.color3:      #c2c300\n*.color11:     #ffff00\n!\n! Blue\n*.color4:      #4581eb\n*.color12:     #6d9df1\n!\n! Magenta\n*.color5:      #fa54ff\n*.color13:     #fb82ff\n!\n! Cyan\n*.color6:      #33c2c1\n*.color14:     #60d3d1\n!\n! White\n*.color7:      #adadad\n*.color15:     #eeeeee\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeee\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Kibble",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f7f7f7\n*.background:  #0e100a\n*.cursorColor: #9fda9c\n!\n! Black\n*.color0:      #4d4d4d\n*.color8:      #5a5a5a\n!\n! Red\n*.color1:      #c70031\n*.color9:      #f01578\n!\n! Green\n*.color2:      #29cf13\n*.color10:     #6ce05c\n!\n! Yellow\n*.color3:      #d8e30e\n*.color11:     #f3f79e\n!\n! Blue\n*.color4:      #3449d1\n*.color12:     #97a4f7\n!\n! Magenta\n*.color5:      #8400ff\n*.color13:     #c495f0\n!\n! Cyan\n*.color6:      #0798ab\n*.color14:     #68f2e0\n!\n! White\n*.color7:      #e2d1e3\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ca631e\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Later This Evening",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #959595\n*.background:  #222222\n*.cursorColor: #424242\n!\n! Black\n*.color0:      #2b2b2b\n*.color8:      #454747\n!\n! Red\n*.color1:      #d45a60\n*.color9:      #d3232f\n!\n! Green\n*.color2:      #afba67\n*.color10:     #aabb39\n!\n! Yellow\n*.color3:      #e5d289\n*.color11:     #e5be39\n!\n! Blue\n*.color4:      #a0bad6\n*.color12:     #6699d6\n!\n! Magenta\n*.color5:      #c092d6\n*.color13:     #ab53d6\n!\n! Cyan\n*.color6:      #91bfb7\n*.color14:     #5fc0ae\n!\n! White\n*.color7:      #3c3d3d\n*.color15:     #c1c2c2\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Lavandula",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #736e7d\n*.background:  #050014\n*.cursorColor: #8c91fa\n!\n! Black\n*.color0:      #230046\n*.color8:      #372d46\n!\n! Red\n*.color1:      #7d1625\n*.color9:      #e05167\n!\n! Green\n*.color2:      #337e6f\n*.color10:     #52e0c4\n!\n! Yellow\n*.color3:      #7f6f49\n*.color11:     #e0c386\n!\n! Blue\n*.color4:      #4f4a7f\n*.color12:     #8e87e0\n!\n! Magenta\n*.color5:      #5a3f7f\n*.color13:     #a776e0\n!\n! Cyan\n*.color6:      #58777f\n*.color14:     #9ad4e0\n!\n! White\n*.color7:      #736e7d\n*.color15:     #8c91fa\n!\n! Bold, Italic, Underline\n*.colorBD:     #8c91fa\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Light Owl",
    "content": "!\n! Light Owl\n! https://github.com/sdras/night-owl-vscode-theme\n!\n*.foreground:  #403f53\n*.background:  #fbfbfb\n*.cursorColor: #90a7b2\n!\n! Black\n*.color0:      #403f53\n*.color8:      #403f53\n!\n! Red\n*.color1:      #de3d3b\n*.color9:      #de3d3b\n!\n! Green\n*.color2:      #08916a\n*.color10:     #08916a\n!\n! Yellow\n*.color3:      #e0af02\n*.color11:     #daaa01\n!\n! Blue\n*.color4:      #288ed7\n*.color12:     #288ed7\n!\n! Magenta\n*.color5:      #d6438a\n*.color13:     #d6438a\n!\n! Cyan\n*.color6:      #2aa298\n*.color14:     #2aa298\n!\n! White\n*.color7:      #f0f0f0\n*.color15:     #979797\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/LiquidCarbon",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #afc2c2\n*.background:  #303030\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #ff3030\n*.color9:      #ff3030\n!\n! Green\n*.color2:      #559a70\n*.color10:     #559a70\n!\n! Yellow\n*.color3:      #ccac00\n*.color11:     #ccac00\n!\n! Blue\n*.color4:      #0099cc\n*.color12:     #0099cc\n!\n! Magenta\n*.color5:      #cc69c8\n*.color13:     #cc69c8\n!\n! Cyan\n*.color6:      #7ac4cc\n*.color14:     #7ac4cc\n!\n! White\n*.color7:      #bccccc\n*.color15:     #bccccc\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/LiquidCarbonTransparent",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #afc2c2\n*.background:  #000000\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #ff3030\n*.color9:      #ff3030\n!\n! Green\n*.color2:      #559a70\n*.color10:     #559a70\n!\n! Yellow\n*.color3:      #ccac00\n*.color11:     #ccac00\n!\n! Blue\n*.color4:      #0099cc\n*.color12:     #0099cc\n!\n! Magenta\n*.color5:      #cc69c8\n*.color13:     #cc69c8\n!\n! Cyan\n*.color6:      #7ac4cc\n*.color14:     #7ac4cc\n!\n! White\n*.color7:      #bccccc\n*.color15:     #bccccc\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/LiquidCarbonTransparentInverse",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #afc2c2\n*.background:  #000000\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #bccccd\n*.color8:      #ffffff\n!\n! Red\n*.color1:      #ff3030\n*.color9:      #ff3030\n!\n! Green\n*.color2:      #559a70\n*.color10:     #559a70\n!\n! Yellow\n*.color3:      #ccac00\n*.color11:     #ccac00\n!\n! Blue\n*.color4:      #0099cc\n*.color12:     #0099cc\n!\n! Magenta\n*.color5:      #cc69c8\n*.color13:     #cc69c8\n!\n! Cyan\n*.color6:      #7ac4cc\n*.color14:     #7ac4cc\n!\n! White\n*.color7:      #000000\n*.color15:     #000000\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Man Page",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #000000\n*.background:  #fef49c\n*.cursorColor: #7f7f7f\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #cc0000\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #00d900\n!\n! Yellow\n*.color3:      #999900\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #0000b2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #cccccc\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #000000\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Material",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #232322\n*.background:  #eaeaea\n*.cursorColor: #16afca\n!\n! Black\n*.color0:      #212121\n*.color8:      #424242\n!\n! Red\n*.color1:      #b7141f\n*.color9:      #e83b3f\n!\n! Green\n*.color2:      #457b24\n*.color10:     #7aba3a\n!\n! Yellow\n*.color3:      #f6981e\n*.color11:     #ffea2e\n!\n! Blue\n*.color4:      #134eb2\n*.color12:     #54a4f3\n!\n! Magenta\n*.color5:      #560088\n*.color13:     #aa4dbc\n!\n! Cyan\n*.color6:      #0e717c\n*.color14:     #26bbd1\n!\n! White\n*.color7:      #efefef\n*.color15:     #d9d9d9\n!\n! Bold, Italic, Underline\n*.colorBD:     #b7141f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/MaterialDark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e5e5e5\n*.background:  #232322\n*.cursorColor: #16afca\n!\n! Black\n*.color0:      #212121\n*.color8:      #424242\n!\n! Red\n*.color1:      #b7141f\n*.color9:      #e83b3f\n!\n! Green\n*.color2:      #457b24\n*.color10:     #7aba3a\n!\n! Yellow\n*.color3:      #f6981e\n*.color11:     #ffea2e\n!\n! Blue\n*.color4:      #134eb2\n*.color12:     #54a4f3\n!\n! Magenta\n*.color5:      #560088\n*.color13:     #aa4dbc\n!\n! Cyan\n*.color6:      #0e717c\n*.color14:     #26bbd1\n!\n! White\n*.color7:      #efefef\n*.color15:     #d9d9d9\n!\n! Bold, Italic, Underline\n*.colorBD:     #b7141f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Mathias",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bbbbbb\n*.background:  #000000\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #e52222\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #a6e32d\n*.color10:     #55ff55\n!\n! Yellow\n*.color3:      #fc951e\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #c48dff\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #fa2573\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #67d9f0\n*.color14:     #55ffff\n!\n! White\n*.color7:      #f2f2f2\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Medallion",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #cac296\n*.background:  #1d1908\n*.cursorColor: #d3ba30\n!\n! Black\n*.color0:      #000000\n*.color8:      #5e5219\n!\n! Red\n*.color1:      #b64c00\n*.color9:      #ff9149\n!\n! Green\n*.color2:      #7c8b16\n*.color10:     #b2ca3b\n!\n! Yellow\n*.color3:      #d3bd26\n*.color11:     #ffe54a\n!\n! Blue\n*.color4:      #616bb0\n*.color12:     #acb8ff\n!\n! Magenta\n*.color5:      #8c5a90\n*.color13:     #ffa0ff\n!\n! Cyan\n*.color6:      #916c25\n*.color14:     #ffbc51\n!\n! White\n*.color7:      #cac29a\n*.color15:     #fed698\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffd890\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Melange Dark",
    "content": "!\n! Melange Dark\n! https://github.com/savq/melange\n!\n*.foreground:  #ece1d7\n*.background:  #2a2520\n*.cursorColor: #ece1d7\n!\n! Black\n*.color0:      #352f2a\n*.color8:      #4d453e\n!\n! Red\n*.color1       #b65c60\n*.color9       #f17c64\n!\n! Green\n*.color2       #78997a\n*.color10      #99d59d\n!\n! Yellow\n*.color3       #ebc06d\n*.color11      #ebc06d\n!\n! Blue\n*.color4       #9aacce\n*.color12      #9aacce\n!\n! Magenta\n*.color5       #b380b0\n*.color13      #ce9bcb\n!\n! Cyan\n*.color6       #86a3a3\n*.color14      #88b3b2\n!\n! White\n*.color7       #a38d78\n*.color15      #c1a78e\n!\n! Bold, Italic, Underline\n*.colorBD:     #fff4ea\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Misterioso",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e1e1e0\n*.background:  #2d3743\n*.cursorColor: #000000\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff4242\n*.color9:      #ff3242\n!\n! Green\n*.color2:      #74af68\n*.color10:     #74cd68\n!\n! Yellow\n*.color3:      #ffad29\n*.color11:     #ffb929\n!\n! Blue\n*.color4:      #338f86\n*.color12:     #23d7d7\n!\n! Magenta\n*.color5:      #9414e6\n*.color13:     #ff37ff\n!\n! Cyan\n*.color6:      #23d7d7\n*.color14:     #00ede1\n!\n! White\n*.color7:      #e1e1e0\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #000000\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Molokai",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bbbbbb\n*.background:  #121212\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #121212\n*.color8:      #555555\n!\n! Red\n*.color1:      #fa2573\n*.color9:      #f6669d\n!\n! Green\n*.color2:      #98e123\n*.color10:     #b1e05f\n!\n! Yellow\n*.color3:      #dfd460\n*.color11:     #fff26d\n!\n! Blue\n*.color4:      #1080d0\n*.color12:     #00afff\n!\n! Magenta\n*.color5:      #8700ff\n*.color13:     #af87ff\n!\n! Cyan\n*.color6:      #43a8d0\n*.color14:     #51ceff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/MonaLisa",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f7d66a\n*.background:  #120b0d\n*.cursorColor: #c46c32\n!\n! Black\n*.color0:      #351b0e\n*.color8:      #874228\n!\n! Red\n*.color1:      #9b291c\n*.color9:      #ff4331\n!\n! Green\n*.color2:      #636232\n*.color10:     #b4b264\n!\n! Yellow\n*.color3:      #c36e28\n*.color11:     #ff9566\n!\n! Blue\n*.color4:      #515c5d\n*.color12:     #9eb2b4\n!\n! Magenta\n*.color5:      #9b1d29\n*.color13:     #ff5b6a\n!\n! Cyan\n*.color6:      #588056\n*.color14:     #8acd8f\n!\n! White\n*.color7:      #f7d75c\n*.color15:     #ffe598\n!\n! Bold, Italic, Underline\n*.colorBD:     #fee4a0\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Monokai Soda",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c4c5b5\n*.background:  #1a1a1a\n*.cursorColor: #f6f7ec\n!\n! Black\n*.color0:      #1a1a1a\n*.color8:      #625e4c\n!\n! Red\n*.color1:      #f4005f\n*.color9:      #f4005f\n!\n! Green\n*.color2:      #98e024\n*.color10:     #98e024\n!\n! Yellow\n*.color3:      #fa8419\n*.color11:     #e0d561\n!\n! Blue\n*.color4:      #9d65ff\n*.color12:     #9d65ff\n!\n! Magenta\n*.color5:      #f4005f\n*.color13:     #f4005f\n!\n! Cyan\n*.color6:      #58d1eb\n*.color14:     #58d1eb\n!\n! White\n*.color7:      #c4c5b5\n*.color15:     #f6f6ef\n!\n! Bold, Italic, Underline\n*.colorBD:     #c4c5b5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Monokai Vivid",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f9f9f9\n*.background:  #121212\n*.cursorColor: #fb0007\n!\n! Black\n*.color0:      #121212\n*.color8:      #838383\n!\n! Red\n*.color1:      #fa2934\n*.color9:      #f6669d\n!\n! Green\n*.color2:      #98e123\n*.color10:     #b1e05f\n!\n! Yellow\n*.color3:      #fff30a\n*.color11:     #fff26d\n!\n! Blue\n*.color4:      #0443ff\n*.color12:     #0443ff\n!\n! Magenta\n*.color5:      #f800f8\n*.color13:     #f200f6\n!\n! Cyan\n*.color6:      #01b6ed\n*.color14:     #51ceff\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/N0tch2k",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a0a0a0\n*.background:  #222222\n*.cursorColor: #aa9175\n!\n! Black\n*.color0:      #383838\n*.color8:      #474747\n!\n! Red\n*.color1:      #a95551\n*.color9:      #a97775\n!\n! Green\n*.color2:      #666666\n*.color10:     #8c8c8c\n!\n! Yellow\n*.color3:      #a98051\n*.color11:     #a99175\n!\n! Blue\n*.color4:      #657d3e\n*.color12:     #98bd5e\n!\n! Magenta\n*.color5:      #767676\n*.color13:     #a3a3a3\n!\n! Cyan\n*.color6:      #c9c9c9\n*.color14:     #dcdcdc\n!\n! White\n*.color7:      #d0b8a3\n*.color15:     #d8c8bb\n!\n! Bold, Italic, Underline\n*.colorBD:     #e5e5e5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Neopolitan",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #271f19\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #800000\n*.color9:      #800000\n!\n! Green\n*.color2:      #61ce3c\n*.color10:     #61ce3c\n!\n! Yellow\n*.color3:      #fbde2d\n*.color11:     #fbde2d\n!\n! Blue\n*.color4:      #253b76\n*.color12:     #253b76\n!\n! Magenta\n*.color5:      #ff0080\n*.color13:     #ff0080\n!\n! Cyan\n*.color6:      #8da6ce\n*.color14:     #8da6ce\n!\n! White\n*.color7:      #f8f8f8\n*.color15:     #f8f8f8\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Neutron",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e6e8ef\n*.background:  #1c1e22\n*.cursorColor: #f6f7ec\n!\n! Black\n*.color0:      #23252b\n*.color8:      #23252b\n!\n! Red\n*.color1:      #b54036\n*.color9:      #b54036\n!\n! Green\n*.color2:      #5ab977\n*.color10:     #5ab977\n!\n! Yellow\n*.color3:      #deb566\n*.color11:     #deb566\n!\n! Blue\n*.color4:      #6a7c93\n*.color12:     #6a7c93\n!\n! Magenta\n*.color5:      #a4799d\n*.color13:     #a4799d\n!\n! Cyan\n*.color6:      #3f94a8\n*.color14:     #3f94a8\n!\n! White\n*.color7:      #e6e8ef\n*.color15:     #ebedf2\n!\n! Bold, Italic, Underline\n*.colorBD:     #52606b\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Night Owl",
    "content": "!\n! Night Owl\n! https://github.com/sdras/night-owl-vscode-theme\n!\n*.foreground:  #d6deeb\n*.background:  #011627\n*.cursorColor: #80a4c2\n!\n! Black\n*.color0:      #011627\n*.color8:      #969696\n!\n! Red\n*.color1:      #ef5350\n*.color9:      #ef5350\n!\n! Green\n*.color2:      #22da6e\n*.color10:     #22da6e\n!\n! Yellow\n*.color3:      #addb67\n*.color11:     #ffeb95\n!\n! Blue\n*.color4:      #82aaff\n*.color12:     #82aaff\n!\n! Magenta\n*.color5:      #c792ea\n*.color13:     #c792ea\n!\n! Cyan\n*.color6:      #21c7a8\n*.color14:     #7fdbca\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/NightLion v1",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bbbbbb\n*.background:  #000000\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #4c4c4c\n*.color8:      #555555\n!\n! Red\n*.color1:      #bb0000\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #5fde8f\n*.color10:     #55ff55\n!\n! Yellow\n*.color3:      #f3f167\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #276bd8\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #bb00bb\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #00dadf\n*.color14:     #55ffff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #e3e3e3\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/NightLion v2",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bbbbbb\n*.background:  #171717\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #4c4c4c\n*.color8:      #555555\n!\n! Red\n*.color1:      #bb0000\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #04f623\n*.color10:     #7df71d\n!\n! Yellow\n*.color3:      #f3f167\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #64d0f0\n*.color12:     #62cbe8\n!\n! Magenta\n*.color5:      #ce6fdb\n*.color13:     #ff9bf5\n!\n! Cyan\n*.color6:      #00dadf\n*.color14:     #00ccd8\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #e3e3e3\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Nord",
    "content": "!\n!\n*.foreground:  #d8dee9\n*.background:  #2e3440\n*.cursorColor: #d8dee9\n!\n! Black\n*.color0:      #3b4252\n*.color8:      #373e4d\n!\n! Red\n*.color1:      #bf616a\n*.color9:      #94545d\n!\n! Green\n*.color2:      #a3be8c\n*.color10:     #809575\n!\n! Yellow\n*.color3:      #ebcb8b\n*.color11:     #b29e75\n!\n! Blue\n*.color4:      #81a1c1\n*.color12:     #68809a\n!\n! Magenta\n*.color5:      #b48ead\n*.color13:     #8c738c\n!\n! Cyan\n*.color6:      #88c0d0\n*.color14:     #6d96a5\n!\n! White\n*.color7:      #e5e9f0\n*.color15:     #aeb3bb\n!\n! Bold, Italic, Underline\n*.colorBD:     #a5abb6\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Novel",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #3b2322\n*.background:  #dfdbc3\n*.cursorColor: #73635a\n!\n! Black\n*.color0:      #000000\n*.color8:      #808080\n!\n! Red\n*.color1:      #cc0000\n*.color9:      #cc0000\n!\n! Green\n*.color2:      #009600\n*.color10:     #009600\n!\n! Yellow\n*.color3:      #d06b00\n*.color11:     #d06b00\n!\n! Blue\n*.color4:      #0000cc\n*.color12:     #0000cc\n!\n! Magenta\n*.color5:      #cc00cc\n*.color13:     #cc00cc\n!\n! Cyan\n*.color6:      #0087cc\n*.color14:     #0087cc\n!\n! White\n*.color7:      #cccccc\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #8e2a19\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Obsidian",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #cdcdcd\n*.background:  #283033\n*.cursorColor: #c0cad0\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #a60001\n*.color9:      #ff0003\n!\n! Green\n*.color2:      #00bb00\n*.color10:     #93c863\n!\n! Yellow\n*.color3:      #fecd22\n*.color11:     #fef874\n!\n! Blue\n*.color4:      #3a9bdb\n*.color12:     #a1d7ff\n!\n! Magenta\n*.color5:      #bb00bb\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #00bbbb\n*.color14:     #55ffff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Ocean",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #224fbc\n*.cursorColor: #7f7f7f\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #990000\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #00d900\n!\n! Yellow\n*.color3:      #999900\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #0000b2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/OceanicMaterial",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c2c8d7\n*.background:  #1c262b\n*.cursorColor: #b3b8c3\n!\n! Black\n*.color0:      #000000\n*.color8:      #777777\n!\n! Red\n*.color1:      #ee2b2a\n*.color9:      #dc5c60\n!\n! Green\n*.color2:      #40a33f\n*.color10:     #70be71\n!\n! Yellow\n*.color3:      #ffea2e\n*.color11:     #fff163\n!\n! Blue\n*.color4:      #1e80f0\n*.color12:     #54a4f3\n!\n! Magenta\n*.color5:      #8800a0\n*.color13:     #aa4dbc\n!\n! Cyan\n*.color6:      #16afca\n*.color14:     #42c7da\n!\n! White\n*.color7:      #a4a4a4\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Ollie",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #8a8dae\n*.background:  #222125\n*.cursorColor: #5b6ea7\n!\n! Black\n*.color0:      #000000\n*.color8:      #5b3725\n!\n! Red\n*.color1:      #ac2e31\n*.color9:      #ff3d48\n!\n! Green\n*.color2:      #31ac61\n*.color10:     #3bff99\n!\n! Yellow\n*.color3:      #ac4300\n*.color11:     #ff5e1e\n!\n! Blue\n*.color4:      #2d57ac\n*.color12:     #4488ff\n!\n! Magenta\n*.color5:      #b08528\n*.color13:     #ffc21d\n!\n! Cyan\n*.color6:      #1fa6ac\n*.color14:     #1ffaff\n!\n! White\n*.color7:      #8a8eac\n*.color15:     #5b6ea7\n!\n! Bold, Italic, Underline\n*.colorBD:     #5c6dac\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/OneHalfDark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dcdfe4\n*.background:  #282c34\n*.cursorColor: #a3b3cc\n!\n! Black\n*.color0:      #282c34\n*.color8:      #282c34\n!\n! Red\n*.color1:      #e06c75\n*.color9:      #e06c75\n!\n! Green\n*.color2:      #98c379\n*.color10:     #98c379\n!\n! Yellow\n*.color3:      #e5c07b\n*.color11:     #e5c07b\n!\n! Blue\n*.color4:      #61afef\n*.color12:     #61afef\n!\n! Magenta\n*.color5:      #c678dd\n*.color13:     #c678dd\n!\n! Cyan\n*.color6:      #56b6c2\n*.color14:     #56b6c2\n!\n! White\n*.color7:      #dcdfe4\n*.color15:     #dcdfe4\n!\n! Bold, Italic, Underline\n*.colorBD:     #abb2bf\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/OneHalfLight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #383a42\n*.background:  #fafafa\n*.cursorColor: #bfceff\n!\n! Black\n*.color0:      #383a42\n*.color8:      #4f525e\n!\n! Red\n*.color1:      #e45649\n*.color9:      #e06c75\n!\n! Green\n*.color2:      #50a14f\n*.color10:     #98c379\n!\n! Yellow\n*.color3:      #c18401\n*.color11:     #e5c07b\n!\n! Blue\n*.color4:      #0184bc\n*.color12:     #61afef\n!\n! Magenta\n*.color5:      #a626a4\n*.color13:     #c678dd\n!\n! Cyan\n*.color6:      #0997b3\n*.color14:     #56b6c2\n!\n! White\n*.color7:      #fafafa\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #abb2bf\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Pandora",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e1e1e1\n*.background:  #141e43\n*.cursorColor: #43d58e\n!\n! Black\n*.color0:      #000000\n*.color8:      #3f5648\n!\n! Red\n*.color1:      #ff4242\n*.color9:      #ff3242\n!\n! Green\n*.color2:      #74af68\n*.color10:     #74cd68\n!\n! Yellow\n*.color3:      #ffad29\n*.color11:     #ffb929\n!\n! Blue\n*.color4:      #338f86\n*.color12:     #23d7d7\n!\n! Magenta\n*.color5:      #9414e6\n*.color13:     #ff37ff\n!\n! Cyan\n*.color6:      #23d7d7\n*.color14:     #00ede1\n!\n! White\n*.color7:      #e2e2e2\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #67a672\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Paraiso Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a39e9b\n*.background:  #2f1e2e\n*.cursorColor: #a39e9b\n!\n! Black\n*.color0:      #2f1e2e\n*.color8:      #776e71\n!\n! Red\n*.color1:      #ef6155\n*.color9:      #ef6155\n!\n! Green\n*.color2:      #48b685\n*.color10:     #48b685\n!\n! Yellow\n*.color3:      #fec418\n*.color11:     #fec418\n!\n! Blue\n*.color4:      #06b6ef\n*.color12:     #06b6ef\n!\n! Magenta\n*.color5:      #815ba4\n*.color13:     #815ba4\n!\n! Cyan\n*.color6:      #5bc4bf\n*.color14:     #5bc4bf\n!\n! White\n*.color7:      #a39e9b\n*.color15:     #e7e9db\n!\n! Bold, Italic, Underline\n*.colorBD:     #a39e9b\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Parasio Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #a39e9b\n*.background:  #2f1e2e\n*.cursorColor: #a39e9b\n!\n! Black\n*.color0:      #2f1e2e\n*.color8:      #776e71\n!\n! Red\n*.color1:      #ef6155\n*.color9:      #ef6155\n!\n! Green\n*.color2:      #48b685\n*.color10:     #48b685\n!\n! Yellow\n*.color3:      #fec418\n*.color11:     #fec418\n!\n! Blue\n*.color4:      #06b6ef\n*.color12:     #06b6ef\n!\n! Magenta\n*.color5:      #815ba4\n*.color13:     #815ba4\n!\n! Cyan\n*.color6:      #5bc4bf\n*.color14:     #5bc4bf\n!\n! White\n*.color7:      #a39e9b\n*.color15:     #e7e9db\n!\n! Bold, Italic, Underline\n*.colorBD:     #a39e9b\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/PaulMillr",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f2f2f2\n*.background:  #000000\n*.cursorColor: #4d4d4d\n!\n! Black\n*.color0:      #2a2a2a\n*.color8:      #666666\n!\n! Red\n*.color1:      #ff0000\n*.color9:      #ff0080\n!\n! Green\n*.color2:      #79ff0f\n*.color10:     #66ff66\n!\n! Yellow\n*.color3:      #e7bf00\n*.color11:     #f3d64e\n!\n! Blue\n*.color4:      #396bd7\n*.color12:     #709aed\n!\n! Magenta\n*.color5:      #b449be\n*.color13:     #db67e6\n!\n! Cyan\n*.color6:      #66ccff\n*.color14:     #7adff2\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/PencilDark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f1f1f1\n*.background:  #212121\n*.cursorColor: #20bbfc\n!\n! Black\n*.color0:      #212121\n*.color8:      #424242\n!\n! Red\n*.color1:      #c30771\n*.color9:      #fb007a\n!\n! Green\n*.color2:      #10a778\n*.color10:     #5fd7af\n!\n! Yellow\n*.color3:      #a89c14\n*.color11:     #f3e430\n!\n! Blue\n*.color4:      #008ec4\n*.color12:     #20bbfc\n!\n! Magenta\n*.color5:      #523c79\n*.color13:     #6855de\n!\n! Cyan\n*.color6:      #20a5ba\n*.color14:     #4fb8cc\n!\n! White\n*.color7:      #d9d9d9\n*.color15:     #f1f1f1\n!\n! Bold, Italic, Underline\n*.colorBD:     #fb007a\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/PencilLight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #424242\n*.background:  #f1f1f1\n*.cursorColor: #20bbfc\n!\n! Black\n*.color0:      #212121\n*.color8:      #424242\n!\n! Red\n*.color1:      #c30771\n*.color9:      #fb007a\n!\n! Green\n*.color2:      #10a778\n*.color10:     #5fd7af\n!\n! Yellow\n*.color3:      #a89c14\n*.color11:     #f3e430\n!\n! Blue\n*.color4:      #008ec4\n*.color12:     #20bbfc\n!\n! Magenta\n*.color5:      #523c79\n*.color13:     #6855de\n!\n! Cyan\n*.color6:      #20a5ba\n*.color14:     #4fb8cc\n!\n! White\n*.color7:      #d9d9d9\n*.color15:     #f1f1f1\n!\n! Bold, Italic, Underline\n*.colorBD:     #fb007a\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Piatto Light",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #414141\n*.background:  #ffffff\n*.cursorColor: #5e77c8\n!\n! Black\n*.color0:      #414141\n*.color8:      #3f3f3f\n!\n! Red\n*.color1:      #b23771\n*.color9:      #db3365\n!\n! Green\n*.color2:      #66781e\n*.color10:     #829429\n!\n! Yellow\n*.color3:      #cd6f34\n*.color11:     #cd6f34\n!\n! Blue\n*.color4:      #3c5ea8\n*.color12:     #3c5ea8\n!\n! Magenta\n*.color5:      #a454b2\n*.color13:     #a454b2\n!\n! Cyan\n*.color6:      #66781e\n*.color14:     #829429\n!\n! White\n*.color7:      #ffffff\n*.color15:     #f2f2f2\n!\n! Bold, Italic, Underline\n*.colorBD:     #323232\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Pnevma",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d0d0d0\n*.background:  #1c1c1c\n*.cursorColor: #e4c9af\n!\n! Black\n*.color0:      #2f2e2d\n*.color8:      #4a4845\n!\n! Red\n*.color1:      #a36666\n*.color9:      #d78787\n!\n! Green\n*.color2:      #90a57d\n*.color10:     #afbea2\n!\n! Yellow\n*.color3:      #d7af87\n*.color11:     #e4c9af\n!\n! Blue\n*.color4:      #7fa5bd\n*.color12:     #a1bdce\n!\n! Magenta\n*.color5:      #c79ec4\n*.color13:     #d7beda\n!\n! Cyan\n*.color6:      #8adbb4\n*.color14:     #b1e7dd\n!\n! White\n*.color7:      #d0d0d0\n*.color15:     #efefef\n!\n! Bold, Italic, Underline\n*.colorBD:     #e5e5e5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Pro",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f2f2f2\n*.background:  #000000\n*.cursorColor: #4d4d4d\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #990000\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #00d900\n!\n! Yellow\n*.color3:      #999900\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #2009db\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Red Alert",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #762423\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #262626\n!\n! Red\n*.color1:      #d62e4e\n*.color9:      #e02553\n!\n! Green\n*.color2:      #71be6b\n*.color10:     #aff08c\n!\n! Yellow\n*.color3:      #beb86b\n*.color11:     #dfddb7\n!\n! Blue\n*.color4:      #489bee\n*.color12:     #65aaf1\n!\n! Magenta\n*.color5:      #e979d7\n*.color13:     #ddb7df\n!\n! Cyan\n*.color6:      #6bbeb8\n*.color14:     #b7dfdd\n!\n! White\n*.color7:      #d6d6d6\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ff9c44\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Red Sands",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d7c9a7\n*.background:  #7a251e\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff3f00\n*.color9:      #bb0000\n!\n! Green\n*.color2:      #00bb00\n*.color10:     #00bb00\n!\n! Yellow\n*.color3:      #e7b000\n*.color11:     #e7b000\n!\n! Blue\n*.color4:      #0072ff\n*.color12:     #0072ae\n!\n! Magenta\n*.color5:      #bb00bb\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #00bbbb\n*.color14:     #55ffff\n!\n! White\n*.color7:      #bbbbbb\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #dfbd22\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Relaxed",
    "content": "! special\n*.foreground:   #d8d8d8\n*.background:   #343a43\n*.cursorColor:  #d8d8d8\n\n! black\n*.color0:       #2c3037\n*.color8:       #626262\n\n! red\n*.color1:       #bb5653\n*.color9:       #c35956\n\n! green\n*.color2:       #909d62\n*.color10:      #9fab76\n\n! yellow\n*.color3:       #eac179\n*.color11:      #ecc179\n\n! blue\n*.color4:       #698698\n*.color12:      #7da9c7\n\n! magenta\n*.color5:       #b06597\n*.color13:      #ba6ca0\n\n! cyan\n*.color6:       #c9dfff\n*.color14:      #abbacf\n\n! white\n*.color7:       #d8d8d8\n*.color15:      #f7f7f7\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Rippedcasts",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #2b2b2b\n*.cursorColor: #7f7f7f\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #cdaf95\n*.color9:      #eecbad\n!\n! Green\n*.color2:      #a8ff60\n*.color10:     #bcee68\n!\n! Yellow\n*.color3:      #bfbb1f\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #75a5b0\n*.color12:     #86bdc9\n!\n! Magenta\n*.color5:      #ff73fd\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #5a647e\n*.color14:     #8c9bc4\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #d0f367\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Rose Pine",
    "content": "!\n! Rosé Pine\n! https://rosepinetheme.com/\n!\n*.foreground:  #e0def4\n*.background:  #191724\n*.cursorColor: #555169\n!\n! Black\n*.color0:      #26233a\n*.color8:      #6e6a86\n!\n! Red\n*.color1:      #eb6f92\n*.color9:      #eb6f92\n!\n! Green\n*.color2:      #31748f\n*.color10:     #31748f\n!\n! Yellow\n*.color3:      #f6c177\n*.color11:     #f6c177\n!\n! Blue\n*.color4:      #9ccfd8\n*.color12:     #9ccfd8\n\n! Magenta\n*.color5:      #c4a7e7\n*.color13:     #c4a7e7\n!\n! Cyan\n*.color6:      #ebbcba\n*.color14:     #ebbcba\n!\n! White\n*.color7:      #e0def4\n*.color15:     #e0def4\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Rose Pine Dawn",
    "content": "!\n! Rosé Pine Dawn\n! https://rosepinetheme.com/\n!\n*.foreground:  #575279\n*.background:  #faf4ed\n*.cursorColor: #9893a5\n!\n! Black\n*.color0:      #f2e9de\n*.color8:      #6e6a86\n!\n! Red\n*.color1:      #b4637a\n*.color9:      #b4637a\n!\n! Green\n*.color2:      #286983\n*.color10:     #286983\n!\n! Yellow\n*.color3:      #ea9d34\n*.color11:     #ea9d34\n!\n! Blue\n*.color4:      #56949f\n*.color12:     #56949f\n!\n! Magenta\n*.color5:      #907aa9\n*.color13:     #907aa9\n!\n! Cyan\n*.color6:      #d7827e\n*.color14:     #d7827e\n!\n! White\n*.color7:      #575279\n*.color15:     #575279\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Rose Pine Moon",
    "content": "!\n! Rosé Pine Moon\n! https://rosepinetheme.com/\n!\n*.foreground:  #e0def4\n*.background:  #232136\n*.cursorColor: #59546d\n!\n! Black\n*.color0:      #393552\n*.color8:      #817c9c\n!\n! Red\n*.color1:      #eb6f92\n*.color9:      #eb6f92\n!\n! Green\n*.color2:      #3e8fb0\n*.color10:     #3e8fb0\n!\n! Yellow\n*.color3:      #f6c177\n*.color11:     #f6c177\n!\n! Blue\n*.color4:      #9ccfd8\n*.color12:     #9ccfd8\n!\n! Magenta\n*.color5:      #c4a7e7\n*.color13:     #c4a7e7\n!\n! Cyan\n*.color6:      #ea9a97\n*.color14:     #ea9a97\n!\n! White\n*.color7:      #e0def4\n*.color15:     #e0def4\n!\n! Bold, Italic, Underline\n!*.colorBD:\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Royal",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #514968\n*.background:  #100815\n*.cursorColor: #524966\n!\n! Black\n*.color0:      #241f2b\n*.color8:      #312d3d\n!\n! Red\n*.color1:      #91284c\n*.color9:      #d5356c\n!\n! Green\n*.color2:      #23801c\n*.color10:     #2cd946\n!\n! Yellow\n*.color3:      #b49d27\n*.color11:     #fde83b\n!\n! Blue\n*.color4:      #6580b0\n*.color12:     #90baf9\n!\n! Magenta\n*.color5:      #674d96\n*.color13:     #a479e3\n!\n! Cyan\n*.color6:      #8aaabe\n*.color14:     #acd4eb\n!\n! White\n*.color7:      #524966\n*.color15:     #9e8cbd\n!\n! Bold, Italic, Underline\n*.colorBD:     #c8bd1d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Ryuuko",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ececec\n*.background:  #2c3941\n*.cursorColor: #ececec\n!\n! Black\n*.color0:      #2c3941\n*.color8:      #5d7079\n!\n! Red\n*.color1:      #865f5b\n*.color9:      #865f5b\n!\n! Green\n*.color2:      #66907d\n*.color10:     #66907d\n!\n! Yellow\n*.color3:      #b1a990\n*.color11:     #b1a990\n!\n! Blue\n*.color4:      #6a8e95\n*.color12:     #6a8e95\n!\n! Magenta\n*.color5:      #b18a73\n*.color13:     #b18a73\n!\n! Cyan\n*.color6:      #88b2ac\n*.color14:     #88b2ac\n!\n! White\n*.color7:      #ececec\n*.color15:     #ececec\n!\n! Bold, Italic, Underline\n*.colorBD:     #819090\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/SeaShells",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #deb88d\n*.background:  #09141b\n*.cursorColor: #fca02f\n!\n! Black\n*.color0:      #17384c\n*.color8:      #434b53\n!\n! Red\n*.color1:      #d15123\n*.color9:      #d48678\n!\n! Green\n*.color2:      #027c9b\n*.color10:     #628d98\n!\n! Yellow\n*.color3:      #fca02f\n*.color11:     #fdd39f\n!\n! Blue\n*.color4:      #1e4950\n*.color12:     #1bbcdd\n!\n! Magenta\n*.color5:      #68d4f1\n*.color13:     #bbe3ee\n!\n! Cyan\n*.color6:      #50a3b5\n*.color14:     #87acb4\n!\n! White\n*.color7:      #deb88d\n*.color15:     #fee4ce\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffe4cc\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Seafoam Pastel",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d4e7d4\n*.background:  #243435\n*.cursorColor: #57647a\n!\n! Black\n*.color0:      #757575\n*.color8:      #8a8a8a\n!\n! Red\n*.color1:      #825d4d\n*.color9:      #cf937a\n!\n! Green\n*.color2:      #728c62\n*.color10:     #98d9aa\n!\n! Yellow\n*.color3:      #ada16d\n*.color11:     #fae79d\n!\n! Blue\n*.color4:      #4d7b82\n*.color12:     #7ac3cf\n!\n! Magenta\n*.color5:      #8a7267\n*.color13:     #d6b2a1\n!\n! Cyan\n*.color6:      #729494\n*.color14:     #ade0e0\n!\n! White\n*.color7:      #e0e0e0\n*.color15:     #e0e0e0\n!\n! Bold, Italic, Underline\n*.colorBD:     #648890\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Seti",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #cacecd\n*.background:  #111213\n*.cursorColor: #e3bf21\n!\n! Black\n*.color0:      #323232\n*.color8:      #323232\n!\n! Red\n*.color1:      #c22832\n*.color9:      #c22832\n!\n! Green\n*.color2:      #8ec43d\n*.color10:     #8ec43d\n!\n! Yellow\n*.color3:      #e0c64f\n*.color11:     #e0c64f\n!\n! Blue\n*.color4:      #43a5d5\n*.color12:     #43a5d5\n!\n! Magenta\n*.color5:      #8b57b5\n*.color13:     #8b57b5\n!\n! Cyan\n*.color6:      #8ec43d\n*.color14:     #8ec43d\n!\n! White\n*.color7:      #eeeeee\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #cacecd\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Shaman",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #405555\n*.background:  #001015\n*.cursorColor: #4afcd6\n!\n! Black\n*.color0:      #012026\n*.color8:      #384451\n!\n! Red\n*.color1:      #b2302d\n*.color9:      #ff4242\n!\n! Green\n*.color2:      #00a941\n*.color10:     #2aea5e\n!\n! Yellow\n*.color3:      #5e8baa\n*.color11:     #8ed4fd\n!\n! Blue\n*.color4:      #449a86\n*.color12:     #61d5ba\n!\n! Magenta\n*.color5:      #00599d\n*.color13:     #1298ff\n!\n! Cyan\n*.color6:      #5d7e19\n*.color14:     #98d028\n!\n! White\n*.color7:      #405555\n*.color15:     #58fbd6\n!\n! Bold, Italic, Underline\n*.colorBD:     #53fbd6\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Slate",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #35b1d2\n*.background:  #222222\n*.cursorColor: #87d3c4\n!\n! Black\n*.color0:      #222222\n*.color8:      #ffffff\n!\n! Red\n*.color1:      #e2a8bf\n*.color9:      #ffcdd9\n!\n! Green\n*.color2:      #81d778\n*.color10:     #beffa8\n!\n! Yellow\n*.color3:      #c4c9c0\n*.color11:     #d0ccca\n!\n! Blue\n*.color4:      #264b49\n*.color12:     #7ab0d2\n!\n! Magenta\n*.color5:      #a481d3\n*.color13:     #c5a7d9\n!\n! Cyan\n*.color6:      #15ab9c\n*.color14:     #8cdfe0\n!\n! White\n*.color7:      #02c5e0\n*.color15:     #e0e0e0\n!\n! Bold, Italic, Underline\n*.colorBD:     #648890\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Smyck",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f7f7f7\n*.background:  #1b1b1b\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #7a7a7a\n!\n! Red\n*.color1:      #b84131\n*.color9:      #d6837c\n!\n! Green\n*.color2:      #7da900\n*.color10:     #c4f137\n!\n! Yellow\n*.color3:      #c4a500\n*.color11:     #fee14d\n!\n! Blue\n*.color4:      #62a3c4\n*.color12:     #8dcff0\n!\n! Magenta\n*.color5:      #ba8acc\n*.color13:     #f79aff\n!\n! Cyan\n*.color6:      #207383\n*.color14:     #6ad9cf\n!\n! White\n*.color7:      #a1a1a1\n*.color15:     #f7f7f7\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/SoftServer",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #99a3a2\n*.background:  #242626\n*.cursorColor: #d2e0de\n!\n! Black\n*.color0:      #000000\n*.color8:      #666c6c\n!\n! Red\n*.color1:      #a2686a\n*.color9:      #dd5c60\n!\n! Green\n*.color2:      #9aa56a\n*.color10:     #bfdf55\n!\n! Yellow\n*.color3:      #a3906a\n*.color11:     #deb360\n!\n! Blue\n*.color4:      #6b8fa3\n*.color12:     #62b1df\n!\n! Magenta\n*.color5:      #6a71a3\n*.color13:     #606edf\n!\n! Cyan\n*.color6:      #6ba58f\n*.color14:     #64e39c\n!\n! White\n*.color7:      #99a3a2\n*.color15:     #d2e0de\n!\n! Bold, Italic, Underline\n*.colorBD:     #d2e0de\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Solarized Darcula",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d2d8d9\n*.background:  #3d3f41\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #25292a\n*.color8:      #25292a\n!\n! Red\n*.color1:      #f24840\n*.color9:      #f24840\n!\n! Green\n*.color2:      #629655\n*.color10:     #629655\n!\n! Yellow\n*.color3:      #b68800\n*.color11:     #b68800\n!\n! Blue\n*.color4:      #2075c7\n*.color12:     #2075c7\n!\n! Magenta\n*.color5:      #797fd4\n*.color13:     #797fd4\n!\n! Cyan\n*.color6:      #15968d\n*.color14:     #15968d\n!\n! White\n*.color7:      #d2d8d9\n*.color15:     #d2d8d9\n!\n! Bold, Italic, Underline\n*.colorBD:     #ececec\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Solarized Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #708284\n*.background:  #001e27\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #002831\n*.color8:      #001e27\n!\n! Red\n*.color1:      #d11c24\n*.color9:      #bd3613\n!\n! Green\n*.color2:      #738a05\n*.color10:     #475b62\n!\n! Yellow\n*.color3:      #a57706\n*.color11:     #536870\n!\n! Blue\n*.color4:      #2176c7\n*.color12:     #708284\n!\n! Magenta\n*.color5:      #c61c6f\n*.color13:     #5956ba\n!\n! Cyan\n*.color6:      #259286\n*.color14:     #819090\n!\n! White\n*.color7:      #eae3cb\n*.color15:     #fcf4dc\n!\n! Bold, Italic, Underline\n*.colorBD:     #819090\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Solarized Dark - Patched",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #708284\n*.background:  #001e27\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #002831\n*.color8:      #475b62\n!\n! Red\n*.color1:      #d11c24\n*.color9:      #bd3613\n!\n! Green\n*.color2:      #738a05\n*.color10:     #475b62\n!\n! Yellow\n*.color3:      #a57706\n*.color11:     #536870\n!\n! Blue\n*.color4:      #2176c7\n*.color12:     #708284\n!\n! Magenta\n*.color5:      #c61c6f\n*.color13:     #5956ba\n!\n! Cyan\n*.color6:      #259286\n*.color14:     #819090\n!\n! White\n*.color7:      #eae3cb\n*.color15:     #fcf4dc\n!\n! Bold, Italic, Underline\n*.colorBD:     #819090\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Solarized Dark Higher Contrast",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #9cc2c3\n*.background:  #001e27\n*.cursorColor: #f34b00\n!\n! Black\n*.color0:      #002831\n*.color8:      #006488\n!\n! Red\n*.color1:      #d11c24\n*.color9:      #f5163b\n!\n! Green\n*.color2:      #6cbe6c\n*.color10:     #51ef84\n!\n! Yellow\n*.color3:      #a57706\n*.color11:     #b27e28\n!\n! Blue\n*.color4:      #2176c7\n*.color12:     #178ec8\n!\n! Magenta\n*.color5:      #c61c6f\n*.color13:     #e24d8e\n!\n! Cyan\n*.color6:      #259286\n*.color14:     #00b39e\n!\n! White\n*.color7:      #eae3cb\n*.color15:     #fcf4dc\n!\n! Bold, Italic, Underline\n*.colorBD:     #b5d5d3\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Solarized Light",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #536870\n*.background:  #fcf4dc\n*.cursorColor: #536870\n!\n! Black\n*.color0:      #002831\n*.color8:      #001e27\n!\n! Red\n*.color1:      #d11c24\n*.color9:      #bd3613\n!\n! Green\n*.color2:      #738a05\n*.color10:     #475b62\n!\n! Yellow\n*.color3:      #a57706\n*.color11:     #536870\n!\n! Blue\n*.color4:      #2176c7\n*.color12:     #708284\n!\n! Magenta\n*.color5:      #c61c6f\n*.color13:     #5956ba\n!\n! Cyan\n*.color6:      #259286\n*.color14:     #819090\n!\n! White\n*.color7:      #eae3cb\n*.color15:     #fcf4dc\n!\n! Bold, Italic, Underline\n*.colorBD:     #475b62\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/SpaceGray",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b3b8c3\n*.background:  #20242d\n*.cursorColor: #b3b8c3\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #b04b57\n*.color9:      #b04b57\n!\n! Green\n*.color2:      #87b379\n*.color10:     #87b379\n!\n! Yellow\n*.color3:      #e5c179\n*.color11:     #e5c179\n!\n! Blue\n*.color4:      #7d8fa4\n*.color12:     #7d8fa4\n!\n! Magenta\n*.color5:      #a47996\n*.color13:     #a47996\n!\n! Cyan\n*.color6:      #85a7a5\n*.color14:     #85a7a5\n!\n! White\n*.color7:      #b3b8c3\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #b3b8c3\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/SpaceGray Eighties",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #bdbaae\n*.background:  #222222\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #15171c\n*.color8:      #555555\n!\n! Red\n*.color1:      #ec5f67\n*.color9:      #ff6973\n!\n! Green\n*.color2:      #81a764\n*.color10:     #93d493\n!\n! Yellow\n*.color3:      #fec254\n*.color11:     #ffd256\n!\n! Blue\n*.color4:      #5486c0\n*.color12:     #4d84d1\n!\n! Magenta\n*.color5:      #bf83c1\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #57c2c1\n*.color14:     #83e9e4\n!\n! White\n*.color7:      #efece7\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/SpaceGray Eighties Dull",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c9c6bc\n*.background:  #222222\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #15171c\n*.color8:      #555555\n!\n! Red\n*.color1:      #b24a56\n*.color9:      #ec5f67\n!\n! Green\n*.color2:      #92b477\n*.color10:     #89e986\n!\n! Yellow\n*.color3:      #c6735a\n*.color11:     #fec254\n!\n! Blue\n*.color4:      #7c8fa5\n*.color12:     #5486c0\n!\n! Magenta\n*.color5:      #a5789e\n*.color13:     #bf83c1\n!\n! Cyan\n*.color6:      #80cdcb\n*.color14:     #58c2c1\n!\n! White\n*.color7:      #b3b8c3\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Spacedust",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ecf0c1\n*.background:  #0a1e24\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #6e5346\n*.color8:      #684c31\n!\n! Red\n*.color1:      #e35b00\n*.color9:      #ff8a3a\n!\n! Green\n*.color2:      #5cab96\n*.color10:     #aecab8\n!\n! Yellow\n*.color3:      #e3cd7b\n*.color11:     #ffc878\n!\n! Blue\n*.color4:      #0f548b\n*.color12:     #67a0ce\n!\n! Magenta\n*.color5:      #e35b00\n*.color13:     #ff8a3a\n!\n! Cyan\n*.color6:      #06afc7\n*.color14:     #83a7b4\n!\n! White\n*.color7:      #f0f1ce\n*.color15:     #fefff1\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Spiderman",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e3e3e3\n*.background:  #1b1d1e\n*.cursorColor: #2c3fff\n!\n! Black\n*.color0:      #1b1d1e\n*.color8:      #505354\n!\n! Red\n*.color1:      #e60813\n*.color9:      #ff0325\n!\n! Green\n*.color2:      #e22928\n*.color10:     #ff3338\n!\n! Yellow\n*.color3:      #e24756\n*.color11:     #fe3a35\n!\n! Blue\n*.color4:      #2c3fff\n*.color12:     #1d50ff\n!\n! Magenta\n*.color5:      #2435db\n*.color13:     #747cff\n!\n! Cyan\n*.color6:      #3256ff\n*.color14:     #6184ff\n!\n! White\n*.color7:      #fffef6\n*.color15:     #fffff9\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Spring",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #4d4d4c\n*.background:  #ffffff\n*.cursorColor: #4d4d4c\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #ff4d83\n*.color9:      #ff0021\n!\n! Green\n*.color2:      #1f8c3b\n*.color10:     #1fc231\n!\n! Yellow\n*.color3:      #1fc95b\n*.color11:     #d5b807\n!\n! Blue\n*.color4:      #1dd3ee\n*.color12:     #15a9fd\n!\n! Magenta\n*.color5:      #8959a8\n*.color13:     #8959a8\n!\n! Cyan\n*.color6:      #3e999f\n*.color14:     #3e999f\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #4d4d4c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Square",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #acacab\n*.background:  #1a1a1a\n*.cursorColor: #fcfbcc\n!\n! Black\n*.color0:      #050505\n*.color8:      #141414\n!\n! Red\n*.color1:      #e9897c\n*.color9:      #f99286\n!\n! Green\n*.color2:      #b6377d\n*.color10:     #c3f786\n!\n! Yellow\n*.color3:      #ecebbe\n*.color11:     #fcfbcc\n!\n! Blue\n*.color4:      #a9cdeb\n*.color12:     #b6defb\n!\n! Magenta\n*.color5:      #75507b\n*.color13:     #ad7fa8\n!\n! Cyan\n*.color6:      #c9caec\n*.color14:     #d7d9fc\n!\n! White\n*.color7:      #f2f2f2\n*.color15:     #e2e2e2\n!\n! Bold, Italic, Underline\n*.colorBD:     #e5e5e5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Sundried",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c9c9c9\n*.background:  #1a1818\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #302b2a\n*.color8:      #4d4e48\n!\n! Red\n*.color1:      #a7463d\n*.color9:      #aa000c\n!\n! Green\n*.color2:      #587744\n*.color10:     #128c21\n!\n! Yellow\n*.color3:      #9d602a\n*.color11:     #fc6a21\n!\n! Blue\n*.color4:      #485b98\n*.color12:     #7999f7\n!\n! Magenta\n*.color5:      #864651\n*.color13:     #fd8aa1\n!\n! Cyan\n*.color6:      #9c814f\n*.color14:     #fad484\n!\n! White\n*.color7:      #c9c9c9\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Symfonic",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #000000\n*.cursorColor: #dc322f\n!\n! Black\n*.color0:      #000000\n*.color8:      #1b1d21\n!\n! Red\n*.color1:      #dc322f\n*.color9:      #dc322f\n!\n! Green\n*.color2:      #56db3a\n*.color10:     #56db3a\n!\n! Yellow\n*.color3:      #ff8400\n*.color11:     #ff8400\n!\n! Blue\n*.color4:      #0084d4\n*.color12:     #0084d4\n!\n! Magenta\n*.color5:      #b729d9\n*.color13:     #b729d9\n!\n! Cyan\n*.color6:      #ccccff\n*.color14:     #ccccff\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ff8400\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tango",
    "content": "! special\n*.foreground:   #babdb6\n*.background:   #000000\n*.cursorColor:  #babdb6\n\n! black\n*.color0:       #2e3436\n*.color8:       #555753\n\n! red\n*.color1:       #cc0000\n*.color9:       #ef2929\n\n! green\n*.color2:       #4e9a06\n*.color10:      #8ae234\n\n! yellow\n*.color3:       #c4a000\n*.color11:      #fce94f\n\n! blue\n*.color4:       #3465a4\n*.color12:      #729fcf\n\n! magenta\n*.color5:       #75507b\n*.color13:      #ad7fa8\n\n! cyan\n*.color6:       #06989a\n*.color14:      #34e2e2\n\n! white\n*.color7:       #d3d7cf\n*.color15:      #eeeeec\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Teerb",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #d0d0d0\n*.background:  #262626\n*.cursorColor: #e4c9af\n!\n! Black\n*.color0:      #1c1c1c\n*.color8:      #1c1c1c\n!\n! Red\n*.color1:      #d68686\n*.color9:      #d68686\n!\n! Green\n*.color2:      #aed686\n*.color10:     #aed686\n!\n! Yellow\n*.color3:      #d7af87\n*.color11:     #e4c9af\n!\n! Blue\n*.color4:      #86aed6\n*.color12:     #86aed6\n!\n! Magenta\n*.color5:      #d6aed6\n*.color13:     #d6aed6\n!\n! Cyan\n*.color6:      #8adbb4\n*.color14:     #b1e7dd\n!\n! White\n*.color7:      #d0d0d0\n*.color15:     #efefef\n!\n! Bold, Italic, Underline\n*.colorBD:     #e5e5e5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Terminal Basic",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #000000\n*.background:  #ffffff\n*.cursorColor: #7f7f7f\n!\n! Black\n*.color0:      #000000\n*.color8:      #666666\n!\n! Red\n*.color1:      #990000\n*.color9:      #e50000\n!\n! Green\n*.color2:      #00a600\n*.color10:     #00d900\n!\n! Yellow\n*.color3:      #999900\n*.color11:     #e5e500\n!\n! Blue\n*.color4:      #0000b2\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #b200b2\n*.color13:     #e500e5\n!\n! Cyan\n*.color6:      #00a6b2\n*.color14:     #00e5e5\n!\n! White\n*.color7:      #bfbfbf\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #000000\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Thayer Bright",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #f8f8f8\n*.background:  #1b1d1e\n*.cursorColor: #fc971f\n!\n! Black\n*.color0:      #1b1d1e\n*.color8:      #505354\n!\n! Red\n*.color1:      #f92672\n*.color9:      #ff5995\n!\n! Green\n*.color2:      #4df840\n*.color10:     #b6e354\n!\n! Yellow\n*.color3:      #f4fd22\n*.color11:     #feed6c\n!\n! Blue\n*.color4:      #2757d6\n*.color12:     #3f78ff\n!\n! Magenta\n*.color5:      #8c54fe\n*.color13:     #9e6ffe\n!\n! Cyan\n*.color6:      #38c8b5\n*.color14:     #23cfd5\n!\n! White\n*.color7:      #ccccc6\n*.color15:     #f8f8f2\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/The Hulk",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b5b5b5\n*.background:  #1b1d1e\n*.cursorColor: #16b61b\n!\n! Black\n*.color0:      #1b1d1e\n*.color8:      #505354\n!\n! Red\n*.color1:      #269d1b\n*.color9:      #8dff2a\n!\n! Green\n*.color2:      #13ce30\n*.color10:     #48ff77\n!\n! Yellow\n*.color3:      #63e457\n*.color11:     #3afe16\n!\n! Blue\n*.color4:      #2525f5\n*.color12:     #506b95\n!\n! Magenta\n*.color5:      #641f74\n*.color13:     #72589d\n!\n! Cyan\n*.color6:      #378ca9\n*.color14:     #4085a6\n!\n! White\n*.color7:      #d9d8d1\n*.color15:     #e5e6e1\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/TokyoNight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c0caf5\n*.background:  #1a1b26\n*.cursorColor: #c0caf5\n!\n! Black\n*.color0:      #15161e\n*.color8:      #414868\n!\n! Red\n*.color1:      #f7768e\n*.color9:      #f7768e\n!\n! Green\n*.color2:      #9ece6a\n*.color10:     #9ece6a\n!\n! Yellow\n*.color3:      #e0af68\n*.color11:     #e0af68\n!\n! Blue\n*.color4:      #7aa2f7\n*.color12:     #7aa2f7\n!\n! Magenta\n*.color5:      #bb9af7\n*.color13:     #bb9af7\n!\n! Cyan\n*.color6:      #7dcfff\n*.color14:     #7dcfff\n!\n! White\n*.color7:      #a9b1d6\n*.color15:     #c0caf5\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeee\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/TokyoNight Day",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #3760bf\n*.background:  #e1e2e7\n*.cursorColor: #3760bf\n!\n! Black\n*.color0:      #e9e9ed\n*.color8:      #a1a6c5\n!\n! Red\n*.color1:      #f52a65\n*.color9:      #f52a65\n!\n! Green\n*.color2:      #587539\n*.color10:     #587539\n!\n! Yellow\n*.color3:      #8c6c3e\n*.color11:     #8c6c3e\n!\n! Blue\n*.color4:      #2e7de9\n*.color12:     #2e7de9\n!\n! Magenta\n*.color5:      #9854f1\n*.color13:     #9854f1\n!\n! Cyan\n*.color6:      #007197\n*.color14:     #007197\n!\n! White\n*.color7:      #6172b0\n*.color15:     #3760bf\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeee\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/TokyoNight Storm",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c0caf5\n*.background:  #24283b\n*.cursorColor: #c0caf5\n!\n! Black\n*.color0:      #1d202f\n*.color8:      #414868\n!\n! Red\n*.color1:      #f7768e\n*.color9:      #f7768e\n!\n! Green\n*.color2:      #9ece6a\n*.color10:     #9ece6a\n!\n! Yellow\n*.color3:      #e0af68\n*.color11:     #e0af68\n!\n! Blue\n*.color4:      #7aa2f7\n*.color12:     #7aa2f7\n!\n! Magenta\n*.color5:      #bb9af7\n*.color13:     #bb9af7\n!\n! Cyan\n*.color6:      #7dcfff\n*.color14:     #7dcfff\n!\n! White\n*.color7:      #a9b1d6\n*.color15:     #c0caf5\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeee\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tomorrow",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #4d4d4c\n*.background:  #ffffff\n*.cursorColor: #4d4d4c\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #c82829\n*.color9:      #c82829\n!\n! Green\n*.color2:      #718c00\n*.color10:     #718c00\n!\n! Yellow\n*.color3:      #eab700\n*.color11:     #eab700\n!\n! Blue\n*.color4:      #4271ae\n*.color12:     #4271ae\n!\n! Magenta\n*.color5:      #8959a8\n*.color13:     #8959a8\n!\n! Cyan\n*.color6:      #3e999f\n*.color14:     #3e999f\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #4d4d4c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tomorrow Night",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #c5c8c6\n*.background:  #1d1f21\n*.cursorColor: #c5c8c6\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #cc6666\n*.color9:      #cc6666\n!\n! Green\n*.color2:      #b5bd68\n*.color10:     #b5bd68\n!\n! Yellow\n*.color3:      #f0c674\n*.color11:     #f0c674\n!\n! Blue\n*.color4:      #81a2be\n*.color12:     #81a2be\n!\n! Magenta\n*.color5:      #b294bb\n*.color13:     #b294bb\n!\n! Cyan\n*.color6:      #8abeb7\n*.color14:     #8abeb7\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #c5c8c6\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tomorrow Night Blue",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #002451\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #ff9da4\n*.color9:      #ff9da4\n!\n! Green\n*.color2:      #d1f1a9\n*.color10:     #d1f1a9\n!\n! Yellow\n*.color3:      #ffeead\n*.color11:     #ffeead\n!\n! Blue\n*.color4:      #bbdaff\n*.color12:     #bbdaff\n!\n! Magenta\n*.color5:      #ebbbff\n*.color13:     #ebbbff\n!\n! Cyan\n*.color6:      #99ffff\n*.color14:     #99ffff\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tomorrow Night Bright",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #eaeaea\n*.background:  #000000\n*.cursorColor: #eaeaea\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #d54e53\n*.color9:      #d54e53\n!\n! Green\n*.color2:      #b9ca4a\n*.color10:     #b9ca4a\n!\n! Yellow\n*.color3:      #e7c547\n*.color11:     #e7c547\n!\n! Blue\n*.color4:      #7aa6da\n*.color12:     #7aa6da\n!\n! Magenta\n*.color5:      #c397d8\n*.color13:     #c397d8\n!\n! Cyan\n*.color6:      #70c0b1\n*.color14:     #70c0b1\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #eaeaea\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Tomorrow Night Eighties",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #cccccc\n*.background:  #2d2d2d\n*.cursorColor: #cccccc\n!\n! Black\n*.color0:      #000000\n*.color8:      #000000\n!\n! Red\n*.color1:      #f2777a\n*.color9:      #f2777a\n!\n! Green\n*.color2:      #99cc99\n*.color10:     #99cc99\n!\n! Yellow\n*.color3:      #ffcc66\n*.color11:     #ffcc66\n!\n! Blue\n*.color4:      #6699cc\n*.color12:     #6699cc\n!\n! Magenta\n*.color5:      #cc99cc\n*.color13:     #cc99cc\n!\n! Cyan\n*.color6:      #66cccc\n*.color14:     #66cccc\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #cccccc\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/ToyChest",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #31d07b\n*.background:  #24364b\n*.cursorColor: #d5d5d5\n!\n! Black\n*.color0:      #2c3f58\n*.color8:      #336889\n!\n! Red\n*.color1:      #be2d26\n*.color9:      #dd5944\n!\n! Green\n*.color2:      #1a9172\n*.color10:     #31d07b\n!\n! Yellow\n*.color3:      #db8e27\n*.color11:     #e7d84b\n!\n! Blue\n*.color4:      #325d96\n*.color12:     #34a6da\n!\n! Magenta\n*.color5:      #8a5edc\n*.color13:     #ae6bdc\n!\n! Cyan\n*.color6:      #35a08f\n*.color14:     #42c3ae\n!\n! White\n*.color7:      #23d183\n*.color15:     #d5d5d5\n!\n! Bold, Italic, Underline\n*.colorBD:     #2bff9f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Treehouse",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #786b53\n*.background:  #191919\n*.cursorColor: #fac814\n!\n! Black\n*.color0:      #321300\n*.color8:      #433626\n!\n! Red\n*.color1:      #b2270e\n*.color9:      #ed5d20\n!\n! Green\n*.color2:      #44a900\n*.color10:     #55f238\n!\n! Yellow\n*.color3:      #aa820c\n*.color11:     #f2b732\n!\n! Blue\n*.color4:      #58859a\n*.color12:     #85cfed\n!\n! Magenta\n*.color5:      #97363d\n*.color13:     #e14c5a\n!\n! Cyan\n*.color6:      #b25a1e\n*.color14:     #f07d14\n!\n! White\n*.color7:      #786b53\n*.color15:     #ffc800\n!\n! Bold, Italic, Underline\n*.colorBD:     #fac800\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Twilight",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffd4\n*.background:  #141414\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #141414\n*.color8:      #262626\n!\n! Red\n*.color1:      #c06d44\n*.color9:      #de7c4c\n!\n! Green\n*.color2:      #afb97a\n*.color10:     #ccd88c\n!\n! Yellow\n*.color3:      #c2a86c\n*.color11:     #e2c47e\n!\n! Blue\n*.color4:      #44474a\n*.color12:     #5a5e62\n!\n! Magenta\n*.color5:      #b4be7c\n*.color13:     #d0dc8e\n!\n! Cyan\n*.color6:      #778385\n*.color14:     #8a989b\n!\n! White\n*.color7:      #ffffd4\n*.color15:     #ffffd4\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffd4\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Ubuntu",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #eeeeec\n*.background:  #300a24\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #2e3436\n*.color8:      #555753\n!\n! Red\n*.color1:      #cc0000\n*.color9:      #ef2929\n!\n! Green\n*.color2:      #4e9a06\n*.color10:     #8ae234\n!\n! Yellow\n*.color3:      #c4a000\n*.color11:     #fce94f\n!\n! Blue\n*.color4:      #3465a4\n*.color12:     #729fcf\n!\n! Magenta\n*.color5:      #75507b\n*.color13:     #ad7fa8\n!\n! Cyan\n*.color6:      #06989a\n*.color14:     #34e2e2\n!\n! White\n*.color7:      #d3d7cf\n*.color15:     #eeeeec\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeec\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/UnderTheSea",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #011116\n*.cursorColor: #4afcd6\n!\n! Black\n*.color0:      #022026\n*.color8:      #384451\n!\n! Red\n*.color1:      #b2302d\n*.color9:      #ff4242\n!\n! Green\n*.color2:      #00a941\n*.color10:     #2aea5e\n!\n! Yellow\n*.color3:      #59819c\n*.color11:     #8ed4fd\n!\n! Blue\n*.color4:      #459a86\n*.color12:     #61d5ba\n!\n! Magenta\n*.color5:      #00599d\n*.color13:     #1298ff\n!\n! Cyan\n*.color6:      #5d7e19\n*.color14:     #98d028\n!\n! White\n*.color7:      #405555\n*.color15:     #58fbd6\n!\n! Bold, Italic, Underline\n*.colorBD:     #2bffd2\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Urple",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #877a9b\n*.background:  #1b1b23\n*.cursorColor: #a063eb\n!\n! Black\n*.color0:      #000000\n*.color8:      #5d3225\n!\n! Red\n*.color1:      #b0425b\n*.color9:      #ff6388\n!\n! Green\n*.color2:      #37a415\n*.color10:     #29e620\n!\n! Yellow\n*.color3:      #ad5c42\n*.color11:     #f08161\n!\n! Blue\n*.color4:      #564d9b\n*.color12:     #867aed\n!\n! Magenta\n*.color5:      #6c3ca1\n*.color13:     #a05eee\n!\n! Cyan\n*.color6:      #808080\n*.color14:     #eaeaea\n!\n! White\n*.color7:      #87799c\n*.color15:     #bfa3ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #a063eb\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Vaughn",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dcdccc\n*.background:  #25234f\n*.cursorColor: #ff5555\n!\n! Black\n*.color0:      #25234f\n*.color8:      #709080\n!\n! Red\n*.color1:      #705050\n*.color9:      #dca3a3\n!\n! Green\n*.color2:      #60b48a\n*.color10:     #60b48a\n!\n! Yellow\n*.color3:      #dfaf8f\n*.color11:     #f0dfaf\n!\n! Blue\n*.color4:      #5555ff\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #f08cc3\n*.color13:     #ec93d3\n!\n! Cyan\n*.color6:      #8cd0d3\n*.color14:     #93e0e3\n!\n! White\n*.color7:      #709080\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ff5e7d\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/VibrantInk",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #000000\n*.cursorColor: #ffffff\n!\n! Black\n*.color0:      #878787\n*.color8:      #555555\n!\n! Red\n*.color1:      #ff6600\n*.color9:      #ff0000\n!\n! Green\n*.color2:      #ccff04\n*.color10:     #00ff00\n!\n! Yellow\n*.color3:      #ffcc00\n*.color11:     #ffff00\n!\n! Blue\n*.color4:      #44b4cc\n*.color12:     #0000ff\n!\n! Magenta\n*.color5:      #9933cc\n*.color13:     #ff00ff\n!\n! Cyan\n*.color6:      #44b4cc\n*.color14:     #00ffff\n!\n! White\n*.color7:      #f5f5f5\n*.color15:     #e5e5e5\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Violet Dark",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #708284\n*.background:  #1c1d1f\n*.cursorColor: #708284\n!\n! Black\n*.color0:      #56595c\n*.color8:      #45484b\n!\n! Red\n*.color1:      #c94c22\n*.color9:      #bd3613\n!\n! Green\n*.color2:      #85981c\n*.color10:     #738a04\n!\n! Yellow\n*.color3:      #b4881d\n*.color11:     #a57705\n!\n! Blue\n*.color4:      #2e8bce\n*.color12:     #2176c7\n!\n! Magenta\n*.color5:      #d13a82\n*.color13:     #c61c6f\n!\n! Cyan\n*.color6:      #32a198\n*.color14:     #259286\n!\n! White\n*.color7:      #c9c6bd\n*.color15:     #c9c6bd\n!\n! Bold, Italic, Underline\n*.colorBD:     #475b62\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Violet Light",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #536870\n*.background:  #fcf4dc\n*.cursorColor: #536870\n!\n! Black\n*.color0:      #56595c\n*.color8:      #45484b\n!\n! Red\n*.color1:      #c94c22\n*.color9:      #bd3613\n!\n! Green\n*.color2:      #85981c\n*.color10:     #738a04\n!\n! Yellow\n*.color3:      #b4881d\n*.color11:     #a57705\n!\n! Blue\n*.color4:      #2e8bce\n*.color12:     #2176c7\n!\n! Magenta\n*.color5:      #d13a82\n*.color13:     #c61c6f\n!\n! Cyan\n*.color6:      #32a198\n*.color14:     #259286\n!\n! White\n*.color7:      #d3d0c9\n*.color15:     #c9c6bd\n!\n! Bold, Italic, Underline\n*.colorBD:     #475b62\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/WarmNeon",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #afdab6\n*.background:  #404040\n*.cursorColor: #30ff24\n!\n! Black\n*.color0:      #000000\n*.color8:      #fefcfc\n!\n! Red\n*.color1:      #e24346\n*.color9:      #e97071\n!\n! Green\n*.color2:      #39b13a\n*.color10:     #9cc090\n!\n! Yellow\n*.color3:      #dae145\n*.color11:     #ddda7a\n!\n! Blue\n*.color4:      #4261c5\n*.color12:     #7b91d6\n!\n! Magenta\n*.color5:      #f920fb\n*.color13:     #f674ba\n!\n! Cyan\n*.color6:      #2abbd4\n*.color14:     #5ed1e5\n!\n! White\n*.color7:      #d0b8a3\n*.color15:     #d8c8bb\n!\n! Bold, Italic, Underline\n*.colorBD:     #22ff0c\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Wez",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #b3b3b3\n*.background:  #000000\n*.cursorColor: #53ae71\n!\n! Black\n*.color0:      #000000\n*.color8:      #555555\n!\n! Red\n*.color1:      #cc5555\n*.color9:      #ff5555\n!\n! Green\n*.color2:      #55cc55\n*.color10:     #55ff55\n!\n! Yellow\n*.color3:      #cdcd55\n*.color11:     #ffff55\n!\n! Blue\n*.color4:      #5555cc\n*.color12:     #5555ff\n!\n! Magenta\n*.color5:      #cc55cc\n*.color13:     #ff55ff\n!\n! Cyan\n*.color6:      #7acaca\n*.color14:     #55ffff\n!\n! White\n*.color7:      #cccccc\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ff6347\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/WildCherry",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dafaff\n*.background:  #1f1726\n*.cursorColor: #dd00ff\n!\n! Black\n*.color0:      #000507\n*.color8:      #009cc9\n!\n! Red\n*.color1:      #d94085\n*.color9:      #da6bac\n!\n! Green\n*.color2:      #2ab250\n*.color10:     #f4dca5\n!\n! Yellow\n*.color3:      #ffd16f\n*.color11:     #eac066\n!\n! Blue\n*.color4:      #883cdc\n*.color12:     #308cba\n!\n! Magenta\n*.color5:      #ececec\n*.color13:     #ae636b\n!\n! Cyan\n*.color6:      #c1b8b7\n*.color14:     #ff919d\n!\n! White\n*.color7:      #fff8de\n*.color15:     #e4838d\n!\n! Bold, Italic, Underline\n*.colorBD:     #819090\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Wombat",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dedacf\n*.background:  #171717\n*.cursorColor: #bbbbbb\n!\n! Black\n*.color0:      #000000\n*.color8:      #313131\n!\n! Red\n*.color1:      #ff615a\n*.color9:      #f58c80\n!\n! Green\n*.color2:      #b1e969\n*.color10:     #ddf88f\n!\n! Yellow\n*.color3:      #ebd99c\n*.color11:     #eee5b2\n!\n! Blue\n*.color4:      #5da9f6\n*.color12:     #a5c7ff\n!\n! Magenta\n*.color5:      #e86aff\n*.color13:     #ddaaff\n!\n! Cyan\n*.color6:      #82fff7\n*.color14:     #b7fff9\n!\n! White\n*.color7:      #dedacf\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Wryan",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #999993\n*.background:  #101010\n*.cursorColor: #9e9ecb\n!\n! Black\n*.color0:      #333333\n*.color8:      #3d3d3d\n!\n! Red\n*.color1:      #8c4665\n*.color9:      #bf4d80\n!\n! Green\n*.color2:      #287373\n*.color10:     #53a6a6\n!\n! Yellow\n*.color3:      #7c7c99\n*.color11:     #9e9ecb\n!\n! Blue\n*.color4:      #395573\n*.color12:     #477ab3\n!\n! Magenta\n*.color5:      #5e468c\n*.color13:     #7e62b3\n!\n! Cyan\n*.color6:      #31658c\n*.color14:     #6096bf\n!\n! White\n*.color7:      #899ca1\n*.color15:     #c0c0c0\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffff\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/Zenburn",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #dcdccc\n*.background:  #3f3f3f\n*.cursorColor: #73635a\n!\n! Black\n*.color0:      #4d4d4d\n*.color8:      #709080\n!\n! Red\n*.color1:      #705050\n*.color9:      #dca3a3\n!\n! Green\n*.color2:      #60b48a\n*.color10:     #c3bf9f\n!\n! Yellow\n*.color3:      #f0dfaf\n*.color11:     #e0cf9f\n!\n! Blue\n*.color4:      #506070\n*.color12:     #94bff3\n!\n! Magenta\n*.color5:      #dc8cc3\n*.color13:     #ec93d3\n!\n! Cyan\n*.color6:      #8cd0d3\n*.color14:     #93e0e3\n!\n! White\n*.color7:      #dcdccc\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #dcdccc\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/ayu",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #e6e1cf\n*.background:  #0f1419\n*.cursorColor: #f29718\n!\n! Black\n*.color0:      #000000\n*.color8:      #323232\n!\n! Red\n*.color1:      #ff3333\n*.color9:      #ff6565\n!\n! Green\n*.color2:      #b8cc52\n*.color10:     #eafe84\n!\n! Yellow\n*.color3:      #e7c547\n*.color11:     #fff779\n!\n! Blue\n*.color4:      #36a3d9\n*.color12:     #68d5ff\n!\n! Magenta\n*.color5:      #f07178\n*.color13:     #ffa3aa\n!\n! Cyan\n*.color6:      #95e6cb\n*.color14:     #c7fffd\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #e6e1cf\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/ayu_light",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #5c6773\n*.background:  #fafafa\n*.cursorColor: #ff6a00\n!\n! Black\n*.color0:      #000000\n*.color8:      #323232\n!\n! Red\n*.color1:      #ff3333\n*.color9:      #ff6565\n!\n! Green\n*.color2:      #86b300\n*.color10:     #b8e532\n!\n! Yellow\n*.color3:      #f29718\n*.color11:     #ffc94a\n!\n! Blue\n*.color4:      #41a6d9\n*.color12:     #73d8ff\n!\n! Magenta\n*.color5:      #f07178\n*.color13:     #ffa3aa\n!\n! Cyan\n*.color6:      #4dbf99\n*.color14:     #7ff1cb\n!\n! White\n*.color7:      #ffffff\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #5c6773\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-cave-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #9f999b\n*.background:  #222021\n*.cursorColor: #996e00\n!\n! Black\n*.color0:      #222021\n*.color8:      #635f60\n!\n! Red\n*.color1:      #936c7a\n*.color9:      #ddaf3c\n!\n! Green\n*.color2:      #cca133\n*.color10:     #2f2d2e\n!\n! Yellow\n*.color3:      #ffcc4d\n*.color11:     #565254\n!\n! Blue\n*.color4:      #9c818b\n*.color12:     #706b6d\n!\n! Magenta\n*.color5:      #cca133\n*.color13:     #f0a8c1\n!\n! Cyan\n*.color6:      #d27998\n*.color14:     #c39622\n!\n! White\n*.color7:      #9f999b\n*.color15:     #ffebf2\n!\n! Bold, Italic, Underline\n*.colorBD:     #9f999b\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-desert-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #ada594\n*.background:  #292724\n*.cursorColor: #bc672f\n!\n! Black\n*.color0:      #292724\n*.color8:      #7e7767\n!\n! Red\n*.color1:      #816f4b\n*.color9:      #f29d63\n!\n! Green\n*.color2:      #ec9255\n*.color10:     #3d3a34\n!\n! Yellow\n*.color3:      #ffb380\n*.color11:     #615c51\n!\n! Blue\n*.color4:      #957e50\n*.color12:     #908774\n!\n! Magenta\n*.color5:      #ec9255\n*.color13:     #ddcba6\n!\n! Cyan\n*.color6:      #ac8e53\n*.color14:     #e58748\n!\n! White\n*.color7:      #ada594\n*.color15:     #f2ead9\n!\n! Bold, Italic, Underline\n*.colorBD:     #ada594\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-drawbridge-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #9094a7\n*.background:  #1b1f32\n*.cursorColor: #289dbd\n!\n! Black\n*.color0:      #1b1f32\n*.color8:      #51587b\n!\n! Red\n*.color1:      #627af4\n*.color9:      #75d5f0\n!\n! Green\n*.color2:      #67c9e4\n*.color10:     #252a41\n!\n! Yellow\n*.color3:      #99e9ff\n*.color11:     #444b6f\n!\n! Blue\n*.color4:      #7289fd\n*.color12:     #5e6587\n!\n! Magenta\n*.color5:      #67c9e4\n*.color13:     #c3cdfe\n!\n! Cyan\n*.color6:      #8b9efd\n*.color14:     #5cbcd6\n!\n! White\n*.color7:      #9094a7\n*.color15:     #e1e6ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #9094a7\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-evening-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #a4a1b5\n*.background:  #2a2734\n*.cursorColor: #b37537\n!\n! Black\n*.color0:      #2a2734\n*.color8:      #6c6783\n!\n! Red\n*.color1:      #8a75f5\n*.color9:      #ffb870\n!\n! Green\n*.color2:      #ffad5c\n*.color10:     #363342\n!\n! Yellow\n*.color3:      #ffcc99\n*.color11:     #545167\n!\n! Blue\n*.color4:      #9a86fd\n*.color12:     #787391\n!\n! Magenta\n*.color5:      #ffad5c\n*.color13:     #d9d2fe\n!\n! Cyan\n*.color6:      #afa0fe\n*.color14:     #ffa142\n!\n! White\n*.color7:      #a4a1b5\n*.color15:     #eeebff\n!\n! Bold, Italic, Underline\n*.colorBD:     #a4a1b5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-forest-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #a1b5a1\n*.background:  #2a2d2a\n*.cursorColor: #656b47\n!\n! Black\n*.color0:      #2a2d2a\n*.color8:      #535f53\n!\n! Red\n*.color1:      #5c705c\n*.color9:      #cbe25a\n!\n! Green\n*.color2:      #bfd454\n*.color10:     #353b35\n!\n! Yellow\n*.color3:      #e5fb79\n*.color11:     #485148\n!\n! Blue\n*.color4:      #687d68\n*.color12:     #5e6e5e\n!\n! Magenta\n*.color5:      #bfd454\n*.color13:     #c8e4c8\n!\n! Cyan\n*.color6:      #8fae8f\n*.color14:     #b1c44f\n!\n! White\n*.color7:      #a1b5a1\n*.color15:     #f0fff0\n!\n! Bold, Italic, Underline\n*.colorBD:     #a1b5a1\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-heath-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #9e999f\n*.background:  #222022\n*.cursorColor: #995900\n!\n! Black\n*.color0:      #222022\n*.color8:      #635f63\n!\n! Red\n*.color1:      #8f6c93\n*.color9:      #d9b98c\n!\n! Green\n*.color2:      #cc8c33\n*.color10:     #2f2d2f\n!\n! Yellow\n*.color3:      #ffd599\n*.color11:     #575158\n!\n! Blue\n*.color4:      #9a819c\n*.color12:     #6f6b70\n!\n! Magenta\n*.color5:      #cc8c33\n*.color13:     #eaa8f0\n!\n! Cyan\n*.color6:      #cb79d2\n*.color14:     #c38022\n!\n! White\n*.color7:      #9e999f\n*.color15:     #fdebff\n!\n! Bold, Italic, Underline\n*.colorBD:     #9e999f\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-heath-light",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #575158\n*.background:  #fbfaf9\n*.cursorColor: #eaa8f0\n!\n! Black\n*.color0:      #222022\n*.color8:      #635f63\n!\n! Red\n*.color1:      #8f6c93\n*.color9:      #d9b98c\n!\n! Green\n*.color2:      #cc8c33\n*.color10:     #2f2d2f\n!\n! Yellow\n*.color3:      #ffd599\n*.color11:     #575158\n!\n! Blue\n*.color4:      #9a819c\n*.color12:     #6f6b70\n!\n! Magenta\n*.color5:      #b87414\n*.color13:     #eaa8f0\n!\n! Cyan\n*.color6:      #cb79d2\n*.color14:     #c38022\n!\n! White\n*.color7:      #9e999f\n*.color15:     #fbfaf9\n!\n! Bold, Italic, Underline\n*.colorBD:     #575158\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-lake-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #7ba8b7\n*.background:  #192d34\n*.cursorColor: #84740b\n!\n! Black\n*.color0:      #192d34\n*.color8:      #3d6876\n!\n! Red\n*.color1:      #3e91ac\n*.color9:      #d6c65c\n!\n! Green\n*.color2:      #cbbb4d\n*.color10:     #223c44\n!\n! Yellow\n*.color3:      #ffeb66\n*.color11:     #335966\n!\n! Blue\n*.color4:      #499fbc\n*.color12:     #467686\n!\n! Magenta\n*.color5:      #cbbb4d\n*.color13:     #a5d8e9\n!\n! Cyan\n*.color6:      #62b1cb\n*.color14:     #c4b031\n!\n! White\n*.color7:      #7ba8b7\n*.color15:     #e1f7ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #7ba8b7\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-meadow-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #7b9eb7\n*.background:  #192834\n*.cursorColor: #4d8217\n!\n! Black\n*.color0:      #192834\n*.color8:      #3d5e76\n!\n! Red\n*.color1:      #277fbe\n*.color9:      #8cdd3c\n!\n! Green\n*.color2:      #80bf40\n*.color10:     #223644\n!\n! Yellow\n*.color3:      #a6f655\n*.color11:     #335166\n!\n! Blue\n*.color4:      #4299d7\n*.color12:     #466b86\n!\n! Magenta\n*.color5:      #80bf40\n*.color13:     #afddfe\n!\n! Cyan\n*.color6:      #47adf5\n*.color14:     #73b234\n!\n! White\n*.color7:      #7b9eb7\n*.color15:     #d1ecff\n!\n! Bold, Italic, Underline\n*.colorBD:     #7b9eb7\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-morning-light",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #4f5664\n*.background:  #faf8f5\n*.cursorColor: #b7c9eb\n!\n! Black\n*.color0:      #232834\n*.color8:      #656e81\n!\n! Red\n*.color1:      #1659df\n*.color9:      #c6b28b\n!\n! Green\n*.color2:      #b29762\n*.color10:     #31363f\n!\n! Yellow\n*.color3:      #e5ddcd\n*.color11:     #4f5664\n!\n! Blue\n*.color4:      #3d75e6\n*.color12:     #707a8f\n!\n! Magenta\n*.color5:      #896724\n*.color13:     #b7c9eb\n!\n! Cyan\n*.color6:      #728fcb\n*.color14:     #9a7c42\n!\n! White\n*.color7:      #8d95a5\n*.color15:     #faf8f5\n!\n! Bold, Italic, Underline\n*.colorBD:     #4f5664\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-pool-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #9a90a7\n*.background:  #2a2433\n*.cursorColor: #cf504a\n!\n! Black\n*.color0:      #2a2433\n*.color8:      #635775\n!\n! Red\n*.color1:      #aa75f5\n*.color9:      #fc8983\n!\n! Green\n*.color2:      #f87972\n*.color10:     #372f42\n!\n! Yellow\n*.color3:      #ffb6b3\n*.color11:     #574b68\n!\n! Blue\n*.color4:      #b886fd\n*.color12:     #706383\n!\n! Magenta\n*.color5:      #f87972\n*.color13:     #e4d2fe\n!\n! Cyan\n*.color6:      #c7a0fe\n*.color14:     #f36f68\n!\n! White\n*.color7:      #9a90a7\n*.color15:     #f3ebff\n!\n! Bold, Italic, Underline\n*.colorBD:     #9a90a7\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-sea-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #a1aab5\n*.background:  #1d262f\n*.cursorColor: #067953\n!\n! Black\n*.color0:      #1d262f\n*.color8:      #4a5f78\n!\n! Red\n*.color1:      #34659d\n*.color9:      #14e19d\n!\n! Green\n*.color2:      #0fc78a\n*.color10:     #27323f\n!\n! Yellow\n*.color3:      #47ebb4\n*.color11:     #405368\n!\n! Blue\n*.color4:      #57718e\n*.color12:     #738191\n!\n! Magenta\n*.color5:      #0fc78a\n*.color13:     #afd4fe\n!\n! Cyan\n*.color6:      #6e9bcf\n*.color14:     #0db57d\n!\n! White\n*.color7:      #a1aab5\n*.color15:     #ebf4ff\n!\n! Bold, Italic, Underline\n*.colorBD:     #a1aab5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/base2tone-space-dark",
    "content": "!\n! Generated with :\n! XRDB2Xrecources.py\n!\n*.foreground:  #a1a1b5\n*.background:  #24242e\n*.cursorColor: #b25424\n!\n! Black\n*.color0:      #24242e\n*.color8:      #5b5b76\n!\n! Red\n*.color1:      #7676f4\n*.color9:      #f37b3f\n!\n! Green\n*.color2:      #ec7336\n*.color10:     #333342\n!\n! Yellow\n*.color3:      #fe8c52\n*.color11:     #515167\n!\n! Blue\n*.color4:      #767693\n*.color12:     #737391\n!\n! Magenta\n*.color5:      #ec7336\n*.color13:     #cecee3\n!\n! Cyan\n*.color6:      #8a8aad\n*.color14:     #e66e33\n!\n! White\n*.color7:      #a1a1b5\n*.color15:     #ebebff\n!\n! Bold, Italic, Underline\n*.colorBD:     #a1a1b5\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/deep",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #cdcdcd\n*.background:  #000000\n*.cursorColor: #d0d0d0\n!\n! Black\n*.color0:      #000000\n*.color8:      #535353\n!\n! Red\n*.color1:      #d11600\n*.color9:      #f4152c\n!\n! Green\n*.color2:      #37c32c\n*.color10:     #01ea10\n!\n! Yellow\n*.color3:      #e3c421\n*.color11:     #ffee1d\n!\n! Blue\n*.color4:      #5c6bfd\n*.color12:     #8cb0f8\n!\n! Magenta\n*.color5:      #dd5be5\n*.color13:     #e056f5\n!\n! Cyan\n*.color6:      #6eb4f2\n*.color14:     #67ecff\n!\n! White\n*.color7:      #e0e0e0\n*.color15:     #f4f4f4\n!\n! Bold, Italic, Underline\n*.colorBD:     #eeeeee\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/schemes/idleToes",
    "content": "!\n! Generated with :\n! XRDB2Xreources.py\n!\n*.foreground:  #ffffff\n*.background:  #323232\n*.cursorColor: #d6d6d6\n!\n! Black\n*.color0:      #323232\n*.color8:      #535353\n!\n! Red\n*.color1:      #d25252\n*.color9:      #f07070\n!\n! Green\n*.color2:      #7fe173\n*.color10:     #9dff91\n!\n! Yellow\n*.color3:      #ffc66d\n*.color11:     #ffe48b\n!\n! Blue\n*.color4:      #4099ff\n*.color12:     #5eb7f7\n!\n! Magenta\n*.color5:      #f680ff\n*.color13:     #ff9dff\n!\n! Cyan\n*.color6:      #bed6ff\n*.color14:     #dcf4ff\n!\n! White\n*.color7:      #eeeeec\n*.color15:     #ffffff\n!\n! Bold, Italic, Underline\n*.colorBD:     #ffffa9\n!*.colorIT:\n!*.colorUL:\n"
  },
  {
    "path": "tabby-community-color-schemes/src/colorSchemes.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { TerminalColorSchemeProvider, TerminalColorScheme } from 'tabby-terminal'\n\nconst schemeContents = (require as any).context('../schemes/', false, /.*/)\n\n@Injectable()\nexport class ColorSchemes extends TerminalColorSchemeProvider {\n    async getSchemes (): Promise<TerminalColorScheme[]> {\n        const schemes: TerminalColorScheme[] = []\n\n        schemeContents.keys().filter(x => !x.startsWith('./')).forEach(schemeFile => {\n            const lines = (schemeContents(schemeFile).default as string).split('\\n')\n\n            // process #define variables\n            const variables: any = {}\n            lines\n                .filter(x => x.startsWith('#define'))\n                .map(x => x.split(' ').map(v => v.trim()))\n                .forEach(([_, variableName, variableValue]) => {\n                    variables[variableName] = variableValue\n                })\n\n            const values: any = {}\n            lines\n                .filter(x => x.startsWith('*.'))\n                .map(x => x.substring(2))\n                .map(x => x.split(':').map(v => v.trim()))\n                .forEach(([key, value]) => {\n                    values[key] = variables[value] ? variables[value] : value\n                })\n\n            const colors: string[] = []\n            let colorIndex = 0\n            while (values[`color${colorIndex}`]) {\n                colors.push(values[`color${colorIndex}`])\n                colorIndex++\n            }\n\n            schemes.push({\n                name: schemeFile.split('/')[1].trim(),\n                foreground: values.foreground,\n                background: values.background,\n                cursor: values.cursorColor,\n                colors,\n            })\n        })\n\n        return schemes\n    }\n}\n"
  },
  {
    "path": "tabby-community-color-schemes/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { TerminalColorSchemeProvider } from 'tabby-terminal'\n\nimport { ColorSchemes } from './colorSchemes'\n\n@NgModule({\n    providers: [\n        { provide: TerminalColorSchemeProvider, useClass: ColorSchemes, multi: true },\n    ],\n})\nexport default class PopularThemesModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class\n"
  },
  {
    "path": "tabby-community-color-schemes/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-community-color-schemes/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-community-color-schemes/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => {\n    const cfg = config({\n        name: 'community-color-schemes',\n        dirname: __dirname,\n    })\n    cfg.module.rules.push({ test: /[\\\\\\/]schemes[\\\\\\/]/, use: 'raw-loader' })\n    return cfg\n}\n"
  },
  {
    "path": "tabby-core/README.md",
    "content": "# Tabby Core Plugin\n\nSee also:\n\n* [Settings plugin API](./settings/)\n* [Terminal plugin API](./terminal/)\n* [Local terminal API](./local/)\n* [Linkifier plugin API](./linkifier/)\n\nThis module provides:\n\n* tabbed interface services\n* toolbar UI\n* config file management\n* hotkeys\n* tab recovery\n* logging\n* theming\n\nUsing the API:\n\n```ts\nimport { AppService, TabContextMenuItemProvider } from 'tabby-core'\n```\n\nExporting your subclasses:\n\n```ts\n@NgModule({\n  ...\n  providers: [\n    ...\n    { provide: TabContextMenuItemProvider, useClass: MyContextMenu, multi: true },\n    ...\n  ]\n})\n```\n"
  },
  {
    "path": "tabby-core/package.json",
    "content": "{\n  \"name\": \"tabby-core\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Tabby core\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"bootstrap\": \"^5.3.0-alpha.1\",\n    \"color\": \"^4.2.3\",\n    \"deepmerge\": \"^4.1.1\",\n    \"fuzzy-search\": \"^3.2.1\",\n    \"js-yaml\": \"^4.0.0\",\n    \"messageformat\": \"^2.3.0\",\n    \"mixpanel\": \"^0.17.0\",\n    \"ngx-translate-messageformat-compiler\": \"^4.11.0\",\n    \"readable-stream\": \"4.4.0\",\n    \"uuid\": \"^9.0.0\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@angular/platform-browser-dynamic\": \"^15\",\n    \"rxjs\": \"^7\"\n  }\n}\n"
  },
  {
    "path": "tabby-core/src/api/cli.ts",
    "content": "export interface CLIEvent {\n    argv: {\n        _: string[],\n        // Commands are hardcoded for now\n        directory?: string,\n        command?: string[],\n        profileName?: string,\n        text?: string,\n        escape?: boolean,\n        providerId?: string,\n        query?: string,\n        debug?: boolean,\n        hidden?: boolean,\n        profileNumber?: number,\n    }\n    cwd: string\n    secondInstance: boolean\n}\n\nexport abstract class CLIHandler {\n    priority: number\n    firstMatchOnly: boolean\n\n    abstract handle (event: CLIEvent): Promise<boolean>\n}\n"
  },
  {
    "path": "tabby-core/src/api/commands.ts",
    "content": "import { BaseTabComponent } from '../components/baseTab.component'\nimport { MenuItemOptions } from './menu'\nimport { ToolbarButton } from './toolbarButtonProvider'\n\nexport enum CommandLocation {\n    LeftToolbar = 'left-toolbar',\n    RightToolbar = 'right-toolbar',\n    StartPage = 'start-page',\n}\n\nexport class Command {\n    id?: string\n    label: string\n    sublabel?: string\n    locations?: CommandLocation[]\n    run: () => Promise<void>\n\n    /**\n     * Raw SVG icon code\n     */\n    icon?: string\n\n    /**\n     * Optional Touch Bar icon ID\n     */\n    touchBarNSImage?: string\n\n    /**\n     * Optional Touch Bar button label\n     */\n    touchBarTitle?: string\n\n    weight?: number\n\n    static fromToolbarButton (button: ToolbarButton): Command {\n        const command = new Command()\n        command.label = button.title\n        command.run = async () => button.click?.()\n        command.icon = button.icon\n        command.locations = [CommandLocation.StartPage]\n        if ((button.weight ?? 0) <= 0) {\n            command.locations.push(CommandLocation.LeftToolbar)\n        }\n        if ((button.weight ?? 0) > 0) {\n            command.locations.push(CommandLocation.RightToolbar)\n        }\n        command.touchBarNSImage = button.touchBarNSImage\n        command.touchBarTitle = button.touchBarTitle\n        command.weight = button.weight\n        return command\n    }\n\n    static fromMenuItem (item: MenuItemOptions): Command {\n        const command = new Command()\n        command.label = item.commandLabel ?? item.label ?? ''\n        command.sublabel = item.sublabel\n        command.run = async () => item.click?.()\n        return command\n    }\n}\n\nexport interface CommandContext {\n    tab?: BaseTabComponent,\n}\n\n/**\n * Extend to add commands\n */\nexport abstract class CommandProvider {\n    abstract provide (context: CommandContext): Promise<Command[]>\n}\n"
  },
  {
    "path": "tabby-core/src/api/configProvider.ts",
    "content": "/**\n * Extend to add your own config options\n */\nexport abstract class ConfigProvider {\n    /**\n     * Default values, e.g.\n     *\n     * ```ts\n     * defaults = {\n     *   myPlugin: {\n     *     foo: 1\n     *   }\n     * }\n     * ```\n     */\n    defaults: any = {}\n\n    /**\n     * [[Platform]] specific defaults, e.g.\n     *\n     * ```ts\n     * platformDefaults = {\n     *   [Platform.Windows]: {\n     *     myPlugin: {\n     *       bar: true\n     *     }\n     *   },\n     *   [Platform.macOS]: {\n     *     myPlugin: {\n     *       bar: false\n     *     }\n     *   },\n     * }\n     * ```\n     */\n    platformDefaults: Record<string, any> = {}\n}\n"
  },
  {
    "path": "tabby-core/src/api/fileProvider.ts",
    "content": "import { Injectable } from '@angular/core'\n\n@Injectable({ providedIn: 'root' })\nexport abstract class FileProvider {\n    name: string\n\n    async isAvailable (): Promise<boolean> {\n        return true\n    }\n\n    abstract selectAndStoreFile (description: string): Promise<string>\n    abstract retrieveFile (key: string): Promise<Buffer>\n}\n"
  },
  {
    "path": "tabby-core/src/api/hostApp.ts",
    "content": "import { Observable, Subject } from 'rxjs'\nimport { Injector } from '@angular/core'\nimport { Logger, LogService } from '../services/log.service'\n\nexport enum Platform {\n    Linux = 'Linux',\n    macOS = 'macOS',\n    Windows = 'Windows',\n    Web = 'Web',\n}\n\n/**\n * Provides interaction with the main process\n */\nexport abstract class HostAppService {\n    abstract get platform (): Platform\n    abstract get configPlatform (): Platform\n\n    protected settingsUIRequest = new Subject<void>()\n    protected configChangeBroadcast = new Subject<void>()\n    protected logger: Logger\n\n    /**\n     * Fired when Preferences is selected in the macOS menu\n     */\n    get settingsUIRequest$ (): Observable<void> { return this.settingsUIRequest }\n\n    /**\n     * Fired when another window modified the config file\n     */\n    get configChangeBroadcast$ (): Observable<void> { return this.configChangeBroadcast }\n\n    constructor (\n        injector: Injector,\n    ) {\n        this.logger = injector.get(LogService).create('hostApp')\n    }\n\n    abstract newWindow (): void\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    emitReady (): void { }\n\n    abstract relaunch (): void\n\n    abstract quit (): void\n}\n"
  },
  {
    "path": "tabby-core/src/api/hostWindow.ts",
    "content": "import { Observable, Subject } from 'rxjs'\n\nexport abstract class HostWindowService {\n\n    /**\n     * Fired once the window is visible\n     */\n    get windowShown$ (): Observable<void> { return this.windowShown }\n\n    /**\n     * Fired when the window close button is pressed\n     */\n    get windowCloseRequest$ (): Observable<void> { return this.windowCloseRequest }\n    get windowMoved$ (): Observable<void> { return this.windowMoved }\n    get windowFocused$ (): Observable<void> { return this.windowFocused }\n\n    protected windowShown = new Subject<void>()\n    protected windowCloseRequest = new Subject<void>()\n    protected windowMoved = new Subject<void>()\n    protected windowFocused = new Subject<void>()\n\n    abstract readonly isFullscreen: boolean\n    abstract reload (): void\n    abstract setTitle (title?: string): void\n    abstract toggleFullscreen (): void\n    abstract minimize (): void\n    abstract isMaximized (): boolean\n    abstract toggleMaximize (): void\n    abstract close (): void\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    openDevTools (): void { }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    bringToFront (): void { }\n}\n"
  },
  {
    "path": "tabby-core/src/api/hotkeyProvider.ts",
    "content": "export interface HotkeyDescription {\n    id: string\n    name: string\n}\n\nexport interface Hotkey {\n    strokes: string[] | string; // may be a sequence of strokes\n    isDuplicate: boolean;\n}\n\n/**\n * Extend to provide your own hotkeys. A corresponding [[ConfigProvider]]\n * must also provide the `hotkeys.foo` config options with the default values\n */\nexport abstract class HotkeyProvider {\n    abstract provide (): Promise<HotkeyDescription[]>\n}\n"
  },
  {
    "path": "tabby-core/src/api/index.ts",
    "content": "export { BaseComponent, SubscriptionContainer } from '../components/base.component'\nexport { BaseTabComponent, BaseTabProcess, GetRecoveryTokenOptions } from '../components/baseTab.component'\nexport { TabHeaderComponent } from '../components/tabHeader.component'\nexport { SplitTabComponent, SplitContainer, SplitDirection, SplitOrientation } from '../components/splitTab.component'\nexport { TabRecoveryProvider, RecoveryToken } from './tabRecovery'\nexport { ToolbarButtonProvider, ToolbarButton } from './toolbarButtonProvider'\nexport { ConfigProvider } from './configProvider'\nexport { HotkeyProvider, HotkeyDescription, Hotkey } from './hotkeyProvider'\nexport { Theme } from './theme'\nexport { TabContextMenuItemProvider } from './tabContextMenuProvider'\nexport { SelectorOption } from './selector'\nexport { CLIHandler, CLIEvent } from './cli'\nexport { PlatformService, ClipboardContent, MessageBoxResult, MessageBoxOptions, FileDownload, FileUpload, FileTransfer, HTMLFileUpload, FileUploadOptions, DirectoryUpload, DirectoryDownload, PlatformTheme } from './platform'\nexport { MenuItemOptions } from './menu'\nexport { BootstrapData, PluginInfo, BOOTSTRAP_DATA } from './mainProcess'\nexport { HostWindowService } from './hostWindow'\nexport { HostAppService, Platform } from './hostApp'\nexport { FileProvider } from './fileProvider'\nexport { ProfileProvider, ConnectableProfileProvider, QuickConnectProfileProvider, Profile, ConnectableProfile, PartialProfile, ProfileSettingsComponent, ProfileGroup, PartialProfileGroup } from './profileProvider'\nexport { PromptModalComponent } from '../components/promptModal.component'\nexport * from './commands'\n\nexport { AppService } from '../services/app.service'\nexport { ConfigService, configMerge, ConfigProxy, ProxifiedConfig, FullyDefined } from '../services/config.service'\nexport { DockingService, Screen } from '../services/docking.service'\nexport { Logger, ConsoleLogger, LogService } from '../services/log.service'\nexport { HomeBaseService } from '../services/homeBase.service'\nexport { HotkeysService } from '../services/hotkeys.service'\nexport { KeyEventData, KeyName, Keystroke, altKeyName, metaKeyName } from '../services/hotkeys.util'\nexport { NotificationsService } from '../services/notifications.service'\nexport { ThemesService } from '../services/themes.service'\nexport { ProfilesService } from '../services/profiles.service'\nexport { SelectorService } from '../services/selector.service'\nexport { TabRecoveryService } from '../services/tabRecovery.service'\nexport { TabsService, NewTabParameters, TabComponentType } from '../services/tabs.service'\nexport { UpdaterService } from '../services/updater.service'\nexport { VaultService, Vault, VaultSecret, VaultFileSecret, VAULT_SECRET_TYPE_FILE, StoredVault, VaultSecretKey } from '../services/vault.service'\nexport { FileProvidersService } from '../services/fileProviders.service'\nexport { LocaleService, TabbyFormatedDatePipe } from '../services/locale.service'\nexport { TranslateService } from '@ngx-translate/core'\nexport * from '../utils'\nexport { UTF8Splitter } from '../utfSplitter'\n"
  },
  {
    "path": "tabby-core/src/api/mainProcess.ts",
    "content": "export const BOOTSTRAP_DATA = 'BOOTSTRAP_DATA'\n\nexport interface PluginInfo {\n    name: string\n    description: string\n    packageName: string\n    isBuiltin: boolean\n    isLegacy: boolean\n    version: string\n    author: string\n    homepage?: string\n    path?: string\n    info?: any\n}\n\nexport interface BootstrapData {\n    config: Record<string, any>\n    executable: string\n    isMainWindow: boolean\n    windowID: number\n    installedPlugins: PluginInfo[]\n    userPluginsPath: string\n}\n"
  },
  {
    "path": "tabby-core/src/api/menu.ts",
    "content": "export interface MenuItemOptions {\n    type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'\n    label?: string\n    sublabel?: string\n    enabled?: boolean\n    checked?: boolean\n    submenu?: MenuItemOptions[]\n    click?: () => void\n\n    /** @hidden */\n    commandLabel?: string\n}\n"
  },
  {
    "path": "tabby-core/src/api/platform.ts",
    "content": "import { MenuItemOptions } from './menu'\nimport { Subject, Observable } from 'rxjs'\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\nexport interface ClipboardContent {\n    text: string\n    html?: string\n}\n\nexport interface MessageBoxOptions {\n    type: 'warning'|'error'\n    message: string\n    detail?: string\n    buttons: string[]\n    defaultId?: number\n    cancelId?: number\n}\n\nexport interface MessageBoxResult {\n    response: number\n}\n\nexport abstract class FileTransfer {\n    abstract getName (): string\n    abstract getSize (): number\n    abstract close (): void\n\n    getSpeed (): number {\n        return this.lastChunkSpeed\n    }\n\n    getCompletedBytes (): number {\n        return this.completedBytes\n    }\n\n    getStatus (): string {\n        return this.status\n    }\n\n    getTotalSize (): number {\n        return this.totalSize\n    }\n\n    isComplete (): boolean {\n        return this.completed || this.completedBytes >= this.getSize()\n    }\n\n    isCancelled (): boolean {\n        return this.cancelled\n    }\n\n    cancel (): void {\n        this.cancelled = true\n        this.close()\n    }\n\n    setStatus (status: string): void {\n        this.status = status\n    }\n\n    setTotalSize (size: number): void {\n        this.totalSize = size\n    }\n\n    setCompleted (completed: boolean): void {\n        this.completed = completed\n    }\n\n    protected increaseProgress (bytes: number): void {\n        if (!bytes) {\n            return\n        }\n        this.completedBytes += bytes\n        this.lastChunkSpeed = bytes * 1000 / (Date.now() - this.lastChunkStartTime)\n        this.lastChunkStartTime = Date.now()\n    }\n\n    private completedBytes = 0\n    private totalSize = 0\n    private lastChunkStartTime = Date.now()\n    private lastChunkSpeed = 0\n    private cancelled = false\n    private completed = false\n    private status = ''\n}\n\nexport abstract class FileDownload extends FileTransfer {\n    abstract write (buffer: Uint8Array): Promise<void>\n}\n\nexport abstract class DirectoryDownload extends FileTransfer {\n    abstract createDirectory (relativePath: string): Promise<void>\n    abstract createFile (relativePath: string, mode: number, size: number): Promise<FileDownload>\n}\n\nexport abstract class FileUpload extends FileTransfer {\n    abstract getMode (): number\n\n    abstract read (): Promise<Uint8Array>\n\n    async readAll (): Promise<Uint8Array> {\n        const result = new Uint8Array(this.getSize())\n        let pos = 0\n        while (true) {\n            const buf = await this.read()\n            if (!buf.length) {\n                break\n            }\n            result.set(buf, pos)\n            pos += buf.length\n        }\n        return result\n    }\n}\n\nexport interface FileUploadOptions {\n    multiple: boolean\n}\n\nexport class DirectoryUpload {\n    private childrens: (FileUpload|DirectoryUpload)[] = []\n\n    constructor (private name = '') {\n        // Just set name for now.\n    }\n\n    getName (): string {\n        return this.name\n    }\n\n    getChildrens (): (FileUpload|DirectoryUpload)[] {\n        return this.childrens\n    }\n\n    pushChildren (item: FileUpload|DirectoryUpload): void {\n        this.childrens.push(item)\n    }\n}\n\nexport type PlatformTheme = 'light'|'dark'\n\nexport abstract class PlatformService {\n    supportsWindowControls = false\n\n    get fileTransferStarted$ (): Observable<FileTransfer> { return this.fileTransferStarted }\n    get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }\n    get themeChanged$ (): Observable<PlatformTheme> { return this.themeChanged }\n\n    protected fileTransferStarted = new Subject<FileTransfer>()\n    protected displayMetricsChanged = new Subject<void>()\n    protected themeChanged = new Subject<PlatformTheme>()\n\n    abstract readClipboard (): string\n    abstract setClipboard (content: ClipboardContent): void\n    abstract loadConfig (): Promise<string>\n    abstract saveConfig (content: string): Promise<void>\n\n    abstract startDownload (name: string, mode: number, size: number): Promise<FileDownload|null>\n    abstract startDownloadDirectory (name: string, estimatedSize?: number): Promise<DirectoryDownload|null>\n    abstract startUpload (options?: FileUploadOptions): Promise<FileUpload[]>\n    abstract startUploadDirectory (paths?: string[]): Promise<DirectoryUpload>\n\n    async startUploadFromDragEvent (event: DragEvent, multiple = false): Promise<DirectoryUpload> {\n        const result = new DirectoryUpload()\n\n        if (!event.dataTransfer) {\n            return Promise.resolve(result)\n        }\n\n        const traverseFileTree = (item: any, root: DirectoryUpload = result): Promise<void> => {\n            return new Promise((resolve) => {\n                if (item.isFile) {\n                    item.file((file: File) => {\n                        const transfer = new HTMLFileUpload(file)\n                        this.fileTransferStarted.next(transfer)\n                        root.pushChildren(transfer)\n                        resolve()\n                    })\n                } else if (item.isDirectory) {\n                    const dirReader = item.createReader()\n                    const childrenFolder = new DirectoryUpload(item.name)\n                    dirReader.readEntries(async (entries: any[]) => {\n                        for (const entry of entries) {\n                            await traverseFileTree(entry, childrenFolder)\n                        }\n                        resolve()\n                    })\n                    root.pushChildren(childrenFolder)\n                } else {\n                    resolve()\n                }\n            })\n        }\n\n        const promises: Promise<void>[] = []\n\n        const items = event.dataTransfer.items\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i].webkitGetAsEntry()\n            if (item) {\n                promises.push(traverseFileTree(item))\n                if (!multiple) {\n                    break\n                }\n            }\n        }\n        return Promise.all(promises).then(() => result)\n    }\n\n    getConfigPath (): string|null {\n        return null\n    }\n\n    showItemInFolder (path: string): void {\n        throw new Error('Not implemented')\n    }\n\n    async isProcessRunning (name: string): Promise<boolean> {\n        return false\n    }\n\n    async installPlugin (name: string, version: string): Promise<void> {\n        throw new Error('Not implemented')\n    }\n\n    async uninstallPlugin (name: string): Promise<void> {\n        throw new Error('Not implemented')\n    }\n\n    getWinSCPPath (): string|null {\n        throw new Error('Not implemented')\n    }\n\n    async exec (app: string, argv: string[]): Promise<void> {\n        throw new Error('Not implemented')\n    }\n\n    isShellIntegrationSupported (): boolean {\n        return false\n    }\n\n    async isShellIntegrationInstalled (): Promise<boolean> {\n        return false\n    }\n\n    async installShellIntegration (): Promise<void> {\n        throw new Error('Not implemented')\n    }\n\n    async uninstallShellIntegration (): Promise<void> {\n        throw new Error('Not implemented')\n    }\n\n    openPath (path: string): void {\n        throw new Error('Not implemented')\n    }\n\n    getTheme (): PlatformTheme {\n        return 'dark'\n    }\n\n    abstract getOSRelease (): string\n    abstract getAppVersion (): string\n    abstract openExternal (url: string): void\n    abstract listFonts (): Promise<string[]>\n    abstract setErrorHandler (handler: (_: any) => void): void\n    abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void\n    abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>\n    abstract pickDirectory (): Promise<string | null>\n    abstract quit (): void\n}\n\nexport class HTMLFileUpload extends FileUpload {\n    private stream: ReadableStream\n    private reader: ReadableStreamDefaultReader\n\n    constructor (private file: File) {\n        super()\n        this.stream = this.file.stream()\n        this.reader = this.stream.getReader()\n    }\n\n    getName (): string {\n        return this.file.name\n    }\n\n    getMode (): number {\n        return 0o644\n    }\n\n    getSize (): number {\n        return this.file.size\n    }\n\n    async read (): Promise<Uint8Array> {\n        const result: any = await this.reader.read()\n        if (result.done || !result.value) {\n            return new Uint8Array(0)\n        }\n        const chunk = new Uint8Array(result.value)\n        this.increaseProgress(chunk.length)\n        return chunk\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    bringToFront (): void { }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    close (): void { }\n}\n"
  },
  {
    "path": "tabby-core/src/api/profileProvider.ts",
    "content": "/* eslint-disable @typescript-eslint/no-type-alias */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-empty-function */\nimport { BaseTabComponent } from '../components/baseTab.component'\nimport { NewTabParameters } from '../services/tabs.service'\nimport { FullyDefined } from '../services/config.service'\n\nexport interface Profile {\n    id: string\n    type: string\n    name: string\n    group: string\n    options: any\n\n    icon: string | null\n    color: string | null\n    disableDynamicTitle: boolean\n    behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'\n\n    weight: number\n    isBuiltin: boolean\n    isTemplate: boolean\n}\n\nexport interface ConnectableProfile extends Profile {\n    clearServiceMessagesOnConnect: boolean\n}\n\nexport type PartialProfile<T extends Profile> = Omit<Omit<Omit<{\n    [K in keyof T]?: T[K]\n}, 'options'>, 'type'>, 'name'> & {\n    type: string\n    name: string\n    options?: {\n        [K in keyof T['options']]?: T['options'][K]\n    }\n}\n\nexport interface ProfileGroup {\n    id: string\n    name: string\n    profiles: PartialProfile<Profile>[]\n    defaults: any\n    editable: boolean\n}\n\nexport type PartialProfileGroup<T extends ProfileGroup> = Omit<Omit<{\n    [K in keyof T]?: T[K]\n}, 'id'>, 'name'> & {\n    id: string\n    name: string\n}\n\nexport interface ProfileSettingsComponent<P extends Profile, PP extends ProfileProvider<P>> {\n    profile: FullyDefined<P>\n    save?: () => void\n}\n\nexport abstract class ProfileProvider<P extends Profile> {\n    id: string\n    name: string\n    settingsComponent?: new (...args: any[]) => ProfileSettingsComponent<P, ProfileProvider<P>>\n    configDefaults: Pick<Profile, 'options'>\n\n    abstract getBuiltinProfiles (): Promise<PartialProfile<P>[]>\n\n    abstract getNewTabParameters (profile: P): Promise<NewTabParameters<BaseTabComponent>>\n\n    getSuggestedName (profile: PartialProfile<P>): string|null {\n        return null\n    }\n\n    abstract getDescription (profile: PartialProfile<P>): string\n\n    deleteProfile (profile: P): void { }\n}\n\nexport abstract class ConnectableProfileProvider<P extends ConnectableProfile> extends ProfileProvider<P> {}\n\nexport abstract class QuickConnectProfileProvider<P extends ConnectableProfile> extends ConnectableProfileProvider<P> {\n\n    abstract quickConnect (query: string): PartialProfile<P>|null\n\n    abstract intoQuickConnectString (profile: P): string|null\n\n}\n"
  },
  {
    "path": "tabby-core/src/api/selector.ts",
    "content": "export interface SelectorOption<T> {\n    name: string\n    description?: string\n    group?: string\n    result?: T\n    icon?: string\n    freeInputPattern?: string\n    freeInputEquivalent?: string\n    color?: string\n    weight?: number\n    callback?: (string?) => void\n}\n"
  },
  {
    "path": "tabby-core/src/api/tabContextMenuProvider.ts",
    "content": "import { BaseTabComponent } from '../components/baseTab.component'\nimport { MenuItemOptions } from './menu'\n\n/**\n * Extend to add items to the tab header's context menu\n */\nexport abstract class TabContextMenuItemProvider {\n    weight = 0\n\n    abstract getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]>\n}\n"
  },
  {
    "path": "tabby-core/src/api/tabRecovery.ts",
    "content": "import { BaseTabComponent } from '../components/baseTab.component'\nimport { NewTabParameters } from '../services/tabs.service'\n\nexport interface RecoveryToken {\n    [_: string]: any\n    type: string\n    tabIcon?: string|null\n    tabColor?: string|null\n}\n\n/**\n * Extend to enable recovery for your custom tab.\n * This works in conjunction with [[getRecoveryToken()]]\n *\n * Tabby will try to find any [[TabRecoveryProvider]] that is able to process\n * the recovery token previously returned by [[getRecoveryToken]].\n *\n * Recommended token format:\n *\n * ```json\n * {\n *   type: 'my-tab-type',\n *   foo: 'bar',\n * }\n * ```\n */\nexport abstract class TabRecoveryProvider <T extends BaseTabComponent> {\n    /**\n     * @param recoveryToken a recovery token found in the saved tabs list\n     * @returns [[boolean]] whether this [[TabRecoveryProvider]] can recover a tab from this token\n     */\n\n    abstract applicableTo (recoveryToken: RecoveryToken): Promise<boolean>\n\n    /**\n     * @param recoveryToken a recovery token found in the saved tabs list\n     * @returns [[NewTabParameters]] descriptor containing tab type and component inputs\n     *          or `null` if this token is from a different tab type or is not supported\n     */\n    abstract recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<T>>\n}\n"
  },
  {
    "path": "tabby-core/src/api/theme.ts",
    "content": "/**\n * Extend to add a custom CSS theme\n */\nexport abstract class Theme {\n    name: string\n\n    /**\n     * Complete CSS stylesheet\n     */\n    css: string\n\n    terminalBackground: string\n\n    macOSWindowButtonsInsetX?: number\n    macOSWindowButtonsInsetY?: number\n    followsColorScheme?: boolean\n}\n"
  },
  {
    "path": "tabby-core/src/api/toolbarButtonProvider.ts",
    "content": "/**\n * See [[ToolbarButtonProvider]]\n */\nexport interface ToolbarButton {\n    /**\n     * Raw SVG icon code\n     */\n    icon?: string\n\n    title: string\n\n    /**\n     * Optional Touch Bar icon ID\n     */\n    touchBarNSImage?: string\n\n    /**\n     * Optional Touch Bar button label\n     */\n    touchBarTitle?: string\n\n    weight?: number\n\n    click?: () => void\n\n    submenu?: () => Promise<ToolbarButton[]>\n\n    /** @hidden */\n    submenuItems?: ToolbarButton[]\n}\n\n/**\n * Extend to add buttons to the toolbar\n */\nexport abstract class ToolbarButtonProvider {\n    abstract provide (): ToolbarButton[]\n}\n"
  },
  {
    "path": "tabby-core/src/cli.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HostAppService } from './api/hostApp'\nimport { CLIHandler, CLIEvent } from './api/cli'\nimport { HostWindowService } from './api/hostWindow'\nimport { QuickConnectProfileProvider } from './api/profileProvider'\nimport { ProfilesService } from './services/profiles.service'\n\n@Injectable()\nexport class ProfileCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = 0\n\n    constructor (\n        private profiles: ProfilesService,\n        private hostWindow: HostWindowService,\n    ) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        const op = event.argv._[0]\n\n        if (op === 'profile') {\n            this.handleOpenProfile(event.argv.profileName!)\n            return true\n        }\n        if (op === 'recent') {\n            this.handleOpenRecentProfile(event.argv.profileNumber!)\n            return true\n        }\n        if (op === 'quickConnect') {\n            this.handleOpenQuickConnect(event.argv.providerId!, event.argv.query!)\n            return true\n        }\n        return false\n    }\n\n    private async handleOpenProfile (profileName: string) {\n        const profile = (await this.profiles.getProfiles()).find(x => x.name === profileName)\n        if (!profile) {\n            console.error('Requested profile', profileName, 'not found')\n            return\n        }\n        this.profiles.openNewTabForProfile(profile)\n        this.hostWindow.bringToFront()\n    }\n\n    private async handleOpenRecentProfile (profileNumber: number) {\n        const profiles = this.profiles.getRecentProfiles()\n        if (profileNumber >= profiles.length) {\n            return\n        }\n        this.profiles.openNewTabForProfile(profiles[profileNumber])\n        this.hostWindow.bringToFront()\n    }\n\n    private async handleOpenQuickConnect (providerId: string, query: string) {\n        const quickConnectProviders = this.profiles.getProviders()\n            .filter((x): x is QuickConnectProfileProvider<any> => x instanceof QuickConnectProfileProvider)\n        const provider = quickConnectProviders.find(x => x.id === providerId)\n        if(!provider) {\n            const available = quickConnectProviders.map(x => x.id).join(', ')\n            console.error(`Requested provider \"${providerId}\" not found. Available providers: ${available}`)\n            return\n        }\n        const profile = provider.quickConnect(query)\n        if(!profile) {\n            console.error(`Could not parse quick connect query \"${query}\"`)\n            return\n        }\n        this.profiles.openNewTabForProfile(profile)\n        this.hostWindow.bringToFront()\n    }\n}\n\n@Injectable()\nexport class LastCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = -999\n\n    constructor (private hostApp: HostAppService) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        if (event.secondInstance) {\n            this.hostApp.newWindow()\n            return true\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/commands.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\n\nimport { HostAppService, Platform } from './api/hostApp'\nimport { ProfilesService } from './services/profiles.service'\nimport { CommandProvider, Command, CommandLocation } from './api/commands'\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class CoreCommandProvider extends CommandProvider {\n    constructor (\n        private hostApp: HostAppService,\n        private profilesService: ProfilesService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async activate () {\n        const profile = await this.profilesService.showProfileSelector().catch(() => null)\n        if (profile) {\n            this.profilesService.launchProfile(profile)\n        }\n    }\n\n    async provide (): Promise<Command[]> {\n        return [\n            {\n                id: 'core:profile-selector',\n                locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],\n                label: this.translate.instant('Profiles & connections'),\n                icon: this.hostApp.platform === Platform.Web\n                    ? require('./icons/plus.svg')\n                    : require('./icons/profiles.svg'),\n                run: async () => this.activate(),\n            },\n            ...this.profilesService.getRecentProfiles().map((profile, index) => ({\n                id: `core:recent-profile-${index}`,\n                label: profile.name,\n                locations: [CommandLocation.StartPage],\n                icon: require('./icons/history.svg'),\n                run: async () => {\n                    const p = (await this.profilesService.getProfiles()).find(x => x.id === profile.id) ?? profile\n                    this.profilesService.launchProfile(p)\n                },\n            })),\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/appRoot.component.pug",
    "content": "title-bar(\n  *ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.dock == \"off\" && isTitleBarNeeded()',\n  (dblclick)='toggleMaximize()',\n  [hideControls]='hostApp.platform !== Platform.Linux && !hostWindow.isFullscreen',\n  [class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen'\n)\n\n.content(\n    *ngIf='ready',\n    [class.tabs-on-top]='config.store.appearance.tabsLocation == \"top\" || config.store.appearance.tabsLocation == \"left\" || config.store.appearance.tabsLocation == \"right\"',\n    [class.tabs-on-left]='hasVerticalTabs() && config.store.appearance.tabsLocation == \"left\"',\n    [class.tabs-titlebar-enabled]='isTitleBarNeeded()',\n    [class.tabs-on-right]='hasVerticalTabs() && config.store.appearance.tabsLocation == \"right\"',\n)\n    .tab-bar(\n        *ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',\n        [class.tab-bar-no-controls-overlay]='hostApp.platform == Platform.macOS',\n        (dblclick)='!isTitleBarNeeded() && toggleMaximize()'\n    )\n        .inset.background(*ngIf='hostApp.platform == Platform.macOS \\\n        && !hostWindow.isFullscreen \\\n        && config.store.appearance.frame == \"thin\" \\\n        && (config.store.appearance.tabsLocation == \"top\" || config.store.appearance.tabsLocation == \"left\")')\n        .tabs(\n            cdkDropList,\n            [cdkDropListOrientation]='(config.store.appearance.tabsLocation == \"top\" || config.store.appearance.tabsLocation == \"bottom\") ? \"horizontal\" : \"vertical\"',\n            (cdkDropListDropped)='onTabsReordered($event)',\n            cdkAutoDropGroup='app-tabs'\n        )\n            tab-header(\n                *ngFor='let tab of app.tabs; let idx = index',\n                [index]='idx',\n                [tab]='tab',\n                [active]='tab == app.activeTab',\n                [@animateTab]='{value: \"in\", params: {size: targetTabSize}}',\n                [@.disabled]='hasVerticalTabs() || !config.store.accessibility.animations',\n                (click)='app.selectTab(tab)',\n                [class.fully-draggable]='hostApp.platform !== Platform.macOS',\n                [ngbTooltip]='tab.customTitle || tab.title'\n            )\n\n        .btn-group.background\n            .d-flex(\n                *ngFor='let button of leftToolbarButtons'\n            )\n                button.btn.btn-secondary.btn-tab-bar(\n                    [ngbTooltip]='button.label',\n                    (click)='button.run && button.run()',\n                    [fastHtmlBind]='button.icon'\n                )\n\n            .d-flex(\n                ngbDropdown,\n                container='body',\n                #activeTransfersDropdown='ngbDropdown'\n            )\n                button.btn.btn-secondary.btn-tab-bar(\n                    [hidden]='activeTransfers.length == 0',\n                    [ngbTooltip]='\"File transfers\"|translate',\n                    ngbDropdownToggle\n                ) !{require('../icons/transfers.svg')}\n                transfers-menu(\n                    ngbDropdownMenu,\n                    [(transfers)]='activeTransfers',\n                    (transfersChange)='onTransfersChange()'\n                )\n\n        .btn-space.background(\n            [class.persistent]='config.store.appearance.frame == \"thin\"',\n            [class.drag]='config.store.appearance.frame == \"thin\" \\\n            && ((config.store.appearance.tabsLocation !== \"left\" && config.store.appearance.tabsLocation !== \"right\") || hostApp.platform !== Platform.macOS)'\n        )\n\n        .btn-group.background\n            .d-flex(\n                *ngFor='let button of rightToolbarButtons'\n            )\n                button.btn.btn-secondary.btn-tab-bar(\n                    [ngbTooltip]='button.label',\n                    (click)='button.run && button.run()',\n                    [fastHtmlBind]='button.icon'\n                )\n\n            button.btn.btn-secondary.btn-tab-bar.btn-update(\n                *ngIf='updatesAvailable',\n                [ngbTooltip]='\"Update available - Click to install\"|translate',\n                (click)='updater.update()'\n            ) !{require('../icons/gift.svg')}\n\n        window-controls.background(\n            *ngIf='config.store.appearance.frame == \"thin\" \\\n            && config.store.appearance.tabsLocation !== \"left\" \\\n            && config.store.appearance.tabsLocation !== \"right\" \\\n            && hostApp.platform == Platform.Linux',\n        )\n\n        div.window-controls-spacer(\n            *ngIf='config.store.appearance.frame == \"thin\" && (hostApp.platform == Platform.Windows) && (config.store.appearance.tabsLocation == \"top\")',\n        )\n    .content\n        start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')\n\n        tab-body.content-tab(\n            #tabBodies,\n            *ngFor='let tab of unsortedTabs',\n            [class.content-tab-active]='tab == app.activeTab',\n            [active]='tab == app.activeTab',\n            [tab]='tab',\n        )\n\nng-template(ngbModalContainer)\n"
  },
  {
    "path": "tabby-core/src/components/appRoot.component.scss",
    "content": ":host {\n    display: flex;\n    width: 100vw;\n    height: 100vh;\n    flex-direction: column;\n    overflow: hidden;\n    user-select: none;\n    -webkit-user-drag: none;\n    will-change: transform;\n    cursor: default;\n    animation: 0.5s ease-out fadeIn;\n    transition: 0.25s background;\n\n    --tabs-height: calc(38px * var(--spaciness));\n    --side-tab-width: calc(200px * var(--spaciness));\n}\n\n$tab-border-radius: 4px;\n\n.wrap {\n  display: flex;\n  width: 100vw;\n  height: 100vh;\n  flex-direction: row;\n}\n\n.content {\n    width: 100vw;\n    flex: 1 1 0;\n    min-height: 0;\n    display: flex;\n    flex-direction: column-reverse;\n\n    &.tabs-on-top {\n        flex-direction: column;\n    }\n\n    &.tabs-on-right {\n        flex-direction: row-reverse;\n    }\n\n    &.tabs-on-left {\n        flex-direction: row;\n    }\n}\n\n.content.tabs-on-left > .tab-bar, .content.tabs-on-right > .tab-bar {\n    height: 100%;\n    width: var(--side-tab-width);\n    overflow-y: auto;\n    overflow-x: hidden;\n    flex-direction: column;\n    background: rgba(0, 0, 0, 0.25);\n\n    .tabs {\n        width: var(--side-tab-width);\n        flex: none;\n        flex-direction: column;\n\n        tab-header {\n            flex: 0 0 var(--tabs-height);\n        }\n    }\n\n    .btn-space {\n        flex: auto;\n    }\n\n    &>.inset {\n        opacity: 0;\n        width: 100%;\n    }\n\n    ::ng-deep tab-header {\n        width: 100% !important;\n    }\n}\n\n.content.tabs-on-left > .tab-bar.tab-bar-no-controls-overlay, .content.tabs-titlebar-enabled {\n    .tabs {\n        padding-top: 0 !important;\n    }\n}\n\n.content.tabs-on-right > .tab-bar {\n    .tabs {\n        // Account for WCO on Windows.\n        padding-top: 36px;\n    }\n}\n\n.tab-bar {\n    flex: none;\n    height: var(--tabs-height);\n    display: flex;\n    width: 100%;\n\n    .btn-tab-bar {\n        line-height: calc(var(--tabs-height) + 2px);\n        height: var(--tabs-height);\n        cursor: pointer;\n\n        display: flex;\n        align-items: center;\n        padding: 0 12px;\n        flex: 0 0 auto;\n        border-bottom: 2px solid transparent;\n        transition: 0.125s all ease-out;\n        font-size: 12px;\n\n        text-transform: uppercase;\n        font-weight: bold;\n        color: #aaa;\n        border: none;\n        border-radius: 0;\n\n        align-items: center;\n\n        &.dropdown-toggle::after {\n            display: none;\n        }\n    }\n\n    &>.tabs {\n        flex: 0 1 auto;\n        display: flex;\n        min-width: 0;\n    }\n\n    &>.btn-space {\n        min-width: 1px;\n        flex: 1 0 1%;\n\n        .tabs-on-top & {\n            margin-top: 2px; // for window resizing\n        }\n\n        &.drag {\n            -webkit-app-region: drag;\n        }\n\n        &.persistent {\n        //   min-width: 72px; // 2 x 36 px height, ie 2 squares\n        // Given WCO on Windows, the min-width of the window buttons is about 138px.\n            min-width: 138px;\n        }\n    }\n\n    &>.window-controls-spacer {\n        min-width: 138px;\n        height: 100%;\n    }\n\n    & > .inset {\n        width: calc(70px + 15px * var(--spaciness));\n        height: var(--tabs-height);\n        flex: none;\n        -webkit-app-region: drag;\n    }\n\n    window-controls {\n        padding-left: 10px;\n    }\n\n    .cdk-drag-animating {\n        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n    }\n\n    .cdk-drop-list-dragging tab-header:not(.cdk-drag-placeholder) {\n        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);\n    }\n}\n\n.content {\n    flex: 1 1 0;\n    position: relative;\n    min-height: 0;\n    min-width: 0;\n\n    > .content-tab {\n        position: absolute;\n        top: 0;\n        width: 100%;\n        height: 100%;\n\n        left: -1000%;\n\n        &.content-tab-active {\n            left: 0;\n        }\n    }\n}\n\nhotkey-hint {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    max-width: 300px;\n}\n\n::ng-deep .btn-tab-bar svg,\n::ng-deep .btn-tab-bar + .dropdown-menu svg {\n    width: calc(22px * var(--spaciness));\n    height: calc(16px * var(--spaciness));\n    fill: white;\n    fill-opacity: 0.75;\n}\n\n::ng-deep .btn-update svg {\n    fill: cyan;\n}\n\n::ng-deep .broadcast-status-warning {\n    background: red;\n    position: absolute;\n    top: 0;\n    left: 50%;\n    padding: 5px 10px;\n    color: black;\n    border-radius: 0 0 5px 5px;\n\n    width: 300px;\n    margin-left: -150px;\n    text-align: center;\n    font-weight: bold;\n}\n"
  },
  {
    "path": "tabby-core/src/components/appRoot.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, HostListener, HostBinding, ViewChildren, ViewChild } from '@angular/core'\nimport { trigger, style, animate, transition, state } from '@angular/animations'\nimport { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'\n\nimport { HostAppService, Platform } from '../api/hostApp'\nimport { HotkeysService } from '../services/hotkeys.service'\nimport { Logger, LogService } from '../services/log.service'\nimport { ConfigService } from '../services/config.service'\nimport { ThemesService } from '../services/themes.service'\nimport { UpdaterService } from '../services/updater.service'\nimport { CommandService } from '../services/commands.service'\n\nimport { BaseTabComponent } from './baseTab.component'\nimport { SafeModeModalComponent } from './safeModeModal.component'\nimport { TabBodyComponent } from './tabBody.component'\nimport { SplitTabComponent } from './splitTab.component'\nimport { AppService, Command, CommandLocation, FileTransfer, HostWindowService, PlatformService } from '../api'\n\nfunction makeTabAnimation (dimension: string, size: number) {\n    return [\n        state('in', style({\n            'flex-basis': '{{size}}',\n            [dimension]: '{{size}}',\n        }), {\n            params: { size: `${size}px` },\n        }),\n        transition(':enter', [\n            style({\n                'flex-basis': '1px',\n                [dimension]: '1px',\n            }),\n            animate('250ms ease-out', style({\n                'flex-basis': '{{size}}',\n                [dimension]: '{{size}}',\n            })),\n        ]),\n        transition(':leave', [\n            style({\n                'flex-basis': 'auto',\n                'padding-left': '*',\n                'padding-right': '*',\n                [dimension]: '*',\n            }),\n            animate('250ms ease-in-out', style({\n                'padding-left': 0,\n                'padding-right': 0,\n                [dimension]: '0',\n            })),\n        ]),\n    ]\n}\n\n/** @hidden */\n@Component({\n    selector: 'app-root',\n    templateUrl: './appRoot.component.pug',\n    styleUrls: ['./appRoot.component.scss'],\n    animations: [\n        trigger('animateTab', makeTabAnimation('width', 200)),\n    ],\n})\nexport class AppRootComponent {\n    Platform = Platform\n    @Input() ready = false\n    @Input() leftToolbarButtons: Command[]\n    @Input() rightToolbarButtons: Command[]\n    @HostBinding('class.platform-win32') platformClassWindows = process.platform === 'win32'\n    @HostBinding('class.platform-darwin') platformClassMacOS = process.platform === 'darwin'\n    @HostBinding('class.platform-linux') platformClassLinux = process.platform === 'linux'\n    @HostBinding('class.no-tabs') noTabs = true\n    @ViewChildren(TabBodyComponent) tabBodies: TabBodyComponent[]\n    @ViewChild('activeTransfersDropdown') activeTransfersDropdown: NgbDropdown\n    unsortedTabs: BaseTabComponent[] = []\n    updatesAvailable = false\n    activeTransfers: FileTransfer[] = []\n    private logger: Logger\n\n    constructor (\n        private hotkeys: HotkeysService,\n        private commands: CommandService,\n        public updater: UpdaterService,\n        public hostWindow: HostWindowService,\n        public hostApp: HostAppService,\n        public config: ConfigService,\n        public app: AppService,\n        platform: PlatformService,\n        log: LogService,\n        ngbModal: NgbModal,\n        _themes: ThemesService,\n    ) {\n        // document.querySelector('app-root')?.remove()\n        this.logger = log.create('main')\n        this.logger.info('v', platform.getAppVersion())\n\n        this.hotkeys.hotkey$.subscribe((hotkey: string) => {\n            if (hotkey.startsWith('tab-')) {\n                const index = parseInt(hotkey.split('-')[1])\n                if (index <= this.app.tabs.length) {\n                    this.app.selectTab(this.app.tabs[index - 1])\n                }\n            }\n            if (this.app.activeTab) {\n                if (hotkey === 'close-tab') {\n                    this.app.closeTab(this.app.activeTab, true)\n                }\n                if (hotkey === 'toggle-last-tab') {\n                    this.app.toggleLastTab()\n                }\n                if (hotkey === 'next-tab') {\n                    this.app.nextTab()\n                }\n                if (hotkey === 'previous-tab') {\n                    this.app.previousTab()\n                }\n                if (hotkey === 'move-tab-left') {\n                    this.app.moveSelectedTabLeft()\n                }\n                if (hotkey === 'move-tab-right') {\n                    this.app.moveSelectedTabRight()\n                }\n                if (hotkey === 'duplicate-tab') {\n                    this.app.duplicateTab(this.app.activeTab)\n                }\n                if (hotkey === 'restart-tab') {\n                    this.app.duplicateTab(this.app.activeTab)\n                    this.app.closeTab(this.app.activeTab, true)\n                }\n                if (hotkey === 'explode-tab' && this.app.activeTab instanceof SplitTabComponent) {\n                    this.app.explodeTab(this.app.activeTab)\n                }\n                if (hotkey === 'combine-tabs' && this.app.activeTab instanceof SplitTabComponent) {\n                    this.app.combineTabsInto(this.app.activeTab)\n                }\n            }\n            if (hotkey === 'reopen-tab') {\n                this.app.reopenLastTab()\n            }\n            if (hotkey === 'toggle-fullscreen') {\n                hostWindow.toggleFullscreen()\n            }\n        })\n\n        this.hostWindow.windowCloseRequest$.subscribe(async () => {\n            this.app.closeWindow()\n        })\n\n        if (window['safeModeReason']) {\n            ngbModal.open(SafeModeModalComponent)\n        }\n\n        this.app.tabOpened$.subscribe(tab => {\n            this.unsortedTabs.push(tab)\n            this.noTabs = false\n            this.app.emitTabDragEnded()\n        })\n\n        this.app.tabRemoved$.subscribe(tab => {\n            for (const tabBody of this.tabBodies) {\n                if (tabBody.tab === tab) {\n                    tabBody.detach()\n                }\n            }\n            this.unsortedTabs = this.unsortedTabs.filter(x => x !== tab)\n            this.noTabs = app.tabs.length === 0\n            this.app.emitTabDragEnded()\n        })\n\n        platform.fileTransferStarted$.subscribe(transfer => {\n            this.activeTransfers.push(transfer)\n            this.activeTransfersDropdown.open()\n        })\n\n        config.ready$.toPromise().then(async () => {\n            this.leftToolbarButtons = await this.getToolbarButtons(false)\n            this.rightToolbarButtons = await this.getToolbarButtons(true)\n\n            setInterval(() => {\n                if (this.config.store.enableAutomaticUpdates) {\n                    this.updater.check().then(available => {\n                        this.updatesAvailable = available\n                    })\n                }\n            }, 3600 * 12 * 1000)\n        })\n    }\n\n    async ngOnInit () {\n        this.config.ready$.toPromise().then(() => {\n            this.ready = true\n            this.app.emitReady()\n        })\n    }\n\n    @HostListener('dragover')\n    onDragOver () {\n        return false\n    }\n\n    @HostListener('drop')\n    onDrop () {\n        return false\n    }\n\n    hasVerticalTabs () {\n        return this.config.store.appearance.tabsLocation === 'left' || this.config.store.appearance.tabsLocation === 'right'\n    }\n\n    get targetTabSize (): any {\n        if (this.hasVerticalTabs()) {\n            return '*'\n        }\n        return this.config.store.appearance.flexTabs ? '*' : '200px'\n    }\n\n    onTabsReordered (event: CdkDragDrop<BaseTabComponent[]>) {\n        const tab: BaseTabComponent = event.item.data\n        if (!this.app.tabs.includes(tab)) {\n            if (tab.parent instanceof SplitTabComponent) {\n                tab.parent.removeTab(tab)\n                this.app.wrapAndAddTab(tab)\n            }\n        }\n        moveItemInArray(this.app.tabs, event.previousIndex, event.currentIndex)\n        this.app.emitTabsChanged()\n    }\n\n    onTransfersChange () {\n        if (this.activeTransfers.length === 0) {\n            this.activeTransfersDropdown.close()\n        }\n    }\n\n    @HostBinding('class.vibrant') get isVibrant () {\n        return this.config.store?.appearance.vibrancy\n    }\n\n    private async getToolbarButtons (aboveZero: boolean): Promise<Command[]> {\n        return (await this.commands.getCommands({ tab: this.app.activeTab ?? undefined }))\n            .filter(x => x.locations?.includes(aboveZero ? CommandLocation.RightToolbar : CommandLocation.LeftToolbar))\n    }\n\n    toggleMaximize (): void {\n        this.hostWindow.toggleMaximize()\n    }\n\n    protected isTitleBarNeeded (): boolean {\n        return (\n            this.config.store.appearance.frame === 'full'\n            ||\n                this.hostApp.platform !== Platform.macOS\n                && this.config.store.appearance.frame === 'thin'\n                && this.config.store.appearance.tabsLocation !== 'top'\n                && this.config.store.appearance.tabsLocation !== 'bottom'\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/base.component.ts",
    "content": "import { Observable, Subscription, Subject } from 'rxjs'\n\ninterface CancellableEvent {\n    element: HTMLElement\n    event: string\n    handler: EventListenerOrEventListenerObject\n    options?: boolean|AddEventListenerOptions\n}\n\nexport class SubscriptionContainer {\n    private subscriptions: Subscription[] = []\n    private events: CancellableEvent[] = []\n\n    isEmpty (): boolean {\n        return this.events.length === 0 && this.subscriptions.length === 0\n    }\n\n    addEventListener (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {\n        element.addEventListener(event, handler, options)\n        this.events.push({\n            element,\n            event,\n            handler,\n            options,\n        })\n    }\n\n    subscribe <T> (observable: Observable<T>, handler: (v: T) => void): void {\n        this.subscriptions.push(observable.subscribe(handler))\n    }\n\n    cancelAll (): void {\n        for (const s of this.subscriptions) {\n            s.unsubscribe()\n        }\n        for (const e of this.events) {\n            e.element.removeEventListener(e.event, e.handler, e.options)\n        }\n        this.subscriptions = []\n        this.events = []\n    }\n}\n\nexport class BaseComponent {\n    protected get destroyed$ (): Observable<void> { return this._destroyed }\n    private _destroyed = new Subject<void>()\n    private _subscriptionContainer = new SubscriptionContainer()\n\n    addEventListenerUntilDestroyed (element: HTMLElement, event: string, handler: EventListenerOrEventListenerObject, options?: boolean|AddEventListenerOptions): void {\n        this._subscriptionContainer.addEventListener(element, event, handler, options)\n    }\n\n    subscribeUntilDestroyed <T> (observable: Observable<T>, handler: (v: T) => void): void {\n        this._subscriptionContainer.subscribe(observable, handler)\n    }\n\n    ngOnDestroy (): void {\n        this._destroyed.next()\n        this._destroyed.complete()\n        this._subscriptionContainer.cancelAll()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/baseTab.component.ts",
    "content": "import { Observable, Subject, BehaviorSubject, distinctUntilChanged, filter, debounceTime } from 'rxjs'\nimport { EmbeddedViewRef, Injector, ViewContainerRef, ViewRef } from '@angular/core'\nimport { RecoveryToken } from '../api/tabRecovery'\nimport { BaseComponent } from './base.component'\nimport { ConfigService } from '../services/config.service'\n\n/**\n * Represents an active \"process\" inside a tab,\n * for example, a user process running inside a terminal tab\n */\nexport interface BaseTabProcess {\n    name: string\n}\n\nexport interface GetRecoveryTokenOptions {\n    includeState: boolean\n}\n\n/**\n * Abstract base class for custom tab components\n */\n// @Component({ template: '' })\nexport abstract class BaseTabComponent extends BaseComponent {\n    /**\n     * Parent tab (usually a SplitTabComponent)\n     */\n    parent: BaseTabComponent|null = null\n\n    /**\n     * Current tab title\n     */\n    title: string\n\n    /**\n     * User-defined title override\n     */\n    customTitle: string\n\n    /**\n     * Last tab activity state\n     */\n    hasActivity = false\n\n    /**\n     * ViewRef to the tab DOM element\n     */\n    hostView: ViewRef\n\n    /**\n     * CSS color override for the tab's header\n     */\n    get color (): string|null { return this._color }\n    set color (value: string|null) { this._color = value }\n    private _color: string|null = null\n\n    /**\n     * icon override for the tab's header\n     */\n    get icon (): string|null { return this._icon }\n    set icon (value: string|null) { this._icon = value }\n    private _icon: string|null = null\n\n    hasFocus = false\n\n    /**\n     * Ping this if your recovery state has been changed and you want\n     * your tab state to be saved sooner\n     */\n    protected recoveryStateChangedHint = new Subject<void>()\n    protected viewContainer?: ViewContainerRef\n\n    /* @hidden */\n    viewContainerEmbeddedRef?: EmbeddedViewRef<any>\n\n    private titleChange = new Subject<string>()\n    private focused = new Subject<void>()\n    private blurred = new Subject<void>()\n    protected visibility = new BehaviorSubject<boolean>(false)\n    protected progress = new BehaviorSubject<number|null>(null)\n    protected activity = new BehaviorSubject<boolean>(false)\n    private destroyed = new Subject<void>()\n\n    private _destroyCalled = false\n\n    get focused$ (): Observable<void> { return this.focused }\n    get blurred$ (): Observable<void> { return this.blurred }\n    /* @hidden */\n    get visibility$ (): Observable<boolean> { return this.visibility }\n    get titleChange$ (): Observable<string> { return this.titleChange.pipe(distinctUntilChanged()) }\n    get progress$ (): Observable<number|null> { return this.progress.pipe(distinctUntilChanged()) }\n    get activity$ (): Observable<boolean> { return this.activity }\n    get destroyed$ (): Observable<void> { return this.destroyed }\n    get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }\n\n    protected config: ConfigService\n\n    protected constructor (injector: Injector) {\n        super()\n        this.config = injector.get(ConfigService)\n        this.focused$.subscribe(() => {\n            this.hasFocus = true\n        })\n        this.blurred$.subscribe(() => {\n            this.hasFocus = false\n        })\n        this.subscribeUntilDestroyed(this.progress.pipe(\n            filter(x => x !== null),\n            debounceTime(5000),\n        ), () => {\n            this.setProgress(null)\n        })\n    }\n\n    setTitle (title: string): void {\n        this.title = title\n        if (!this.customTitle) {\n            this.titleChange.next(title)\n        }\n    }\n\n    /**\n     * Sets visual progressbar on the tab\n     *\n     * @param  {type} progress: value between 0 and 1, or `null` to remove\n     */\n    setProgress (progress: number|null): void {\n        this.progress.next(progress)\n    }\n\n    /**\n     * Shows the activity marker on the tab header\n     */\n    displayActivity (): void {\n        if (!this.hasActivity) {\n            this.hasActivity = true\n            this.activity.next(true)\n        }\n    }\n\n    /**\n     * Removes the activity marker from the tab header\n     */\n    clearActivity (): void {\n        if (this.hasActivity) {\n            this.hasActivity = false\n            this.activity.next(false)\n        }\n    }\n\n    /**\n     * Override this and implement a [[TabRecoveryProvider]] to enable recovery\n     * for your custom tab\n     *\n     * @return JSON serializable tab state representation\n     *         for your [[TabRecoveryProvider]] to parse\n     */\n    async getRecoveryToken (options?: GetRecoveryTokenOptions): Promise<RecoveryToken|null> { // eslint-disable-line @typescript-eslint/no-unused-vars\n        return null\n    }\n\n    /**\n     * Override this to enable task completion notifications for the tab\n     */\n    async getCurrentProcess (): Promise<BaseTabProcess|null> {\n        return null\n    }\n\n    /**\n     * Return false to prevent the tab from being closed\n     */\n    async canClose (): Promise<boolean> {\n        return true\n    }\n\n    emitFocused (): void {\n        this.focused.next()\n    }\n\n    emitBlurred (): void {\n        this.blurred.next()\n    }\n\n    /* @hidden */\n    emitVisibility (visibility: boolean): void {\n        this.visibility.next(visibility)\n    }\n\n    insertIntoContainer (container: ViewContainerRef): EmbeddedViewRef<any> {\n        this.viewContainerEmbeddedRef = container.insert(this.hostView) as EmbeddedViewRef<any>\n        this.viewContainer = container\n        return this.viewContainerEmbeddedRef\n    }\n\n    removeFromContainer (): void {\n        if (!this.viewContainer || !this.viewContainerEmbeddedRef) {\n            return\n        }\n        const viewIndex = this.viewContainer.indexOf(this.viewContainerEmbeddedRef)\n        if (viewIndex !== -1) {\n            this.viewContainer.detach(viewIndex)\n        }\n        this.viewContainerEmbeddedRef = undefined\n        this.viewContainer = undefined\n    }\n\n    get topmostParent (): BaseTabComponent|null {\n        let parent = this.parent\n        while (parent?.parent) {\n            parent = parent.parent\n        }\n        return parent\n    }\n\n    /**\n     * Called before the tab is closed\n     */\n    destroy (skipDestroyedEvent = false): void {\n        if (this._destroyCalled) {\n            return\n        }\n        this._destroyCalled = true\n        this.focused.complete()\n        this.blurred.complete()\n        this.titleChange.complete()\n        this.progress.complete()\n        this.activity.complete()\n        this.recoveryStateChangedHint.complete()\n        if (!skipDestroyedEvent) {\n            this.destroyed.next()\n        }\n        this.destroyed.complete()\n    }\n\n    /** @hidden */\n    ngOnDestroy (): void {\n        this.destroy()\n        super.ngOnDestroy()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/checkbox.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { NgZone, Component, Input, HostBinding, HostListener } from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\n\n/** @hidden */\n@Component({\n    selector: 'checkbox',\n    template: `\n        <div class=\"form-check form-checkbox\">\n            <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]='model'>\n            <label class=\"form-check-label\">{{text}}</label>\n        </div>\n    `,\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true },\n    ],\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n    @HostBinding('class.active') @Input() model: boolean\n    @HostBinding('class.disabled') @Input() disabled: boolean\n    @Input() text: string\n    private changed = new Array<(val: boolean) => void>()\n\n    @HostListener('click') click () {\n        NgZone.assertInAngularZone()\n        if (this.disabled) {\n            return\n        }\n\n        this.model = !this.model\n        for (const fx of this.changed) {\n            fx(this.model)\n        }\n    }\n\n    writeValue (obj: any) {\n        this.model = obj\n    }\n\n    registerOnChange (fn: any): void {\n        this.changed.push(fn)\n    }\n\n    registerOnTouched (fn: any): void {\n        this.changed.push(fn)\n    }\n\n    setDisabledState (isDisabled: boolean) {\n        this.disabled = isDisabled\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/profileIcon.component.pug",
    "content": "i.icon(\n    class='fa-fw {{icon}}',\n    [style.color]='color',\n    *ngIf='!isHTML'\n)\n.icon(\n    [fastHtmlBind]='icon',\n    *ngIf='isHTML && icon'\n)\n"
  },
  {
    "path": "tabby-core/src/components/profileIcon.component.scss",
    "content": ":host {\n    display: flex;\n    align-items: center;\n    max-width: 1.25rem;\n}\n\n::ng-deep img {\n    max-width: 100%;\n    max-height: 100%;\n}\n\n::ng-deep svg {\n    width: 100%;\n    height: 100%;\n}\n"
  },
  {
    "path": "tabby-core/src/components/profileIcon.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input } from '@angular/core'\nimport { BaseComponent } from './base.component'\n\n/** @hidden */\n@Component({\n    selector: 'profile-icon',\n    templateUrl: './profileIcon.component.pug',\n    styleUrls: ['./profileIcon.component.scss'],\n})\nexport class ProfileIconComponent extends BaseComponent {\n    @Input() icon?: string\n    @Input() color?: string\n\n    get isHTML (): boolean {\n        return this.icon?.startsWith('<') ?? false\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/promptModal.component.pug",
    "content": ".modal-body\n    input.form-control(\n        [type]='password ? \"password\" : \"text\"',\n        autofocus,\n        [(ngModel)]='value',\n        #input,\n        [placeholder]='prompt',\n        (keyup.enter)='ok()',\n        (keyup.esc)='cancel()',\n    )\n    .d-flex.align-items-start.mt-2\n        checkbox(\n            *ngIf='showRememberCheckbox',\n            [(ngModel)]='remember',\n            text='Remember'\n        )\n        button.btn.btn-primary.ms-auto(\n            (click)='ok()',\n        ) OK\n"
  },
  {
    "path": "tabby-core/src/components/promptModal.component.ts",
    "content": "import { Component, Input, ViewChild, ElementRef } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n/** @hidden */\n@Component({\n    templateUrl: './promptModal.component.pug',\n})\nexport class PromptModalComponent {\n    @Input() value: string\n    @Input() prompt: string|undefined\n    @Input() password: boolean\n    @Input() remember: boolean\n    @Input() showRememberCheckbox: boolean\n    @ViewChild('input') input: ElementRef\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) { }\n\n    ngOnInit (): void {\n        setTimeout(() => {\n            this.input.nativeElement.focus()\n        })\n    }\n\n    ok (): void {\n        this.modalInstance.close({\n            value: this.value,\n            remember: this.remember,\n        })\n    }\n\n    cancel (): void {\n        this.modalInstance.close(null)\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/renameTabModal.component.pug",
    "content": ".modal-body\n    input.form-control(type='text', #input, [(ngModel)]='value', (keyup.enter)='save()', autofocus)\n\n.modal-footer\n    button.btn.btn-primary((click)='save()', translate) Save\n    button.btn.btn-secondary((click)='close()', translate) Cancel\n"
  },
  {
    "path": "tabby-core/src/components/renameTabModal.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, ElementRef, ViewChild } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n/** @hidden */\n@Component({\n    selector: 'rename-tab-modal',\n    templateUrl: './renameTabModal.component.pug',\n})\nexport class RenameTabModalComponent {\n    @Input() value: string\n    @ViewChild('input') input: ElementRef\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) { }\n\n    ngOnInit () {\n        setTimeout(() => {\n            this.input.nativeElement.focus()\n            this.input.nativeElement.select()\n        }, 250)\n    }\n\n    save () {\n        this.modalInstance.close(this.value)\n    }\n\n    close () {\n        this.modalInstance.dismiss()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/safeModeModal.component.pug",
    "content": ".modal-body\n    .alert.alert-danger(translate) Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:\n\n    pre {{error}}\n\n.modal-footer\n    button.btn.btn-primary((click)='close()', translate) Close\n"
  },
  {
    "path": "tabby-core/src/components/safeModeModal.component.ts",
    "content": "import { Component, Input } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n/** @hidden */\n@Component({\n    templateUrl: './safeModeModal.component.pug',\n})\nexport class SafeModeModalComponent {\n    @Input() error: Error\n\n    constructor (\n        public modalInstance: NgbActiveModal,\n    ) {\n        this.error = window['safeModeReason']\n    }\n\n    close (): void {\n        this.modalInstance.dismiss()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/selectorModal.component.pug",
    "content": ".modal-body\n    input.form-control.form-control-lg(\n        type='text',\n        [(ngModel)]='filter',\n        autofocus,\n        [placeholder]='name',\n        (ngModelChange)='onFilterChange()'\n    )\n\n    .list-group.list-group-light(*ngIf='filteredOptions.length')\n        ng-container(*ngFor='let option of filteredOptions; let i = index')\n            label.group-header(\n                *ngIf='hasGroups && option.group !== filteredOptions[i - 1]?.group'\n            ) {{option.group}}\n            a.list-group-item.list-group-item-action.d-flex.align-items-center(\n                #item,\n                (click)='selectOption(option)',\n                [class.active]='selectedIndex == i'\n            )\n                profile-icon(\n                    [icon]='option.icon',\n                    [color]='option.color'\n                )\n                .title.me-2 {{getOptionText(option)}}\n                .description.no-wrap.text-muted(\n                    *ngIf='option.description !== getOptionText(option)'\n                ) {{option.description}}\n                .ms-auto\n                .no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()')\n                    span BACKSPACE\n                    i.fas.fa-pencil.ms-1\n                .no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i')\n                    span ENTER\n                    i.fas.fa-arrow-right.ms-1\n"
  },
  {
    "path": "tabby-core/src/components/selectorModal.component.scss",
    "content": ".modal-body {\n    padding: 0;\n}\n\n.list-group {\n    max-height: 70vh;\n    overflow: auto;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n    padding: 10px 15px;\n}\n\n.group-header {\n    padding: 0 1rem;\n    margin: 15px 0 10px;\n    font-weight: bold;\n\n    &:first-child {\n        margin-top: 5px;\n    }\n}\n\n.icon {\n    width: 1.25rem;\n    margin-right: 0.25rem;\n}\n\n.title {\n    margin-left: 10px;\n    flex: none;\n}\n\n.description {\n    flex: 1 1 0;\n}\n\ninput {\n    border-radius: 0;\n    border: none;\n}\n\nprofile-icon {\n    width: 14px;\n    height: 14px;\n}\n"
  },
  {
    "path": "tabby-core/src/components/selectorModal.component.ts",
    "content": "import { firstBy } from 'thenby'\nimport { Component, Input, HostListener, ViewChildren, QueryList, ElementRef } from '@angular/core' // eslint-disable-line @typescript-eslint/no-unused-vars\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport FuzzySearch from 'fuzzy-search'\nimport { SelectorOption } from '../api/selector'\n\n/** @hidden */\n@Component({\n    selector: 'selector-modal',\n    templateUrl: './selectorModal.component.pug',\n    styleUrls: ['./selectorModal.component.scss'],\n})\nexport class SelectorModalComponent<T> {\n    @Input() options: SelectorOption<T>[]\n    @Input() filteredOptions: SelectorOption<T>[]\n    @Input() filter = ''\n    @Input() name: string\n    @Input() selectedIndex = 0\n    hasGroups = false\n    @ViewChildren('item') itemChildren: QueryList<ElementRef>\n    private preventEdit: boolean\n\n    constructor (public modalInstance: NgbActiveModal) {\n        this.preventEdit = false\n    }\n\n    ngOnInit (): void {\n        this.onFilterChange()\n        this.hasGroups = this.options.some(x => x.group)\n    }\n\n    @HostListener('keydown', ['$event']) onKeyDown (event: KeyboardEvent): void {\n        if (event.key === 'Escape') {\n            this.close()\n        } else if (this.filteredOptions.length > 0) {\n            if (event.key === 'PageUp' || event.key === 'ArrowUp' && event.metaKey) {\n                this.selectedIndex -= Math.min(10, Math.max(1, this.selectedIndex))\n                event.preventDefault()\n            } else if (event.key === 'PageDown' || event.key === 'ArrowDown' && event.metaKey) {\n                this.selectedIndex += Math.min(10, Math.max(1, this.filteredOptions.length - this.selectedIndex - 1))\n                event.preventDefault()\n            } else if (event.key === 'ArrowUp') {\n                this.selectedIndex--\n                event.preventDefault()\n            } else if (event.key === 'ArrowDown') {\n                this.selectedIndex++\n                event.preventDefault()\n            } else if (event.key === 'Enter') {\n                this.selectOption(this.filteredOptions[this.selectedIndex])\n            } else if (event.key === 'Backspace' && !this.preventEdit) {\n                if (this.canEditSelected()) {\n                    event.preventDefault()\n                    this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent!\n                    this.onFilterChange()\n                } else {\n                    this.preventEdit = true\n                }\n            }\n\n            this.selectedIndex = (this.selectedIndex + this.filteredOptions.length) % this.filteredOptions.length\n\n            Array.from(this.itemChildren)[this.selectedIndex]?.nativeElement.scrollIntoView({\n                behavior: 'smooth',\n                block: 'nearest',\n            })\n        }\n    }\n\n    @HostListener('keyup', ['$event']) onKeyUp (event: KeyboardEvent): void {\n        if (event.key === 'Backspace' && this.preventEdit) {\n            this.preventEdit = false\n        }\n    }\n\n    onFilterChange (): void {\n        const f = this.filter.trim().toLowerCase()\n        if (!f) {\n            this.filteredOptions = this.options.slice().sort(\n                firstBy<SelectorOption<T>, number>(x => x.weight ?? 0)\n                    .thenBy<SelectorOption<T>, string>(x => x.group ?? '')\n                    .thenBy<SelectorOption<T>, string>(x => x.name),\n            )\n                .filter(x => !x.freeInputPattern)\n        } else {\n            // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n            this.filteredOptions = new FuzzySearch(\n                this.options,\n                ['name', 'group', 'description'],\n                { sort: true },\n            ).search(f)\n\n            this.options.filter(x => x.freeInputPattern).sort(firstBy<SelectorOption<T>, number>(x => x.weight ?? 0)).forEach(freeOption => {\n                if (!this.filteredOptions.includes(freeOption)) {\n                    this.filteredOptions.push(freeOption)\n                }\n            })\n        }\n        this.selectedIndex = Math.max(0, this.selectedIndex)\n        this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex)\n    }\n\n    filterMatches (option: SelectorOption<T>, terms: string[]): boolean {\n        const content = (option.group ?? '') + option.name + (option.description ?? '')\n        return terms.every(term => content.toLowerCase().includes(term))\n    }\n\n    getOptionText (option: SelectorOption<T>): string {\n        if (option.freeInputPattern) {\n            return option.freeInputPattern.replace('%s', this.filter)\n        }\n        return option.name\n    }\n\n    selectOption (option: SelectorOption<T>): void {\n        this.modalInstance.close(option.result)\n        setTimeout(() => option.callback?.(this.filter))\n    }\n\n    canEditSelected (): boolean {\n        return !this.filter && !!this.filteredOptions[this.selectedIndex].freeInputEquivalent && this.options.some(x => x.freeInputPattern)\n    }\n\n    close (): void {\n        this.modalInstance.dismiss()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/selfPositioning.component.ts",
    "content": "import { HostBinding, ElementRef, Component } from '@angular/core'\nimport { BaseComponent } from './base.component'\n\n@Component({})\nexport abstract class SelfPositioningComponent extends BaseComponent {\n    @HostBinding('style.left') cssLeft = ''\n    @HostBinding('style.top') cssTop = ''\n    @HostBinding('style.width') cssWidth: string | null = null\n    @HostBinding('style.height') cssHeight: string | null = null\n\n    constructor (protected element: ElementRef) { super() }\n\n    protected setDimensions (x: number, y: number, w: number, h: number, unit = '%'): void {\n        this.cssLeft = `${x}${unit}`\n        this.cssTop = `${y}${unit}`\n        this.cssWidth = w ? `${w}${unit}` : null\n        this.cssHeight = h ? `${h}${unit}` : null\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTab.component.scss",
    "content": ":host {\n    display: block;\n    position: relative;\n    flex: auto;\n}\n\n::ng-deep split-tab > .child {\n    position: absolute;\n    transition: 0.125s all;\n    opacity: .75;\n\n    &.focused {\n        opacity: 1;\n    }\n\n    &.minimized {\n        opacity: .1;\n    }\n\n    &.maximized {\n        z-index: 6;\n        box-shadow: rgba(0, 0, 0, 0.25) 0px 0px 30px;\n        backdrop-filter: blur(10px);\n        border-radius: 10px;\n    }\n}\n\n::ng-deep .no-animations split-tab > .child {\n    transition: none;\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTab.component.ts",
    "content": "import { Observable, Subject, takeWhile } from 'rxjs'\nimport { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy, Injector } from '@angular/core'\nimport { BaseTabComponent, BaseTabProcess, GetRecoveryTokenOptions } from './baseTab.component'\nimport { TabRecoveryProvider, RecoveryToken } from '../api/tabRecovery'\nimport { TabsService, NewTabParameters } from '../services/tabs.service'\nimport { HotkeysService } from '../services/hotkeys.service'\nimport { TabRecoveryService } from '../services/tabRecovery.service'\n\nexport type SplitOrientation = 'v' | 'h'\nexport type SplitDirection = 'r' | 't' | 'b' | 'l'\nexport type ResizeDirection = 'v' | 'h' | 'dv' | 'dh'\n\n/**\n * Describes a horizontal or vertical split row or column\n */\nexport class SplitContainer {\n    orientation: SplitOrientation = 'h'\n\n    /**\n     * Children could be tabs or other containers\n     */\n    children: (BaseTabComponent | SplitContainer)[] = []\n\n    /**\n     * Relative sizes of children, between 0 and 1. Total sum is 1\n     */\n    ratios: number[] = []\n\n    x: number\n    y: number\n    w: number\n    h: number\n\n    /**\n     * @return Flat list of all tabs inside this container\n     */\n    getAllTabs (): BaseTabComponent[] {\n        let r: BaseTabComponent[] = []\n        for (const child of this.children) {\n            if (child instanceof SplitContainer) {\n                r = r.concat(child.getAllTabs())\n            } else {\n                r.push(child)\n            }\n        }\n        return r\n    }\n\n    /**\n     * Remove unnecessarily nested child containers and renormalizes [[ratios]]\n     */\n    normalize (): void {\n        for (let i = 0; i < this.children.length; i++) {\n            const child = this.children[i]\n\n            if (child instanceof SplitContainer) {\n                child.normalize()\n\n                if (child.children.length === 0) {\n                    this.children.splice(i, 1)\n                    this.ratios.splice(i, 1)\n                    i--\n                    continue\n                } else if (child.children.length === 1) {\n                    this.children[i] = child.children[0]\n                } else if (child.orientation === this.orientation) {\n                    const ratio = this.ratios[i]\n                    this.children.splice(i, 1)\n                    this.ratios.splice(i, 1)\n                    for (let j = 0; j < child.children.length; j++) {\n                        this.children.splice(i, 0, child.children[j])\n                        this.ratios.splice(i, 0, child.ratios[j] * ratio)\n                        i++\n                    }\n                }\n            }\n        }\n\n        let s = 0\n        for (const x of this.ratios) {\n            s += x\n        }\n        this.ratios = this.ratios.map(x => x / s)\n    }\n\n    /**\n     * Makes all tabs have the same size\n     */\n    equalize (): void {\n        for (const child of this.children) {\n            if (child instanceof SplitContainer) {\n                child.equalize()\n            }\n        }\n        this.ratios.fill(1 / this.ratios.length)\n    }\n\n    /**\n     * Gets the left/top side offset for the given element index (between 0 and 1)\n     */\n    getOffsetRatio (index: number): number {\n        let s = 0\n        for (let i = 0; i < index; i++) {\n            s += this.ratios[i]\n        }\n        return s\n    }\n\n    async serialize (tabsRecovery: TabRecoveryService, options?: GetRecoveryTokenOptions): Promise<RecoveryToken> {\n        const children: any[] = []\n        for (const child of this.children) {\n            if (child instanceof SplitContainer) {\n                children.push(await child.serialize(tabsRecovery, options))\n            } else {\n                children.push(await tabsRecovery.getFullRecoveryToken(child, options))\n            }\n        }\n        return {\n            type: 'app:split-tab',\n            ratios: this.ratios,\n            orientation: this.orientation,\n            children,\n        }\n    }\n}\n\n/**\n * Represents a spanner (draggable border between two split areas)\n */\nexport interface SplitSpannerInfo {\n    container: SplitContainer\n\n    /**\n     * Number of the right/bottom split in the container\n     */\n    index: number\n}\n\n/**\n * Represents a tab drop zone\n */\nexport type SplitDropZoneInfo = {\n    x: number\n    y: number\n    w: number\n    h: number\n} & ({\n    type: 'absolute'\n    container: SplitContainer\n    position: number\n} | {\n    type: 'relative'\n    relativeTo?: BaseTabComponent|SplitContainer\n    side: SplitDirection\n})\n\n\n/**\n * Split tab is a tab that contains other tabs and allows further splitting them\n * You'll mainly encounter it inside [[AppService]].tabs\n */\n@Component({\n    selector: 'split-tab',\n    template: `\n        <ng-container #vc></ng-container>\n        <split-tab-spanner\n            *ngFor='let spanner of _spanners'\n            [container]='spanner.container'\n            [index]='spanner.index'\n            (change)='onSpannerAdjusted(spanner)'\n            (resizing)='onSpannerResizing($event)'\n        ></split-tab-spanner>\n        <split-tab-drop-zone\n            *ngFor='let dropZone of _dropZones'\n            [parent]='this'\n            [dropZone]='dropZone'\n            (tabDropped)='onTabDropped($event, dropZone)'\n        >\n        </split-tab-drop-zone>\n        <split-tab-pane-label\n            *ngFor='let tab of getAllTabs()'\n            cdkDropList\n            cdkAutoDropGroup='app-tabs'\n            [tab]='tab'\n            [parent]='this'\n        >\n        </split-tab-pane-label>\n    `,\n    styleUrls: ['./splitTab.component.scss'],\n})\nexport class SplitTabComponent extends BaseTabComponent implements AfterViewInit, OnDestroy {\n    static DIRECTIONS: SplitDirection[] = ['t', 'r', 'b', 'l']\n\n    /** @hidden */\n    @ViewChild('vc', { read: ViewContainerRef }) viewContainer: ViewContainerRef\n\n    /**\n     * Top-level split container\n     */\n    root: SplitContainer\n\n    /** @hidden */\n    _recoveredState: any\n\n    /** @hidden */\n    _spanners: SplitSpannerInfo[] = []\n\n    /** @hidden */\n    _dropZones: SplitDropZoneInfo[] = []\n\n    /** @hidden */\n    _allFocusMode = false\n\n    /** @hidden */\n    _spannerResizing = false\n\n    /**\n     * Disables display of dynamic window/tab title provided by the shell\n     */\n    disableDynamicTitle = false\n\n    /** @hidden */\n    private focusedTab: BaseTabComponent|null = null\n    private maximizedTab: BaseTabComponent|null = null\n    private viewRefs: Map<BaseTabComponent, EmbeddedViewRef<any>> = new Map()\n\n    private tabAdded = new Subject<BaseTabComponent>()\n    private tabAdopted = new Subject<BaseTabComponent>()\n    private tabRemoved = new Subject<BaseTabComponent>()\n    private splitAdjusted = new Subject<SplitSpannerInfo>()\n    private focusChanged = new Subject<BaseTabComponent>()\n    private initialized = new Subject<void>()\n\n    get tabAdded$ (): Observable<BaseTabComponent> { return this.tabAdded }\n\n    /**\n     * Fired when an existing top-level tab is dragged into this tab\n     */\n    get tabAdopted$ (): Observable<BaseTabComponent> { return this.tabAdopted }\n\n    get tabRemoved$ (): Observable<BaseTabComponent> { return this.tabRemoved }\n\n    /**\n     * Fired when split ratio is changed for a given spanner\n     */\n    get splitAdjusted$ (): Observable<SplitSpannerInfo> { return this.splitAdjusted }\n\n    /**\n     * Fired when a different sub-tab gains focus\n     */\n    get focusChanged$ (): Observable<BaseTabComponent> { return this.focusChanged }\n\n    /**\n     * Fired once tab layout is created and child tabs can be added\n     */\n    get initialized$ (): Observable<void> { return this.initialized }\n\n    /** @hidden */\n    constructor (\n        private hotkeys: HotkeysService,\n        private tabsService: TabsService,\n        private tabRecovery: TabRecoveryService,\n        injector: Injector,\n    ) {\n        super(injector)\n        this.root = new SplitContainer()\n        this.setTitle('')\n\n        this.focused$.subscribe(() => {\n            this.getAllTabs().forEach(x => x.emitFocused())\n            if (this.focusedTab) {\n                this.focus(this.focusedTab)\n            } else {\n                this.focusAnyIn(this.root)\n            }\n        })\n        this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))\n        this.visibility$.subscribe(visibility => this.getAllTabs().forEach(x => x.emitVisibility(visibility)))\n\n        this.tabAdded$.subscribe(() => this.updateTitle())\n        this.tabRemoved$.subscribe(() => this.updateTitle())\n\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (!this.hasFocus || !this.focusedTab) {\n                return\n            }\n            switch (hotkey) {\n                case 'split-right':\n                    this.splitTab(this.focusedTab, 'r')\n                    break\n                case 'split-bottom':\n                    this.splitTab(this.focusedTab, 'b')\n                    break\n                case 'split-top':\n                    this.splitTab(this.focusedTab, 't')\n                    break\n                case 'split-left':\n                    this.splitTab(this.focusedTab, 'l')\n                    break\n                case 'pane-nav-left':\n                    this.navigate('l')\n                    break\n                case 'pane-nav-right':\n                    this.navigate('r')\n                    break\n                case 'pane-nav-up':\n                    this.navigate('t')\n                    break\n                case 'pane-nav-down':\n                    this.navigate('b')\n                    break\n                case 'pane-nav-previous':\n                    this.navigateLinear(-1)\n                    break\n                case 'pane-nav-next':\n                    this.navigateLinear(1)\n                    break\n                case 'pane-nav-1':\n                    this.navigateSpecific(0)\n                    break\n                case 'pane-nav-2':\n                    this.navigateSpecific(1)\n                    break\n                case 'pane-nav-3':\n                    this.navigateSpecific(2)\n                    break\n                case 'pane-nav-4':\n                    this.navigateSpecific(3)\n                    break\n                case 'pane-nav-5':\n                    this.navigateSpecific(4)\n                    break\n                case 'pane-nav-6':\n                    this.navigateSpecific(5)\n                    break\n                case 'pane-nav-7':\n                    this.navigateSpecific(6)\n                    break\n                case 'pane-nav-8':\n                    this.navigateSpecific(7)\n                    break\n                case 'pane-nav-9':\n                    this.navigateSpecific(8)\n                    break\n                case 'pane-maximize':\n                    if (this.maximizedTab) {\n                        this.maximize(null)\n                    } else if (this.getAllTabs().length > 1) {\n                        this.maximize(this.focusedTab)\n                    }\n                    break\n                case 'close-pane':\n                    this.focusedTab.destroy()\n                    break\n                case 'pane-increase-vertical':\n                    this.resizePane('v')\n                    break\n                case 'pane-decrease-vertical':\n                    this.resizePane('dv')\n                    break\n                case 'pane-increase-horizontal':\n                    this.resizePane('h')\n                    break\n                case 'pane-decrease-horizontal':\n                    this.resizePane('dh')\n                    break\n            }\n        })\n    }\n\n    /** @hidden */\n    async ngAfterViewInit (): Promise<void> {\n        if (this._recoveredState) {\n            await this.recoverContainer(this.root, this._recoveredState)\n            this.updateTitle()\n            this.layout()\n            setTimeout(() => {\n                if (this.hasFocus) {\n                    for (const tab of this.getAllTabs()) {\n                        this.focus(tab)\n                    }\n                }\n            }, 100)\n\n            // Propagate visibility to new children\n            this.emitVisibility(this.visibility.value)\n        }\n        this.initialized.next()\n        this.initialized.complete()\n    }\n\n    /** @hidden */\n    ngOnDestroy (): void {\n        this.tabAdded.complete()\n        this.tabRemoved.complete()\n        super.ngOnDestroy()\n    }\n\n    /** @returns Flat list of all sub-tabs */\n    getAllTabs (): BaseTabComponent[] {\n        return this.root.getAllTabs()\n    }\n\n    getFocusedTab (): BaseTabComponent|null {\n        return this.focusedTab\n    }\n\n    getMaximizedTab (): BaseTabComponent|null {\n        return this.maximizedTab\n    }\n\n    focus (tab: BaseTabComponent): void {\n        this.focusedTab = tab\n        for (const x of this.getAllTabs()) {\n            if (x !== tab) {\n                x.emitBlurred()\n            }\n        }\n        tab.emitFocused()\n        this.focusChanged.next(tab)\n\n        if (this.maximizedTab !== tab) {\n            this.maximizedTab = null\n        }\n        this.layout()\n    }\n\n    maximize (tab: BaseTabComponent|null): void {\n        this.maximizedTab = tab\n        this.layout()\n    }\n\n    /**\n     * Focuses the first available tab inside the given [[SplitContainer]]\n     */\n    focusAnyIn (parent?: BaseTabComponent | SplitContainer): void {\n        if (!parent) {\n            return\n        }\n        if (parent instanceof SplitContainer) {\n            this.focusAnyIn(parent.children[0])\n        } else {\n            this.focus(parent)\n        }\n    }\n\n    addTab (tab: BaseTabComponent, relative: BaseTabComponent|null, side: SplitDirection): Promise<void> {\n        return this.add(tab, relative, side)\n    }\n\n    /**\n     * Inserts a new `tab` to the `side` of the `relative` tab\n     */\n    async add (thing: BaseTabComponent|SplitContainer, relative: BaseTabComponent|SplitContainer|null, side: SplitDirection): Promise<void> {\n        if (thing instanceof SplitTabComponent) {\n            const tab = thing\n            thing = tab.root\n            tab.root = new SplitContainer()\n            for (const child of thing.getAllTabs()) {\n                child.removeFromContainer()\n            }\n            tab.destroy()\n        }\n\n        let allTabs: BaseTabComponent[] = []\n        if (thing instanceof BaseTabComponent) {\n            allTabs = [thing]\n        } else if (thing instanceof SplitContainer) {\n            allTabs = thing.getAllTabs()\n        }\n        for (const tab of allTabs) {\n            if (tab.parent instanceof SplitTabComponent) {\n                tab.parent.removeTab(tab)\n            }\n            tab.removeFromContainer()\n            tab.parent = this\n\n            tab.emitVisibility(this.visibility.value)\n        }\n\n        let target = relative ? this.getParentOf(relative) : null\n        if (!target) {\n            // Rewrap the root container just in case the orientation isn't compatible\n            target = new SplitContainer()\n            target.orientation = ['l', 'r'].includes(side) ? 'h' : 'v'\n            target.children = [this.root]\n            target.ratios = [1]\n            this.root = target\n        }\n\n        let insertIndex = relative\n            ? target.children.indexOf(relative) + ('tl'.includes(side) ? 0 : 1)\n            : 'tl'.includes(side) ? 0 : -1\n\n        if (\n            target.orientation === 'v' && ['l', 'r'].includes(side) ||\n            target.orientation === 'h' && ['t', 'b'].includes(side)\n        ) {\n            // Inserting into a container but the orientation isn't compatible\n            const newContainer = new SplitContainer()\n            newContainer.orientation = ['l', 'r'].includes(side) ? 'h' : 'v'\n            newContainer.children = relative ? [relative] : []\n            newContainer.ratios = [1]\n            target.children.splice(relative ? target.children.indexOf(relative) : -1, 1, newContainer)\n            target = newContainer\n            insertIndex = 'tl'.includes(side) ? 0 : 1\n        }\n\n        for (let i = 0; i < target.children.length; i++) {\n            target.ratios[i] *= target.children.length / (target.children.length + 1)\n        }\n        if (insertIndex === -1) {\n            insertIndex = target.ratios.length\n        }\n        target.ratios.splice(insertIndex, 0, 1 / (target.children.length + 1))\n        target.children.splice(insertIndex, 0, thing)\n\n        this.recoveryStateChangedHint.next()\n\n        await this.initialized$.toPromise()\n\n        for (const tab of thing instanceof SplitContainer ? thing.getAllTabs() : [thing]) {\n            this.attachTabView(tab)\n            this.onAfterTabAdded(tab)\n        }\n\n        this.root.normalize()\n    }\n\n    removeTab (tab: BaseTabComponent): void {\n        const parent = this.getParentOf(tab)\n        if (!parent) {\n            return\n        }\n        const index = parent.children.indexOf(tab)\n        parent.ratios.splice(index, 1)\n        parent.children.splice(index, 1)\n\n        tab.removeFromContainer()\n        tab.parent = null\n        this.viewRefs.delete(tab)\n\n        this.layout()\n\n        this.tabRemoved.next(tab)\n        if (this.root.children.length === 0) {\n            this.destroy()\n        } else {\n            this.focusAnyIn(parent)\n        }\n    }\n\n    replaceTab (tab: BaseTabComponent, newTab: BaseTabComponent): void {\n        const parent = this.getParentOf(tab)\n        if (!parent) {\n            return\n        }\n        const position = parent.children.indexOf(tab)\n        parent.children[position] = newTab\n        tab.removeFromContainer()\n        this.attachTabView(newTab)\n        tab.parent = null\n        newTab.parent = this\n        this.recoveryStateChangedHint.next()\n        this.onAfterTabAdded(newTab)\n        this.updateTitle()\n    }\n\n    /**\n      * Changes the size of the focused pane in the given direction\n      */\n    resizePane (direction: ResizeDirection): void {\n        const resizeStep = this.config.store.terminal.paneResizeStep\n\n        // The direction of the resize pane, vertically or horizontally\n        let directionvh: SplitOrientation = 'h'\n\n        const isDecreasing: boolean = direction === 'dv' || direction === 'dh'\n\n        if (direction === 'dh') {\n            directionvh = 'h'\n        }\n        if (direction === 'dv') {\n            directionvh = 'v'\n        }\n        if (direction === 'h') {\n            directionvh = 'h'\n        }\n        if (direction === 'v') {\n            directionvh = 'v'\n        }\n        if (!this.focusedTab) {\n            console.debug('No currently focused tab')\n            return\n        }\n\n        let currentContainer: BaseTabComponent | SplitContainer = this.focusedTab\n        let child: BaseTabComponent | SplitContainer | null = this.focusedTab\n        let curSplitOrientation: SplitOrientation | null = null\n\n        // Find the first split that is in the orientations that the user chooses to change\n        while (curSplitOrientation !== directionvh) {\n            const parentContainer = this.getParentOf(currentContainer)\n            if (!parentContainer) {\n                return\n            }\n            child = currentContainer\n            currentContainer = parentContainer\n            if (currentContainer instanceof SplitContainer) {\n                curSplitOrientation = currentContainer.orientation\n            }\n        }\n\n        if (!(currentContainer instanceof SplitContainer)) {\n            return\n        }\n\n        // Determine which index in the ratios refers to the child that will be modified\n        const currentChildIndex = currentContainer.children.indexOf(child)\n\n        let updatedRatio = 0\n        if (isDecreasing) {\n            updatedRatio = currentContainer.ratios[currentChildIndex] - resizeStep\n            if (updatedRatio < 0) {\n                return\n            }\n        } else {\n            updatedRatio = currentContainer.ratios[currentChildIndex] + resizeStep\n            if (updatedRatio > 1) {\n                return\n            }\n        }\n\n        currentContainer.ratios[currentChildIndex] = updatedRatio\n        this.layout()\n    }\n\n    private getPaneRect (pane: BaseTabComponent): DOMRect {\n        const viewRef = this.viewRefs.get(pane)!\n        const element = viewRef.rootNodes[0] as HTMLElement\n        return element.getBoundingClientRect()\n    }\n\n    getNearestPaneInDirection (from: BaseTabComponent, direction: SplitDirection): BaseTabComponent {\n        const rect = this.getPaneRect(from)\n\n        let nearest: BaseTabComponent | null = null\n        let nearestDistance = Infinity\n\n        let panes = this.getAllTabs().map(pane => ({ pane, rect: this.getPaneRect(pane) }))\n\n        if (direction === 'l') {\n            panes = panes.filter(pane => pane.rect.right <= rect.left)\n        } else if (direction === 'r') {\n            panes = panes.filter(pane => pane.rect.left >= rect.right)\n        } else if (direction === 't') {\n            panes = panes.filter(pane => pane.rect.bottom <= rect.top)\n        } else {\n            panes = panes.filter(pane => pane.rect.top >= rect.bottom)\n        }\n\n        for (const pane of panes) {\n            if (pane.pane === from) {\n                continue\n            }\n            const distance = Math.abs(rect.left + rect.width / 2 - pane.rect.left - pane.rect.width / 2) + Math.abs(rect.top + rect.height / 2 - pane.rect.top - pane.rect.height / 2)\n            if (distance < nearestDistance) {\n                nearest = pane.pane\n                nearestDistance = distance\n            }\n        }\n\n        return nearest ?? from\n    }\n\n    /**\n     * Moves focus in the given direction\n     */\n    navigate (dir: SplitDirection): void {\n        if (!this.focusedTab) {\n            return\n        }\n\n        this.focus(this.getNearestPaneInDirection(this.focusedTab, dir))\n    }\n\n    navigateLinear (delta: number): void {\n        if (!this.focusedTab) {\n            return\n        }\n\n        const relativeTo: BaseTabComponent = this.focusedTab\n        const all = this.getAllTabs()\n        const target = all[(all.indexOf(relativeTo) + delta + all.length) % all.length]\n        this.focus(target)\n    }\n\n    navigateSpecific (target: number): void {\n        const all = this.getAllTabs()\n        if (target >= all.length) {\n            return\n        }\n\n        this.focus(all[target])\n    }\n\n    async splitTab (tab: BaseTabComponent, dir: SplitDirection): Promise<BaseTabComponent|null> {\n        const newTab = await this.tabsService.duplicate(tab)\n        if (newTab) {\n            await this.addTab(newTab, tab, dir)\n        }\n        return newTab\n    }\n\n    /**\n     * @returns the immediate parent of `tab`\n     */\n    getParentOf (tab: BaseTabComponent | SplitContainer, root?: SplitContainer): SplitContainer|null {\n        root = root ?? this.root\n        for (const child of root.children) {\n            if (child instanceof SplitContainer) {\n                const r = this.getParentOf(tab, child)\n                if (r) {\n                    return r\n                }\n            }\n            if (child === tab) {\n                return root\n            }\n        }\n        return null\n    }\n\n    /** @hidden */\n    async canClose (): Promise<boolean> {\n        return !(await Promise.all(this.getAllTabs().map(x => x.canClose()))).some(x => !x)\n    }\n\n    /** @hidden */\n    async getRecoveryToken (options?: GetRecoveryTokenOptions): Promise<any> {\n        return this.root.serialize(this.tabRecovery, options)\n    }\n\n    /** @hidden */\n    async getCurrentProcess (): Promise<BaseTabProcess|null> {\n        return (await Promise.all(this.getAllTabs().map(x => x.getCurrentProcess()))).find(x => !!x) ?? null\n    }\n\n    /** @hidden */\n    onSpannerAdjusted (spanner: SplitSpannerInfo): void {\n        this.layout()\n        this.splitAdjusted.next(spanner)\n    }\n\n    /** @hidden */\n    onSpannerResizing (state: boolean): void {\n        this._spannerResizing = state\n    }\n\n    /** @hidden */\n    onTabDropped (tab: BaseTabComponent, zone: SplitDropZoneInfo) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types\n        if (tab === this) {\n            return\n        }\n\n        if (zone.type === 'relative') {\n            this.add(tab, zone.relativeTo ?? null, zone.side)\n        } else {\n            this.add(tab, zone.container.children[zone.position], zone.container.orientation === 'h' ? 'r' : 'b')\n        }\n        this.tabAdopted.next(tab)\n    }\n\n    destroy (): void {\n        for (const x of this.getAllTabs()) {\n            x.destroy()\n        }\n        super.destroy()\n    }\n\n    layout (): void {\n        this.root.normalize()\n        this._spanners = []\n        this._dropZones = []\n        this.layoutInternal(this.root, 0, 0, 100, 100)\n    }\n\n    clearActivity (): void {\n        for (const tab of this.getAllTabs()) {\n            tab.clearActivity()\n        }\n        super.clearActivity()\n    }\n\n    get icon (): string|null {\n        return this.getFocusedTab()?.icon ?? this.getAllTabs()[0]?.icon ?? null\n    }\n\n    set icon (icon: string|null) {\n        for (const t of this.getAllTabs()) {\n            t.icon = icon\n        }\n    }\n\n    get color (): string|null {\n        return this.getFocusedTab()?.color ?? this.getAllTabs()[0]?.color ?? null\n    }\n\n    set color (color: string|null) {\n        for (const t of this.getAllTabs()) {\n            t.color = color\n        }\n    }\n\n    equalize (): void {\n        this.root.normalize()\n        this.root.equalize()\n    }\n\n    private updateTitle (): void {\n        if (this.disableDynamicTitle) {\n            return\n        }\n        const titles = [\n            this.getFocusedTab()?.title,\n            ...this.getAllTabs()\n                .filter(x => x !== this.getFocusedTab())\n                .map(x => x.title),\n        ]\n        this.setTitle([...new Set(titles)].join(' | '))\n    }\n\n    private attachTabView (tab: BaseTabComponent) {\n        const ref = tab.insertIntoContainer(this.viewContainer)\n        this.viewRefs.set(tab, ref)\n        tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'click', () => this.focus(tab))\n        if (this.config.store.terminal.focusFollowsMouse) {\n            tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'mousemove', () => {\n                if (this._spannerResizing) {\n                    return\n                }\n                this.focus(tab)\n            })\n        }\n\n        tab.subscribeUntilDestroyed(\n            this.observeUntilChildDetached(tab, tab.focused$),\n            () => this.updateTitle(),\n        )\n        tab.subscribeUntilDestroyed(\n            this.observeUntilChildDetached(tab, tab.titleChange$),\n            () => this.updateTitle(),\n        )\n        tab.subscribeUntilDestroyed(\n            this.observeUntilChildDetached(tab, tab.activity$),\n            a => a ? this.displayActivity() : this.clearActivity(),\n        )\n        tab.subscribeUntilDestroyed(\n            this.observeUntilChildDetached(tab, tab.progress$),\n            p => this.setProgress(p),\n        )\n        if (tab.title) {\n            this.updateTitle()\n        }\n        tab.subscribeUntilDestroyed(\n            this.observeUntilChildDetached(tab, tab.recoveryStateChangedHint$),\n            () => {\n                this.recoveryStateChangedHint.next()\n            },\n        )\n        tab.destroyed$.subscribe(() => {\n            this.removeTab(tab)\n        })\n    }\n\n    private observeUntilChildDetached<T> (tab: BaseTabComponent, event: Observable<T>): Observable<T> {\n        return event.pipe(takeWhile(() => {\n            return this.getAllTabs().includes(tab)\n        }))\n    }\n\n    private onAfterTabAdded (tab: BaseTabComponent) {\n        setImmediate(() => {\n            this.layout()\n            this.tabAdded.next(tab)\n            this.focus(tab)\n        })\n    }\n\n    private layoutInternal (root: SplitContainer, x: number, y: number, w: number, h: number) {\n        const size = root.orientation === 'v' ? h : w\n        const sizes = root.ratios.map(ratio => ratio * size)\n        const thickness = 10\n\n        if (root === this.root) {\n            this._dropZones.push({\n                x: x - thickness / 2,\n                y: y + thickness,\n                w: thickness,\n                h: h - thickness * 2,\n                type: 'relative',\n                side: 'l',\n            })\n            this._dropZones.push({\n                x,\n                y: y - thickness / 2,\n                w,\n                h: thickness,\n                type: 'relative',\n                side: 't',\n            })\n            this._dropZones.push({\n                x: x + w - thickness / 2,\n                y: y + thickness,\n                w: thickness,\n                h: h - thickness * 2,\n                type: 'relative',\n                side: 'r',\n            })\n            this._dropZones.push({\n                x,\n                y: y + h - thickness / 2,\n                w,\n                h: thickness,\n                type: 'relative',\n                side: 'b',\n            })\n        }\n\n        root.x = x\n        root.y = y\n        root.w = w\n        root.h = h\n\n        let offset = 0\n        root.children.forEach((child, i) => {\n            const childX = root.orientation === 'v' ? x : x + offset\n            const childY = root.orientation === 'v' ? y + offset : y\n            const childW = root.orientation === 'v' ? w : sizes[i]\n            const childH = root.orientation === 'v' ? sizes[i] : h\n            if (child instanceof SplitContainer) {\n                this.layoutInternal(child, childX, childY, childW, childH)\n            } else {\n                const viewRef = this.viewRefs.get(child)\n                if (viewRef) {\n                    const element = viewRef.rootNodes[0]\n                    element.classList.toggle('child', true)\n                    element.classList.toggle('maximized', child === this.maximizedTab)\n                    element.classList.toggle('minimized', this.maximizedTab && child !== this.maximizedTab)\n                    element.classList.toggle('focused', this._allFocusMode || child === this.focusedTab)\n                    element.style.left = `${childX}%`\n                    element.style.top = `${childY}%`\n                    element.style.width = `${childW}%`\n                    element.style.height = `${childH}%`\n\n                    if (child === this.maximizedTab) {\n                        element.style.left = '5%'\n                        element.style.top = '5%'\n                        element.style.width = '90%'\n                        element.style.height = '90%'\n                    }\n                }\n            }\n\n            offset += sizes[i]\n\n            if (i !== root.ratios.length - 1) {\n                // Spanner area\n                this._dropZones.push({\n                    type: 'relative',\n                    relativeTo: root.children[i],\n                    side: root.orientation === 'v' ? 'b': 'r',\n                    x: root.orientation === 'v' ? childX + thickness : childX + offset - thickness / 2,\n                    y: root.orientation === 'v' ? childY + offset - thickness / 2 : childY + thickness,\n                    w: root.orientation === 'v' ? childW - thickness * 2 : thickness,\n                    h: root.orientation === 'v' ? thickness : childH - thickness * 2,\n                })\n            }\n\n            // Sides\n            if (root.orientation === 'v') {\n                this._dropZones.push({\n                    x: childX,\n                    y: childY + thickness,\n                    w: thickness,\n                    h: childH - thickness * 2,\n                    type: 'relative',\n                    relativeTo: child,\n                    side: 'l',\n                })\n                this._dropZones.push({\n                    x: childX + w - thickness,\n                    y: childY + thickness,\n                    w: thickness,\n                    h: childH - thickness * 2,\n                    type: 'relative',\n                    relativeTo: child,\n                    side: 'r',\n                })\n            } else {\n                this._dropZones.push({\n                    x: childX + thickness,\n                    y: childY,\n                    w: childW - thickness * 2,\n                    h: thickness,\n                    type: 'relative',\n                    relativeTo: child,\n                    side: 't',\n                })\n                this._dropZones.push({\n                    x: childX + thickness,\n                    y: childY + childH - thickness,\n                    w: childW - thickness * 2,\n                    h: thickness,\n                    type: 'relative',\n                    relativeTo: child,\n                    side: 'b',\n                })\n            }\n\n            if (i !== 0) {\n                this._spanners.push({\n                    container: root,\n                    index: i,\n                })\n            }\n        })\n    }\n\n    private async recoverContainer (root: SplitContainer, state: any) {\n        const children: (SplitContainer | BaseTabComponent)[] = []\n        root.orientation = state.orientation\n        root.ratios = state.ratios\n        root.children = children\n        for (const childState of state.children) {\n            if (!childState) {\n                continue\n            }\n            if (childState.type === 'app:split-tab') {\n                const child = new SplitContainer()\n                await this.recoverContainer(child, childState)\n                children.push(child)\n            } else {\n                const recovered = await this.tabRecovery.recoverTab(childState)\n                if (recovered) {\n                    const tab = this.tabsService.create(recovered)\n                    children.push(tab)\n                    tab.parent = this\n                    this.attachTabView(tab)\n                } else {\n                    state.ratios.splice(state.children.indexOf(childState), 0)\n                }\n            }\n        }\n        while (root.ratios.length < root.children.length) {\n            root.ratios.push(1)\n        }\n        root.normalize()\n    }\n}\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class SplitTabRecoveryProvider extends TabRecoveryProvider<SplitTabComponent> {\n    async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {\n        return recoveryToken.type === 'app:split-tab'\n    }\n\n    async recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<SplitTabComponent>> {\n        return {\n            type: SplitTabComponent,\n            inputs: { _recoveredState: recoveryToken },\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabDropZone.component.scss",
    "content": ":host {\n    position: absolute;\n    display: flex;\n    z-index: 5;\n    padding: 15px;\n    transition: all 125ms cubic-bezier(0, 0, 0.2, 1);\n\n    > div {\n        flex: 1 1 0;\n        width: 100%;\n        height: 100%;\n        opacity: 0;\n\n        background: rgba(255, 255, 255, .125);\n        border-radius: 5px;\n        border: 1px solid rgba(255, 255, 255, .25);\n        transition: all 125ms cubic-bezier(0, 0, 0.2, 1);\n\n        > ::ng-deep  * {\n            display: none !important;\n        }\n    }\n\n    &.highlighted {\n        padding: 0px;\n        border-radius: 3px;\n\n        > div {\n            opacity: 1;\n            background: rgba(255, 255, 255, .5);\n        }\n    }\n\n    &:not(.active) {\n        pointer-events: none;\n        opacity: 0;\n    }\n\n    ::ng-deep tab-header {\n        // placeholders\n        opacity: 0;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabDropZone.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, HostBinding, ElementRef, Output, EventEmitter } from '@angular/core'\nimport { AppService } from '../services/app.service'\nimport { BaseTabComponent } from './baseTab.component'\nimport { SelfPositioningComponent } from './selfPositioning.component'\nimport { SplitDropZoneInfo, SplitTabComponent } from './splitTab.component'\n\n/** @hidden */\n@Component({\n    selector: 'split-tab-drop-zone',\n    template: `\n    <div\n        cdkDropList\n        (cdkDropListDropped)=\"tabDropped.emit($event.item.data); isHighlighted = false\"\n        (cdkDropListEntered)=\"isHighlighted = true\"\n        (cdkDropListExited)=\"isHighlighted = false\"\n        cdkAutoDropGroup='app-tabs'\n    >\n    </div>\n    `,\n    styleUrls: ['./splitTabDropZone.component.scss'],\n})\nexport class SplitTabDropZoneComponent extends SelfPositioningComponent {\n    @Input() dropZone: SplitDropZoneInfo\n    @Input() parent: SplitTabComponent\n    @Output() tabDropped = new EventEmitter<BaseTabComponent>()\n    @HostBinding('class.active') isActive = false\n    @HostBinding('class.highlighted') isHighlighted = false\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        element: ElementRef,\n        app: AppService,\n    ) {\n        super(element)\n        this.subscribeUntilDestroyed(app.tabDragActive$, tab => {\n            this.isActive = !!tab && this.canActivateFor(tab)\n            this.layout()\n        })\n    }\n\n    canActivateFor (tab: BaseTabComponent): boolean {\n        const allTabs = this.parent.getAllTabs()\n        return !(\n            tab === this.parent ||\n            allTabs.length === 1 && allTabs.includes(tab) ||\n            this.dropZone.type === 'relative' && tab === this.dropZone.relativeTo ||\n            this.dropZone.type === 'absolute' && tab === this.dropZone.container.children[this.dropZone.position]\n        )\n    }\n\n    ngOnChanges () {\n        this.layout()\n    }\n\n    layout () {\n        this.setDimensions(\n            this.dropZone.x,\n            this.dropZone.y,\n            this.dropZone.w,\n            this.dropZone.h,\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabPaneLabel.component.scss",
    "content": ":host {\n    position: absolute;\n    background: rgba(0, 0, 0, .5);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    pointer-events: none;\n    z-index: 10;\n    opacity: 0;\n    transition: .125s opacity cubic-bezier(0.86, 0, 0.07, 1);\n}\n\ndiv {\n    background: rgba(0, 0, 0, .7);\n    padding: 20px 30px;\n    margin: 20px;\n    font-size: 16px;\n    color: #fff;\n    display: flex;\n    align-items: center;\n    border-radius: 5px;\n    cursor: move;\n}\n\n:host.active {\n    opacity: 1;\n\n    > div {\n        pointer-events: initial;\n    }\n}\n\nlabel {\n    margin: 0;\n    cursor: move;\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabPaneLabel.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, HostBinding, ElementRef } from '@angular/core'\nimport { HotkeysService } from '../services/hotkeys.service'\nimport { AppService } from '../services/app.service'\nimport { BaseTabComponent } from './baseTab.component'\nimport { SelfPositioningComponent } from './selfPositioning.component'\n\n/** @hidden */\n@Component({\n    selector: 'split-tab-pane-label',\n    template: `\n    <div\n        cdkDrag\n        [cdkDragData]='tab'\n        (cdkDragStarted)='onTabDragStart(tab)'\n        (cdkDragEnded)='onTabDragEnd()'\n    >\n        <i class=\"fa fa-window-maximize me-3\"></i>\n        <label>{{tab.title}}</label>\n    </div>\n    `,\n    styleUrls: ['./splitTabPaneLabel.component.scss'],\n})\nexport class SplitTabPaneLabelComponent extends SelfPositioningComponent {\n    @Input() tab: BaseTabComponent\n    @Input() parent: BaseTabComponent\n    @HostBinding('class.active') isActive = false\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        element: ElementRef,\n        hotkeys: HotkeysService,\n        private app: AppService,\n    ) {\n        super(element)\n        this.subscribeUntilDestroyed(hotkeys.hotkey$, hk => {\n            if (hk === 'rearrange-panes' && this.parent.hasFocus) {\n                this.isActive = true\n                this.layout()\n            }\n        })\n        this.subscribeUntilDestroyed(hotkeys.hotkeyOff$, hk => {\n            if (hk === 'rearrange-panes') {\n                this.isActive = false\n            }\n        })\n    }\n\n    ngOnChanges () {\n        this.layout()\n    }\n\n    onTabDragStart (tab: BaseTabComponent): void {\n        this.app.emitTabDragStarted(tab)\n    }\n\n    onTabDragEnd (): void {\n        setTimeout(() => {\n            this.app.emitTabDragEnded()\n            this.app.emitTabsChanged()\n        })\n    }\n\n    layout () {\n        const tabElement: HTMLElement|undefined = this.tab.viewContainerEmbeddedRef?.rootNodes[0]\n\n        if (!tabElement) {\n            // being destroyed\n            return\n        }\n\n        this.setDimensions(\n            tabElement.offsetLeft,\n            tabElement.offsetTop,\n            tabElement.clientWidth,\n            tabElement.clientHeight,\n            'px',\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabSpanner.component.scss",
    "content": ":host {\n    display: block;\n    position: absolute;\n    z-index: 5;\n    transition: 0.125s background;\n\n    &.v {\n        cursor: ns-resize;\n        height: 10px;\n        margin-top: -5px;\n    }\n\n    &.h {\n        cursor: ew-resize;\n        width: 10px;\n        margin-left: -5px;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/splitTabSpanner.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, HostBinding, ElementRef, Output, EventEmitter } from '@angular/core'\nimport { SelfPositioningComponent } from './selfPositioning.component'\nimport { SplitContainer } from './splitTab.component'\n\n/** @hidden */\n@Component({\n    selector: 'split-tab-spanner',\n    template: '',\n    styleUrls: ['./splitTabSpanner.component.scss'],\n})\nexport class SplitTabSpannerComponent extends SelfPositioningComponent {\n    @Input() container: SplitContainer\n    @Input() index: number\n    @Output() resizing = new EventEmitter<boolean>()\n    @Output() change = new EventEmitter<void>()\n    @HostBinding('class.active') isActive = false\n    @HostBinding('class.h') isHorizontal = false\n    @HostBinding('class.v') isVertical = true\n    private marginOffset = -5\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (element: ElementRef) {\n        super(element)\n    }\n\n    ngAfterViewInit () {\n        this.element.nativeElement.addEventListener('dblclick', () => {\n            this.reset()\n        })\n\n        this.element.nativeElement.addEventListener('mousedown', (e: MouseEvent) => {\n            this.isActive = true\n            this.resizing.emit(true)\n            const start = this.isVertical ? e.pageY : e.pageX\n            let current = start\n            const oldPosition: number = this.isVertical ? this.element.nativeElement.offsetTop : this.element.nativeElement.offsetLeft\n\n            const dragHandler = (dragEvent: MouseEvent) => {\n                current = this.isVertical ? dragEvent.pageY : dragEvent.pageX\n                const newPosition = oldPosition + (current - start)\n                if (this.isVertical) {\n                    this.element.nativeElement.style.top = `${newPosition - this.marginOffset}px`\n                } else {\n                    this.element.nativeElement.style.left = `${newPosition - this.marginOffset}px`\n                }\n            }\n\n            const offHandler = () => {\n                this.isActive = false\n                this.resizing.emit(false)\n                document.removeEventListener('mouseup', offHandler)\n                this.element.nativeElement.parentElement.removeEventListener('mousemove', dragHandler)\n\n                let diff = (current - start) / (this.isVertical ? this.element.nativeElement.parentElement.clientHeight : this.element.nativeElement.parentElement.clientWidth)\n\n                diff = Math.max(diff, -this.container.ratios[this.index - 1] + 0.1)\n                diff = Math.min(diff, this.container.ratios[this.index] - 0.1)\n\n                if (diff) {\n                    this.container.ratios[this.index - 1] += diff\n                    this.container.ratios[this.index] -= diff\n                    this.change.emit()\n                }\n            }\n\n            document.addEventListener('mouseup', offHandler, { passive: true })\n            this.element.nativeElement.parentElement.addEventListener('mousemove', dragHandler)\n        }, { passive: true })\n    }\n\n    ngOnChanges () {\n        this.isHorizontal = this.container.orientation === 'h'\n        this.isVertical = this.container.orientation === 'v'\n        if (this.isVertical) {\n            this.setDimensions(\n                this.container.x,\n                this.container.y + this.container.h * this.container.getOffsetRatio(this.index),\n                this.container.w,\n                0,\n            )\n        } else {\n            this.setDimensions(\n                this.container.x + this.container.w * this.container.getOffsetRatio(this.index),\n                this.container.y,\n                0,\n                this.container.h,\n            )\n        }\n    }\n\n    reset () {\n        const ratio = (this.container.ratios[this.index - 1] + this.container.ratios[this.index]) / 2\n        this.container.ratios[this.index - 1] = ratio\n        this.container.ratios[this.index] = ratio\n        this.change.emit()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/startPage.component.pug",
    "content": "\n.mt-auto.mb-auto\n    .tabby-logo\n    h1.tabby-title Tabby\n        sup α\n\n    .list-group.mb-4\n        a.list-group-item.list-group-item-action.d-flex.pt-3.pb-3(\n            *ngFor='let command of commands; trackBy: buttonsTrackBy',\n            (click)='command.run()',\n        )\n            .d-flex.align-self-center([innerHTML]='sanitizeIcon(command.icon)')\n            span {{command.label}}\n\nfooter.d-flex.align-items-center\n    .btn-group.me-auto\n        button.btn.btn-link((click)='homeBase.openGitHub()')\n            i.fab.fa-github\n            span GitHub\n        button.btn.btn-link((click)='homeBase.reportBug()')\n            i.fas.fa-bug\n            span(translate) Report a problem\n\n    .form-control-static.selectable.no-drag(\n        translate='Version: {version}',\n        [translateParams]='{ version: this.homeBase.appVersion }'\n    )\n"
  },
  {
    "path": "tabby-core/src/components/startPage.component.scss",
    "content": ":host {\n    display: flex;\n    flex-direction: column;\n    flex: auto;\n    overflow-y: auto;\n}\n\n:host > div {\n    flex: none;\n    margin: auto;\n    width: 300px;\n    max-width: 100vw;\n    display: flex;\n    flex-direction: column;\n}\n\n.tabby-title {\n    margin: 0 0 60px;\n}\n\nfooter {\n    flex: none;\n    padding: 20px 30px;\n    background: rgba(0,0,0,.5);\n}\n\n.list-group-item ::ng-deep svg {\n    width: 16px;\n    height: 16px;\n    margin-right: 10px;\n}\n"
  },
  {
    "path": "tabby-core/src/components/startPage.component.ts",
    "content": "import { Component } from '@angular/core'\nimport { DomSanitizer } from '@angular/platform-browser'\nimport { HomeBaseService } from '../services/homeBase.service'\nimport { CommandService } from '../services/commands.service'\nimport { Command, CommandLocation } from '../api/commands'\n\n/** @hidden */\n@Component({\n    selector: 'start-page',\n    templateUrl: './startPage.component.pug',\n    styleUrls: ['./startPage.component.scss'],\n})\nexport class StartPageComponent {\n    version: string\n    commands: Command[] = []\n\n    constructor (\n        private domSanitizer: DomSanitizer,\n        public homeBase: HomeBaseService,\n        commands: CommandService,\n    ) {\n        commands.getCommands({}).then(c => {\n            this.commands = c.filter(x => x.locations?.includes(CommandLocation.StartPage))\n        })\n    }\n\n    sanitizeIcon (icon?: string): any {\n        return this.domSanitizer.bypassSecurityTrustHtml(icon ?? '')\n    }\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    buttonsTrackBy (_, btn: Command): any {\n        return btn.label + btn.icon\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/tabBody.component.scss",
    "content": ":host {\n    display: flex;\n    flex: auto;\n    position: relative;\n    overflow: hidden;\n\n    >* {\n        flex: auto;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/tabBody.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, ViewChild, HostBinding, ViewContainerRef, OnChanges } from '@angular/core'\nimport { BaseTabComponent } from '../components/baseTab.component'\n\n/** @hidden */\n@Component({\n    selector: 'tab-body',\n    template: `\n        <ng-template #placeholder></ng-template>\n    `,\n    styleUrls: [\n        './tabBody.component.scss',\n        './tabBody.deep.component.css',\n    ],\n})\nexport class TabBodyComponent implements OnChanges {\n    @Input() @HostBinding('class.active') active: boolean\n    @Input() tab: BaseTabComponent\n    @ViewChild('placeholder', { read: ViewContainerRef }) placeholder?: ViewContainerRef\n\n    ngOnChanges (changes) {\n        if (changes.tab) {\n            this.placeholder?.detach()\n            setImmediate(() => {\n                this.placeholder?.insert(this.tab.hostView)\n            })\n        }\n    }\n\n    detach () {\n        this.placeholder?.detach()\n    }\n\n    ngOnDestroy () {\n        this.placeholder?.detach()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/tabBody.deep.component.css",
    "content": ":host /deep/ .ps-content {\n    flex: auto;\n    display: flex;\n}\n"
  },
  {
    "path": "tabby-core/src/components/tabHeader.component.pug",
    "content": ".colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')\n.progressbar([style.width]='progress + \"%\"', *ngIf='progress != null')\n.activity-indicator(*ngIf='tab.activity$|async')\n.current-tab-indicator\n\n.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform === Platform.macOS', cdkDragHandle) {{index + 1}}\n.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}}\n\nprofile-icon(\n    *ngIf='config.store.terminal.showTabProfileIcon && tab.icon',\n    [icon]='tab.icon',\n    [color]='tab.color ?? undefined'\n)\n\n.name(\n    [class.no-hover]='config.store.terminal.hideCloseButton && config.store.terminal.hideTabOptionsButton'\n    cdkDrag,\n    cdkDragRootElement='tab-header',\n    [cdkDragData]='tab',\n    (cdkDragStarted)='onTabDragStart(tab)',\n    (cdkDragEnded)='onTabDragEnd()',\n) {{tab.customTitle || tab.title}}\n\n.buttons\n    button(*ngIf='!config.store.terminal.hideTabOptionsButton',(click)='onContextMenu($event)') !{require('../icons/tab-options.svg')}\n\n    button(*ngIf='!config.store.terminal.hideCloseButton',(click)='app.closeTab(tab, true)') &times;\n\nng-content\n"
  },
  {
    "path": "tabby-core/src/components/tabHeader.component.scss",
    "content": "$tabs-height: 38px;\n\n:host {\n    position: relative;\n    cursor: pointer;\n    box-sizing: border-box;\n\n    > * { cursor: pointer; }\n\n    flex: 1000 1 200px;\n    width: 200px;\n    // flex-basis and width are also set through animation on AppRoot\n\n    padding: 0 10px;\n\n    display: flex;\n    flex-direction: row;\n    min-width: 0;\n\n    overflow: hidden;\n\n    &.flex-width {\n        flex: 1000 1 auto;\n        width: auto;\n    }\n\n    &.vertical {\n      flex: none;\n      height: $tabs-height;\n    }\n\n    .index {\n        flex: none;\n        font-weight: bold;\n        -webkit-app-region: no-drag;\n        cursor: -webkit-grab;\n\n        width: calc(22px * var(--spaciness));\n        border-radius: 10px;\n        text-align: center;\n        transition: 0.25s all;\n        align-self: center;\n        margin-top: 1px;\n    }\n\n    profile-icon {\n        font-size: 13px;\n        margin: 1px 4px 0 0;\n    }\n\n    .name {\n        flex: auto;\n        margin-top: 1px;\n        overflow: hidden;\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        min-width: 0;\n        align-self: center;\n    }\n\n    .index + .name {\n        margin-left: 10px;\n    }\n\n    .buttons {\n        display: flex;\n        position: absolute;\n        align-items: center;\n        height: 100%;\n        top: 2px;\n        right: 3px;\n        opacity: 0;\n\n        button {\n            display: flex;\n            align-items: center;\n            flex: none;\n            justify-content: center;\n\n            background: transparent;\n            -webkit-app-region: no-drag;\n\n            $button-size: 26px;\n            width: $button-size;\n            height: $button-size;\n            border-radius: $button-size / 6;\n            line-height: $button-size;\n            align-self: center;\n\n            text-align: center;\n            font-size: 20px;\n\n            &:focus {\n              outline: 0;\n            }\n        }\n    }\n\n    &:hover .name:not(.no-hover) {\n        -webkit-mask-image: linear-gradient(black 0 0), linear-gradient(to left, transparent 0%, transparent 50%, black 100%);\n        -webkit-mask-size: calc(100% - 80px) auto, 80px auto;\n        -webkit-mask-repeat: no-repeat;\n        -webkit-mask-position: left, right;\n    }\n\n    &:hover .buttons {\n        transition: 0.25s opacity;\n        opacity: 1;\n    }\n\n    &.drag-region {\n        -webkit-app-region: drag;\n    }\n\n    &.fully-draggable {\n        cursor: -webkit-grab;\n    }\n\n    .progressbar {\n        position: absolute;\n        left: 0;\n        top: 0;\n        height: 3px;\n        z-index: 1;\n        transition: 0.25s width;\n    }\n\n    .colorbar {\n        position: absolute;\n        left: 0;\n        bottom: 0;\n        height: 3px;\n        width: 100%;\n        z-index: 1;\n    }\n\n    .activity-indicator, .current-tab-indicator {\n        position: absolute;\n        height: 2px;\n    }\n\n    &.active .activity-indicator {\n        display: none;\n    }\n\n    .activity-indicator {\n        bottom: 4px;\n        left: 10px;\n        right: 10px;\n    }\n\n    &.active .current-tab-indicator {\n        display: block;\n    }\n\n    .current-tab-indicator {\n        display: none;\n        top: 0;\n        left: 0;\n        right: 0;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/tabHeader.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, Optional, Inject, HostBinding, HostListener, NgZone } from '@angular/core'\nimport { auditTime } from 'rxjs'\nimport { TabContextMenuItemProvider } from '../api/tabContextMenuProvider'\nimport { BaseTabComponent } from './baseTab.component'\nimport { SplitTabComponent } from './splitTab.component'\nimport { HotkeysService } from '../services/hotkeys.service'\nimport { AppService } from '../services/app.service'\nimport { HostAppService, Platform } from '../api/hostApp'\nimport { ConfigService } from '../services/config.service'\nimport { BaseComponent } from './base.component'\nimport { MenuItemOptions } from '../api/menu'\nimport { PlatformService } from '../api/platform'\n\n/** @hidden */\n@Component({\n    selector: 'tab-header',\n    templateUrl: './tabHeader.component.pug',\n    styleUrls: ['./tabHeader.component.scss'],\n})\nexport class TabHeaderComponent extends BaseComponent {\n    @Input() index: number\n    @Input() @HostBinding('class.active') active: boolean\n    @Input() tab: BaseTabComponent\n    @Input() progress: number|null\n    Platform = Platform\n\n    constructor (\n        public app: AppService,\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        private hotkeys: HotkeysService,\n        private platform: PlatformService,\n        private zone: NgZone,\n        @Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],\n    ) {\n        super()\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, (hotkey) => {\n            if (this.app.activeTab === this.tab) {\n                if (hotkey === 'rename-tab') {\n                    this.app.renameTab(this.tab)\n                }\n            }\n        })\n        this.contextMenuProviders.sort((a, b) => a.weight - b.weight)\n    }\n\n    ngOnInit () {\n        this.subscribeUntilDestroyed(this.tab.progress$.pipe(\n            auditTime(300),\n        ), progress => {\n            this.zone.run(() => {\n                this.progress = progress\n            })\n        })\n    }\n\n    async buildContextMenu (): Promise<MenuItemOptions[]> {\n        let items: MenuItemOptions[] = []\n        // Top-level tab menu\n        for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this.tab, true)))) {\n            items.push({ type: 'separator' })\n            items = items.concat(section)\n        }\n        if (this.tab instanceof SplitTabComponent) {\n            const tab = this.tab.getFocusedTab()\n            if (tab) {\n                for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(tab, true)))) {\n                    // eslint-disable-next-line @typescript-eslint/no-loop-func\n                    section = section.filter(item => !items.some(ex => ex.label === item.label))\n                    if (section.length) {\n                        items.push({ type: 'separator' })\n                        items = items.concat(section)\n                    }\n                }\n            }\n        }\n        return items.slice(1)\n    }\n\n    onTabDragStart (tab: BaseTabComponent) {\n        this.app.emitTabDragStarted(tab)\n    }\n\n    onTabDragEnd () {\n        setTimeout(() => {\n            this.app.emitTabDragEnded()\n            this.app.emitTabsChanged()\n        })\n    }\n\n    @HostBinding('class.flex-width') get isFlexWidthEnabled (): boolean {\n        return this.config.store.appearance.flexTabs\n    }\n\n    @HostListener('dblclick', ['$event']) onDoubleClick ($event: MouseEvent): void {\n        this.app.renameTab(this.tab)\n        $event.stopPropagation()\n    }\n\n    @HostListener('mousedown', ['$event']) async onMouseDown ($event: MouseEvent) {\n        if ($event.which === 2) {\n            $event.preventDefault()\n        }\n    }\n\n    @HostListener('mouseup', ['$event']) async onMouseUp ($event: MouseEvent) {\n        if ($event.which === 2) {\n            this.app.closeTab(this.tab, true)\n        }\n    }\n\n    @HostListener('contextmenu', ['$event']) async onContextMenu ($event: MouseEvent) {\n        $event.preventDefault()\n        this.platform.popupContextMenu(await this.buildContextMenu(), $event)\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/titleBar.component.pug",
    "content": ".title((dblclick)='hostWindow.toggleMaximize()') Tabby\nwindow-controls(*ngIf=\"!hideControls\")\n"
  },
  {
    "path": "tabby-core/src/components/titleBar.component.scss",
    "content": "$titlebar-height: 30px;\n\n:host {\n    flex: 0 0 $titlebar-height;\n    display: flex;\n\n    .title {\n        flex: auto;\n        padding-left: 15px;\n        line-height: $titlebar-height;\n        -webkit-app-region: drag;\n    }\n\n    &.inset {\n        flex-basis: 36px;\n\n        .title {\n            padding-left: 80px;\n            line-height: 36px;\n        }\n\n        window-controls {\n            display: none;\n        }\n    }\n }\n"
  },
  {
    "path": "tabby-core/src/components/titleBar.component.ts",
    "content": "import { Component, Input } from '@angular/core'\nimport { HostWindowService } from '../api'\n\n/** @hidden */\n@Component({\n    selector: 'title-bar',\n    templateUrl: './titleBar.component.pug',\n    styleUrls: ['./titleBar.component.scss'],\n})\nexport class TitleBarComponent {\n    @Input() hideControls: boolean\n\n    constructor (public hostWindow: HostWindowService) { }\n}\n"
  },
  {
    "path": "tabby-core/src/components/toggle.component.scss",
    "content": ":host {\n    flex: none;\n    $toggle-size: 18px;\n    $height: 30px;\n    $padding: 2px;\n    display: inline-flex;\n    border-radius: 3px;\n    line-height: $height;\n    height: $height;\n    transition: 0.25s opacity;\n    align-items: center;\n    padding-right: 10px;\n    padding-left: 10px;\n    margin-left: -10px;\n\n    .form-check {\n        margin: 0;\n    }\n\n    &.disabled {\n        opacity: 0.5;\n    }\n\n    * {\n        cursor: pointer;\n    }\n\n    label {\n        display: none;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/toggle.component.ts",
    "content": "import { Component } from '@angular/core'\nimport { NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { CheckboxComponent } from './checkbox.component'\n\n/** @hidden */\n@Component({\n    selector: 'toggle',\n    template: `\n    <div class=\"form-check form-switch\">\n      <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]='model'>\n      <label class=\"cform-check-label\"></label>\n    </div>\n    `,\n    styleUrls: ['./toggle.component.scss'],\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: ToggleComponent, multi: true },\n    ],\n})\nexport class ToggleComponent extends CheckboxComponent {\n}\n"
  },
  {
    "path": "tabby-core/src/components/transfersMenu.component.pug",
    "content": ".d-flex.align-items-center\n    .dropdown-header(translate) File transfers\n    button.btn.btn-link.ms-auto((click)='removeAll(); $event.stopPropagation()') !{require('../icons/times.svg')}\n.transfer(*ngFor='let transfer of transfers', (click)='showTransfer(transfer)')\n    .icon(*ngIf='isDownload(transfer)') !{require('../icons/download.svg')}\n    .icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}\n    .main\n        label.no-wrap([ngbTooltip]='transfer.getName()')\n            | {{transfer.getName()}}\n            span.ms-2.text-muted(*ngIf='transfer.getStatus()') ({{transfer.getStatus()}})\n        ngb-progressbar([type]='transfer.isComplete() ? \"success\" : transfer.isCancelled() ? \"danger\" : \"info\"', [value]='getProgress(transfer)')\n        .metadata\n            .size {{transfer.getSize()|filesize}}\n            .speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s\n\n    button.btn.btn-link(\n        *ngIf='!transfer.isComplete()',\n        (click)='removeTransfer(transfer); $event.stopPropagation()'\n    ) !{require('../icons/times.svg')}\n    button.btn.btn-link(\n        *ngIf='transfer.isComplete()',\n        (click)='removeTransfer(transfer); $event.stopPropagation()'\n    ) !{require('../icons/check.svg')}\n"
  },
  {
    "path": "tabby-core/src/components/transfersMenu.component.scss",
    "content": ":host {\n    min-width: 300px;\n    max-height: 80vh;\n    overflow-y: auto;\n}\n\n.transfer {\n    display: flex;\n    align-items: center;\n    padding: 5px 0 5px 25px;\n    width: 100%;\n\n    .icon {\n        padding: 4px 7px;\n        width: 36px;\n        height: 32px;\n        background: rgba(0,0,0,.25);\n        margin-right: 12px;\n    }\n\n    .main {\n        display: flex;\n        flex-direction: column;\n        min-width: 0;\n        margin-right: auto;\n        margin-bottom: 3px;\n        width: 100%;\n\n        label {\n            margin: 0;\n            max-width: 100%;\n        }\n    }\n\n    .metadata {\n        font-size: 10px;\n        opacity: .5;\n        display: flex;\n        align-items: center;\n\n        .speed {\n            margin-left: auto;\n        }\n    }\n\n    > i {\n        margin-right: 10px;\n    }\n}\n\nbutton {\n    flex: none;\n}\n\nsvg {\n    height: 14px;\n}\n"
  },
  {
    "path": "tabby-core/src/components/transfersMenu.component.ts",
    "content": "import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { FileDownload, FileTransfer, PlatformService } from '../api/platform'\n\n/** @hidden */\n@Component({\n    selector: 'transfers-menu',\n    templateUrl: './transfersMenu.component.pug',\n    styleUrls: ['./transfersMenu.component.scss'],\n})\nexport class TransfersMenuComponent {\n    @Input() transfers: FileTransfer[]\n    @Output() transfersChange = new EventEmitter<FileTransfer[]>()\n\n    constructor (\n        private platform: PlatformService,\n        private translate: TranslateService,\n    ) { }\n\n    isDownload (transfer: FileTransfer): boolean {\n        return transfer instanceof FileDownload\n    }\n\n    getProgress (transfer: FileTransfer): number {\n        return Math.round(100 * transfer.getCompletedBytes() / transfer.getSize())\n    }\n\n    showTransfer (transfer: FileTransfer): void {\n        const fp = transfer['filePath']\n        if (fp) {\n            this.platform.showItemInFolder(fp)\n        }\n    }\n\n    removeTransfer (transfer: FileTransfer): void {\n        if (!transfer.isComplete()) {\n            transfer.cancel()\n        }\n        this.transfers = this.transfers.filter(x => x !== transfer)\n        this.transfersChange.emit(this.transfers)\n    }\n\n    async removeAll (): Promise<void> {\n        if (this.transfers.some(x => !x.isComplete())) {\n            if ((await this.platform.showMessageBox({\n                type: 'warning',\n                message: this.translate.instant('There are active file transfers'),\n                buttons: [\n                    this.translate.instant('Abort all'),\n                    this.translate.instant('Do not abort'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            })).response === 1) {\n                return\n            }\n        }\n        for (const t of this.transfers) {\n            this.removeTransfer(t)\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/unlockVaultModal.component.pug",
    "content": ".modal-body\n    .d-flex.align-items-center.mb-3\n        h3.m-0(translate) Vault is locked\n        .ms-auto(ngbDropdown, placement='bottom-right')\n            button.btn.btn-link(ngbDropdownToggle, (click)='$event.stopPropagation()')\n                span(\n                    *ngIf='rememberFor',\n                    translate='Remember for {time}',\n                    [translateParams]='{time: getRememberForDisplay(rememberFor)}'\n                )\n                span(*ngIf='!rememberFor', translate) Do not remember\n            div(ngbDropdownMenu)\n                button.dropdown-item(\n                    (click)='rememberFor = 0',\n                    translate\n                ) Do not remember\n                button.dropdown-item(\n                    *ngFor='let x of rememberOptions',\n                    (click)='rememberFor = x',\n                ) {{getRememberForDisplay(x)}}\n\n    .input-group\n        input.form-control.form-control-lg(\n            type='password',\n            autofocus,\n            [(ngModel)]='passphrase',\n            #input,\n            placeholder='Master passphrase',\n            (keyup.enter)='ok()',\n            (keyup.esc)='cancel()',\n        )\n        button.btn.btn-secondary((click)='ok()', *ngIf='passphrase')\n            i.fas.fa-check\n"
  },
  {
    "path": "tabby-core/src/components/unlockVaultModal.component.ts",
    "content": "import { Component, ViewChild, ElementRef } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n/** @hidden */\n@Component({\n    templateUrl: './unlockVaultModal.component.pug',\n})\nexport class UnlockVaultModalComponent {\n    passphrase: string\n    rememberFor = 1\n    rememberOptions = [1, 5, 15, 60, 1440, 10080]\n    @ViewChild('input') input: ElementRef\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) { }\n\n    ngOnInit (): void {\n        this.rememberFor = parseInt(window.localStorage.vaultRememberPassphraseFor ?? 0)\n        setTimeout(() => {\n            this.input.nativeElement.focus()\n        })\n    }\n\n    ok (): void {\n        window.localStorage.vaultRememberPassphraseFor = this.rememberFor\n        this.modalInstance.close({\n            passphrase: this.passphrase,\n            rememberFor: this.rememberFor,\n        })\n    }\n\n    cancel (): void {\n        this.modalInstance.close(null)\n    }\n\n    getRememberForDisplay (rememberOption: number): string {\n        if (rememberOption >= 1440) {\n            return `${Math.round(rememberOption/1440*10)/10} day`\n        } else if (rememberOption >= 60) {\n            return `${Math.round(rememberOption/60*10)/10} hour`\n        } else {\n            return `${rememberOption} min`\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/welcomeTab.component.pug",
    "content": ".container.mt-3.mb-3\n    .mb-3\n        .tabby-logo\n        h1.tabby-title Tabby\n            sup α\n\n    .text-center.mb-3(translate) Thank you for downloading Tabby!\n\n    .form-line\n        .header\n            .title(translate) Language\n        select.form-control([(ngModel)]='config.store.language', (ngModelChange)='config.save()')\n            option([ngValue]='null', translate) Automatic\n            option(\n                [value]='lang.code',\n                *ngFor='let lang of allLanguages'\n            ) {{lang.name}}\n\n    .form-line\n        .header\n            .title(translate) Switch color scheme\n\n        .btn-group(role='group')\n            input.btn-check(\n                type='radio',\n                name='colorSchemeMode',\n                [(ngModel)]='config.store.appearance.colorSchemeMode',\n                (ngModelChange)='config.save()',\n                id='colorSchemeModeAuto',\n                [value]='\"auto\"'\n            )\n            label.btn.btn-secondary(\n                for='colorSchemeModeAuto'\n            )\n                span(translate) From system\n            input.btn-check(\n                type='radio',\n                name='colorSchemeMode',\n                [(ngModel)]='config.store.appearance.colorSchemeMode',\n                (ngModelChange)='config.save()',\n                id='colorSchemeModeDark',\n                [value]='\"dark\"'\n            )\n            label.btn.btn-secondary(\n                for='colorSchemeModeDark'\n            )\n                span(translate) Always dark\n            input.btn-check(\n                type='radio',\n                name='colorSchemeMode',\n                [(ngModel)]='config.store.appearance.colorSchemeMode',\n                (ngModelChange)='config.save()',\n                id='colorSchemeModeLight',\n                [value]='\"light\"'\n            )\n            label.btn.btn-secondary(\n                for='colorSchemeModeLight'\n            )\n                span(translate) Always light\n\n    .form-line\n        .header\n            .title(translate) Enable analytics\n            .description(translate) Help track the number of Tabby installs across the world!\n        toggle([(ngModel)]='config.store.enableAnalytics')\n\n    .form-line\n        .header\n            .title(translate) Enable global hotkey (Ctrl-Space)\n            .description(translate) Toggles the Tabby window visibility\n        toggle([(ngModel)]='enableGlobalHotkey')\n\n\n    .text-center.mt-5\n        button.btn.btn-primary((click)='closeAndDisable()', translate) Close and never show again\n"
  },
  {
    "path": "tabby-core/src/components/welcomeTab.component.scss",
    "content": ":host {\n    display: flex;\n    flex-direction: column;\n    margin: auto;\n    flex: auto;\n    max-height: 100%;\n    overflow-y: auto;\n}\n\n.tabby-logo {\n    width: 60px;\n    height: 60px;\n}\n"
  },
  {
    "path": "tabby-core/src/components/welcomeTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Injector } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { BaseTabComponent } from './baseTab.component'\nimport { ConfigService } from '../services/config.service'\nimport { LocaleService } from '../services/locale.service'\n\n/** @hidden */\n@Component({\n    selector: 'welcome-page',\n    templateUrl: './welcomeTab.component.pug',\n    styleUrls: ['./welcomeTab.component.scss'],\n})\nexport class WelcomeTabComponent extends BaseTabComponent {\n    enableGlobalHotkey = true\n    allLanguages = LocaleService.allLanguages\n\n    constructor (\n        public config: ConfigService,\n        public locale: LocaleService,\n        translate: TranslateService,\n        injector: Injector,\n    ) {\n        super(injector)\n        this.setTitle(translate.instant('Welcome'))\n    }\n\n    async closeAndDisable () {\n        this.config.store.enableWelcomeTab = false\n        this.config.store.pluginBlacklist = []\n        if (!this.enableGlobalHotkey) {\n            this.config.store.hotkeys['toggle-window'] = []\n        }\n        await this.config.save()\n        this.destroy()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/windowControls.component.pug",
    "content": "button.btn.btn-dark(\n    (click)='hostWindow.minimize()',\n)\n    svg(version='1.1', width='10', height='10')\n        path(d='M 0,5 10,5 10,6 0,6 Z')\n\nbutton.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')\n    svg(version='1.1', width='10', height='10')\n        path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')\n\nbutton.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')\n    svg(version='1.1', width='10', height='10', viewBox='0 0 512 512')\n        path(d=\"M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM32 144c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16v-80zm448 224c0 8.8-7.2 16-16 16h-48V144c0-26.5-21.5-48-48-48H128V48c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320z\")\n\nbutton.btn.btn-danger(\n    (click)='closeWindow()'\n)\n    svg(version='1.1', width='10', height='10')\n        path(d='M 0,0 0,0.7 4.3,5 0,9.3 0,10 0.7,10 5,5.7 9.3,10 10,10 10,9.3 5.7,5 10,0.7 10,0 9.3,0 5,4.3 0.7,0 Z')\n"
  },
  {
    "path": "tabby-core/src/components/windowControls.component.scss",
    "content": ":host {\n    display: flex;\n}\n\nbutton {\n    flex: none;\n    border: none;\n    box-shadow: none;\n    border-radius: 0;\n    font-size: 8px;\n    width: 40px;\n    padding: 0;\n    line-height: 0;\n    text-align: center;\n    align-items: center;\n    justify-content: center;\n    \n    &:not(:hover):not(:active) {\n        background: transparent;\n    }\n\n    &:focus {\n        box-shadow: none;\n    }\n\n    svg {\n        width: 10px;\n        height: 10px;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/components/windowControls.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component } from '@angular/core'\nimport { HostWindowService } from '../api/hostWindow'\nimport { AppService } from '../services/app.service'\n\n/** @hidden */\n@Component({\n    selector: 'window-controls',\n    templateUrl: './windowControls.component.pug',\n    styleUrls: ['./windowControls.component.scss'],\n})\nexport class WindowControlsComponent {\n    constructor (public hostWindow: HostWindowService, public app: AppService) { }\n\n    async closeWindow () {\n        this.app.closeWindow()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/config.ts",
    "content": "import { ConfigProvider } from './api/configProvider'\nimport { Platform } from './api/hostApp'\n\n/** @hidden */\nexport class CoreConfigProvider extends ConfigProvider {\n    platformDefaults = {\n        [Platform.macOS]: require('./configDefaults.macos.yaml').default,\n        [Platform.Windows]: require('./configDefaults.windows.yaml').default,\n        [Platform.Linux]: require('./configDefaults.linux.yaml').default,\n        [Platform.Web]: require('./configDefaults.web.yaml').default,\n    }\n\n    defaults = require('./configDefaults.yaml').default\n}\n"
  },
  {
    "path": "tabby-core/src/configDefaults.linux.yaml",
    "content": "hotkeys:\n  toggle-fullscreen:\n    - 'F11'\n  close-tab:\n    - 'Ctrl-Shift-W'\n  reopen-tab:\n    - 'Ctrl-Shift-Z'\n  toggle-last-tab: []\n  rename-tab:\n    - 'Ctrl-Shift-R'\n  next-tab:\n    - 'Ctrl-Shift-Right'\n    - 'Ctrl-Tab'\n  previous-tab:\n    - 'Ctrl-Shift-Left'\n    - 'Ctrl-Shift-Tab'\n  move-tab-left:\n    - 'Ctrl-Shift-PageUp'\n  move-tab-right:\n    - 'Ctrl-Shift-PageDown'\n  rearrange-panes:\n    - 'Ctrl-Shift'\n  duplicate-tab: []\n  restart-tab: []\n  reconnect-tab: []\n  disconnect-tab: []\n  explode-tab:\n    - 'Ctrl-Shift-.'\n  combine-tabs:\n    - 'Ctrl-Shift-,'\n  tab-1:\n    - 'Alt-1'\n  tab-2:\n    - 'Alt-2'\n  tab-3:\n    - 'Alt-3'\n  tab-4:\n    - 'Alt-4'\n  tab-5:\n    - 'Alt-5'\n  tab-6:\n    - 'Alt-6'\n  tab-7:\n    - 'Alt-7'\n  tab-8:\n    - 'Alt-8'\n  tab-9:\n    - 'Alt-9'\n  tab-10:\n    - 'Alt-0'\n  tab-11: []\n  tab-12: []\n  tab-13: []\n  tab-14: []\n  tab-15: []\n  tab-16: []\n  tab-17: []\n  tab-18: []\n  tab-19: []\n  tab-20: []\n  split-right:\n    - 'Ctrl-Shift-S'\n  split-bottom:\n    - 'Ctrl-Shift-D'\n  split-left: []\n  split-top: []\n  pane-nav-right:\n    - 'Ctrl-Alt-Right'\n  pane-nav-down:\n    - 'Ctrl-Alt-Down'\n  pane-nav-up:\n    - 'Ctrl-Alt-Up'\n  pane-nav-left:\n    - 'Ctrl-Alt-Left'\n  pane-nav-previous:\n    - 'Ctrl-Alt-['\n  pane-nav-next:\n    - 'Ctrl-Alt-]'\n  pane-nav-1: []\n  pane-nav-2: []\n  pane-nav-3: []\n  pane-nav-4: []\n  pane-nav-5: []\n  pane-nav-6: []\n  pane-nav-7: []\n  pane-nav-8: []\n  pane-nav-9: []\n  pane-maximize:\n    - 'Ctrl-Alt-Enter'\n  pane-increase-vertical: []\n  pane-decrease-vertical: []\n  pane-increase-horizontal: []\n  pane-decrease-horizontal: []\n  close-pane: []\n  switch-profile:\n    - 'Ctrl-Alt-T'\n  profile-selector:\n    - 'Ctrl-Shift-E'\n  command-selector:\n    - 'Ctrl-Shift-P'\n"
  },
  {
    "path": "tabby-core/src/configDefaults.macos.yaml",
    "content": "hotkeys:\n  toggle-fullscreen:\n    - 'Ctrl+⌘+F'\n  close-tab:\n    - '⌘-W'\n  reopen-tab:\n    - '⌘-Shift-T'\n  toggle-last-tab: []\n  rename-tab:\n    - '⌘-R'\n  next-tab:\n    - 'Ctrl-Tab'\n  previous-tab:\n    - 'Ctrl-Shift-Tab'\n  move-tab-left:\n    - '⌘-Shift-Left'\n  move-tab-right:\n    - '⌘-Shift-Right'\n  rearrange-panes:\n    - 'Ctrl-Shift'\n  tab-1:\n    - '⌘-1'\n  tab-2:\n    - '⌘-2'\n  tab-3:\n    - '⌘-3'\n  tab-4:\n    - '⌘-4'\n  tab-5:\n    - '⌘-5'\n  tab-6:\n    - '⌘-6'\n  tab-7:\n    - '⌘-7'\n  tab-8:\n    - '⌘-8'\n  tab-9:\n    - '⌘-9'\n  tab-10: []\n  duplicate-tab: []\n  restart-tab: []\n  reconnect-tab: []\n  disconnect-tab: []\n  explode-tab:\n    - '⌘-Shift-.'\n  combine-tabs:\n    - '⌘-Shift-,'\n  tab-11: []\n  tab-12: []\n  tab-13: []\n  tab-14: []\n  tab-15: []\n  tab-16: []\n  tab-17: []\n  tab-18: []\n  tab-19: []\n  tab-20: []\n  split-right:\n    - '⌘-Shift-D'\n  split-bottom:\n    - '⌘-D'\n  split-left: []\n  split-top: []\n  pane-nav-right:\n    - '⌘-⌥-Right'\n  pane-nav-down:\n    - '⌘-⌥-Down'\n  pane-nav-up:\n    - '⌘-⌥-Up'\n  pane-nav-left:\n    - '⌘-⌥-Left'\n  pane-nav-previous:\n    - '⌘-⌥-['\n  pane-nav-next:\n    - '⌘-⌥-]'\n  pane-nav-1: []\n  pane-nav-2: []\n  pane-nav-3: []\n  pane-nav-4: []\n  pane-nav-5: []\n  pane-nav-6: []\n  pane-nav-7: []\n  pane-nav-8: []\n  pane-nav-9: []\n  pane-maximize:\n    - '⌘-⌥-Enter'\n  close-pane:\n    - '⌘-Shift-W'\n  pane-increase-vertical: []\n  pane-decrease-vertical: []\n  pane-increase-horizontal: []\n  pane-decrease-horizontal: []\n  profile-selector:\n    - '⌘-E'\n  switch-profile:\n    - '⌘-Shift-E'\n  command-selector:\n    - '⌘-Shift-P'\n"
  },
  {
    "path": "tabby-core/src/configDefaults.web.yaml",
    "content": "pluginBlacklist: ['local']\nterminal:\n  recoverTabs: false\nenableAnalytics: false\nenableWelcomeTab: false\nenableAutomaticUpdates: false\n"
  },
  {
    "path": "tabby-core/src/configDefaults.windows.yaml",
    "content": "hotkeys:\n  toggle-fullscreen:\n    - 'F11'\n    - 'Alt-Enter'\n  close-tab:\n    - 'Ctrl-Shift-W'\n  reopen-tab:\n    - 'Ctrl-Shift-Z'\n  toggle-last-tab: []\n  rename-tab:\n    - 'Ctrl-Shift-R'\n  next-tab:\n    - 'Ctrl-Shift-Right'\n    - 'Ctrl-Tab'\n  previous-tab:\n    - 'Ctrl-Shift-Left'\n    - 'Ctrl-Shift-Tab'\n  move-tab-left:\n    - 'Ctrl-Shift-PageUp'\n  move-tab-right:\n    - 'Ctrl-Shift-PageDown'\n  rearrange-panes:\n    - 'Ctrl-Shift'\n  duplicate-tab: []\n  restart-tab: []\n  reconnect-tab: []\n  disconnect-tab: []\n  explode-tab:\n    - 'Ctrl-Shift-.'\n  combine-tabs:\n    - 'Ctrl-Shift-,'\n  tab-1:\n    - 'Alt-1'\n  tab-2:\n    - 'Alt-2'\n  tab-3:\n    - 'Alt-3'\n  tab-4:\n    - 'Alt-4'\n  tab-5:\n    - 'Alt-5'\n  tab-6:\n    - 'Alt-6'\n  tab-7:\n    - 'Alt-7'\n  tab-8:\n    - 'Alt-8'\n  tab-9:\n    - 'Alt-9'\n  tab-10:\n    - 'Alt-0'\n  tab-11: []\n  tab-12: []\n  tab-13: []\n  tab-14: []\n  tab-15: []\n  tab-16: []\n  tab-17: []\n  tab-18: []\n  tab-19: []\n  tab-20: []\n  split-right:\n    - 'Ctrl-Shift-S'\n  split-bottom:\n    - 'Ctrl-Shift-D'\n  split-left: []\n  split-top: []\n  pane-nav-right:\n    - 'Ctrl-Alt-Right'\n  pane-nav-down:\n    - 'Ctrl-Alt-Down'\n  pane-nav-up:\n    - 'Ctrl-Alt-Up'\n  pane-nav-left:\n    - 'Ctrl-Alt-Left'\n  pane-nav-previous:\n    - 'Ctrl-Alt-['\n  pane-nav-next:\n    - 'Ctrl-Alt-]'\n  pane-nav-1: []\n  pane-nav-2: []\n  pane-nav-3: []\n  pane-nav-4: []\n  pane-nav-5: []\n  pane-nav-6: []\n  pane-nav-7: []\n  pane-nav-8: []\n  pane-nav-9: []\n  pane-maximize:\n    - 'Ctrl-Alt-Enter'\n  close-pane: []\n  pane-increase-vertical: []\n  pane-decrease-vertical: []\n  pane-increase-horizontal: []\n  pane-decrease-horizontal: []\n  switch-profile:\n    - 'Ctrl-Alt-T'\n  profile-selector:\n    - 'Ctrl-Shift-E'\n  command-selector:\n    - 'Ctrl-Shift-P'\nterminal:\n  identification: wt\n"
  },
  {
    "path": "tabby-core/src/configDefaults.yaml",
    "content": "accessibility:\n  animations: true\nappearance:\n  dock: off\n  dockScreen: current\n  dockFill: 0.5\n  dockSpace: 1\n  dockHideOnBlur: false\n  dockAlwaysOnTop: true\n  flexTabs: false\n  tabsLocation: top\n  tabsInFullscreen: false\n  cycleTabs: true\n  theme: Follow the color scheme\n  frame: thin\n  css: '/* * { color: blue !important; } */'\n  opacity: 1.0\n  vibrancy: false\n  vibrancyType: 'blur'\n  lastTabClosesWindow: false\n  spaciness: 1\n  colorSchemeMode: 'dark'\nterminal:\n  showBuiltinProfiles: true\n  showRecentProfiles: 3\n  paneResizeStep: 0.1\n  focusFollowsMouse: false\n  identification: null\nhotkeys:\n  profile:\n    __nonStructural: true\n  profile-selectors:\n    __nonStructural: true\n  group-selectors:\n    __nonStructural: true\nprofiles: []\ngroups: []\nprofileDefaults:\n  __nonStructural: true\n  ssh:\n    disableDynamicTitle: true\nrecoverTabs: true\nenableAnalytics: true\nenableWelcomeTab: true\nelectronFlags:\n  - ['force_discrete_gpu', '0']\nenableAutomaticUpdates: true\nhideTray: false\nversion: 1\nvault: null\nencrypted: false\nenableExperimentalFeatures: false\npluginBlacklist: []\ncommandBlacklist: []\nproviderBlacklist: []\nprofileBlacklist: []\nhacks:\n  disableGPU: false\n  disableVibrancyWhileDragging: false\n  enableFluentBackground: false\nlanguage: null\ndefaultQuickConnectProvider: \"ssh\"\n"
  },
  {
    "path": "tabby-core/src/directives/alwaysVisibleTypeahead.directive.ts",
    "content": "import { Directive, ElementRef, AfterViewInit } from '@angular/core'\n\n/** @hidden */\n@Directive({\n    selector: '[alwaysVisibleTypeahead]',\n})\nexport class AlwaysVisibleTypeaheadDirective implements AfterViewInit {\n    constructor (private el: ElementRef) { }\n\n    ngAfterViewInit (): void {\n        this.el.nativeElement.addEventListener('focus', e => {\n            e.stopPropagation()\n            setTimeout(() => {\n                const inputEvent: Event = new Event('input')\n                e.target.dispatchEvent(inputEvent)\n            }, 0)\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/directives/autofocus.directive.ts",
    "content": "import { Directive, AfterViewInit, ElementRef } from '@angular/core'\n\n/** @hidden */\n@Directive({\n    selector: '[autofocus]',\n})\nexport class AutofocusDirective implements AfterViewInit {\n    constructor (private el: ElementRef) { }\n\n    ngAfterViewInit (): void {\n        this.el.nativeElement.blur()\n        setTimeout(() => {\n            this.el.nativeElement.focus()\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/directives/cdkAutoDropGroup.directive.ts",
    "content": "import { Directive, Input, OnInit } from '@angular/core'\nimport { CdkDropList } from '@angular/cdk/drag-drop'\n\nclass FakeDropGroup {\n    _items: Set<CdkDropList> = new Set()\n}\n\n/** @hidden */\n@Directive({\n    selector: '[cdkAutoDropGroup]',\n})\nexport class CdkAutoDropGroup implements OnInit {\n    static groups: Record<string, FakeDropGroup> = {}\n\n    @Input('cdkAutoDropGroup') groupName: string\n\n    constructor (\n        private cdkDropList: CdkDropList,\n    ) { }\n\n    ngOnInit (): void {\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup()\n        CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList)\n        this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName]\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/directives/dropZone.directive.pug",
    "content": "i.fas.fa-upload\n"
  },
  {
    "path": "tabby-core/src/directives/dropZone.directive.scss",
    "content": ".drop-zone-hint {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: rgba(0, 0, 0, .5);\n    pointer-events: none;\n    z-index: 1;\n    display: flex;\n    transition: .25s opacity ease-out;\n    opacity: 0;\n\n    &.visible {\n        opacity: 1;\n    }\n\n    i {\n        font-size: 48px;\n        align-self: center;\n        margin: auto;\n        text-align: center;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/directives/dropZone.directive.ts",
    "content": "import { Directive, Output, ElementRef, EventEmitter, AfterViewInit } from '@angular/core'\nimport { DirectoryUpload, PlatformService } from '../api/platform'\nimport './dropZone.directive.scss'\n\n/** @hidden */\n@Directive({\n    selector: '[dropZone]',\n})\nexport class DropZoneDirective implements AfterViewInit {\n    @Output() transfer = new EventEmitter<DirectoryUpload>()\n    private dropHint?: HTMLElement\n\n    constructor (\n        private el: ElementRef,\n        private platform: PlatformService,\n    ) { }\n\n    ngAfterViewInit (): void {\n        this.el.nativeElement.addEventListener('dragover', () => {\n            if (!this.dropHint) {\n                this.dropHint = document.createElement('div')\n                this.dropHint.className = 'drop-zone-hint'\n                this.dropHint.innerHTML = require('./dropZone.directive.pug')\n                this.el.nativeElement.appendChild(this.dropHint)\n                setTimeout(() => {\n                    this.dropHint!.classList.add('visible')\n                })\n            }\n        })\n        this.el.nativeElement.addEventListener('drop', async (event: DragEvent) => {\n            this.removeHint()\n            this.transfer.emit(await this.platform.startUploadFromDragEvent(event, true))\n        })\n        this.el.nativeElement.addEventListener('dragleave', () => {\n            this.removeHint()\n        })\n    }\n\n    private removeHint () {\n        const element = this.dropHint\n        delete this.dropHint\n        element?.classList.remove('visible')\n        setTimeout(() => {\n            element?.remove()\n        }, 500)\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/directives/fastHtmlBind.directive.ts",
    "content": "import { Directive, Input, ElementRef, OnChanges } from '@angular/core'\nimport { PlatformService } from '../api/platform'\n\n/** @hidden */\n@Directive({\n    selector: '[fastHtmlBind]',\n})\nexport class FastHtmlBindDirective implements OnChanges {\n    @Input() fastHtmlBind?: string\n\n    constructor (\n        private el: ElementRef,\n        private platform: PlatformService,\n    ) { }\n\n    ngOnChanges (): void {\n        this.el.nativeElement.innerHTML = this.fastHtmlBind ?? ''\n        for (const link of this.el.nativeElement.querySelectorAll('a')) {\n            link.addEventListener('click', event => {\n                event.preventDefault()\n                this.platform.openExternal(link.href)\n            })\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { ProfilesService } from './services/profiles.service'\nimport { HotkeyDescription, HotkeyProvider } from './api/hotkeyProvider'\n\n/** @hidden */\n@Injectable()\nexport class AppHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'command-selector',\n            name: this.translate.instant('Show command selector'),\n        },\n        {\n            id: 'profile-selector',\n            name: this.translate.instant('Show profile selector'),\n        },\n        {\n            id: 'toggle-fullscreen',\n            name: this.translate.instant('Toggle fullscreen mode'),\n        },\n        {\n            id: 'rename-tab',\n            name: this.translate.instant('Rename tab'),\n        },\n        {\n            id: 'close-tab',\n            name: this.translate.instant('Close tab'),\n        },\n        {\n            id: 'reopen-tab',\n            name: this.translate.instant('Reopen last tab'),\n        },\n        {\n            id: 'toggle-last-tab',\n            name: this.translate.instant('Toggle last tab'),\n        },\n        {\n            id: 'next-tab',\n            name: this.translate.instant('Next tab'),\n        },\n        {\n            id: 'previous-tab',\n            name: this.translate.instant('Previous tab'),\n        },\n        {\n            id: 'move-tab-left',\n            name: this.translate.instant('Move tab to the left'),\n        },\n        {\n            id: 'move-tab-right',\n            name: this.translate.instant('Move tab to the right'),\n        },\n        {\n            id: 'rearrange-panes',\n            name: this.translate.instant('Show pane labels (for rearranging)'),\n        },\n        {\n            id: 'duplicate-tab',\n            name: this.translate.instant('Duplicate tab'),\n        },\n        {\n            id: 'restart-tab',\n            name: this.translate.instant('Restart tab'),\n        },\n        {\n            id: 'explode-tab',\n            name: this.translate.instant('Turn current tab\\'s panes into separate tabs'),\n        },\n        {\n            id: 'combine-tabs',\n            name: this.translate.instant('Combine all tabs into the current tab'),\n        },\n        {\n            id: 'tab-1',\n            name: this.translate.instant('Tab {number}', { number: 1 }),\n        },\n        {\n            id: 'tab-2',\n            name: this.translate.instant('Tab {number}', { number: 2 }),\n        },\n        {\n            id: 'tab-3',\n            name: this.translate.instant('Tab {number}', { number: 3 }),\n        },\n        {\n            id: 'tab-4',\n            name: this.translate.instant('Tab {number}', { number: 4 }),\n        },\n        {\n            id: 'tab-5',\n            name: this.translate.instant('Tab {number}', { number: 5 }),\n        },\n        {\n            id: 'tab-6',\n            name: this.translate.instant('Tab {number}', { number: 6 }),\n        },\n        {\n            id: 'tab-7',\n            name: this.translate.instant('Tab {number}', { number: 7 }),\n        },\n        {\n            id: 'tab-8',\n            name: this.translate.instant('Tab {number}', { number: 8 }),\n        },\n        {\n            id: 'tab-9',\n            name: this.translate.instant('Tab {number}', { number: 9 }),\n        },\n        {\n            id: 'tab-10',\n            name: this.translate.instant('Tab {number}', { number: 10 }),\n        },\n        {\n            id: 'tab-11',\n            name: this.translate.instant('Tab {number}', { number: 11 }),\n        },\n        {\n            id: 'tab-12',\n            name: this.translate.instant('Tab {number}', { number: 12 }),\n        },\n        {\n            id: 'tab-13',\n            name: this.translate.instant('Tab {number}', { number: 13 }),\n        },\n        {\n            id: 'tab-14',\n            name: this.translate.instant('Tab {number}', { number: 14 }),\n        },\n        {\n            id: 'tab-15',\n            name: this.translate.instant('Tab {number}', { number: 15 }),\n        },\n        {\n            id: 'tab-16',\n            name: this.translate.instant('Tab {number}', { number: 16 }),\n        },\n        {\n            id: 'tab-17',\n            name: this.translate.instant('Tab {number}', { number: 17 }),\n        },\n        {\n            id: 'tab-18',\n            name: this.translate.instant('Tab {number}', { number: 18 }),\n        },\n        {\n            id: 'tab-19',\n            name: this.translate.instant('Tab {number}', { number: 19 }),\n        },\n        {\n            id: 'tab-20',\n            name: this.translate.instant('Tab {number}', { number: 20 }),\n        },\n        {\n            id: 'split-right',\n            name: this.translate.instant('Split to the right'),\n        },\n        {\n            id: 'split-bottom',\n            name: this.translate.instant('Split to the bottom'),\n        },\n        {\n            id: 'split-left',\n            name: this.translate.instant('Split to the left'),\n        },\n        {\n            id: 'split-top',\n            name: this.translate.instant('Split to the top'),\n        },\n        {\n            id: 'pane-maximize',\n            name: this.translate.instant('Maximize the active pane'),\n        },\n        {\n            id: 'pane-nav-up',\n            name: this.translate.instant('Focus the pane above'),\n        },\n        {\n            id: 'pane-nav-down',\n            name: this.translate.instant('Focus the pane below'),\n        },\n        {\n            id: 'pane-nav-left',\n            name: this.translate.instant('Focus the pane on the left'),\n        },\n        {\n            id: 'pane-nav-right',\n            name: this.translate.instant('Focus the pane on the right'),\n        },\n        {\n            id: 'pane-nav-previous',\n            name: this.translate.instant('Focus previous pane'),\n        },\n        {\n            id: 'pane-nav-next',\n            name: this.translate.instant('Focus next pane'),\n        },\n        {\n            id: 'pane-nav-1',\n            name: this.translate.instant('Focus pane {number}', { number: 1 }),\n        },\n        {\n            id: 'pane-nav-2',\n            name: this.translate.instant('Focus pane {number}', { number: 2 }),\n        },\n        {\n            id: 'pane-nav-3',\n            name: this.translate.instant('Focus pane {number}', { number: 3 }),\n        },\n        {\n            id: 'pane-nav-4',\n            name: this.translate.instant('Focus pane {number}', { number: 4 }),\n        },\n        {\n            id: 'pane-nav-5',\n            name: this.translate.instant('Focus pane {number}', { number: 5 }),\n        },\n        {\n            id: 'pane-nav-6',\n            name: this.translate.instant('Focus pane {number}', { number: 6 }),\n        },\n        {\n            id: 'pane-nav-7',\n            name: this.translate.instant('Focus pane {number}', { number: 7 }),\n        },\n        {\n            id: 'pane-nav-8',\n            name: this.translate.instant('Focus pane {number}', { number: 8 }),\n        },\n        {\n            id: 'pane-nav-9',\n            name: this.translate.instant('Focus pane {number}', { number: 9 }),\n        },\n        {\n            id: 'switch-profile',\n            name: this.translate.instant('Switch profile in the active pane'),\n        },\n        {\n            id: 'close-pane',\n            name: this.translate.instant('Close focused pane'),\n        },\n        {\n            id: 'pane-increase-vertical',\n            name: this.translate.instant('Increase vertical split size'),\n        },\n        {\n            id: 'pane-decrease-vertical',\n            name: this.translate.instant('Decrease vertical split size'),\n        },\n        {\n            id: 'pane-increase-horizontal',\n            name: this.translate.instant('Increase horizontal split size'),\n        },\n        {\n            id: 'pane-decrease-horizontal',\n            name: this.translate.instant('Decrease horizontal split size'),\n        },\n    ]\n\n    constructor (\n        private profilesService: ProfilesService,\n        private translate: TranslateService,\n    ) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        const profiles = await this.profilesService.getProfiles()\n        const groups = await this.profilesService.getProfileGroups()\n        return [\n            ...this.hotkeys,\n            ...profiles.map(profile => ({\n                id: `profile.${ProfilesService.getProfileHotkeyName(profile)}`,\n                name: this.translate.instant('New tab: {profile}', { profile: profile.name }),\n            })),\n            ...this.profilesService.getProviders().map(provider => ({\n                id: `profile-selectors.${provider.id}`,\n                name: this.translate.instant('Show {type} profile selector', { type: provider.name }),\n            })),\n            ...groups.map(group => ({\n                id: `group-selectors.${group.id}`,\n                name: this.translate.instant('Show profile selector for group {name}', { name: group.name }),\n            })),\n        ]\n    }\n\n}\n"
  },
  {
    "path": "tabby-core/src/icons.json",
    "content": "{\"0\":[\"s\"],\"1\":[\"s\"],\"2\":[\"s\"],\"3\":[\"s\"],\"4\":[\"s\"],\"5\":[\"s\"],\"6\":[\"s\"],\"7\":[\"s\"],\"8\":[\"s\"],\"9\":[\"s\"],\"42-group\":[\"b\"],\"500px\":[\"b\"],\"a\":[\"s\"],\"accessible-icon\":[\"b\"],\"accusoft\":[\"b\"],\"address-book\":[\"s\",\"r\"],\"address-card\":[\"s\",\"r\"],\"adn\":[\"b\"],\"adversal\":[\"b\"],\"affiliatetheme\":[\"b\"],\"airbnb\":[\"b\"],\"algolia\":[\"b\"],\"align-center\":[\"s\"],\"align-justify\":[\"s\"],\"align-left\":[\"s\"],\"align-right\":[\"s\"],\"alipay\":[\"b\"],\"amazon\":[\"b\"],\"amazon-pay\":[\"b\"],\"amilia\":[\"b\"],\"anchor\":[\"s\"],\"anchor-circle-check\":[\"s\"],\"anchor-circle-exclamation\":[\"s\"],\"anchor-circle-xmark\":[\"s\"],\"anchor-lock\":[\"s\"],\"android\":[\"b\"],\"angellist\":[\"b\"],\"angle-down\":[\"s\"],\"angle-left\":[\"s\"],\"angle-right\":[\"s\"],\"angle-up\":[\"s\"],\"angles-down\":[\"s\"],\"angles-left\":[\"s\"],\"angles-right\":[\"s\"],\"angles-up\":[\"s\"],\"angrycreative\":[\"b\"],\"angular\":[\"b\"],\"ankh\":[\"s\"],\"app-store\":[\"b\"],\"app-store-ios\":[\"b\"],\"apper\":[\"b\"],\"apple\":[\"b\"],\"apple-pay\":[\"b\"],\"apple-whole\":[\"s\"],\"archway\":[\"s\"],\"arrow-down\":[\"s\"],\"arrow-down-1-9\":[\"s\"],\"arrow-down-9-1\":[\"s\"],\"arrow-down-a-z\":[\"s\"],\"arrow-down-long\":[\"s\"],\"arrow-down-short-wide\":[\"s\"],\"arrow-down-up-across-line\":[\"s\"],\"arrow-down-up-lock\":[\"s\"],\"arrow-down-wide-short\":[\"s\"],\"arrow-down-z-a\":[\"s\"],\"arrow-left\":[\"s\"],\"arrow-left-long\":[\"s\"],\"arrow-pointer\":[\"s\"],\"arrow-right\":[\"s\"],\"arrow-right-arrow-left\":[\"s\"],\"arrow-right-from-bracket\":[\"s\"],\"arrow-right-long\":[\"s\"],\"arrow-right-to-bracket\":[\"s\"],\"arrow-right-to-city\":[\"s\"],\"arrow-rotate-left\":[\"s\"],\"arrow-rotate-right\":[\"s\"],\"arrow-trend-down\":[\"s\"],\"arrow-trend-up\":[\"s\"],\"arrow-turn-down\":[\"s\"],\"arrow-turn-up\":[\"s\"],\"arrow-up\":[\"s\"],\"arrow-up-1-9\":[\"s\"],\"arrow-up-9-1\":[\"s\"],\"arrow-up-a-z\":[\"s\"],\"arrow-up-from-bracket\":[\"s\"],\"arrow-up-from-ground-water\":[\"s\"],\"arrow-up-from-water-pump\":[\"s\"],\"arrow-up-long\":[\"s\"],\"arrow-up-right-dots\":[\"s\"],\"arrow-up-right-from-square\":[\"s\"],\"arrow-up-short-wide\":[\"s\"],\"arrow-up-wide-short\":[\"s\"],\"arrow-up-z-a\":[\"s\"],\"arrows-down-to-line\":[\"s\"],\"arrows-down-to-people\":[\"s\"],\"arrows-left-right\":[\"s\"],\"arrows-left-right-to-line\":[\"s\"],\"arrows-rotate\":[\"s\"],\"arrows-spin\":[\"s\"],\"arrows-split-up-and-left\":[\"s\"],\"arrows-to-circle\":[\"s\"],\"arrows-to-dot\":[\"s\"],\"arrows-to-eye\":[\"s\"],\"arrows-turn-right\":[\"s\"],\"arrows-turn-to-dots\":[\"s\"],\"arrows-up-down\":[\"s\"],\"arrows-up-down-left-right\":[\"s\"],\"arrows-up-to-line\":[\"s\"],\"artstation\":[\"b\"],\"asterisk\":[\"s\"],\"asymmetrik\":[\"b\"],\"at\":[\"s\"],\"atlassian\":[\"b\"],\"atom\":[\"s\"],\"audible\":[\"b\"],\"audio-description\":[\"s\"],\"austral-sign\":[\"s\"],\"autoprefixer\":[\"b\"],\"avianex\":[\"b\"],\"aviato\":[\"b\"],\"award\":[\"s\"],\"aws\":[\"b\"],\"b\":[\"s\"],\"baby\":[\"s\"],\"baby-carriage\":[\"s\"],\"backward\":[\"s\"],\"backward-fast\":[\"s\"],\"backward-step\":[\"s\"],\"bacon\":[\"s\"],\"bacteria\":[\"s\"],\"bacterium\":[\"s\"],\"bag-shopping\":[\"s\"],\"bahai\":[\"s\"],\"baht-sign\":[\"s\"],\"ban\":[\"s\"],\"ban-smoking\":[\"s\"],\"bandage\":[\"s\"],\"bandcamp\":[\"b\"],\"barcode\":[\"s\"],\"bars\":[\"s\"],\"bars-progress\":[\"s\"],\"bars-staggered\":[\"s\"],\"baseball\":[\"s\"],\"baseball-bat-ball\":[\"s\"],\"basket-shopping\":[\"s\"],\"basketball\":[\"s\"],\"bath\":[\"s\"],\"battery-empty\":[\"s\"],\"battery-full\":[\"s\"],\"battery-half\":[\"s\"],\"battery-quarter\":[\"s\"],\"battery-three-quarters\":[\"s\"],\"battle-net\":[\"b\"],\"bed\":[\"s\"],\"bed-pulse\":[\"s\"],\"beer-mug-empty\":[\"s\"],\"behance\":[\"b\"],\"bell\":[\"s\",\"r\"],\"bell-concierge\":[\"s\"],\"bell-slash\":[\"s\",\"r\"],\"bezier-curve\":[\"s\"],\"bicycle\":[\"s\"],\"bilibili\":[\"b\"],\"bimobject\":[\"b\"],\"binoculars\":[\"s\"],\"biohazard\":[\"s\"],\"bitbucket\":[\"b\"],\"bitcoin\":[\"b\"],\"bitcoin-sign\":[\"s\"],\"bity\":[\"b\"],\"black-tie\":[\"b\"],\"blackberry\":[\"b\"],\"blender\":[\"s\"],\"blender-phone\":[\"s\"],\"blog\":[\"s\"],\"blogger\":[\"b\"],\"blogger-b\":[\"b\"],\"bluetooth\":[\"b\"],\"bluetooth-b\":[\"b\"],\"bold\":[\"s\"],\"bolt\":[\"s\"],\"bolt-lightning\":[\"s\"],\"bomb\":[\"s\"],\"bone\":[\"s\"],\"bong\":[\"s\"],\"book\":[\"s\"],\"book-atlas\":[\"s\"],\"book-bible\":[\"s\"],\"book-bookmark\":[\"s\"],\"book-journal-whills\":[\"s\"],\"book-medical\":[\"s\"],\"book-open\":[\"s\"],\"book-open-reader\":[\"s\"],\"book-quran\":[\"s\"],\"book-skull\":[\"s\"],\"book-tanakh\":[\"s\"],\"bookmark\":[\"s\",\"r\"],\"bootstrap\":[\"b\"],\"border-all\":[\"s\"],\"border-none\":[\"s\"],\"border-top-left\":[\"s\"],\"bore-hole\":[\"s\"],\"bots\":[\"b\"],\"bottle-droplet\":[\"s\"],\"bottle-water\":[\"s\"],\"bowl-food\":[\"s\"],\"bowl-rice\":[\"s\"],\"bowling-ball\":[\"s\"],\"box\":[\"s\"],\"box-archive\":[\"s\"],\"box-open\":[\"s\"],\"box-tissue\":[\"s\"],\"boxes-packing\":[\"s\"],\"boxes-stacked\":[\"s\"],\"braille\":[\"s\"],\"brain\":[\"s\"],\"brazilian-real-sign\":[\"s\"],\"bread-slice\":[\"s\"],\"bridge\":[\"s\"],\"bridge-circle-check\":[\"s\"],\"bridge-circle-exclamation\":[\"s\"],\"bridge-circle-xmark\":[\"s\"],\"bridge-lock\":[\"s\"],\"bridge-water\":[\"s\"],\"briefcase\":[\"s\"],\"briefcase-medical\":[\"s\"],\"broom\":[\"s\"],\"broom-ball\":[\"s\"],\"brush\":[\"s\"],\"btc\":[\"b\"],\"bucket\":[\"s\"],\"buffer\":[\"b\"],\"bug\":[\"s\"],\"bug-slash\":[\"s\"],\"bugs\":[\"s\"],\"building\":[\"s\",\"r\"],\"building-circle-arrow-right\":[\"s\"],\"building-circle-check\":[\"s\"],\"building-circle-exclamation\":[\"s\"],\"building-circle-xmark\":[\"s\"],\"building-columns\":[\"s\"],\"building-flag\":[\"s\"],\"building-lock\":[\"s\"],\"building-ngo\":[\"s\"],\"building-shield\":[\"s\"],\"building-un\":[\"s\"],\"building-user\":[\"s\"],\"building-wheat\":[\"s\"],\"bullhorn\":[\"s\"],\"bullseye\":[\"s\"],\"burger\":[\"s\"],\"buromobelexperte\":[\"b\"],\"burst\":[\"s\"],\"bus\":[\"s\"],\"bus-simple\":[\"s\"],\"business-time\":[\"s\"],\"buy-n-large\":[\"b\"],\"buysellads\":[\"b\"],\"c\":[\"s\"],\"cable-car\":[\"s\"],\"cake-candles\":[\"s\"],\"calculator\":[\"s\"],\"calendar\":[\"s\",\"r\"],\"calendar-check\":[\"s\",\"r\"],\"calendar-day\":[\"s\"],\"calendar-days\":[\"s\",\"r\"],\"calendar-minus\":[\"s\",\"r\"],\"calendar-plus\":[\"s\",\"r\"],\"calendar-week\":[\"s\"],\"calendar-xmark\":[\"s\",\"r\"],\"camera\":[\"s\"],\"camera-retro\":[\"s\"],\"camera-rotate\":[\"s\"],\"campground\":[\"s\"],\"canadian-maple-leaf\":[\"b\"],\"candy-cane\":[\"s\"],\"cannabis\":[\"s\"],\"capsules\":[\"s\"],\"car\":[\"s\"],\"car-battery\":[\"s\"],\"car-burst\":[\"s\"],\"car-on\":[\"s\"],\"car-rear\":[\"s\"],\"car-side\":[\"s\"],\"car-tunnel\":[\"s\"],\"caravan\":[\"s\"],\"caret-down\":[\"s\"],\"caret-left\":[\"s\"],\"caret-right\":[\"s\"],\"caret-up\":[\"s\"],\"carrot\":[\"s\"],\"cart-arrow-down\":[\"s\"],\"cart-flatbed\":[\"s\"],\"cart-flatbed-suitcase\":[\"s\"],\"cart-plus\":[\"s\"],\"cart-shopping\":[\"s\"],\"cash-register\":[\"s\"],\"cat\":[\"s\"],\"cc-amazon-pay\":[\"b\"],\"cc-amex\":[\"b\"],\"cc-apple-pay\":[\"b\"],\"cc-diners-club\":[\"b\"],\"cc-discover\":[\"b\"],\"cc-jcb\":[\"b\"],\"cc-mastercard\":[\"b\"],\"cc-paypal\":[\"b\"],\"cc-stripe\":[\"b\"],\"cc-visa\":[\"b\"],\"cedi-sign\":[\"s\"],\"cent-sign\":[\"s\"],\"centercode\":[\"b\"],\"centos\":[\"b\"],\"certificate\":[\"s\"],\"chair\":[\"s\"],\"chalkboard\":[\"s\"],\"chalkboard-user\":[\"s\"],\"champagne-glasses\":[\"s\"],\"charging-station\":[\"s\"],\"chart-area\":[\"s\"],\"chart-bar\":[\"s\",\"r\"],\"chart-column\":[\"s\"],\"chart-gantt\":[\"s\"],\"chart-line\":[\"s\"],\"chart-pie\":[\"s\"],\"chart-simple\":[\"s\"],\"check\":[\"s\"],\"check-double\":[\"s\"],\"check-to-slot\":[\"s\"],\"cheese\":[\"s\"],\"chess\":[\"s\"],\"chess-bishop\":[\"s\",\"r\"],\"chess-board\":[\"s\"],\"chess-king\":[\"s\",\"r\"],\"chess-knight\":[\"s\",\"r\"],\"chess-pawn\":[\"s\",\"r\"],\"chess-queen\":[\"s\",\"r\"],\"chess-rook\":[\"s\",\"r\"],\"chevron-down\":[\"s\"],\"chevron-left\":[\"s\"],\"chevron-right\":[\"s\"],\"chevron-up\":[\"s\"],\"child\":[\"s\"],\"child-dress\":[\"s\"],\"child-reaching\":[\"s\"],\"child-rifle\":[\"s\"],\"children\":[\"s\"],\"chrome\":[\"b\"],\"chromecast\":[\"b\"],\"church\":[\"s\"],\"circle\":[\"s\",\"r\"],\"circle-arrow-down\":[\"s\"],\"circle-arrow-left\":[\"s\"],\"circle-arrow-right\":[\"s\"],\"circle-arrow-up\":[\"s\"],\"circle-check\":[\"s\",\"r\"],\"circle-chevron-down\":[\"s\"],\"circle-chevron-left\":[\"s\"],\"circle-chevron-right\":[\"s\"],\"circle-chevron-up\":[\"s\"],\"circle-dollar-to-slot\":[\"s\"],\"circle-dot\":[\"s\",\"r\"],\"circle-down\":[\"s\",\"r\"],\"circle-exclamation\":[\"s\"],\"circle-h\":[\"s\"],\"circle-half-stroke\":[\"s\"],\"circle-info\":[\"s\"],\"circle-left\":[\"s\",\"r\"],\"circle-minus\":[\"s\"],\"circle-nodes\":[\"s\"],\"circle-notch\":[\"s\"],\"circle-pause\":[\"s\",\"r\"],\"circle-play\":[\"s\",\"r\"],\"circle-plus\":[\"s\"],\"circle-question\":[\"s\",\"r\"],\"circle-radiation\":[\"s\"],\"circle-right\":[\"s\",\"r\"],\"circle-stop\":[\"s\",\"r\"],\"circle-up\":[\"s\",\"r\"],\"circle-user\":[\"s\",\"r\"],\"circle-xmark\":[\"s\",\"r\"],\"city\":[\"s\"],\"clapperboard\":[\"s\"],\"clipboard\":[\"s\",\"r\"],\"clipboard-check\":[\"s\"],\"clipboard-list\":[\"s\"],\"clipboard-question\":[\"s\"],\"clipboard-user\":[\"s\"],\"clock\":[\"s\",\"r\"],\"clock-rotate-left\":[\"s\"],\"clone\":[\"s\",\"r\"],\"closed-captioning\":[\"s\",\"r\"],\"cloud\":[\"s\"],\"cloud-arrow-down\":[\"s\"],\"cloud-arrow-up\":[\"s\"],\"cloud-bolt\":[\"s\"],\"cloud-meatball\":[\"s\"],\"cloud-moon\":[\"s\"],\"cloud-moon-rain\":[\"s\"],\"cloud-rain\":[\"s\"],\"cloud-showers-heavy\":[\"s\"],\"cloud-showers-water\":[\"s\"],\"cloud-sun\":[\"s\"],\"cloud-sun-rain\":[\"s\"],\"cloudflare\":[\"b\"],\"cloudscale\":[\"b\"],\"cloudsmith\":[\"b\"],\"cloudversify\":[\"b\"],\"clover\":[\"s\"],\"cmplid\":[\"b\"],\"code\":[\"s\"],\"code-branch\":[\"s\"],\"code-commit\":[\"s\"],\"code-compare\":[\"s\"],\"code-fork\":[\"s\"],\"code-merge\":[\"s\"],\"code-pull-request\":[\"s\"],\"codepen\":[\"b\"],\"codiepie\":[\"b\"],\"coins\":[\"s\"],\"colon-sign\":[\"s\"],\"comment\":[\"s\",\"r\"],\"comment-dollar\":[\"s\"],\"comment-dots\":[\"s\",\"r\"],\"comment-medical\":[\"s\"],\"comment-slash\":[\"s\"],\"comment-sms\":[\"s\"],\"comments\":[\"s\",\"r\"],\"comments-dollar\":[\"s\"],\"compact-disc\":[\"s\"],\"compass\":[\"s\",\"r\"],\"compass-drafting\":[\"s\"],\"compress\":[\"s\"],\"computer\":[\"s\"],\"computer-mouse\":[\"s\"],\"confluence\":[\"b\"],\"connectdevelop\":[\"b\"],\"contao\":[\"b\"],\"cookie\":[\"s\"],\"cookie-bite\":[\"s\"],\"copy\":[\"s\",\"r\"],\"copyright\":[\"s\",\"r\"],\"cotton-bureau\":[\"b\"],\"couch\":[\"s\"],\"cow\":[\"s\"],\"cpanel\":[\"b\"],\"creative-commons\":[\"b\"],\"creative-commons-by\":[\"b\"],\"creative-commons-nc\":[\"b\"],\"creative-commons-nc-eu\":[\"b\"],\"creative-commons-nc-jp\":[\"b\"],\"creative-commons-nd\":[\"b\"],\"creative-commons-pd\":[\"b\"],\"creative-commons-pd-alt\":[\"b\"],\"creative-commons-remix\":[\"b\"],\"creative-commons-sa\":[\"b\"],\"creative-commons-sampling\":[\"b\"],\"creative-commons-sampling-plus\":[\"b\"],\"creative-commons-share\":[\"b\"],\"creative-commons-zero\":[\"b\"],\"credit-card\":[\"s\",\"r\"],\"critical-role\":[\"b\"],\"crop\":[\"s\"],\"crop-simple\":[\"s\"],\"cross\":[\"s\"],\"crosshairs\":[\"s\"],\"crow\":[\"s\"],\"crown\":[\"s\"],\"crutch\":[\"s\"],\"cruzeiro-sign\":[\"s\"],\"css3\":[\"b\"],\"css3-alt\":[\"b\"],\"cube\":[\"s\"],\"cubes\":[\"s\"],\"cubes-stacked\":[\"s\"],\"cuttlefish\":[\"b\"],\"d\":[\"s\"],\"d-and-d\":[\"b\"],\"d-and-d-beyond\":[\"b\"],\"dailymotion\":[\"b\"],\"dashcube\":[\"b\"],\"database\":[\"s\"],\"deezer\":[\"b\"],\"delete-left\":[\"s\"],\"delicious\":[\"b\"],\"democrat\":[\"s\"],\"deploydog\":[\"b\"],\"deskpro\":[\"b\"],\"desktop\":[\"s\"],\"dev\":[\"b\"],\"deviantart\":[\"b\"],\"dharmachakra\":[\"s\"],\"dhl\":[\"b\"],\"diagram-next\":[\"s\"],\"diagram-predecessor\":[\"s\"],\"diagram-project\":[\"s\"],\"diagram-successor\":[\"s\"],\"diamond\":[\"s\"],\"diamond-turn-right\":[\"s\"],\"diaspora\":[\"b\"],\"dice\":[\"s\"],\"dice-d20\":[\"s\"],\"dice-d6\":[\"s\"],\"dice-five\":[\"s\"],\"dice-four\":[\"s\"],\"dice-one\":[\"s\"],\"dice-six\":[\"s\"],\"dice-three\":[\"s\"],\"dice-two\":[\"s\"],\"digg\":[\"b\"],\"digital-ocean\":[\"b\"],\"discord\":[\"b\"],\"discourse\":[\"b\"],\"disease\":[\"s\"],\"display\":[\"s\"],\"divide\":[\"s\"],\"dna\":[\"s\"],\"dochub\":[\"b\"],\"docker\":[\"b\"],\"dog\":[\"s\"],\"dollar-sign\":[\"s\"],\"dolly\":[\"s\"],\"dong-sign\":[\"s\"],\"door-closed\":[\"s\"],\"door-open\":[\"s\"],\"dove\":[\"s\"],\"down-left-and-up-right-to-center\":[\"s\"],\"down-long\":[\"s\"],\"download\":[\"s\"],\"draft2digital\":[\"b\"],\"dragon\":[\"s\"],\"draw-polygon\":[\"s\"],\"dribbble\":[\"b\"],\"dropbox\":[\"b\"],\"droplet\":[\"s\"],\"droplet-slash\":[\"s\"],\"drum\":[\"s\"],\"drum-steelpan\":[\"s\"],\"drumstick-bite\":[\"s\"],\"drupal\":[\"b\"],\"dumbbell\":[\"s\"],\"dumpster\":[\"s\"],\"dumpster-fire\":[\"s\"],\"dungeon\":[\"s\"],\"dyalog\":[\"b\"],\"e\":[\"s\"],\"ear-deaf\":[\"s\"],\"ear-listen\":[\"s\"],\"earlybirds\":[\"b\"],\"earth-africa\":[\"s\"],\"earth-americas\":[\"s\"],\"earth-asia\":[\"s\"],\"earth-europe\":[\"s\"],\"earth-oceania\":[\"s\"],\"ebay\":[\"b\"],\"edge\":[\"b\"],\"edge-legacy\":[\"b\"],\"egg\":[\"s\"],\"eject\":[\"s\"],\"elementor\":[\"b\"],\"elevator\":[\"s\"],\"ellipsis\":[\"s\"],\"ellipsis-vertical\":[\"s\"],\"ello\":[\"b\"],\"ember\":[\"b\"],\"empire\":[\"b\"],\"envelope\":[\"s\",\"r\"],\"envelope-circle-check\":[\"s\"],\"envelope-open\":[\"s\",\"r\"],\"envelope-open-text\":[\"s\"],\"envelopes-bulk\":[\"s\"],\"envira\":[\"b\"],\"equals\":[\"s\"],\"eraser\":[\"s\"],\"erlang\":[\"b\"],\"ethereum\":[\"b\"],\"ethernet\":[\"s\"],\"etsy\":[\"b\"],\"euro-sign\":[\"s\"],\"evernote\":[\"b\"],\"exclamation\":[\"s\"],\"expand\":[\"s\"],\"expeditedssl\":[\"b\"],\"explosion\":[\"s\"],\"eye\":[\"s\",\"r\"],\"eye-dropper\":[\"s\"],\"eye-low-vision\":[\"s\"],\"eye-slash\":[\"s\",\"r\"],\"f\":[\"s\"],\"face-angry\":[\"s\",\"r\"],\"face-dizzy\":[\"s\",\"r\"],\"face-flushed\":[\"s\",\"r\"],\"face-frown\":[\"s\",\"r\"],\"face-frown-open\":[\"s\",\"r\"],\"face-grimace\":[\"s\",\"r\"],\"face-grin\":[\"s\",\"r\"],\"face-grin-beam\":[\"s\",\"r\"],\"face-grin-beam-sweat\":[\"s\",\"r\"],\"face-grin-hearts\":[\"s\",\"r\"],\"face-grin-squint\":[\"s\",\"r\"],\"face-grin-squint-tears\":[\"s\",\"r\"],\"face-grin-stars\":[\"s\",\"r\"],\"face-grin-tears\":[\"s\",\"r\"],\"face-grin-tongue\":[\"s\",\"r\"],\"face-grin-tongue-squint\":[\"s\",\"r\"],\"face-grin-tongue-wink\":[\"s\",\"r\"],\"face-grin-wide\":[\"s\",\"r\"],\"face-grin-wink\":[\"s\",\"r\"],\"face-kiss\":[\"s\",\"r\"],\"face-kiss-beam\":[\"s\",\"r\"],\"face-kiss-wink-heart\":[\"s\",\"r\"],\"face-laugh\":[\"s\",\"r\"],\"face-laugh-beam\":[\"s\",\"r\"],\"face-laugh-squint\":[\"s\",\"r\"],\"face-laugh-wink\":[\"s\",\"r\"],\"face-meh\":[\"s\",\"r\"],\"face-meh-blank\":[\"s\",\"r\"],\"face-rolling-eyes\":[\"s\",\"r\"],\"face-sad-cry\":[\"s\",\"r\"],\"face-sad-tear\":[\"s\",\"r\"],\"face-smile\":[\"s\",\"r\"],\"face-smile-beam\":[\"s\",\"r\"],\"face-smile-wink\":[\"s\",\"r\"],\"face-surprise\":[\"s\",\"r\"],\"face-tired\":[\"s\",\"r\"],\"facebook\":[\"b\"],\"facebook-f\":[\"b\"],\"facebook-messenger\":[\"b\"],\"fan\":[\"s\"],\"fantasy-flight-games\":[\"b\"],\"faucet\":[\"s\"],\"faucet-drip\":[\"s\"],\"fax\":[\"s\"],\"feather\":[\"s\"],\"feather-pointed\":[\"s\"],\"fedex\":[\"b\"],\"fedora\":[\"b\"],\"ferry\":[\"s\"],\"figma\":[\"b\"],\"file\":[\"s\",\"r\"],\"file-arrow-down\":[\"s\"],\"file-arrow-up\":[\"s\"],\"file-audio\":[\"s\",\"r\"],\"file-circle-check\":[\"s\"],\"file-circle-exclamation\":[\"s\"],\"file-circle-minus\":[\"s\"],\"file-circle-plus\":[\"s\"],\"file-circle-question\":[\"s\"],\"file-circle-xmark\":[\"s\"],\"file-code\":[\"s\",\"r\"],\"file-contract\":[\"s\"],\"file-csv\":[\"s\"],\"file-excel\":[\"s\",\"r\"],\"file-export\":[\"s\"],\"file-image\":[\"s\",\"r\"],\"file-import\":[\"s\"],\"file-invoice\":[\"s\"],\"file-invoice-dollar\":[\"s\"],\"file-lines\":[\"s\",\"r\"],\"file-medical\":[\"s\"],\"file-pdf\":[\"s\",\"r\"],\"file-pen\":[\"s\"],\"file-powerpoint\":[\"s\",\"r\"],\"file-prescription\":[\"s\"],\"file-shield\":[\"s\"],\"file-signature\":[\"s\"],\"file-video\":[\"s\",\"r\"],\"file-waveform\":[\"s\"],\"file-word\":[\"s\",\"r\"],\"file-zipper\":[\"s\",\"r\"],\"fill\":[\"s\"],\"fill-drip\":[\"s\"],\"film\":[\"s\"],\"filter\":[\"s\"],\"filter-circle-dollar\":[\"s\"],\"filter-circle-xmark\":[\"s\"],\"fingerprint\":[\"s\"],\"fire\":[\"s\"],\"fire-burner\":[\"s\"],\"fire-extinguisher\":[\"s\"],\"fire-flame-curved\":[\"s\"],\"fire-flame-simple\":[\"s\"],\"firefox\":[\"b\"],\"firefox-browser\":[\"b\"],\"first-order\":[\"b\"],\"first-order-alt\":[\"b\"],\"firstdraft\":[\"b\"],\"fish\":[\"s\"],\"fish-fins\":[\"s\"],\"flag\":[\"s\",\"r\"],\"flag-checkered\":[\"s\"],\"flag-usa\":[\"s\"],\"flask\":[\"s\"],\"flask-vial\":[\"s\"],\"flickr\":[\"b\"],\"flipboard\":[\"b\"],\"floppy-disk\":[\"s\",\"r\"],\"florin-sign\":[\"s\"],\"fly\":[\"b\"],\"folder\":[\"s\",\"r\"],\"folder-closed\":[\"s\",\"r\"],\"folder-minus\":[\"s\"],\"folder-open\":[\"s\",\"r\"],\"folder-plus\":[\"s\"],\"folder-tree\":[\"s\"],\"font\":[\"s\"],\"font-awesome\":[\"s\",\"r\",\"b\"],\"fonticons\":[\"b\"],\"fonticons-fi\":[\"b\"],\"football\":[\"s\"],\"fort-awesome\":[\"b\"],\"fort-awesome-alt\":[\"b\"],\"forumbee\":[\"b\"],\"forward\":[\"s\"],\"forward-fast\":[\"s\"],\"forward-step\":[\"s\"],\"foursquare\":[\"b\"],\"franc-sign\":[\"s\"],\"free-code-camp\":[\"b\"],\"freebsd\":[\"b\"],\"frog\":[\"s\"],\"fulcrum\":[\"b\"],\"futbol\":[\"s\",\"r\"],\"g\":[\"s\"],\"galactic-republic\":[\"b\"],\"galactic-senate\":[\"b\"],\"gamepad\":[\"s\"],\"gas-pump\":[\"s\"],\"gauge\":[\"s\"],\"gauge-high\":[\"s\"],\"gauge-simple\":[\"s\"],\"gauge-simple-high\":[\"s\"],\"gavel\":[\"s\"],\"gear\":[\"s\"],\"gears\":[\"s\"],\"gem\":[\"s\",\"r\"],\"genderless\":[\"s\"],\"get-pocket\":[\"b\"],\"gg\":[\"b\"],\"gg-circle\":[\"b\"],\"ghost\":[\"s\"],\"gift\":[\"s\"],\"gifts\":[\"s\"],\"git\":[\"b\"],\"git-alt\":[\"b\"],\"github\":[\"b\"],\"github-alt\":[\"b\"],\"gitkraken\":[\"b\"],\"gitlab\":[\"b\"],\"gitter\":[\"b\"],\"glass-water\":[\"s\"],\"glass-water-droplet\":[\"s\"],\"glasses\":[\"s\"],\"glide\":[\"b\"],\"glide-g\":[\"b\"],\"globe\":[\"s\"],\"gofore\":[\"b\"],\"golang\":[\"b\"],\"golf-ball-tee\":[\"s\"],\"goodreads\":[\"b\"],\"goodreads-g\":[\"b\"],\"google\":[\"b\"],\"google-drive\":[\"b\"],\"google-pay\":[\"b\"],\"google-play\":[\"b\"],\"google-plus\":[\"b\"],\"google-plus-g\":[\"b\"],\"google-wallet\":[\"b\"],\"gopuram\":[\"s\"],\"graduation-cap\":[\"s\"],\"gratipay\":[\"b\"],\"grav\":[\"b\"],\"greater-than\":[\"s\"],\"greater-than-equal\":[\"s\"],\"grip\":[\"s\"],\"grip-lines\":[\"s\"],\"grip-lines-vertical\":[\"s\"],\"grip-vertical\":[\"s\"],\"gripfire\":[\"b\"],\"group-arrows-rotate\":[\"s\"],\"grunt\":[\"b\"],\"guarani-sign\":[\"s\"],\"guilded\":[\"b\"],\"guitar\":[\"s\"],\"gulp\":[\"b\"],\"gun\":[\"s\"],\"h\":[\"s\"],\"hacker-news\":[\"b\"],\"hackerrank\":[\"b\"],\"hammer\":[\"s\"],\"hamsa\":[\"s\"],\"hand\":[\"s\",\"r\"],\"hand-back-fist\":[\"s\",\"r\"],\"hand-dots\":[\"s\"],\"hand-fist\":[\"s\"],\"hand-holding\":[\"s\"],\"hand-holding-dollar\":[\"s\"],\"hand-holding-droplet\":[\"s\"],\"hand-holding-hand\":[\"s\"],\"hand-holding-heart\":[\"s\"],\"hand-holding-medical\":[\"s\"],\"hand-lizard\":[\"s\",\"r\"],\"hand-middle-finger\":[\"s\"],\"hand-peace\":[\"s\",\"r\"],\"hand-point-down\":[\"s\",\"r\"],\"hand-point-left\":[\"s\",\"r\"],\"hand-point-right\":[\"s\",\"r\"],\"hand-point-up\":[\"s\",\"r\"],\"hand-pointer\":[\"s\",\"r\"],\"hand-scissors\":[\"s\",\"r\"],\"hand-sparkles\":[\"s\"],\"hand-spock\":[\"s\",\"r\"],\"handcuffs\":[\"s\"],\"hands\":[\"s\"],\"hands-asl-interpreting\":[\"s\"],\"hands-bound\":[\"s\"],\"hands-bubbles\":[\"s\"],\"hands-clapping\":[\"s\"],\"hands-holding\":[\"s\"],\"hands-holding-child\":[\"s\"],\"hands-holding-circle\":[\"s\"],\"hands-praying\":[\"s\"],\"handshake\":[\"s\",\"r\"],\"handshake-angle\":[\"s\"],\"handshake-simple\":[\"s\"],\"handshake-simple-slash\":[\"s\"],\"handshake-slash\":[\"s\"],\"hanukiah\":[\"s\"],\"hard-drive\":[\"s\",\"r\"],\"hashnode\":[\"b\"],\"hashtag\":[\"s\"],\"hat-cowboy\":[\"s\"],\"hat-cowboy-side\":[\"s\"],\"hat-wizard\":[\"s\"],\"head-side-cough\":[\"s\"],\"head-side-cough-slash\":[\"s\"],\"head-side-mask\":[\"s\"],\"head-side-virus\":[\"s\"],\"heading\":[\"s\"],\"headphones\":[\"s\"],\"headphones-simple\":[\"s\"],\"headset\":[\"s\"],\"heart\":[\"s\",\"r\"],\"heart-circle-bolt\":[\"s\"],\"heart-circle-check\":[\"s\"],\"heart-circle-exclamation\":[\"s\"],\"heart-circle-minus\":[\"s\"],\"heart-circle-plus\":[\"s\"],\"heart-circle-xmark\":[\"s\"],\"heart-crack\":[\"s\"],\"heart-pulse\":[\"s\"],\"helicopter\":[\"s\"],\"helicopter-symbol\":[\"s\"],\"helmet-safety\":[\"s\"],\"helmet-un\":[\"s\"],\"highlighter\":[\"s\"],\"hill-avalanche\":[\"s\"],\"hill-rockslide\":[\"s\"],\"hippo\":[\"s\"],\"hips\":[\"b\"],\"hire-a-helper\":[\"b\"],\"hive\":[\"b\"],\"hockey-puck\":[\"s\"],\"holly-berry\":[\"s\"],\"hooli\":[\"b\"],\"hornbill\":[\"b\"],\"horse\":[\"s\"],\"horse-head\":[\"s\"],\"hospital\":[\"s\",\"r\"],\"hospital-user\":[\"s\"],\"hot-tub-person\":[\"s\"],\"hotdog\":[\"s\"],\"hotel\":[\"s\"],\"hotjar\":[\"b\"],\"hourglass\":[\"s\",\"r\"],\"hourglass-end\":[\"s\"],\"hourglass-half\":[\"s\",\"r\"],\"hourglass-start\":[\"s\"],\"house\":[\"s\"],\"house-chimney\":[\"s\"],\"house-chimney-crack\":[\"s\"],\"house-chimney-medical\":[\"s\"],\"house-chimney-user\":[\"s\"],\"house-chimney-window\":[\"s\"],\"house-circle-check\":[\"s\"],\"house-circle-exclamation\":[\"s\"],\"house-circle-xmark\":[\"s\"],\"house-crack\":[\"s\"],\"house-fire\":[\"s\"],\"house-flag\":[\"s\"],\"house-flood-water\":[\"s\"],\"house-flood-water-circle-arrow-right\":[\"s\"],\"house-laptop\":[\"s\"],\"house-lock\":[\"s\"],\"house-medical\":[\"s\"],\"house-medical-circle-check\":[\"s\"],\"house-medical-circle-exclamation\":[\"s\"],\"house-medical-circle-xmark\":[\"s\"],\"house-medical-flag\":[\"s\"],\"house-signal\":[\"s\"],\"house-tsunami\":[\"s\"],\"house-user\":[\"s\"],\"houzz\":[\"b\"],\"hryvnia-sign\":[\"s\"],\"html5\":[\"b\"],\"hubspot\":[\"b\"],\"hurricane\":[\"s\"],\"i\":[\"s\"],\"i-cursor\":[\"s\"],\"ice-cream\":[\"s\"],\"icicles\":[\"s\"],\"icons\":[\"s\"],\"id-badge\":[\"s\",\"r\"],\"id-card\":[\"s\",\"r\"],\"id-card-clip\":[\"s\"],\"ideal\":[\"b\"],\"igloo\":[\"s\"],\"image\":[\"s\",\"r\"],\"image-portrait\":[\"s\"],\"images\":[\"s\",\"r\"],\"imdb\":[\"b\"],\"inbox\":[\"s\"],\"indent\":[\"s\"],\"indian-rupee-sign\":[\"s\"],\"industry\":[\"s\"],\"infinity\":[\"s\"],\"info\":[\"s\"],\"instagram\":[\"b\"],\"instalod\":[\"b\"],\"intercom\":[\"b\"],\"internet-explorer\":[\"b\"],\"invision\":[\"b\"],\"ioxhost\":[\"b\"],\"italic\":[\"s\"],\"itch-io\":[\"b\"],\"itunes\":[\"b\"],\"itunes-note\":[\"b\"],\"j\":[\"s\"],\"jar\":[\"s\"],\"jar-wheat\":[\"s\"],\"java\":[\"b\"],\"jedi\":[\"s\"],\"jedi-order\":[\"b\"],\"jenkins\":[\"b\"],\"jet-fighter\":[\"s\"],\"jet-fighter-up\":[\"s\"],\"jira\":[\"b\"],\"joget\":[\"b\"],\"joint\":[\"s\"],\"joomla\":[\"b\"],\"js\":[\"b\"],\"jsfiddle\":[\"b\"],\"jug-detergent\":[\"s\"],\"k\":[\"s\"],\"kaaba\":[\"s\"],\"kaggle\":[\"b\"],\"key\":[\"s\"],\"keybase\":[\"b\"],\"keyboard\":[\"s\",\"r\"],\"keycdn\":[\"b\"],\"khanda\":[\"s\"],\"kickstarter\":[\"b\"],\"kickstarter-k\":[\"b\"],\"kip-sign\":[\"s\"],\"kit-medical\":[\"s\"],\"kitchen-set\":[\"s\"],\"kiwi-bird\":[\"s\"],\"korvue\":[\"b\"],\"l\":[\"s\"],\"land-mine-on\":[\"s\"],\"landmark\":[\"s\"],\"landmark-dome\":[\"s\"],\"landmark-flag\":[\"s\"],\"language\":[\"s\"],\"laptop\":[\"s\"],\"laptop-code\":[\"s\"],\"laptop-file\":[\"s\"],\"laptop-medical\":[\"s\"],\"laravel\":[\"b\"],\"lari-sign\":[\"s\"],\"lastfm\":[\"b\"],\"layer-group\":[\"s\"],\"leaf\":[\"s\"],\"leanpub\":[\"b\"],\"left-long\":[\"s\"],\"left-right\":[\"s\"],\"lemon\":[\"s\",\"r\"],\"less\":[\"b\"],\"less-than\":[\"s\"],\"less-than-equal\":[\"s\"],\"life-ring\":[\"s\",\"r\"],\"lightbulb\":[\"s\",\"r\"],\"line\":[\"b\"],\"lines-leaning\":[\"s\"],\"link\":[\"s\"],\"link-slash\":[\"s\"],\"linkedin\":[\"b\"],\"linkedin-in\":[\"b\"],\"linode\":[\"b\"],\"linux\":[\"b\"],\"lira-sign\":[\"s\"],\"list\":[\"s\"],\"list-check\":[\"s\"],\"list-ol\":[\"s\"],\"list-ul\":[\"s\"],\"litecoin-sign\":[\"s\"],\"location-arrow\":[\"s\"],\"location-crosshairs\":[\"s\"],\"location-dot\":[\"s\"],\"location-pin\":[\"s\"],\"location-pin-lock\":[\"s\"],\"lock\":[\"s\"],\"lock-open\":[\"s\"],\"locust\":[\"s\"],\"lungs\":[\"s\"],\"lungs-virus\":[\"s\"],\"lyft\":[\"b\"],\"m\":[\"s\"],\"magento\":[\"b\"],\"magnet\":[\"s\"],\"magnifying-glass\":[\"s\"],\"magnifying-glass-arrow-right\":[\"s\"],\"magnifying-glass-chart\":[\"s\"],\"magnifying-glass-dollar\":[\"s\"],\"magnifying-glass-location\":[\"s\"],\"magnifying-glass-minus\":[\"s\"],\"magnifying-glass-plus\":[\"s\"],\"mailchimp\":[\"b\"],\"manat-sign\":[\"s\"],\"mandalorian\":[\"b\"],\"map\":[\"s\",\"r\"],\"map-location\":[\"s\"],\"map-location-dot\":[\"s\"],\"map-pin\":[\"s\"],\"markdown\":[\"b\"],\"marker\":[\"s\"],\"mars\":[\"s\"],\"mars-and-venus\":[\"s\"],\"mars-and-venus-burst\":[\"s\"],\"mars-double\":[\"s\"],\"mars-stroke\":[\"s\"],\"mars-stroke-right\":[\"s\"],\"mars-stroke-up\":[\"s\"],\"martini-glass\":[\"s\"],\"martini-glass-citrus\":[\"s\"],\"martini-glass-empty\":[\"s\"],\"mask\":[\"s\"],\"mask-face\":[\"s\"],\"mask-ventilator\":[\"s\"],\"masks-theater\":[\"s\"],\"mastodon\":[\"b\"],\"mattress-pillow\":[\"s\"],\"maxcdn\":[\"b\"],\"maximize\":[\"s\"],\"mdb\":[\"b\"],\"medal\":[\"s\"],\"medapps\":[\"b\"],\"medium\":[\"b\"],\"medrt\":[\"b\"],\"meetup\":[\"b\"],\"megaport\":[\"b\"],\"memory\":[\"s\"],\"mendeley\":[\"b\"],\"menorah\":[\"s\"],\"mercury\":[\"s\"],\"message\":[\"s\",\"r\"],\"meta\":[\"b\"],\"meteor\":[\"s\"],\"microblog\":[\"b\"],\"microchip\":[\"s\"],\"microphone\":[\"s\"],\"microphone-lines\":[\"s\"],\"microphone-lines-slash\":[\"s\"],\"microphone-slash\":[\"s\"],\"microscope\":[\"s\"],\"microsoft\":[\"b\"],\"mill-sign\":[\"s\"],\"minimize\":[\"s\"],\"minus\":[\"s\"],\"mitten\":[\"s\"],\"mix\":[\"b\"],\"mixcloud\":[\"b\"],\"mixer\":[\"b\"],\"mizuni\":[\"b\"],\"mobile\":[\"s\"],\"mobile-button\":[\"s\"],\"mobile-retro\":[\"s\"],\"mobile-screen\":[\"s\"],\"mobile-screen-button\":[\"s\"],\"modx\":[\"b\"],\"monero\":[\"b\"],\"money-bill\":[\"s\"],\"money-bill-1\":[\"s\",\"r\"],\"money-bill-1-wave\":[\"s\"],\"money-bill-transfer\":[\"s\"],\"money-bill-trend-up\":[\"s\"],\"money-bill-wave\":[\"s\"],\"money-bill-wheat\":[\"s\"],\"money-bills\":[\"s\"],\"money-check\":[\"s\"],\"money-check-dollar\":[\"s\"],\"monument\":[\"s\"],\"moon\":[\"s\",\"r\"],\"mortar-pestle\":[\"s\"],\"mosque\":[\"s\"],\"mosquito\":[\"s\"],\"mosquito-net\":[\"s\"],\"motorcycle\":[\"s\"],\"mound\":[\"s\"],\"mountain\":[\"s\"],\"mountain-city\":[\"s\"],\"mountain-sun\":[\"s\"],\"mug-hot\":[\"s\"],\"mug-saucer\":[\"s\"],\"music\":[\"s\"],\"n\":[\"s\"],\"naira-sign\":[\"s\"],\"napster\":[\"b\"],\"neos\":[\"b\"],\"network-wired\":[\"s\"],\"neuter\":[\"s\"],\"newspaper\":[\"s\",\"r\"],\"nfc-directional\":[\"b\"],\"nfc-symbol\":[\"b\"],\"nimblr\":[\"b\"],\"node\":[\"b\"],\"node-js\":[\"b\"],\"not-equal\":[\"s\"],\"note-sticky\":[\"s\",\"r\"],\"notes-medical\":[\"s\"],\"npm\":[\"b\"],\"ns8\":[\"b\"],\"nutritionix\":[\"b\"],\"o\":[\"s\"],\"object-group\":[\"s\",\"r\"],\"object-ungroup\":[\"s\",\"r\"],\"octopus-deploy\":[\"b\"],\"odnoklassniki\":[\"b\"],\"oil-can\":[\"s\"],\"oil-well\":[\"s\"],\"old-republic\":[\"b\"],\"om\":[\"s\"],\"opencart\":[\"b\"],\"openid\":[\"b\"],\"opera\":[\"b\"],\"optin-monster\":[\"b\"],\"orcid\":[\"b\"],\"osi\":[\"b\"],\"otter\":[\"s\"],\"outdent\":[\"s\"],\"p\":[\"s\"],\"padlet\":[\"b\"],\"page4\":[\"b\"],\"pagelines\":[\"b\"],\"pager\":[\"s\"],\"paint-roller\":[\"s\"],\"paintbrush\":[\"s\"],\"palette\":[\"s\"],\"palfed\":[\"b\"],\"pallet\":[\"s\"],\"panorama\":[\"s\"],\"paper-plane\":[\"s\",\"r\"],\"paperclip\":[\"s\"],\"parachute-box\":[\"s\"],\"paragraph\":[\"s\"],\"passport\":[\"s\"],\"paste\":[\"s\",\"r\"],\"patreon\":[\"b\"],\"pause\":[\"s\"],\"paw\":[\"s\"],\"paypal\":[\"b\"],\"peace\":[\"s\"],\"pen\":[\"s\"],\"pen-clip\":[\"s\"],\"pen-fancy\":[\"s\"],\"pen-nib\":[\"s\"],\"pen-ruler\":[\"s\"],\"pen-to-square\":[\"s\",\"r\"],\"pencil\":[\"s\"],\"people-arrows\":[\"s\"],\"people-carry-box\":[\"s\"],\"people-group\":[\"s\"],\"people-line\":[\"s\"],\"people-pulling\":[\"s\"],\"people-robbery\":[\"s\"],\"people-roof\":[\"s\"],\"pepper-hot\":[\"s\"],\"perbyte\":[\"b\"],\"percent\":[\"s\"],\"periscope\":[\"b\"],\"person\":[\"s\"],\"person-arrow-down-to-line\":[\"s\"],\"person-arrow-up-from-line\":[\"s\"],\"person-biking\":[\"s\"],\"person-booth\":[\"s\"],\"person-breastfeeding\":[\"s\"],\"person-burst\":[\"s\"],\"person-cane\":[\"s\"],\"person-chalkboard\":[\"s\"],\"person-circle-check\":[\"s\"],\"person-circle-exclamation\":[\"s\"],\"person-circle-minus\":[\"s\"],\"person-circle-plus\":[\"s\"],\"person-circle-question\":[\"s\"],\"person-circle-xmark\":[\"s\"],\"person-digging\":[\"s\"],\"person-dots-from-line\":[\"s\"],\"person-dress\":[\"s\"],\"person-dress-burst\":[\"s\"],\"person-drowning\":[\"s\"],\"person-falling\":[\"s\"],\"person-falling-burst\":[\"s\"],\"person-half-dress\":[\"s\"],\"person-harassing\":[\"s\"],\"person-hiking\":[\"s\"],\"person-military-pointing\":[\"s\"],\"person-military-rifle\":[\"s\"],\"person-military-to-person\":[\"s\"],\"person-praying\":[\"s\"],\"person-pregnant\":[\"s\"],\"person-rays\":[\"s\"],\"person-rifle\":[\"s\"],\"person-running\":[\"s\"],\"person-shelter\":[\"s\"],\"person-skating\":[\"s\"],\"person-skiing\":[\"s\"],\"person-skiing-nordic\":[\"s\"],\"person-snowboarding\":[\"s\"],\"person-swimming\":[\"s\"],\"person-through-window\":[\"s\"],\"person-walking\":[\"s\"],\"person-walking-arrow-loop-left\":[\"s\"],\"person-walking-arrow-right\":[\"s\"],\"person-walking-dashed-line-arrow-right\":[\"s\"],\"person-walking-luggage\":[\"s\"],\"person-walking-with-cane\":[\"s\"],\"peseta-sign\":[\"s\"],\"peso-sign\":[\"s\"],\"phabricator\":[\"b\"],\"phoenix-framework\":[\"b\"],\"phoenix-squadron\":[\"b\"],\"phone\":[\"s\"],\"phone-flip\":[\"s\"],\"phone-slash\":[\"s\"],\"phone-volume\":[\"s\"],\"photo-film\":[\"s\"],\"php\":[\"b\"],\"pied-piper\":[\"b\"],\"pied-piper-alt\":[\"b\"],\"pied-piper-hat\":[\"b\"],\"pied-piper-pp\":[\"b\"],\"piggy-bank\":[\"s\"],\"pills\":[\"s\"],\"pinterest\":[\"b\"],\"pinterest-p\":[\"b\"],\"pix\":[\"b\"],\"pizza-slice\":[\"s\"],\"place-of-worship\":[\"s\"],\"plane\":[\"s\"],\"plane-arrival\":[\"s\"],\"plane-circle-check\":[\"s\"],\"plane-circle-exclamation\":[\"s\"],\"plane-circle-xmark\":[\"s\"],\"plane-departure\":[\"s\"],\"plane-lock\":[\"s\"],\"plane-slash\":[\"s\"],\"plane-up\":[\"s\"],\"plant-wilt\":[\"s\"],\"plate-wheat\":[\"s\"],\"play\":[\"s\"],\"playstation\":[\"b\"],\"plug\":[\"s\"],\"plug-circle-bolt\":[\"s\"],\"plug-circle-check\":[\"s\"],\"plug-circle-exclamation\":[\"s\"],\"plug-circle-minus\":[\"s\"],\"plug-circle-plus\":[\"s\"],\"plug-circle-xmark\":[\"s\"],\"plus\":[\"s\"],\"plus-minus\":[\"s\"],\"podcast\":[\"s\"],\"poo\":[\"s\"],\"poo-storm\":[\"s\"],\"poop\":[\"s\"],\"power-off\":[\"s\"],\"prescription\":[\"s\"],\"prescription-bottle\":[\"s\"],\"prescription-bottle-medical\":[\"s\"],\"print\":[\"s\"],\"product-hunt\":[\"b\"],\"pump-medical\":[\"s\"],\"pump-soap\":[\"s\"],\"pushed\":[\"b\"],\"puzzle-piece\":[\"s\"],\"python\":[\"b\"],\"q\":[\"s\"],\"qq\":[\"b\"],\"qrcode\":[\"s\"],\"question\":[\"s\"],\"quinscape\":[\"b\"],\"quora\":[\"b\"],\"quote-left\":[\"s\"],\"quote-right\":[\"s\"],\"r\":[\"s\"],\"r-project\":[\"b\"],\"radiation\":[\"s\"],\"radio\":[\"s\"],\"rainbow\":[\"s\"],\"ranking-star\":[\"s\"],\"raspberry-pi\":[\"b\"],\"ravelry\":[\"b\"],\"react\":[\"b\"],\"reacteurope\":[\"b\"],\"readme\":[\"b\"],\"rebel\":[\"b\"],\"receipt\":[\"s\"],\"record-vinyl\":[\"s\"],\"rectangle-ad\":[\"s\"],\"rectangle-list\":[\"s\",\"r\"],\"rectangle-xmark\":[\"s\",\"r\"],\"recycle\":[\"s\"],\"red-river\":[\"b\"],\"reddit\":[\"b\"],\"reddit-alien\":[\"b\"],\"redhat\":[\"b\"],\"registered\":[\"s\",\"r\"],\"renren\":[\"b\"],\"repeat\":[\"s\"],\"reply\":[\"s\"],\"reply-all\":[\"s\"],\"replyd\":[\"b\"],\"republican\":[\"s\"],\"researchgate\":[\"b\"],\"resolving\":[\"b\"],\"restroom\":[\"s\"],\"retweet\":[\"s\"],\"rev\":[\"b\"],\"ribbon\":[\"s\"],\"right-from-bracket\":[\"s\"],\"right-left\":[\"s\"],\"right-long\":[\"s\"],\"right-to-bracket\":[\"s\"],\"ring\":[\"s\"],\"road\":[\"s\"],\"road-barrier\":[\"s\"],\"road-bridge\":[\"s\"],\"road-circle-check\":[\"s\"],\"road-circle-exclamation\":[\"s\"],\"road-circle-xmark\":[\"s\"],\"road-lock\":[\"s\"],\"road-spikes\":[\"s\"],\"robot\":[\"s\"],\"rocket\":[\"s\"],\"rocketchat\":[\"b\"],\"rockrms\":[\"b\"],\"rotate\":[\"s\"],\"rotate-left\":[\"s\"],\"rotate-right\":[\"s\"],\"route\":[\"s\"],\"rss\":[\"s\"],\"ruble-sign\":[\"s\"],\"rug\":[\"s\"],\"ruler\":[\"s\"],\"ruler-combined\":[\"s\"],\"ruler-horizontal\":[\"s\"],\"ruler-vertical\":[\"s\"],\"rupee-sign\":[\"s\"],\"rupiah-sign\":[\"s\"],\"rust\":[\"b\"],\"s\":[\"s\"],\"sack-dollar\":[\"s\"],\"sack-xmark\":[\"s\"],\"safari\":[\"b\"],\"sailboat\":[\"s\"],\"salesforce\":[\"b\"],\"sass\":[\"b\"],\"satellite\":[\"s\"],\"satellite-dish\":[\"s\"],\"scale-balanced\":[\"s\"],\"scale-unbalanced\":[\"s\"],\"scale-unbalanced-flip\":[\"s\"],\"schlix\":[\"b\"],\"school\":[\"s\"],\"school-circle-check\":[\"s\"],\"school-circle-exclamation\":[\"s\"],\"school-circle-xmark\":[\"s\"],\"school-flag\":[\"s\"],\"school-lock\":[\"s\"],\"scissors\":[\"s\"],\"screenpal\":[\"b\"],\"screwdriver\":[\"s\"],\"screwdriver-wrench\":[\"s\"],\"scribd\":[\"b\"],\"scroll\":[\"s\"],\"scroll-torah\":[\"s\"],\"sd-card\":[\"s\"],\"searchengin\":[\"b\"],\"section\":[\"s\"],\"seedling\":[\"s\"],\"sellcast\":[\"b\"],\"sellsy\":[\"b\"],\"server\":[\"s\"],\"servicestack\":[\"b\"],\"shapes\":[\"s\"],\"share\":[\"s\"],\"share-from-square\":[\"s\",\"r\"],\"share-nodes\":[\"s\"],\"sheet-plastic\":[\"s\"],\"shekel-sign\":[\"s\"],\"shield\":[\"s\"],\"shield-cat\":[\"s\"],\"shield-dog\":[\"s\"],\"shield-halved\":[\"s\"],\"shield-heart\":[\"s\"],\"shield-virus\":[\"s\"],\"ship\":[\"s\"],\"shirt\":[\"s\"],\"shirtsinbulk\":[\"b\"],\"shoe-prints\":[\"s\"],\"shop\":[\"s\"],\"shop-lock\":[\"s\"],\"shop-slash\":[\"s\"],\"shopify\":[\"b\"],\"shopware\":[\"b\"],\"shower\":[\"s\"],\"shrimp\":[\"s\"],\"shuffle\":[\"s\"],\"shuttle-space\":[\"s\"],\"sign-hanging\":[\"s\"],\"signal\":[\"s\"],\"signature\":[\"s\"],\"signs-post\":[\"s\"],\"sim-card\":[\"s\"],\"simplybuilt\":[\"b\"],\"sink\":[\"s\"],\"sistrix\":[\"b\"],\"sitemap\":[\"s\"],\"sith\":[\"b\"],\"sitrox\":[\"b\"],\"sketch\":[\"b\"],\"skull\":[\"s\"],\"skull-crossbones\":[\"s\"],\"skyatlas\":[\"b\"],\"skype\":[\"b\"],\"slack\":[\"b\"],\"slash\":[\"s\"],\"sleigh\":[\"s\"],\"sliders\":[\"s\"],\"slideshare\":[\"b\"],\"smog\":[\"s\"],\"smoking\":[\"s\"],\"snapchat\":[\"b\"],\"snowflake\":[\"s\",\"r\"],\"snowman\":[\"s\"],\"snowplow\":[\"s\"],\"soap\":[\"s\"],\"socks\":[\"s\"],\"solar-panel\":[\"s\"],\"sort\":[\"s\"],\"sort-down\":[\"s\"],\"sort-up\":[\"s\"],\"soundcloud\":[\"b\"],\"sourcetree\":[\"b\"],\"spa\":[\"s\"],\"space-awesome\":[\"b\"],\"spaghetti-monster-flying\":[\"s\"],\"speakap\":[\"b\"],\"speaker-deck\":[\"b\"],\"spell-check\":[\"s\"],\"spider\":[\"s\"],\"spinner\":[\"s\"],\"splotch\":[\"s\"],\"spoon\":[\"s\"],\"spotify\":[\"b\"],\"spray-can\":[\"s\"],\"spray-can-sparkles\":[\"s\"],\"square\":[\"s\",\"r\"],\"square-arrow-up-right\":[\"s\"],\"square-behance\":[\"b\"],\"square-caret-down\":[\"s\",\"r\"],\"square-caret-left\":[\"s\",\"r\"],\"square-caret-right\":[\"s\",\"r\"],\"square-caret-up\":[\"s\",\"r\"],\"square-check\":[\"s\",\"r\"],\"square-dribbble\":[\"b\"],\"square-envelope\":[\"s\"],\"square-facebook\":[\"b\"],\"square-font-awesome\":[\"b\"],\"square-font-awesome-stroke\":[\"b\"],\"square-full\":[\"s\",\"r\"],\"square-git\":[\"b\"],\"square-github\":[\"b\"],\"square-gitlab\":[\"b\"],\"square-google-plus\":[\"b\"],\"square-h\":[\"s\"],\"square-hacker-news\":[\"b\"],\"square-instagram\":[\"b\"],\"square-js\":[\"b\"],\"square-lastfm\":[\"b\"],\"square-minus\":[\"s\",\"r\"],\"square-nfi\":[\"s\"],\"square-odnoklassniki\":[\"b\"],\"square-parking\":[\"s\"],\"square-pen\":[\"s\"],\"square-person-confined\":[\"s\"],\"square-phone\":[\"s\"],\"square-phone-flip\":[\"s\"],\"square-pied-piper\":[\"b\"],\"square-pinterest\":[\"b\"],\"square-plus\":[\"s\",\"r\"],\"square-poll-horizontal\":[\"s\"],\"square-poll-vertical\":[\"s\"],\"square-reddit\":[\"b\"],\"square-root-variable\":[\"s\"],\"square-rss\":[\"s\"],\"square-share-nodes\":[\"s\"],\"square-snapchat\":[\"b\"],\"square-steam\":[\"b\"],\"square-tumblr\":[\"b\"],\"square-twitter\":[\"b\"],\"square-up-right\":[\"s\"],\"square-viadeo\":[\"b\"],\"square-vimeo\":[\"b\"],\"square-virus\":[\"s\"],\"square-whatsapp\":[\"b\"],\"square-xing\":[\"b\"],\"square-xmark\":[\"s\"],\"square-youtube\":[\"b\"],\"squarespace\":[\"b\"],\"stack-exchange\":[\"b\"],\"stack-overflow\":[\"b\"],\"stackpath\":[\"b\"],\"staff-snake\":[\"s\"],\"stairs\":[\"s\"],\"stamp\":[\"s\"],\"stapler\":[\"s\"],\"star\":[\"s\",\"r\"],\"star-and-crescent\":[\"s\"],\"star-half\":[\"s\",\"r\"],\"star-half-stroke\":[\"s\",\"r\"],\"star-of-david\":[\"s\"],\"star-of-life\":[\"s\"],\"staylinked\":[\"b\"],\"steam\":[\"b\"],\"steam-symbol\":[\"b\"],\"sterling-sign\":[\"s\"],\"stethoscope\":[\"s\"],\"sticker-mule\":[\"b\"],\"stop\":[\"s\"],\"stopwatch\":[\"s\"],\"stopwatch-20\":[\"s\"],\"store\":[\"s\"],\"store-slash\":[\"s\"],\"strava\":[\"b\"],\"street-view\":[\"s\"],\"strikethrough\":[\"s\"],\"stripe\":[\"b\"],\"stripe-s\":[\"b\"],\"stroopwafel\":[\"s\"],\"studiovinari\":[\"b\"],\"stumbleupon\":[\"b\"],\"stumbleupon-circle\":[\"b\"],\"subscript\":[\"s\"],\"suitcase\":[\"s\"],\"suitcase-medical\":[\"s\"],\"suitcase-rolling\":[\"s\"],\"sun\":[\"s\",\"r\"],\"sun-plant-wilt\":[\"s\"],\"superpowers\":[\"b\"],\"superscript\":[\"s\"],\"supple\":[\"b\"],\"suse\":[\"b\"],\"swatchbook\":[\"s\"],\"swift\":[\"b\"],\"symfony\":[\"b\"],\"synagogue\":[\"s\"],\"syringe\":[\"s\"],\"t\":[\"s\"],\"table\":[\"s\"],\"table-cells\":[\"s\"],\"table-cells-large\":[\"s\"],\"table-columns\":[\"s\"],\"table-list\":[\"s\"],\"table-tennis-paddle-ball\":[\"s\"],\"tablet\":[\"s\"],\"tablet-button\":[\"s\"],\"tablet-screen-button\":[\"s\"],\"tablets\":[\"s\"],\"tachograph-digital\":[\"s\"],\"tag\":[\"s\"],\"tags\":[\"s\"],\"tape\":[\"s\"],\"tarp\":[\"s\"],\"tarp-droplet\":[\"s\"],\"taxi\":[\"s\"],\"teamspeak\":[\"b\"],\"teeth\":[\"s\"],\"teeth-open\":[\"s\"],\"telegram\":[\"b\"],\"temperature-arrow-down\":[\"s\"],\"temperature-arrow-up\":[\"s\"],\"temperature-empty\":[\"s\"],\"temperature-full\":[\"s\"],\"temperature-half\":[\"s\"],\"temperature-high\":[\"s\"],\"temperature-low\":[\"s\"],\"temperature-quarter\":[\"s\"],\"temperature-three-quarters\":[\"s\"],\"tencent-weibo\":[\"b\"],\"tenge-sign\":[\"s\"],\"tent\":[\"s\"],\"tent-arrow-down-to-line\":[\"s\"],\"tent-arrow-left-right\":[\"s\"],\"tent-arrow-turn-left\":[\"s\"],\"tent-arrows-down\":[\"s\"],\"tents\":[\"s\"],\"terminal\":[\"s\"],\"text-height\":[\"s\"],\"text-slash\":[\"s\"],\"text-width\":[\"s\"],\"the-red-yeti\":[\"b\"],\"themeco\":[\"b\"],\"themeisle\":[\"b\"],\"thermometer\":[\"s\"],\"think-peaks\":[\"b\"],\"thumbs-down\":[\"s\",\"r\"],\"thumbs-up\":[\"s\",\"r\"],\"thumbtack\":[\"s\"],\"ticket\":[\"s\"],\"ticket-simple\":[\"s\"],\"tiktok\":[\"b\"],\"timeline\":[\"s\"],\"toggle-off\":[\"s\"],\"toggle-on\":[\"s\"],\"toilet\":[\"s\"],\"toilet-paper\":[\"s\"],\"toilet-paper-slash\":[\"s\"],\"toilet-portable\":[\"s\"],\"toilets-portable\":[\"s\"],\"toolbox\":[\"s\"],\"tooth\":[\"s\"],\"torii-gate\":[\"s\"],\"tornado\":[\"s\"],\"tower-broadcast\":[\"s\"],\"tower-cell\":[\"s\"],\"tower-observation\":[\"s\"],\"tractor\":[\"s\"],\"trade-federation\":[\"b\"],\"trademark\":[\"s\"],\"traffic-light\":[\"s\"],\"trailer\":[\"s\"],\"train\":[\"s\"],\"train-subway\":[\"s\"],\"train-tram\":[\"s\"],\"transgender\":[\"s\"],\"trash\":[\"s\"],\"trash-arrow-up\":[\"s\"],\"trash-can\":[\"s\",\"r\"],\"trash-can-arrow-up\":[\"s\"],\"tree\":[\"s\"],\"tree-city\":[\"s\"],\"trello\":[\"b\"],\"triangle-exclamation\":[\"s\"],\"trophy\":[\"s\"],\"trowel\":[\"s\"],\"trowel-bricks\":[\"s\"],\"truck\":[\"s\"],\"truck-arrow-right\":[\"s\"],\"truck-droplet\":[\"s\"],\"truck-fast\":[\"s\"],\"truck-field\":[\"s\"],\"truck-field-un\":[\"s\"],\"truck-front\":[\"s\"],\"truck-medical\":[\"s\"],\"truck-monster\":[\"s\"],\"truck-moving\":[\"s\"],\"truck-pickup\":[\"s\"],\"truck-plane\":[\"s\"],\"truck-ramp-box\":[\"s\"],\"tty\":[\"s\"],\"tumblr\":[\"b\"],\"turkish-lira-sign\":[\"s\"],\"turn-down\":[\"s\"],\"turn-up\":[\"s\"],\"tv\":[\"s\"],\"twitch\":[\"b\"],\"twitter\":[\"b\"],\"typo3\":[\"b\"],\"u\":[\"s\"],\"uber\":[\"b\"],\"ubuntu\":[\"b\"],\"uikit\":[\"b\"],\"umbraco\":[\"b\"],\"umbrella\":[\"s\"],\"umbrella-beach\":[\"s\"],\"uncharted\":[\"b\"],\"underline\":[\"s\"],\"uniregistry\":[\"b\"],\"unity\":[\"b\"],\"universal-access\":[\"s\"],\"unlock\":[\"s\"],\"unlock-keyhole\":[\"s\"],\"unsplash\":[\"b\"],\"untappd\":[\"b\"],\"up-down\":[\"s\"],\"up-down-left-right\":[\"s\"],\"up-long\":[\"s\"],\"up-right-and-down-left-from-center\":[\"s\"],\"up-right-from-square\":[\"s\"],\"upload\":[\"s\"],\"ups\":[\"b\"],\"usb\":[\"b\"],\"user\":[\"s\",\"r\"],\"user-astronaut\":[\"s\"],\"user-check\":[\"s\"],\"user-clock\":[\"s\"],\"user-doctor\":[\"s\"],\"user-gear\":[\"s\"],\"user-graduate\":[\"s\"],\"user-group\":[\"s\"],\"user-injured\":[\"s\"],\"user-large\":[\"s\"],\"user-large-slash\":[\"s\"],\"user-lock\":[\"s\"],\"user-minus\":[\"s\"],\"user-ninja\":[\"s\"],\"user-nurse\":[\"s\"],\"user-pen\":[\"s\"],\"user-plus\":[\"s\"],\"user-secret\":[\"s\"],\"user-shield\":[\"s\"],\"user-slash\":[\"s\"],\"user-tag\":[\"s\"],\"user-tie\":[\"s\"],\"user-xmark\":[\"s\"],\"users\":[\"s\"],\"users-between-lines\":[\"s\"],\"users-gear\":[\"s\"],\"users-line\":[\"s\"],\"users-rays\":[\"s\"],\"users-rectangle\":[\"s\"],\"users-slash\":[\"s\"],\"users-viewfinder\":[\"s\"],\"usps\":[\"b\"],\"ussunnah\":[\"b\"],\"utensils\":[\"s\"],\"v\":[\"s\"],\"vaadin\":[\"b\"],\"van-shuttle\":[\"s\"],\"vault\":[\"s\"],\"vector-square\":[\"s\"],\"venus\":[\"s\"],\"venus-double\":[\"s\"],\"venus-mars\":[\"s\"],\"vest\":[\"s\"],\"vest-patches\":[\"s\"],\"viacoin\":[\"b\"],\"viadeo\":[\"b\"],\"vial\":[\"s\"],\"vial-circle-check\":[\"s\"],\"vial-virus\":[\"s\"],\"vials\":[\"s\"],\"viber\":[\"b\"],\"video\":[\"s\"],\"video-slash\":[\"s\"],\"vihara\":[\"s\"],\"vimeo\":[\"b\"],\"vimeo-v\":[\"b\"],\"vine\":[\"b\"],\"virus\":[\"s\"],\"virus-covid\":[\"s\"],\"virus-covid-slash\":[\"s\"],\"virus-slash\":[\"s\"],\"viruses\":[\"s\"],\"vk\":[\"b\"],\"vnv\":[\"b\"],\"voicemail\":[\"s\"],\"volcano\":[\"s\"],\"volleyball\":[\"s\"],\"volume-high\":[\"s\"],\"volume-low\":[\"s\"],\"volume-off\":[\"s\"],\"volume-xmark\":[\"s\"],\"vr-cardboard\":[\"s\"],\"vuejs\":[\"b\"],\"w\":[\"s\"],\"walkie-talkie\":[\"s\"],\"wallet\":[\"s\"],\"wand-magic\":[\"s\"],\"wand-magic-sparkles\":[\"s\"],\"wand-sparkles\":[\"s\"],\"warehouse\":[\"s\"],\"watchman-monitoring\":[\"b\"],\"water\":[\"s\"],\"water-ladder\":[\"s\"],\"wave-square\":[\"s\"],\"waze\":[\"b\"],\"weebly\":[\"b\"],\"weibo\":[\"b\"],\"weight-hanging\":[\"s\"],\"weight-scale\":[\"s\"],\"weixin\":[\"b\"],\"whatsapp\":[\"b\"],\"wheat-awn\":[\"s\"],\"wheat-awn-circle-exclamation\":[\"s\"],\"wheelchair\":[\"s\"],\"wheelchair-move\":[\"s\"],\"whiskey-glass\":[\"s\"],\"whmcs\":[\"b\"],\"wifi\":[\"s\"],\"wikipedia-w\":[\"b\"],\"wind\":[\"s\"],\"window-maximize\":[\"s\",\"r\"],\"window-minimize\":[\"s\",\"r\"],\"window-restore\":[\"s\",\"r\"],\"windows\":[\"b\"],\"wine-bottle\":[\"s\"],\"wine-glass\":[\"s\"],\"wine-glass-empty\":[\"s\"],\"wirsindhandwerk\":[\"b\"],\"wix\":[\"b\"],\"wizards-of-the-coast\":[\"b\"],\"wodu\":[\"b\"],\"wolf-pack-battalion\":[\"b\"],\"won-sign\":[\"s\"],\"wordpress\":[\"b\"],\"wordpress-simple\":[\"b\"],\"worm\":[\"s\"],\"wpbeginner\":[\"b\"],\"wpexplorer\":[\"b\"],\"wpforms\":[\"b\"],\"wpressr\":[\"b\"],\"wrench\":[\"s\"],\"x\":[\"s\"],\"x-ray\":[\"s\"],\"xbox\":[\"b\"],\"xing\":[\"b\"],\"xmark\":[\"s\"],\"xmarks-lines\":[\"s\"],\"y\":[\"s\"],\"y-combinator\":[\"b\"],\"yahoo\":[\"b\"],\"yammer\":[\"b\"],\"yandex\":[\"b\"],\"yandex-international\":[\"b\"],\"yarn\":[\"b\"],\"yelp\":[\"b\"],\"yen-sign\":[\"s\"],\"yin-yang\":[\"s\"],\"yoast\":[\"b\"],\"youtube\":[\"b\"],\"z\":[\"s\"],\"zhihu\":[\"b\"]}"
  },
  {
    "path": "tabby-core/src/index.ts",
    "content": "import { NgModule, ModuleWithProviders, LOCALE_ID } from '@angular/core'\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule, NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap'\nimport { NgxFilesizeModule } from 'ngx-filesize'\nimport { DragDropModule } from '@angular/cdk/drag-drop'\nimport { TranslateModule, TranslateCompiler, TranslateService, MissingTranslationHandler } from '@ngx-translate/core'\nimport { TranslateMessageFormatCompiler, MESSAGE_FORMAT_CONFIG } from 'ngx-translate-messageformat-compiler'\n\nimport '@angular/localize/init'\n\nimport { AppRootComponent } from './components/appRoot.component'\nimport { CheckboxComponent } from './components/checkbox.component'\nimport { TabBodyComponent } from './components/tabBody.component'\nimport { PromptModalComponent } from './components/promptModal.component'\nimport { SafeModeModalComponent } from './components/safeModeModal.component'\nimport { StartPageComponent } from './components/startPage.component'\nimport { TabHeaderComponent } from './components/tabHeader.component'\nimport { TitleBarComponent } from './components/titleBar.component'\nimport { ToggleComponent } from './components/toggle.component'\nimport { WindowControlsComponent } from './components/windowControls.component'\nimport { RenameTabModalComponent } from './components/renameTabModal.component'\nimport { SelectorModalComponent } from './components/selectorModal.component'\nimport { SplitTabComponent, SplitTabRecoveryProvider } from './components/splitTab.component'\nimport { SplitTabSpannerComponent } from './components/splitTabSpanner.component'\nimport { SplitTabDropZoneComponent } from './components/splitTabDropZone.component'\nimport { SplitTabPaneLabelComponent } from './components/splitTabPaneLabel.component'\nimport { UnlockVaultModalComponent } from './components/unlockVaultModal.component'\nimport { WelcomeTabComponent } from './components/welcomeTab.component'\nimport { TransfersMenuComponent } from './components/transfersMenu.component'\nimport { ProfileIconComponent } from './components/profileIcon.component'\n\nimport { AutofocusDirective } from './directives/autofocus.directive'\nimport { AlwaysVisibleTypeaheadDirective } from './directives/alwaysVisibleTypeahead.directive'\nimport { FastHtmlBindDirective } from './directives/fastHtmlBind.directive'\nimport { DropZoneDirective } from './directives/dropZone.directive'\nimport { CdkAutoDropGroup } from './directives/cdkAutoDropGroup.directive'\n\nimport { Theme, CLIHandler, TabContextMenuItemProvider, TabRecoveryProvider, HotkeyProvider, ConfigProvider, PlatformService, FileProvider, ProfilesService, ProfileProvider, QuickConnectProfileProvider, SelectorOption, Profile, SelectorService, CommandProvider, PartialProfileGroup, ProfileGroup } from './api'\n\nimport { AppService } from './services/app.service'\nimport { ConfigService } from './services/config.service'\nimport { VaultFileProvider } from './services/vault.service'\nimport { HotkeysService } from './services/hotkeys.service'\nimport { CustomMissingTranslationHandler, LocaleService, TabbyFormatedDatePipe } from './services/locale.service'\nimport { CommandService } from './services/commands.service'\n\nimport { NewTheme } from './theme'\nimport { CoreConfigProvider } from './config'\nimport { AppHotkeyProvider } from './hotkeys'\nimport { TaskCompletionContextMenu, CommonOptionsContextMenu, TabManagementContextMenu, ProfilesContextMenu } from './tabContextMenu'\nimport { LastCLIHandler, ProfileCLIHandler } from './cli'\nimport { SplitLayoutProfilesService } from './profiles'\nimport { CoreCommandProvider } from './commands'\n\nexport function TranslateMessageFormatCompilerFactory (): TranslateMessageFormatCompiler {\n    return new TranslateMessageFormatCompiler()\n}\n\nconst PROVIDERS = [\n    { provide: HotkeyProvider, useClass: AppHotkeyProvider, multi: true },\n    { provide: Theme, useClass: NewTheme, multi: true },\n    { provide: ConfigProvider, useClass: CoreConfigProvider, multi: true },\n    { provide: TabContextMenuItemProvider, useClass: CommonOptionsContextMenu, multi: true },\n    { provide: TabContextMenuItemProvider, useClass: TabManagementContextMenu, multi: true },\n    { provide: TabContextMenuItemProvider, useClass: TaskCompletionContextMenu, multi: true },\n    { provide: TabContextMenuItemProvider, useClass: ProfilesContextMenu, multi: true },\n    { provide: TabRecoveryProvider, useExisting: SplitTabRecoveryProvider, multi: true },\n    { provide: CLIHandler, useClass: ProfileCLIHandler, multi: true },\n    { provide: CLIHandler, useClass: LastCLIHandler, multi: true },\n    { provide: FileProvider, useClass: VaultFileProvider, multi: true },\n    { provide: ProfileProvider, useExisting: SplitLayoutProfilesService, multi: true },\n    { provide: CommandProvider, useExisting: CoreCommandProvider, multi: true },\n    {\n        provide: LOCALE_ID,\n        deps: [LocaleService],\n        useFactory: locale => locale.getLocale(),\n    },\n    {\n        provide: MESSAGE_FORMAT_CONFIG,\n        useValue: LocaleService.allLanguages.map(x => x.code),\n    },\n]\n\n/** @hidden */\n@NgModule({\n    imports: [\n        BrowserAnimationsModule,\n        CommonModule,\n        FormsModule,\n        NgbModule,\n        NgxFilesizeModule,\n        DragDropModule,\n        TranslateModule.forRoot({\n            defaultLanguage: 'en',\n            compiler: {\n                provide: TranslateCompiler,\n                useFactory: TranslateMessageFormatCompilerFactory,\n            },\n            missingTranslationHandler: {\n                provide: MissingTranslationHandler,\n                useClass: CustomMissingTranslationHandler,\n            },\n        }),\n    ],\n    declarations: [\n        AppRootComponent,\n        CheckboxComponent,\n        PromptModalComponent,\n        StartPageComponent,\n        TabBodyComponent,\n        TabHeaderComponent,\n        TitleBarComponent,\n        ToggleComponent,\n        WindowControlsComponent,\n        RenameTabModalComponent,\n        SafeModeModalComponent,\n        AutofocusDirective,\n        FastHtmlBindDirective,\n        AlwaysVisibleTypeaheadDirective,\n        SelectorModalComponent,\n        SplitTabComponent,\n        SplitTabSpannerComponent,\n        SplitTabDropZoneComponent,\n        SplitTabPaneLabelComponent,\n        UnlockVaultModalComponent,\n        WelcomeTabComponent,\n        TransfersMenuComponent,\n        DropZoneDirective,\n        CdkAutoDropGroup,\n        ProfileIconComponent,\n        TabbyFormatedDatePipe,\n    ],\n    exports: [\n        AppRootComponent,\n        CheckboxComponent,\n        ToggleComponent,\n        PromptModalComponent,\n        AutofocusDirective,\n        DropZoneDirective,\n        FastHtmlBindDirective,\n        AlwaysVisibleTypeaheadDirective,\n        DragDropModule,\n        TranslateModule,\n        CdkAutoDropGroup,\n        ProfileIconComponent,\n        TabbyFormatedDatePipe,\n    ],\n})\nexport default class AppModule { // eslint-disable-line @typescript-eslint/no-extraneous-class\n    constructor (\n        app: AppService,\n        config: ConfigService,\n        platform: PlatformService,\n        hotkeys: HotkeysService,\n        commands: CommandService,\n        ngbTooltipConfig: NgbTooltipConfig,\n        public locale: LocaleService,\n        private translate: TranslateService,\n        private profilesService: ProfilesService,\n        private selector: SelectorService,\n    ) {\n        app.ready$.subscribe(() => {\n            config.ready$.toPromise().then(() => {\n                if (config.store.enableWelcomeTab) {\n                    app.openNewTabRaw({ type: WelcomeTabComponent })\n                }\n            })\n        })\n\n        platform.setErrorHandler(err => {\n            console.error('Unhandled exception:', err)\n        })\n\n        hotkeys.hotkey$.subscribe(async hotkey => {\n            if (hotkey.startsWith('profile.')) {\n                const id = hotkey.substring(hotkey.indexOf('.') + 1)\n                const profiles = await profilesService.getProfiles()\n                const profile = profiles.find(x => ProfilesService.getProfileHotkeyName(x) === id)\n                if (profile) {\n                    profilesService.openNewTabForProfile(profile)\n                }\n            } else if (hotkey.startsWith('profile-selectors.')) {\n                const id = hotkey.substring(hotkey.indexOf('.') + 1)\n                const provider = profilesService.getProviders().find(x => x.id === id)\n                if (!provider) {\n                    return\n                }\n                this.showSelector(provider).catch(() => null)\n            } else if (hotkey.startsWith('group-selectors.')) {\n                const id = hotkey.substring(hotkey.indexOf('.') + 1)\n                const groups = await this.profilesService.getProfileGroups({ includeProfiles: true })\n                const group = groups.find(x => x.id === id)\n                if (!group) {\n                    return\n                }\n                this.showGroupSelector(group).catch(() => null)\n            } else if (hotkey === 'command-selector') {\n                commands.showSelector().catch(() => null)\n            } else if (hotkey === 'profile-selector') {\n                commands.run('core:profile-selector', {})\n            }\n        })\n\n        ngbTooltipConfig.openDelay = 750\n        ngbTooltipConfig.placement = 'top bottom auto'\n        ngbTooltipConfig.container = 'body'\n    }\n\n    async showSelector (provider: ProfileProvider<Profile>): Promise<void> {\n        if (this.selector.active) {\n            return\n        }\n\n        let profiles = await this.profilesService.getProfiles()\n\n        profiles = profiles.filter(x => !x.isTemplate && x.type === provider.id)\n\n        const options: SelectorOption<void>[] = profiles.map(p => ({\n            ...this.profilesService.selectorOptionForProfile(p),\n            callback: () => this.profilesService.openNewTabForProfile(p),\n        }))\n\n        if (provider instanceof QuickConnectProfileProvider) {\n            options.push({\n                name: this.translate.instant('Quick connect'),\n                freeInputPattern: this.translate.instant('Connect to \"%s\"...'),\n                icon: 'fas fa-arrow-right',\n                description: `(${provider.name.toUpperCase()})`,\n                callback: query => {\n                    const p = provider.quickConnect(query)\n                    if (p) {\n                        this.profilesService.openNewTabForProfile(p)\n                    }\n                },\n            })\n        }\n\n        await this.selector.show(this.translate.instant('Select profile'), options)\n    }\n\n    async showGroupSelector (group: PartialProfileGroup<ProfileGroup>): Promise<void> {\n        if (this.selector.active) {\n            return\n        }\n\n        const profiles = group.profiles ?? []\n\n        const options: SelectorOption<void>[] = profiles.map(p => ({\n            ...this.profilesService.selectorOptionForProfile(p),\n            callback: () => this.profilesService.openNewTabForProfile(p),\n        }))\n\n        await this.selector.show(this.translate.instant('Select profile'), options)\n    }\n\n    static forRoot (): ModuleWithProviders<AppModule> {\n        return {\n            ngModule: AppModule,\n            providers: [\n                ...PROVIDERS,\n            ],\n        }\n    }\n}\n\nexport { AppRootComponent as bootstrap }\nexport * from './api'\nexport { AppHotkeyProvider }\n\n// Deprecations\nexport { ToolbarButton as IToolbarButton } from './api'\nexport { HotkeyDescription as IHotkeyDescription } from './api'\n"
  },
  {
    "path": "tabby-core/src/profiles.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport slugify from 'slugify'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Injectable } from '@angular/core'\nimport { ConfigService, NewTabParameters, PartialProfile, Profile, ProfileProvider } from './api'\nimport { SplitTabComponent, SplitTabRecoveryProvider } from './components/splitTab.component'\n\nexport interface SplitLayoutProfileOptions {\n    recoveryToken: any\n}\n\nexport interface SplitLayoutProfile extends Profile {\n    options: SplitLayoutProfileOptions\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SplitLayoutProfilesService extends ProfileProvider<SplitLayoutProfile> {\n    id = 'split-layout'\n    name = _('Saved layout')\n    configDefaults = {\n        options: {\n            recoveryToken: null,\n        },\n    }\n\n    constructor (\n        private splitTabRecoveryProvider: SplitTabRecoveryProvider,\n        private config: ConfigService,\n    ) {\n        super()\n    }\n\n    async getBuiltinProfiles (): Promise<PartialProfile<SplitLayoutProfile>[]> {\n        return []\n    }\n\n    async getNewTabParameters (profile: SplitLayoutProfile): Promise<NewTabParameters<SplitTabComponent>> {\n        return this.splitTabRecoveryProvider.recover(profile.options.recoveryToken)\n    }\n\n    getDescription (): string {\n        return ''\n    }\n\n    async createProfile (tab: SplitTabComponent, name: string): Promise<void> {\n        const token = await tab.getRecoveryToken({ includeState: false })\n        const profile: PartialProfile<SplitLayoutProfile> = {\n            id: `${this.id}:custom:${slugify(name)}:${uuidv4()}`,\n            type: this.id,\n            name,\n            options: {\n                recoveryToken: token,\n            },\n        }\n        this.config.store.profiles.push(profile)\n        await this.config.save()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/app.service.ts",
    "content": "import { Injectable, Inject } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { Observable, Subject, AsyncSubject, takeUntil, debounceTime } from 'rxjs'\n\nimport { BaseTabComponent } from '../components/baseTab.component'\nimport { SplitTabComponent } from '../components/splitTab.component'\nimport { RenameTabModalComponent } from '../components/renameTabModal.component'\nimport { SelectorOption } from '../api/selector'\nimport { RecoveryToken } from '../api/tabRecovery'\nimport { BootstrapData, BOOTSTRAP_DATA } from '../api/mainProcess'\nimport { HostWindowService } from '../api/hostWindow'\nimport { HostAppService } from '../api/hostApp'\n\nimport { ConfigService } from './config.service'\nimport { TabRecoveryService } from './tabRecovery.service'\nimport { TabsService, NewTabParameters } from './tabs.service'\nimport { SelectorService } from './selector.service'\n\nclass CompletionObserver {\n    get done$ (): Observable<void> { return this.done }\n    get destroyed$ (): Observable<void> { return this.destroyed }\n    private done = new AsyncSubject<void>()\n    private destroyed = new AsyncSubject<void>()\n    private interval: number\n\n    constructor (private tab: BaseTabComponent) {\n        this.interval = setInterval(() => this.tick(), 1000) as any\n        this.tab.destroyed$.pipe(takeUntil(this.destroyed$)).subscribe(() => this.stop())\n    }\n\n    async tick () {\n        if (!await this.tab.getCurrentProcess()) {\n            this.done.next()\n            this.stop()\n        }\n    }\n\n    stop () {\n        clearInterval(this.interval)\n        this.destroyed.next()\n        this.destroyed.complete()\n        this.done.complete()\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppService {\n    tabs: BaseTabComponent[] = []\n\n    get activeTab (): BaseTabComponent|null { return this._activeTab ?? null }\n\n    private lastTabIndex = 0\n    private _activeTab: BaseTabComponent | null = null\n    private closedTabsStack: RecoveryToken[] = []\n\n    private activeTabChange = new Subject<BaseTabComponent|null>()\n    private tabsChanged = new Subject<void>()\n    private tabOpened = new Subject<BaseTabComponent>()\n    private tabRemoved = new Subject<BaseTabComponent>()\n    private tabClosed = new Subject<BaseTabComponent>()\n    private tabDragActive = new Subject<BaseTabComponent|null>()\n    private ready = new AsyncSubject<void>()\n    private recoveryStateChangedHint = new Subject<void>()\n\n    private completionObservers = new Map<BaseTabComponent, CompletionObserver>()\n\n    get activeTabChange$ (): Observable<BaseTabComponent|null> { return this.activeTabChange }\n    get tabOpened$ (): Observable<BaseTabComponent> { return this.tabOpened }\n    get tabsChanged$ (): Observable<void> { return this.tabsChanged }\n    get tabRemoved$ (): Observable<BaseTabComponent> { return this.tabRemoved }\n    get tabClosed$ (): Observable<BaseTabComponent> { return this.tabClosed }\n    get tabDragActive$ (): Observable<BaseTabComponent|null> { return this.tabDragActive }\n\n    /** Fires once when the app is ready */\n    get ready$ (): Observable<void> { return this.ready }\n\n    /** @hidden */\n    private constructor (\n        private config: ConfigService,\n        private hostApp: HostAppService,\n        private hostWindow: HostWindowService,\n        private tabRecovery: TabRecoveryService,\n        private tabsService: TabsService,\n        private selector: SelectorService,\n        private ngbModal: NgbModal,\n        @Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,\n    ) {\n        this.tabsChanged$.subscribe(() => {\n            this.recoveryStateChangedHint.next()\n        })\n\n        setInterval(() => {\n            this.recoveryStateChangedHint.next()\n        }, 30000)\n\n        this.recoveryStateChangedHint.pipe(debounceTime(1000)).subscribe(() => {\n            this.tabRecovery.saveTabs(this.tabs)\n        })\n\n        config.ready$.toPromise().then(async () => {\n            if (this.bootstrapData.isMainWindow) {\n                if (config.store.recoverTabs) {\n                    const tabs = await this.tabRecovery.recoverTabs()\n                    for (const tab of tabs) {\n                        this.openNewTabRaw(tab)\n                    }\n                }\n                /** Continue to store the tabs even if the setting is currently off */\n                this.tabRecovery.enabled = true\n            }\n        })\n\n        this.tabClosed$.subscribe(() => {\n            if (!this.tabs.length && this.config.store.appearance.lastTabClosesWindow) {\n                this.hostWindow.close()\n            }\n        })\n\n        hostWindow.windowFocused$.subscribe(() => this._activeTab?.emitFocused())\n    }\n\n    addTabRaw (tab: BaseTabComponent, index: number|null = null): void {\n        if (index !== null) {\n            this.tabs.splice(index, 0, tab)\n        } else {\n            this.tabs.push(tab)\n        }\n\n        this.selectTab(tab)\n        this.tabsChanged.next()\n        this.tabOpened.next(tab)\n\n        if (this.bootstrapData.isMainWindow) {\n            tab.recoveryStateChangedHint$.subscribe(() => {\n                this.recoveryStateChangedHint.next()\n            })\n        }\n\n        tab.titleChange$.subscribe(title => {\n            if (tab === this._activeTab) {\n                this.hostWindow.setTitle(title)\n            }\n        })\n\n        tab.destroyed$.subscribe(() => {\n            this.removeTab(tab)\n            this.tabRemoved.next(tab)\n            this.tabClosed.next(tab)\n        })\n\n        if (tab instanceof SplitTabComponent) {\n            tab.tabAdded$.subscribe(() => this.emitTabsChanged())\n            tab.tabRemoved$.subscribe(() => this.emitTabsChanged())\n            tab.tabAdopted$.subscribe(t => {\n                this.removeTab(t)\n                this.tabRemoved.next(t)\n            })\n        }\n    }\n\n    removeTab (tab: BaseTabComponent): void {\n        const newIndex = Math.min(this.tabs.length - 2, this.tabs.indexOf(tab))\n        this.tabs = this.tabs.filter((x) => x !== tab)\n        if (tab === this._activeTab) {\n            this.selectTab(this.tabs[newIndex])\n        }\n        this.tabsChanged.next()\n    }\n\n    /**\n     * Adds a new tab **without** wrapping it in a SplitTabComponent\n     * @param inputs  Properties to be assigned on the new tab component instance\n     */\n    openNewTabRaw <T extends BaseTabComponent> (params: NewTabParameters<T>): T {\n        const tab = this.tabsService.create(params)\n        this.addTabRaw(tab)\n        return tab\n    }\n\n    /**\n     * Adds a new tab while wrapping it in a SplitTabComponent\n     * @param inputs  Properties to be assigned on the new tab component instance\n     */\n    openNewTab <T extends BaseTabComponent> (params: NewTabParameters<T>): T {\n        if (params.type as any === SplitTabComponent) {\n            return this.openNewTabRaw(params)\n        }\n        const tab = this.tabsService.create(params)\n        this.wrapAndAddTab(tab)\n        return tab\n    }\n\n    /**\n     * Adds an existing tab while wrapping it in a SplitTabComponent\n     */\n    wrapAndAddTab (tab: BaseTabComponent): SplitTabComponent {\n        const splitTab = this.tabsService.create({ type: SplitTabComponent })\n        splitTab.addTab(tab, null, 'r')\n        this.addTabRaw(splitTab)\n        return splitTab\n    }\n\n    async reopenLastTab (): Promise<BaseTabComponent|null> {\n        const token = this.closedTabsStack.pop()\n        if (token) {\n            const recoveredTab = await this.tabRecovery.recoverTab(token)\n            if (recoveredTab) {\n                const tab = this.tabsService.create(recoveredTab)\n                if (this.activeTab) {\n                    this.addTabRaw(tab, this.tabs.indexOf(this.activeTab) + 1)\n                } else {\n                    this.addTabRaw(tab)\n                }\n                return tab\n            }\n        }\n        return null\n    }\n\n    selectTab (tab: BaseTabComponent|null): void {\n        if (tab && this._activeTab === tab) {\n            this._activeTab.emitFocused()\n            return\n        }\n        if (this._activeTab && this.tabs.includes(this._activeTab)) {\n            this.lastTabIndex = this.tabs.indexOf(this._activeTab)\n        } else {\n            this.lastTabIndex = 0\n        }\n        if (this._activeTab) {\n            this._activeTab.clearActivity()\n            this._activeTab.emitBlurred()\n            this._activeTab.emitVisibility(false)\n        }\n        this._activeTab = tab\n        this.activeTabChange.next(tab)\n        setImmediate(() => {\n            this._activeTab?.emitFocused()\n            this._activeTab?.emitVisibility(true)\n        })\n        this.hostWindow.setTitle(this._activeTab?.title)\n    }\n\n    getParentTab (tab: BaseTabComponent): SplitTabComponent|null {\n        for (const topLevelTab of this.tabs) {\n            if (topLevelTab instanceof SplitTabComponent) {\n                if (topLevelTab.getAllTabs().includes(tab)) {\n                    return topLevelTab\n                }\n            }\n        }\n        return null\n    }\n\n    /** Switches between the current tab and the previously active one */\n    toggleLastTab (): void {\n        if (!this.lastTabIndex || this.lastTabIndex >= this.tabs.length) {\n            this.lastTabIndex = 0\n        }\n        this.selectTab(this.tabs[this.lastTabIndex])\n    }\n\n    nextTab (): void {\n        if (!this._activeTab) {\n            return\n        }\n        if (this.tabs.length > 1) {\n            const tabIndex = this.tabs.indexOf(this._activeTab)\n            if (tabIndex < this.tabs.length - 1) {\n                this.selectTab(this.tabs[tabIndex + 1])\n            } else if (this.config.store.appearance.cycleTabs) {\n                this.selectTab(this.tabs[0])\n            }\n        }\n    }\n\n    previousTab (): void {\n        if (!this._activeTab) {\n            return\n        }\n        if (this.tabs.length > 1) {\n            const tabIndex = this.tabs.indexOf(this._activeTab)\n            if (tabIndex > 0) {\n                this.selectTab(this.tabs[tabIndex - 1])\n            } else if (this.config.store.appearance.cycleTabs) {\n                this.selectTab(this.tabs[this.tabs.length - 1])\n            }\n        }\n    }\n\n    moveSelectedTabLeft (): void {\n        if (!this._activeTab) {\n            return\n        }\n        if (this.tabs.length > 1) {\n            const tabIndex = this.tabs.indexOf(this._activeTab)\n            if (tabIndex > 0) {\n                this.swapTabs(this._activeTab, this.tabs[tabIndex - 1])\n            } else if (this.config.store.appearance.cycleTabs) {\n                this.tabs.push(this.tabs.shift()!)\n            }\n        }\n    }\n\n    moveSelectedTabRight (): void {\n        if (!this._activeTab) {\n            return\n        }\n        if (this.tabs.length > 1) {\n            const tabIndex = this.tabs.indexOf(this._activeTab)\n            if (tabIndex < this.tabs.length - 1) {\n                this.swapTabs(this._activeTab, this.tabs[tabIndex + 1])\n            } else if (this.config.store.appearance.cycleTabs) {\n                this.tabs.unshift(this.tabs.pop()!)\n            }\n        }\n    }\n\n    swapTabs (a: BaseTabComponent, b: BaseTabComponent): void {\n        const i1 = this.tabs.indexOf(a)\n        const i2 = this.tabs.indexOf(b)\n        this.tabs[i1] = b\n        this.tabs[i2] = a\n    }\n\n    renameTab (tab: BaseTabComponent): void {\n        const modal = this.ngbModal.open(RenameTabModalComponent)\n        modal.componentInstance.value = tab.customTitle || tab.title\n        modal.result.then(result => {\n            tab.setTitle(result)\n            tab.customTitle = result\n            this.emitTabsChanged()\n        }).catch(() => null)\n    }\n\n    /** @hidden */\n    emitTabsChanged (): void {\n        this.tabsChanged.next()\n    }\n\n    async closeTab (tab: BaseTabComponent, checkCanClose?: boolean): Promise<void> {\n        if (!this.tabs.includes(tab)) {\n            return\n        }\n        if (checkCanClose && !await tab.canClose()) {\n            return\n        }\n        const token = await this.tabRecovery.getFullRecoveryToken(tab, { includeState: true })\n        if (token) {\n            this.closedTabsStack.push(token)\n            this.closedTabsStack = this.closedTabsStack.slice(-5)\n        }\n        tab.destroy()\n    }\n\n    async duplicateTab (tab: BaseTabComponent): Promise<BaseTabComponent|null> {\n        const dup = await this.tabsService.duplicate(tab)\n        if (dup) {\n            this.addTabRaw(dup, this.tabs.indexOf(tab) + 1)\n        }\n        return dup\n    }\n\n    /**\n     * Attempts to close all tabs, returns false if one of the tabs blocked closure\n     */\n    async closeAllTabs (): Promise<boolean> {\n        for (const tab of this.tabs) {\n            if (!await tab.canClose()) {\n                return false\n            }\n        }\n        for (const tab of this.tabs) {\n            tab.destroy(true)\n        }\n        return true\n    }\n\n    async closeWindow (): Promise<void> {\n        this.tabRecovery.enabled = false\n        await this.tabRecovery.saveTabs(this.tabs)\n        if (await this.closeAllTabs()) {\n            this.hostWindow.close()\n        } else {\n            this.tabRecovery.enabled = true\n        }\n    }\n\n    /** @hidden */\n    emitReady (): void {\n        this.ready.next()\n        this.ready.complete()\n        this.hostApp.emitReady()\n    }\n\n    /** @hidden */\n    emitTabDragStarted (tab: BaseTabComponent): void {\n        this.tabDragActive.next(tab)\n    }\n\n    /** @hidden */\n    emitTabDragEnded (): void {\n        this.tabDragActive.next(null)\n    }\n\n    /**\n     * Returns an observable that fires once\n     * the tab's internal \"process\" (see [[BaseTabProcess]]) completes\n     */\n    observeTabCompletion (tab: BaseTabComponent): Observable<void> {\n        if (!this.completionObservers.has(tab)) {\n            const observer = new CompletionObserver(tab)\n            observer.destroyed$.subscribe(() => {\n                this.stopObservingTabCompletion(tab)\n            })\n            this.completionObservers.set(tab, observer)\n        }\n        return this.completionObservers.get(tab)!.done$\n    }\n\n    stopObservingTabCompletion (tab: BaseTabComponent): void {\n        this.completionObservers.delete(tab)\n    }\n\n    // Deprecated\n    showSelector <T> (name: string, options: SelectorOption<T>[]): Promise<T> {\n        return this.selector.show(name, options)\n    }\n\n    explodeTab (tab: SplitTabComponent): SplitTabComponent[] {\n        const result: SplitTabComponent[] = []\n        for (const child of tab.getAllTabs().slice(1)) {\n            tab.removeTab(child)\n            result.push(this.wrapAndAddTab(child))\n        }\n        return result\n    }\n\n    combineTabsInto (into: SplitTabComponent): void {\n        this.explodeTab(into)\n\n        let allChildren: BaseTabComponent[] = []\n        for (const tab of this.tabs) {\n            if (into === tab) {\n                continue\n            }\n            let children = [tab]\n            if (tab instanceof SplitTabComponent) {\n                children = tab.getAllTabs()\n            }\n            allChildren = allChildren.concat(children)\n        }\n\n        let x = 1\n        let previous: BaseTabComponent|null = null\n        const stride = Math.ceil(Math.sqrt(allChildren.length + 1))\n        for (const child of allChildren) {\n            into.add(child, x ? previous : null, x ? 'r' : 'b')\n            previous = child\n            x = (x + 1) % stride\n        }\n\n        into.equalize()\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/commands.service.ts",
    "content": "import { Inject, Injectable, Optional } from '@angular/core'\nimport { AppService, Command, CommandContext, CommandProvider, ConfigService, MenuItemOptions, SplitTabComponent, TabContextMenuItemProvider, ToolbarButton, ToolbarButtonProvider, TranslateService } from '../api'\nimport { SelectorService } from './selector.service'\n\n@Injectable({ providedIn: 'root' })\nexport class CommandService {\n    private lastCommand = Promise.resolve()\n\n    constructor (\n        private selector: SelectorService,\n        private config: ConfigService,\n        private app: AppService,\n        private translate: TranslateService,\n        @Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],\n        @Optional() @Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],\n        @Inject(CommandProvider) private commandProviders: CommandProvider[],\n    ) {\n        this.contextMenuProviders.sort((a, b) => a.weight - b.weight)\n    }\n\n    async getCommands (context: CommandContext): Promise<Command[]> {\n        let buttons: ToolbarButton[] = []\n        this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {\n            buttons = buttons.concat(provider.provide())\n        })\n        buttons = buttons\n            .sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))\n\n        let items: MenuItemOptions[] = []\n        if (context.tab) {\n            for (const tabHeader of [false, true]) {\n            // Top-level tab menu\n                for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(context.tab!, tabHeader)))) {\n                    // eslint-disable-next-line @typescript-eslint/no-loop-func\n                    section = section.filter(item => !items.some(ex => ex.label === item.label))\n                    items = items.concat(section)\n                }\n                if (context.tab instanceof SplitTabComponent) {\n                    const tab = context.tab.getFocusedTab()\n                    if (tab) {\n                        for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(tab, tabHeader)))) {\n                            // eslint-disable-next-line @typescript-eslint/no-loop-func\n                            section = section.filter(item => !items.some(ex => ex.label === item.label))\n                            items = items.concat(section)\n                        }\n                    }\n                }\n            }\n        }\n\n        items = items.filter(x => (x.enabled ?? true) && x.type !== 'separator')\n\n        const flatItems: MenuItemOptions[] = []\n        function flattenItem (item: MenuItemOptions, prefix?: string): void {\n            if (item.submenu) {\n                item.submenu.forEach(x => flattenItem(x, (prefix ? `${prefix} > ` : '') + (item.commandLabel ?? item.label)))\n            } else {\n                flatItems.push({\n                    ...item,\n                    label: (prefix ? `${prefix} > ` : '') + (item.commandLabel ?? item.label),\n                })\n            }\n        }\n        items.forEach(x => flattenItem(x))\n\n        const commands = buttons.map(x => Command.fromToolbarButton(x))\n        commands.push(...flatItems.map(x => Command.fromMenuItem(x)))\n\n        for (const provider of this.config.enabledServices(this.commandProviders)) {\n            commands.push(...await provider.provide(context))\n        }\n\n        return commands\n            .filter(c => !this.config.store.commandBlacklist.includes(c.id))\n            .sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))\n            .map(command => {\n                const run = command.run\n                command.run = async () => {\n                    // Serialize execution\n                    this.lastCommand = this.lastCommand.finally(run)\n                    await this.lastCommand\n                }\n                return command\n            })\n    }\n\n    async run (id: string, context: CommandContext): Promise<void> {\n        const commands = await this.getCommands(context)\n        const command = commands.find(x => x.id === id)\n        await command?.run()\n    }\n\n    async showSelector (): Promise<void> {\n        if (this.selector.active) {\n            return\n        }\n\n        const context: CommandContext = {}\n        const tab = this.app.activeTab\n        if (tab instanceof SplitTabComponent) {\n            context.tab = tab.getFocusedTab() ?? undefined\n        }\n        const commands = await this.getCommands(context)\n        return this.selector.show(\n            this.translate.instant('Commands'),\n            commands.map(c => ({\n                name: c.label,\n                callback: c.run,\n                description: c.sublabel,\n                icon: c.icon,\n            })),\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/config.service.ts",
    "content": "import deepClone from 'clone-deep'\nimport deepEqual from 'deep-equal'\nimport { v4 as uuidv4 } from 'uuid'\nimport * as yaml from 'js-yaml'\nimport { Observable, Subject, AsyncSubject, lastValueFrom } from 'rxjs'\nimport { Injectable, Inject } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { ConfigProvider } from '../api/configProvider'\nimport { PlatformService } from '../api/platform'\nimport { HostAppService } from '../api/hostApp'\nimport { Vault, VaultService } from './vault.service'\nimport { serializeFunction } from '../utils'\nimport { PartialProfileGroup, ProfileGroup } from '../api/profileProvider'\nconst deepmerge = require('deepmerge')\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const configMerge = (a, b) => deepmerge(a, b, { arrayMerge: (_d, s) => s }) // eslint-disable-line @typescript-eslint/no-var-requires\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const configMergeByDefault = (a, b) => deepmerge(a, b) // eslint-disable-line @typescript-eslint/no-var-requires\n\nconst LATEST_VERSION = 1\n\nfunction isStructuralMember (v): v is AnyRec {\n    return v instanceof Object && !(v instanceof Array) &&\n        Object.keys(v).length > 0 && !v.__nonStructural\n}\n\nfunction isNonStructuralObjectMember (v): boolean {\n    return v instanceof Object && (v instanceof Array || v.__nonStructural)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias\ntype AnyRec = Record<string, any>\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias\ntype IsRecord<T> = T extends object\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    ? (T extends Function ? false : true)\n    : false\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias\nexport type ProxifiedConfig<T extends AnyRec> = {\n    [K in keyof T]:\n    IsRecord<T[K]> extends true\n        ? ProxifiedConfig<T[K]>   // structural -> nested proxy\n        : T[K];                        // leaf -> original type\n}\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias\nexport type FullyDefined<T> = T extends object\n    ? { [K in keyof T]-?: FullyDefined<T[K]> }\n    : T\n\n/** @hidden */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class ConfigProxy<T extends AnyRec> {\n    constructor (real: Partial<T>, defaults: T) {\n        for (const key in defaults) {\n            if (isStructuralMember(defaults[key])) {\n                if (!real[key]) {\n                    real[key] = {} as any\n                }\n                const proxy = new ConfigProxy(real[key] as any, defaults[key])\n                Object.defineProperty(\n                    this,\n                    key,\n                    {\n                        enumerable: true,\n                        configurable: false,\n                        get: () => proxy,\n                    },\n                )\n            } else {\n                Object.defineProperty(\n                    this,\n                    key,\n                    {\n                        enumerable: true,\n                        configurable: false,\n                        get: () => this.__getValue(key),\n                        set: (value) => {\n                            this.__setValue(key, value)\n                        },\n                    },\n                )\n            }\n        }\n\n        this.__getValue = (key: keyof T) => { // eslint-disable-line @typescript-eslint/unbound-method\n            if (real[key] !== undefined) {\n                return real[key]\n            } else {\n                if (isNonStructuralObjectMember(defaults[key])) {\n                    // The object might be modified outside\n                    real[key] = this.__getDefault(key)\n                    delete real[key].__nonStructural\n                    return real[key]\n                }\n                return this.__getDefault(key)\n            }\n        }\n\n        this.__getDefault = (key: keyof T) => { // eslint-disable-line @typescript-eslint/unbound-method\n            return deepClone(defaults[key])\n        }\n\n        this.__setValue = (key: keyof T, value: any) => { // eslint-disable-line @typescript-eslint/unbound-method\n            if (deepEqual(value, this.__getDefault(key))) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete real[key]\n            } else {\n                real[key] = value\n            }\n        }\n\n        this.__cleanup = () => { // eslint-disable-line @typescript-eslint/unbound-method\n            // Trigger removal of default values\n            for (const key in defaults) {\n                if (isStructuralMember(defaults[key])) {\n                    (this as any)[key].__cleanup()\n                } else {\n                    const v = this.__getValue(key)\n                    this.__setValue(key, v)\n                }\n            }\n        }\n    }\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function\n    __getValue (_key: keyof T): any { }\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function\n    __setValue (_key: keyof T, _value: any) { }\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function\n    __getDefault (_key: keyof T): any { }\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function\n    __cleanup () { }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias, @typescript-eslint/no-redeclare\n// export type ConfigProxy<T extends AnyRec> = ProxifiedConfig<T>\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigService {\n    /**\n     * Contains the actual config values\n     */\n    store: any\n\n    /**\n     * Whether an app restart is required due to recent changes\n     */\n    restartRequested: boolean\n\n    /** Fires once when the config is loaded */\n    get ready$ (): Observable<boolean> { return this.ready }\n\n    private ready = new AsyncSubject<boolean>()\n    private changed = new Subject<void>()\n    private _store: any\n    private defaults: any\n    private servicesCache: Record<string, Function[]>|null = null // eslint-disable-line @typescript-eslint/ban-types\n\n    get changed$ (): Observable<void> { return this.changed }\n\n    /** @hidden */\n    private constructor (\n        private hostApp: HostAppService,\n        private platform: PlatformService,\n        private vault: VaultService,\n        private translate: TranslateService,\n        @Inject(ConfigProvider) private configProviders: ConfigProvider[],\n    ) {\n        this.defaults = this.mergeDefaults()\n        setTimeout(() => this.init())\n        vault.contentChanged$.subscribe(() => {\n            this.store.vault = vault.store\n            this.save()\n        })\n        this.save = serializeFunction(this.save.bind(this))\n    }\n\n    mergeDefaults (): unknown {\n        const providers = this.configProviders\n        return providers.map(provider => {\n            let defaults = provider.platformDefaults[this.hostApp.configPlatform] ?? {}\n            defaults = configMerge(\n                defaults,\n                provider.platformDefaults[this.hostApp.platform] ?? {},\n            )\n            if (provider.defaults) {\n                defaults = configMerge(provider.defaults, defaults)\n            }\n            return defaults\n        }).reduce(configMergeByDefault)\n    }\n\n    getDefaults (): Record<string, any> {\n        const cleanup = o => {\n            if (o instanceof Array) {\n                return o.map(cleanup)\n            } else if (o instanceof Object) {\n                const r = {}\n                for (const k of Object.keys(o)) {\n                    if (k !== '__nonStructural') {\n                        r[k] = cleanup(o[k])\n                    }\n                }\n                return r\n            } else {\n                return o\n            }\n        }\n        return cleanup(this.defaults)\n    }\n\n    async load (): Promise<void> {\n        const content = await this.platform.loadConfig()\n        if (content) {\n            this._store = yaml.load(content)\n        } else {\n            this._store = { version: LATEST_VERSION }\n        }\n        this._store = await this.maybeDecryptConfig(this._store)\n        this.migrate(this._store)\n        this.store = new ConfigProxy(this._store, this.defaults)\n        this.vault.setStore(this.store.vault)\n    }\n\n    async save (): Promise<void> {\n        await lastValueFrom(this.ready$)\n        if (!this._store) {\n            throw new Error('Cannot save an empty store')\n        }\n        // Scrub undefined values\n        let cleanStore = JSON.parse(JSON.stringify(this._store))\n        cleanStore = await this.maybeEncryptConfig(cleanStore)\n        await this.platform.saveConfig(yaml.dump(cleanStore))\n        this.emitChange()\n    }\n\n    /**\n     * Reads config YAML as string\n     */\n    readRaw (): string {\n        // Scrub undefined values\n        const cleanStore = JSON.parse(JSON.stringify(this._store))\n        return yaml.dump(cleanStore)\n    }\n\n    /**\n     * Writes config YAML as string\n     */\n    async writeRaw (data: string): Promise<void> {\n        this._store = yaml.load(data)\n        await this.save()\n        await this.load()\n        this.emitChange()\n    }\n\n    requestRestart (): void {\n        this.restartRequested = true\n    }\n\n    /**\n     * Filters a list of Angular services to only include those provided\n     * by plugins that are enabled\n     *\n     * @typeparam T Base provider type\n     */\n    enabledServices<T extends object> (services: T[]|undefined): T[] { // eslint-disable-line @typescript-eslint/ban-types\n        if (!services) {\n            return []\n        }\n        if (!this.servicesCache) {\n            this.servicesCache = {}\n            for (const imp of window['pluginModules']) {\n                const module = imp.ngModule || imp\n                if (module.ɵinj?.providers) {\n                    this.servicesCache[module.pluginName] = module.ɵinj.providers.map(provider => {\n                        return provider.useClass ?? provider.useExisting ?? provider\n                    })\n                }\n            }\n        }\n        return services.filter(service => {\n            for (const pluginName in this.servicesCache) {\n                if (this.servicesCache[pluginName].includes(service.constructor)) {\n                    const id = `${pluginName}:${service.constructor.name}`\n                    return !this.store?.pluginBlacklist?.includes(pluginName)\n                        && !this.store?.providerBlacklist?.includes(id)\n                }\n            }\n            return true\n        })\n    }\n\n    private async init () {\n        await this.load()\n        this.ready.next(true)\n        this.ready.complete()\n\n        this.hostApp.configChangeBroadcast$.subscribe(async () => {\n            await this.load()\n            this.emitChange()\n        })\n    }\n\n    private emitChange (): void {\n        this.vault.setStore(this.store.vault)\n        this.changed.next()\n    }\n\n    // eslint-disable-next-line max-statements\n    private migrate (config) {\n        config.version ??= 0\n        if (config.version < 1) {\n            for (const connection of config.ssh?.connections ?? []) {\n                if (connection.privateKey) {\n                    connection.privateKeys = [connection.privateKey]\n                    delete connection.privateKey\n                }\n            }\n            config.version = 1\n        }\n        if (config.version < 2) {\n            config.profiles ??= []\n            if (config.terminal?.recoverTabs !== undefined) {\n                config.recoverTabs = config.terminal.recoverTabs\n                delete config.terminal.recoverTabs\n            }\n            for (const profile of config.terminal?.profiles ?? []) {\n                if (profile.sessionOptions) {\n                    profile.options = profile.sessionOptions\n                    delete profile.sessionOptions\n                }\n                profile.type = 'local'\n                profile.id = `local:custom:${uuidv4()}`\n            }\n            if (config.terminal?.profiles) {\n                config.profiles = config.terminal.profiles\n                delete config.terminal.profiles\n                delete config.terminal.environment\n                config.terminal.profile = `local:${config.terminal.profile}`\n            }\n            config.version = 2\n        }\n        if (config.version < 3) {\n            delete config.ssh?.recentConnections\n            for (const c of config.ssh?.connections ?? []) {\n                const p = {\n                    id: `ssh:${uuidv4()}`,\n                    type: 'ssh',\n                    icon: 'fas fa-desktop',\n                    name: c.name,\n                    group: c.group ?? undefined,\n                    color: c.color,\n                    disableDynamicTitle: c.disableDynamicTitle,\n                    options: c,\n                }\n                config.profiles.push(p)\n            }\n            for (const p of config.profiles ?? []) {\n                if (p.type === 'ssh') {\n                    if (p.options.jumpHost) {\n                        p.options.jumpHost = config.profiles.find(x => x.name === p.options.jumpHost)?.id\n                    }\n                }\n            }\n            for (const c of config.serial?.connections ?? []) {\n                const p = {\n                    id: `serial:${uuidv4()}`,\n                    type: 'serial',\n                    icon: 'fas fa-microchip',\n                    name: c.name,\n                    group: c.group ?? undefined,\n                    color: c.color,\n                    options: c,\n                }\n                config.profiles.push(p)\n            }\n            delete config.ssh?.connections\n            delete config.serial?.connections\n            delete window.localStorage.lastSerialConnection\n            config.version = 3\n        }\n        if (config.version < 4) {\n            for (const p of config.profiles ?? []) {\n                if (!p.id) {\n                    p.id = `${p.type}:custom:${uuidv4()}`\n                }\n            }\n            config.version = 4\n        }\n        if (config.version < 5) {\n            const groups: PartialProfileGroup<ProfileGroup>[] = []\n            for (const p of config.profiles ?? []) {\n                if (!(p.group ?? '').trim()) {\n                    continue\n                }\n\n                let group = groups.find(x => x.name === p.group)\n                if (!group) {\n                    group = {\n                        id: `${uuidv4()}`,\n                        name: `${p.group}`,\n                    }\n                    groups.push(group)\n                }\n                p.group = group.id\n            }\n\n            const profileGroupCollapsed = JSON.parse(window.localStorage.profileGroupCollapsed ?? '{}')\n            for (const g of groups) {\n                if (profileGroupCollapsed[g.name]) {\n                    const collapsed = profileGroupCollapsed[g.name]\n                    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                    delete profileGroupCollapsed[g.name]\n                    profileGroupCollapsed[g.id] = collapsed\n                }\n            }\n            window.localStorage.profileGroupCollapsed = JSON.stringify(profileGroupCollapsed)\n\n            config.groups = groups\n            config.version = 5\n        }\n        if (config.version < 6) {\n            if (config.ssh?.clearServiceMessagesOnConnect === false) {\n                config.profileDefaults ??= {}\n                config.profileDefaults.ssh ??= {}\n                config.profileDefaults.ssh.clearServiceMessagesOnConnect = false\n                delete config.ssh?.clearServiceMessagesOnConnect\n            }\n            config.version = 6\n        }\n        if (config.version < 7) {\n            if (!config.configSync?.host || config.configSync?.host === 'https://api.tabby.sh') {\n                config.configSync ??= {}\n                delete config.configSync.host\n                delete config.configSync.token\n            }\n            config.version = 7\n        }\n        if (config.version < 8) {\n            if (config.profileDefaults?.ssh?.options?.algorithms?.compression) {\n                config.profileDefaults.ssh.options.algorithms.compression = ['none']\n            }\n            for (const p of config.profiles ?? []) {\n                if (p.options?.algorithms?.compression) {\n                    p.options.algorithms.compression = ['none']\n                }\n            }\n            config.version = 8\n        }\n    }\n\n    private async maybeDecryptConfig (store) {\n        if (!store.encrypted) {\n            return store\n        }\n        // eslint-disable-next-line @typescript-eslint/init-declarations\n        let decryptedVault: Vault\n        while (true) {\n            try {\n                const passphrase = await this.vault.getPassphrase()\n                decryptedVault = await this.vault.decrypt(store.vault, passphrase)\n                break\n            } catch (e) {\n                let result = await this.platform.showMessageBox({\n                    type: 'error',\n                    message: this.translate.instant('Could not decrypt config'),\n                    detail: e.toString(),\n                    buttons: [\n                        this.translate.instant('Try again'),\n                        this.translate.instant('Erase config'),\n                        this.translate.instant('Quit'),\n                    ],\n                    defaultId: 0,\n                })\n                if (result.response === 2) {\n                    this.platform.quit()\n                }\n                if (result.response === 1) {\n                    result = await this.platform.showMessageBox({\n                        type: 'warning',\n                        message: this.translate.instant('Are you sure?'),\n                        detail: e.toString(),\n                        buttons: [\n                            this.translate.instant('Erase config'),\n                            this.translate.instant('Quit'),\n                        ],\n                        defaultId: 1,\n                        cancelId: 1,\n                    })\n                    if (result.response === 1) {\n                        this.platform.quit()\n                    }\n                    return {}\n                }\n            }\n        }\n        delete decryptedVault.config.vault\n        delete decryptedVault.config.encrypted\n        delete decryptedVault.config.configSync\n        return {\n            ...decryptedVault.config,\n            vault: store.vault,\n            encrypted: store.encrypted,\n            configSync: store.configSync,\n        }\n    }\n\n    private async maybeEncryptConfig (store) {\n        if (!store.encrypted) {\n            return store\n        }\n        const vault = await this.vault.load()\n        if (!vault) {\n            throw new Error('Vault not configured')\n        }\n        vault.config = { ...store }\n        delete vault.config.vault\n        delete vault.config.encrypted\n        delete vault.config.configSync\n        return {\n            vault: await this.vault.encrypt(vault),\n            encrypted: true,\n            configSync: store.configSync,\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/docking.service.ts",
    "content": "import { Observable, Subject } from 'rxjs'\n\nexport abstract class Screen {\n    id: number\n    name?: string\n}\n\nexport abstract class DockingService {\n    get screensChanged$ (): Observable<void> { return this.screensChanged }\n    protected screensChanged = new Subject<void>()\n\n    abstract dock (): void\n    abstract getScreens (): Screen[]\n}\n"
  },
  {
    "path": "tabby-core/src/services/fileProviders.service.ts",
    "content": "import { Inject, Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { FileProvider, NotificationsService, SelectorService } from '../api'\n\n@Injectable({ providedIn: 'root' })\nexport class FileProvidersService {\n    /** @hidden */\n    private constructor (\n        private selector: SelectorService,\n        private notifications: NotificationsService,\n        private translate: TranslateService,\n        @Inject(FileProvider) private fileProviders: FileProvider[],\n    ) { }\n\n    async selectAndStoreFile (description: string): Promise<string> {\n        return this.selectProvider().then(p => {\n            return p.selectAndStoreFile(description)\n        })\n    }\n\n    async retrieveFile (key: string): Promise<Buffer> {\n        for (const p of this.fileProviders) {\n            try {\n                return await p.retrieveFile(key)\n            } catch {\n                continue\n            }\n        }\n        throw new Error('Not found')\n    }\n\n    async selectProvider (): Promise<FileProvider> {\n        const providers: FileProvider[] = []\n        await Promise.all(this.fileProviders.map(async p => {\n            if (await p.isAvailable()) {\n                providers.push(p)\n            }\n        }))\n        if (!providers.length) {\n            this.notifications.error(this.translate.instant('Vault master passphrase needs to be set to allow storing secrets'))\n            throw new Error('No available file providers')\n        }\n        if (providers.length === 1) {\n            return providers[0]\n        }\n        return this.selector.show(\n            this.translate.instant('Select file storage'),\n            providers.map(p => ({\n                name: p.name,\n                result: p,\n            })),\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/homeBase.service.ts",
    "content": "import { Injectable, Inject } from '@angular/core'\nimport * as mixpanel from 'mixpanel'\nimport { v4 as uuidv4 } from 'uuid'\nimport { ConfigService } from './config.service'\nimport { PlatformService, BOOTSTRAP_DATA, BootstrapData, HostAppService } from '../api'\n\n@Injectable({ providedIn: 'root' })\nexport class HomeBaseService {\n    appVersion: string\n    mixpanel: any\n\n    /** @hidden */\n    private constructor (\n        private config: ConfigService,\n        private platform: PlatformService,\n        private hostApp: HostAppService,\n        @Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,\n    ) {\n        this.appVersion = platform.getAppVersion()\n\n        if (this.config.store.enableAnalytics && !this.config.store.enableWelcomeTab) {\n            this.enableAnalytics()\n        }\n    }\n\n    openGitHub (): void {\n        this.platform.openExternal('https://github.com/Eugeny/tabby')\n    }\n\n    openDiscord (): void {\n        this.platform.openExternal('https://discord.gg/Vn7BjmzhtF')\n    }\n\n    openTranslations (): void {\n        this.platform.openExternal('https://translate.tabby.sh/project/tabby')\n    }\n\n    reportBug (): void {\n        let body = `Version: ${this.appVersion}\\n`\n        body += `Platform: ${this.hostApp.platform} ${process.arch} ${this.platform.getOSRelease()}\\n`\n        const plugins = this.bootstrapData.installedPlugins.filter(x => !x.isBuiltin).map(x => x.name)\n        body += `Plugins: ${plugins.join(', ') || 'none'}\\n`\n        body += `Frontend: ${this.config.store.terminal?.frontend}\\n\\n`\n        this.platform.openExternal(`https://github.com/Eugeny/tabby/issues/new?body=${encodeURIComponent(body)}`)\n    }\n\n    enableAnalytics (): void {\n        if (!window.localStorage.analyticsUserID) {\n            window.localStorage.analyticsUserID = uuidv4()\n        }\n        this.mixpanel = (mixpanel as any).init('bb4638b0860eef14c04d4fbc5eb365fa')\n        if (!window.localStorage.installEventSent) {\n            this.mixpanel.track('freshInstall', this.getAnalyticsProperties())\n            window.localStorage.installEventSent = true\n        }\n        this.mixpanel.track('launch', this.getAnalyticsProperties())\n    }\n\n    getAnalyticsProperties (): Record<string, string> {\n        return {\n            distinct_id: window.localStorage.analyticsUserID,\n            platform: process.platform,\n            os: this.platform.getOSRelease(),\n            version: this.appVersion,\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/hotkeys.service.ts",
    "content": "import { Injectable, Inject, NgZone, EventEmitter } from '@angular/core'\nimport { Observable, Subject, filter } from 'rxjs'\nimport { HotkeyDescription, HotkeyProvider } from '../api/hotkeyProvider'\nimport { KeyEventData, getKeyName, Keystroke, KeyName, getKeystrokeName, metaKeyName, altKeyName } from './hotkeys.util'\nimport { ConfigService } from './config.service'\nimport { HostAppService, Platform } from '../api/hostApp'\nimport { deprecate } from 'util'\n\nexport interface PartialHotkeyMatch {\n    id: string\n    strokes: string[]\n    matchedLength: number\n}\n\ninterface PastKeystroke {\n    keystroke: Keystroke\n    time: number\n}\n\n@Injectable({ providedIn: 'root' })\nexport class HotkeysService {\n    /** @hidden @deprecated */\n    key = new EventEmitter<KeyboardEvent>()\n\n    /** @hidden @deprecated */\n    matchedHotkey = new EventEmitter<string>()\n\n    /**\n     * Fired for each recognized hotkey\n     */\n    get unfilteredHotkey$ (): Observable<string> { return this._hotkey }\n\n    /**\n     * Fired for each recognized hotkey\n     */\n    get hotkey$ (): Observable<string> {\n        return this._hotkey.pipe(filter(() => {\n            return document.querySelectorAll('input:focus').length === 0\n        }))\n    }\n\n    /**\n     * Fired for once hotkey is released\n     */\n    get hotkeyOff$ (): Observable<string> { return this._hotkeyOff }\n\n    /**\n     * Fired for each singular key\n     */\n    get key$ (): Observable<KeyName> { return this._key }\n\n    /**\n     * Fired for each key event\n     */\n    get keyEvent$ (): Observable<KeyboardEvent> { return this._keyEvent }\n\n    /**\n     * Fired for each singular key combination\n     */\n    get keystroke$ (): Observable<Keystroke> { return this._keystroke }\n\n    private _hotkey = new Subject<string>()\n    private _hotkeyOff = new Subject<string>()\n    private _keyEvent = new Subject<KeyboardEvent>()\n    private _key = new Subject<KeyName>()\n    private _keystroke = new Subject<Keystroke>()\n    private disabledLevel = 0\n    private hotkeyDescriptions: HotkeyDescription[] = []\n\n    private pressedKeys = new Set<KeyName>()\n    private pressedKeyTimestamps = new Map<KeyName, number>()\n    private pressedHotkey: string|null = null\n    private pressedKeystroke: Keystroke|null = null\n    private lastKeystrokes: PastKeystroke[] = []\n    private recognitionPhase = true\n    private lastEventTimestamp = 0\n\n    private constructor (\n        private zone: NgZone,\n        private config: ConfigService,\n        @Inject(HotkeyProvider) private hotkeyProviders: HotkeyProvider[],\n        hostApp: HostAppService,\n    ) {\n        this.config.ready$.toPromise().then(async () => {\n            const hotkeys = await this.getHotkeyDescriptions()\n            this.hotkeyDescriptions = hotkeys\n            const events = ['keydown', 'keyup']\n\n            events.forEach(eventType => {\n                document.addEventListener(eventType, (nativeEvent: KeyboardEvent) => {\n                    this._keyEvent.next(nativeEvent)\n                    this.pushKeyEvent(eventType, nativeEvent)\n                    if (hostApp.platform === Platform.Web && this.matchActiveHotkey(true) !== null) {\n                        nativeEvent.preventDefault()\n                        nativeEvent.stopPropagation()\n                    }\n                })\n            })\n        })\n\n        // deprecated\n        this.hotkey$.subscribe(h => this.matchedHotkey.emit(h))\n        this.matchedHotkey.subscribe = deprecate(s => this.hotkey$.subscribe(s), 'matchedHotkey is deprecated, use hotkey$')\n        this.keyEvent$.subscribe(h => this.key.next(h))\n        this.key.subscribe = deprecate(s => this.keyEvent$.subscribe(s), 'key is deprecated, use keyEvent$')\n    }\n\n    /**\n     * Adds a new key event to the buffer\n     *\n     * @param eventName DOM event name\n     * @param nativeEvent event object\n     */\n    pushKeyEvent (eventName: string, nativeEvent: KeyboardEvent): void {\n        if (nativeEvent.timeStamp === this.lastEventTimestamp) {\n            return\n        }\n\n        nativeEvent['event'] = eventName\n\n        const eventData = {\n            ctrlKey: nativeEvent.ctrlKey,\n            metaKey: nativeEvent.metaKey,\n            altKey: nativeEvent.altKey,\n            shiftKey: nativeEvent.shiftKey,\n            code: nativeEvent.code,\n            key: nativeEvent.key,\n            eventName,\n            time: nativeEvent.timeStamp,\n            registrationTime: performance.now(),\n        }\n\n        for (const [key, time] of this.pressedKeyTimestamps.entries()) {\n            if (time < performance.now() - 2000) {\n                this.removePressedKey(key)\n            }\n        }\n\n        const keyName = getKeyName(eventData)\n        if (eventName === 'keydown') {\n            this.addPressedKey(keyName, eventData)\n            this.recognitionPhase = true\n            this.updateModifiers(eventData)\n        }\n        if (eventName === 'keyup') {\n            const keystroke = getKeystrokeName([...this.pressedKeys])\n            if (this.recognitionPhase) {\n                this._keystroke.next(keystroke)\n                this.lastKeystrokes.push({\n                    keystroke,\n                    time: performance.now(),\n                })\n                this.recognitionPhase = false\n            }\n            this.pressedKeys.clear()\n            this.pressedKeyTimestamps.clear()\n            this.removePressedKey(keyName)\n        }\n\n        if (this.pressedKeys.size) {\n            this.pressedKeystroke = getKeystrokeName([...this.pressedKeys])\n        } else {\n            this.pressedKeystroke = null\n        }\n\n        const matched = this.matchActiveHotkey()\n        this.zone.run(() => {\n            if (matched) {\n                if (this.recognitionPhase) {\n                    this.emitHotkeyOn(matched)\n                }\n            } else if (this.pressedHotkey) {\n                this.emitHotkeyOff(this.pressedHotkey)\n            }\n        })\n\n        this.zone.run(() => {\n            this._key.next(getKeyName(eventData))\n        })\n\n        if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName, 'Enter'].includes(keyName)) {\n            // macOS will swallow non-modified keyups if Cmd is held down\n            this.pushKeyEvent('keyup', nativeEvent)\n        }\n\n        this.lastEventTimestamp = nativeEvent.timeStamp\n    }\n\n    getCurrentKeystrokes (): Keystroke[] {\n        if (!this.pressedKeystroke) {\n            return []\n        }\n        return [...this.lastKeystrokes.map(x => x.keystroke), this.pressedKeystroke]\n    }\n\n    matchActiveHotkey (partial = false): string|null {\n        if (!this.isEnabled() || !this.pressedKeystroke) {\n            return null\n        }\n        const matches: {\n            id: string,\n            sequence: string[],\n        }[] = []\n\n        const currentSequence = this.getCurrentKeystrokes()\n\n        const config = this.getHotkeysConfig()\n        for (const id in config) {\n            for (const sequence of config[id]) {\n                if (currentSequence.length < sequence.length) {\n                    continue\n                }\n                if (sequence[sequence.length - 1] !== this.pressedKeystroke) {\n                    continue\n                }\n\n                let lastIndex = 0\n                let matched = true\n                for (const item of sequence) {\n                    const nextOffset = currentSequence.slice(lastIndex).findIndex(\n                        x => x.toLowerCase() === item.toLowerCase(),\n                    )\n                    if (nextOffset === -1) {\n                        matched = false\n                        break\n                    }\n                    lastIndex += nextOffset\n                }\n\n                if (partial ? lastIndex > 0 : matched) {\n                    matches.push({\n                        id,\n                        sequence,\n                    })\n                }\n            }\n        }\n\n        matches.sort((a, b) => b.sequence.length - a.sequence.length)\n        if (!matches.length) {\n            return null\n        }\n        if (matches[0].sequence.length > 1) {\n            this.clearCurrentKeystrokes()\n        }\n        return matches[0].id\n    }\n\n    clearCurrentKeystrokes (): void {\n        this.lastKeystrokes = []\n        this.pressedKeys.clear()\n        this.pressedKeyTimestamps.clear()\n        this.pressedKeystroke = null\n        this.pressedHotkey = null\n    }\n\n    getHotkeyDescription (id: string): HotkeyDescription {\n        return this.hotkeyDescriptions.filter((x) => x.id === id)[0]\n    }\n\n    enable (): void {\n        this.disabledLevel--\n    }\n\n    disable (): void {\n        this.disabledLevel++\n    }\n\n    isEnabled (): boolean {\n        return this.disabledLevel === 0\n    }\n\n    async getHotkeyDescriptions (): Promise<HotkeyDescription[]> {\n        return (\n            await Promise.all(\n                this.config.enabledServices(this.hotkeyProviders)\n                    .map(async x => x.provide()),\n            )\n        ).reduce((a, b) => a.concat(b))\n    }\n\n    private updateModifiers (event: KeyEventData) {\n        for (const [prop, key] of Object.entries({\n            ctrlKey: 'Ctrl',\n            metaKey: metaKeyName,\n            altKey: altKeyName,\n            shiftKey: 'Shift',\n        })) {\n            if (!event[prop] && this.pressedKeys.has(key)) {\n                this.removePressedKey(key)\n            }\n            if (event[prop] && !this.pressedKeys.has(key)) {\n                this.addPressedKey(key, event)\n            }\n        }\n    }\n\n    private emitHotkeyOn (hotkey: string) {\n        if (this.pressedHotkey) {\n            if (this.pressedHotkey !== hotkey) {\n                this.emitHotkeyOff(this.pressedHotkey)\n            }\n        }\n        console.debug('Matched hotkey', hotkey)\n        this._hotkey.next(hotkey)\n        this.pressedHotkey = hotkey\n        this.recognitionPhase = false\n    }\n\n    private emitHotkeyOff (hotkey: string) {\n        console.debug('Unmatched hotkey', hotkey)\n        this._hotkeyOff.next(hotkey)\n        this.pressedHotkey = null\n    }\n\n    private getHotkeysConfig () {\n        return this.getHotkeysConfigRecursive(this.config.store.hotkeys)\n    }\n\n    private getHotkeysConfigRecursive (branch: any) {\n        const keys = {}\n        for (const key in branch) {\n            let value = branch[key]\n            if (value instanceof Object && !(value instanceof Array)) {\n                const subkeys = this.getHotkeysConfigRecursive(value)\n                for (const subkey in subkeys) {\n                    keys[key + '.' + subkey] = subkeys[subkey]\n                }\n            } else {\n                if (typeof value === 'string') {\n                    value = [value]\n                }\n                if (!(value instanceof Array)) {\n                    continue\n                }\n                if (value.length > 0) {\n                    value = value.map((item: string | string[]) => typeof item === 'string' ? [item] : item)\n                    keys[key] = value\n                }\n            }\n        }\n        return keys\n    }\n\n    private addPressedKey (keyName: KeyName, eventData: KeyEventData) {\n        this.pressedKeys.add(keyName)\n        this.pressedKeyTimestamps.set(keyName, eventData.registrationTime)\n    }\n\n    private removePressedKey (key: KeyName) {\n        this.pressedKeys.delete(key)\n        this.pressedKeyTimestamps.delete(key)\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/hotkeys.util.ts",
    "content": "/* eslint-disable @typescript-eslint/no-type-alias */\nexport const metaKeyName = {\n    darwin: '⌘',\n    win32: 'Win',\n    linux: 'Super',\n}[process.platform]\n\nexport const altKeyName = {\n    darwin: '⌥',\n    win32: 'Alt',\n    linux: 'Alt',\n}[process.platform]\n\nexport interface KeyEventData {\n    ctrlKey?: boolean\n    metaKey?: boolean\n    altKey?: boolean\n    shiftKey?: boolean\n    key: string\n    code: string\n    eventName: string\n    time: number\n    registrationTime: number\n}\n\nconst REGEX_LATIN_KEYNAME = /^[A-Za-z]$/\n\nexport type KeyName = string\nexport type Keystroke = string\n\nexport function getKeyName (event: KeyEventData): KeyName {\n    // eslint-disable-next-line @typescript-eslint/init-declarations\n    let key: string\n    if (event.key === 'Control') {\n        key = 'Ctrl'\n    } else if (event.key === 'Meta') {\n        key = metaKeyName\n    } else if (event.key === 'Alt') {\n        key = altKeyName\n    } else if (event.key === 'Shift') {\n        key = 'Shift'\n    } else if (event.key === '`') {\n        key = '`'\n    } else if (event.key === '~') {\n        key = '~'\n    } else {\n        key = event.code\n        if (REGEX_LATIN_KEYNAME.test(event.key)) {\n            // Handle Dvorak etc via the reported \"character\" instead of the scancode\n            key = event.key.toUpperCase()\n        } else {\n            key = key.replace('Key', '')\n            key = key.replace('Arrow', '')\n            key = key.replace('Digit', '')\n            key = {\n                Comma: ',',\n                Period: '.',\n                Slash: '/',\n                Backslash: '\\\\',\n                IntlBackslash: '`',\n                Minus: '-',\n                Equal: '=',\n                Semicolon: ';',\n                Quote: '\\'',\n                BracketLeft: '[',\n                BracketRight: ']',\n            }[key] ?? key\n        }\n    }\n    return key\n}\n\nexport function getKeystrokeName (keys: KeyName[]): Keystroke {\n    const strictOrdering: KeyName[] = ['Ctrl', metaKeyName, altKeyName, 'Shift']\n    keys = [\n        ...strictOrdering.map(x => keys.find(k => k === x)).filter(x => !!x) as KeyName[],\n        ...keys.filter(k => !strictOrdering.includes(k)),\n    ]\n    return keys.join('-')\n}\n"
  },
  {
    "path": "tabby-core/src/services/locale.service.ts",
    "content": "import { Injectable, Pipe, PipeTransform } from '@angular/core'\nimport { formatDate, registerLocaleData } from '@angular/common'\nimport { TranslateService, MissingTranslationHandler } from '@ngx-translate/core'\nimport { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'\n\nimport localeENUS from '@angular/common/locales/en'\nimport localeENGB from '@angular/common/locales/en-GB'\nimport localeAF from '@angular/common/locales/af'\nimport localeBG from '@angular/common/locales/bg'\nimport localeCS from '@angular/common/locales/cs'\nimport localeDA from '@angular/common/locales/da'\nimport localeDE from '@angular/common/locales/de'\nimport localeES from '@angular/common/locales/es'\nimport localeFR from '@angular/common/locales/fr'\nimport localeHR from '@angular/common/locales/hr'\nimport localeID from '@angular/common/locales/id'\nimport localeIT from '@angular/common/locales/it'\nimport localeJA from '@angular/common/locales/ja'\nimport localeKO from '@angular/common/locales/ko'\nimport localePL from '@angular/common/locales/pl'\nimport localePT from '@angular/common/locales/pt'\nimport localeRU from '@angular/common/locales/ru'\nimport localeSRSP from '@angular/common/locales/sr-Cyrl'\nimport localeSV from '@angular/common/locales/sv'\nimport localeTR from '@angular/common/locales/tr'\nimport localeUK from '@angular/common/locales/uk'\nimport localeZH from '@angular/common/locales/zh'\nimport { Observable, Subject } from 'rxjs'\nimport { distinctUntilChanged } from 'rxjs/operators'\nimport { ConfigService } from './config.service'\nimport { LogService, Logger } from './log.service'\n\nregisterLocaleData(localeENUS)\nregisterLocaleData(localeENGB)\nregisterLocaleData(localeAF)\nregisterLocaleData(localeBG)\nregisterLocaleData(localeCS)\nregisterLocaleData(localeDA)\nregisterLocaleData(localeDE)\nregisterLocaleData(localeES)\nregisterLocaleData(localeFR)\nregisterLocaleData(localeHR)\nregisterLocaleData(localeID)\nregisterLocaleData(localeIT)\nregisterLocaleData(localeJA)\nregisterLocaleData(localeKO)\nregisterLocaleData(localePL)\nregisterLocaleData(localePT)\nregisterLocaleData(localeRU)\nregisterLocaleData(localeSRSP)\nregisterLocaleData(localeSV)\nregisterLocaleData(localeTR)\nregisterLocaleData(localeUK)\nregisterLocaleData(localeZH)\n\nfunction flattenMessageFormatTranslation (po: any) {\n    const translation = {}\n    po = po.translations['']\n    for (const k of Object.keys(po)) {\n        translation[k] = po[k].msgstr[0] || k\n    }\n    return translation\n}\n\nexport class CustomMissingTranslationHandler extends MissingTranslationHandler {\n    compiler = new TranslateMessageFormatCompiler()\n\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    handle (params: { key: string, translateService: TranslateService, interpolateParams?: Object }): any {\n        const v = this.compiler.compile(params.key, params.translateService.currentLang)\n        if (typeof v === 'string') {\n            return v\n        }\n        return v(params.interpolateParams)\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LocaleService {\n    private logger: Logger\n\n    static allLanguages = [\n        {\n            code: 'af-ZA',\n            name: 'Afrikaans',\n        },\n        {\n            code: 'id-ID',\n            name: 'Bahasa Indonesia',\n        },\n        {\n            code: 'cs-CZ',\n            name: 'Čeština',\n        },\n        {\n            code: 'da-DK',\n            name: 'Dansk',\n        },\n        {\n            code: 'de-DE',\n            name: 'Deutsch',\n        },\n        {\n            code: 'en-GB',\n            name: 'English (UK)',\n        },\n        {\n            code: 'en-US',\n            name: 'English (US)',\n        },\n        {\n            code: 'es-ES',\n            name: 'Español',\n        },\n        {\n            code: 'fr-FR',\n            name: 'Français',\n        },\n        {\n            code: 'hr-HR',\n            name: 'Hrvatski',\n        },\n        {\n            code: 'it-IT',\n            name: 'Italiano',\n        },\n        {\n            code: 'pl-PL',\n            name: 'Polski',\n        },\n        {\n            code: 'pt-PT',\n            name: 'Português',\n        },\n        {\n            code: 'pt-BR',\n            name: 'Português do Brasil',\n        },\n        {\n            code: 'sv-SE',\n            name: 'Svenska',\n        },\n        {\n            code: 'tr-TR',\n            name: 'Türkçe',\n        },\n        {\n            code: 'bg-BG',\n            name: 'Български',\n        },\n        {\n            code: 'ru-RU',\n            name: 'Русский',\n        },\n        {\n            code: 'sr-SP',\n            name: 'Српски',\n        },\n        {\n            code: 'uk-UA',\n            name: 'Українська',\n        },\n        {\n            code: 'ja-JP',\n            name: '日本語',\n        },\n        {\n            code: 'ko-KR',\n            name: '한국어',\n        },\n        {\n            code: 'zh-CN',\n            name: '中文（简体）',\n        },\n        {\n            code: 'zh-TW',\n            name: '中文 (繁體)',\n        },\n    ]\n\n    get localeChanged$ (): Observable<string> {\n        return this.localeChanged.pipe(distinctUntilChanged())\n    }\n\n    private locale = 'en-US'\n    private localeChanged = new Subject<string>()\n\n    constructor (\n        private config: ConfigService,\n        private translate: TranslateService,\n        log: LogService,\n    ) {\n        this.patchTranslateService(translate)\n        this.logger = log.create('translate')\n        config.changed$.subscribe(() => {\n            this.refresh()\n        })\n        config.ready$.subscribe(() => {\n            this.refresh()\n        })\n\n        const d = new Date()\n        if (d.getMonth() === 3 && d.getDate() === 1) {\n            LocaleService.allLanguages.find(x => x.code === 'en-US')!.name = 'English (simplified)'\n            LocaleService.allLanguages.find(x => x.code === 'en-GB')!.name = 'English (traditional)'\n        }\n    }\n\n    private patchTranslateService (translate: TranslateService) {\n        translate['_defaultTranslation'] = null\n        const oldGetParsedResult = translate.getParsedResult.bind(translate)\n\n        // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n        translate.getParsedResult = function (translations: any, key: any, interpolateParams?: any): any {\n            if (!this._defaultTranslation) {\n                const po = require(`../../../locale/en-US.po`)\n                this._defaultTranslation = flattenMessageFormatTranslation(po)\n            }\n            this.translations[this.defaultLang][key] ??= this.compiler.compile(\n                this._defaultTranslation[key] || key,\n                this.defaultLang,\n            )\n            return oldGetParsedResult(translations, key, interpolateParams ?? {})\n        }.bind(translate)\n    }\n\n    refresh (): void {\n        let lang = this.config.store.language\n        if (!lang) {\n            for (const systemLanguage of navigator.languages) {\n                if (!lang && LocaleService.allLanguages.some(x => x.code === systemLanguage)) {\n                    lang = systemLanguage\n                }\n            }\n        }\n        lang ??= 'en-US'\n        this.setLocale(lang)\n    }\n\n    async setLocale (lang: string): Promise<void> {\n        if (!this.translate.langs.includes(lang)) {\n            this.translate.addLangs([lang])\n\n            const po = require(`../../../locale/${lang}.po`)\n            const translation = flattenMessageFormatTranslation(po)\n            this.translate.setTranslation(lang, translation)\n        }\n\n        this.translate.setDefaultLang(lang)\n\n        this.locale = lang\n        this.localeChanged.next(lang)\n        this.logger.debug('Setting language to', lang)\n    }\n\n    getLocale (): string {\n        return this.locale\n    }\n}\n\n@Pipe({\n    name: 'tabbyDate',\n})\nexport class TabbyFormatedDatePipe implements PipeTransform {\n\n    constructor (private locale: LocaleService) {}\n\n    transform (date: string): string {\n        return formatDate(date, 'medium', this.locale.getLocale())\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/log.service.ts",
    "content": "export abstract class Logger {\n    constructor (protected name: string) { }\n\n    debug (...args: any[]): void {\n        this.doLog('debug', ...args)\n    }\n\n    info (...args: any[]): void {\n        this.doLog('info', ...args)\n    }\n\n    warn (...args: any[]): void {\n        this.doLog('warn', ...args)\n    }\n\n    error (...args: any[]): void {\n        this.doLog('error', ...args)\n    }\n\n    log (...args: any[]): void {\n        this.doLog('log', ...args)\n    }\n\n    protected abstract doLog (level: string, ...args: any[]): void\n}\n\nexport class ConsoleLogger extends Logger {\n    protected doLog (level: string, ...args: any[]): void {\n        console[level](`%c[${this.name}]`, 'color: #aaa', ...args)\n    }\n}\n\nexport abstract class LogService {\n    abstract create (name: string): Logger\n}\n"
  },
  {
    "path": "tabby-core/src/services/notifications.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ToastrService } from 'ngx-toastr'\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationsService {\n    private constructor (\n        private toastr: ToastrService,\n    ) { }\n\n    notice (text: string): void {\n        this.toastr.info(text, undefined, {\n            timeOut: 1000,\n        })\n    }\n\n    info (text: string, details?: string): void {\n        this.toastr.info(text, details)\n    }\n\n    error (text: string, details?: string): void {\n        this.toastr.error(text, details)\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/profiles.service.ts",
    "content": "import { Injectable, Inject } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { NewTabParameters } from './tabs.service'\nimport { BaseTabComponent } from '../components/baseTab.component'\nimport { QuickConnectProfileProvider, PartialProfile, PartialProfileGroup, Profile, ProfileGroup, ProfileProvider } from '../api/profileProvider'\nimport { SelectorOption } from '../api/selector'\nimport { AppService } from './app.service'\nimport { configMerge, ConfigProxy, ConfigService, FullyDefined } from './config.service'\nimport { NotificationsService } from './notifications.service'\nimport { SelectorService } from './selector.service'\nimport deepClone from 'clone-deep'\nimport { v4 as uuidv4 } from 'uuid'\nimport slugify from 'slugify'\n\n@Injectable({ providedIn: 'root' })\nexport class ProfilesService {\n    private profileDefaults: Profile = {\n        id: '',\n        type: '',\n        name: '',\n        group: '',\n        options: {},\n        icon: '',\n        color: '',\n        disableDynamicTitle: false,\n        weight: 0,\n        isBuiltin: false,\n        isTemplate: false,\n        behaviorOnSessionEnd: 'auto',\n    }\n\n    constructor (\n        private app: AppService,\n        private config: ConfigService,\n        private notifications: NotificationsService,\n        private selector: SelectorService,\n        private translate: TranslateService,\n        @Inject(ProfileProvider) private profileProviders: ProfileProvider<Profile>[],\n    ) { }\n\n    /*\n    * Methods used to interact with ProfileProvider\n    */\n\n    getProviders (): ProfileProvider<Profile>[] {\n        return [...this.profileProviders]\n    }\n\n    providerForProfile <T extends Profile> (profile: PartialProfile<T>): ProfileProvider<T>|null {\n        const provider = this.profileProviders.find(x => x.id === profile.type) ?? null\n        return provider as unknown as ProfileProvider<T>|null\n    }\n\n    getDescription <P extends Profile> (profile: PartialProfile<P>): string|null {\n        profile = this.getConfigProxyForProfile(profile) as PartialProfile<P>\n        return this.providerForProfile(profile)?.getDescription(profile) ?? null\n    }\n\n    /*\n    * Methods used to interact with Profile\n    */\n\n    /*\n    * Return ConfigProxy for a given Profile\n    * arg: skipUserDefaults -> do not merge global provider defaults in ConfigProxy\n    * arg: skipGroupDefaults -> do not merge parent group provider defaults in ConfigProxy\n    */\n    getConfigProxyForProfile <P extends Profile> (profile: PartialProfile<P>, options?: { skipGlobalDefaults?: boolean, skipGroupDefaults?: boolean }): FullyDefined<P> & ConfigProxy<FullyDefined<P>> {\n        const defaults = this.getProfileDefaults(profile, options).reduce(configMerge, {})\n        return new ConfigProxy(profile, defaults) as any\n    }\n\n    /**\n    * Return an Array of Profiles\n    * arg: includeBuiltin (default: true) -> include BuiltinProfiles\n    * arg: clone (default: false) -> return deepclone Array\n    */\n    async getProfiles (options?: { includeBuiltin?: boolean, clone?: boolean }): Promise<PartialProfile<Profile>[]> {\n        let list = this.config.store.profiles ?? []\n        if (options?.includeBuiltin ?? true) {\n            const lists = await Promise.all(this.config.enabledServices(this.profileProviders).map(x => x.getBuiltinProfiles()))\n            list = [\n                ...this.config.store.profiles ?? [],\n                ...lists.reduce((a, b) => a.concat(b), []),\n            ]\n        }\n\n        const sortKey = p => `${this.resolveProfileGroupName(p.group ?? '')} / ${p.name}`\n        list.sort((a, b) => sortKey(a).localeCompare(sortKey(b)))\n        list.sort((a, b) => (a.isBuiltin ? 1 : 0) - (b.isBuiltin ? 1 : 0))\n        return options?.clone ? deepClone(list) : list\n    }\n\n    /**\n    * Insert a new Profile in config\n    * arg: genId (default: true) -> generate uuid in before pushing Profile into config\n    */\n    async newProfile (profile: PartialProfile<Profile>, options?: { genId?: boolean }): Promise<void> {\n        if (options?.genId ?? true) {\n            profile.id = `${profile.type}:custom:${slugify(profile.name)}:${uuidv4()}`\n        }\n\n        const cProfile = this.config.store.profiles.find(p => p.id === profile.id)\n        if (cProfile) {\n            throw new Error(`Cannot insert new Profile, duplicated Id: ${profile.id}`)\n        }\n\n        this.config.store.profiles.push(profile)\n    }\n\n    /**\n    * Write a Profile in config\n    */\n    async writeProfile (profile: PartialProfile<Profile>): Promise<void> {\n        const cProfile = this.config.store.profiles.find(p => p.id === profile.id)\n        if (cProfile) {\n            // Fully replace the config\n            for (const k in cProfile) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete cProfile[k]\n            }\n            Object.assign(cProfile, profile)\n        }\n    }\n\n    /**\n    * Delete a Profile from config\n    */\n    async deleteProfile (profile: PartialProfile<Profile>): Promise<void> {\n        this.providerForProfile(profile)?.deleteProfile(this.getConfigProxyForProfile(profile))\n        this.config.store.profiles = this.config.store.profiles.filter(p => p.id !== profile.id)\n\n        const profileHotkeyName = ProfilesService.getProfileHotkeyName(profile)\n        if (this.config.store.hotkeys.profile.hasOwnProperty(profileHotkeyName)) {\n            const profileHotkeys = deepClone(this.config.store.hotkeys.profile)\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete profileHotkeys[profileHotkeyName]\n            this.config.store.hotkeys.profile = profileHotkeys\n        }\n    }\n\n    /**\n    * Delete all Profiles from config using option filter\n    * arg: filter (p: PartialProfile<Profile>) => boolean -> predicate used to decide which profiles have to be deleted\n    */\n    async bulkDeleteProfiles (filter: (p: PartialProfile<Profile>) => boolean): Promise<void> {\n        for (const profile of this.config.store.profiles.filter(filter)) {\n            this.providerForProfile(profile)?.deleteProfile(this.getConfigProxyForProfile(profile))\n\n            const profileHotkeyName = ProfilesService.getProfileHotkeyName(profile)\n            if (this.config.store.hotkeys.profile.hasOwnProperty(profileHotkeyName)) {\n                const profileHotkeys = deepClone(this.config.store.hotkeys.profile)\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete profileHotkeys[profileHotkeyName]\n                this.config.store.hotkeys.profile = profileHotkeys\n            }\n        }\n\n        this.config.store.profiles = this.config.store.profiles.filter(x => !filter(x))\n    }\n\n    async openNewTabForProfile <P extends Profile> (profile: PartialProfile<P>): Promise<BaseTabComponent|null> {\n        const params = await this.newTabParametersForProfile(profile)\n        if (params) {\n            return this.app.openNewTab(params)\n        }\n        return null\n    }\n\n    async newTabParametersForProfile <P extends Profile> (profile: PartialProfile<P>): Promise<NewTabParameters<BaseTabComponent>|null> {\n        const fullProfile = this.getConfigProxyForProfile(profile)\n        const params = await this.providerForProfile(fullProfile)?.getNewTabParameters(fullProfile) ?? null\n        if (params) {\n            params.inputs ??= {}\n            params.inputs['title'] = profile.name\n            if (fullProfile.disableDynamicTitle) {\n                params.inputs['disableDynamicTitle'] = true\n            }\n            if (fullProfile.color) {\n                params.inputs['color'] = fullProfile.color\n            }\n            if (fullProfile.icon) {\n                params.inputs['icon'] = fullProfile.icon\n            }\n        }\n        return params\n    }\n\n    async launchProfile (profile: PartialProfile<Profile>): Promise<void> {\n        await this.openNewTabForProfile(profile)\n\n        let recentProfiles: PartialProfile<Profile>[] = JSON.parse(window.localStorage['recentProfiles'] ?? '[]')\n        if (this.config.store.terminal.showRecentProfiles > 0) {\n            recentProfiles = recentProfiles.filter(x => x.group !== profile.group || x.name !== profile.name)\n            recentProfiles.unshift(profile)\n            recentProfiles = recentProfiles.slice(0, this.config.store.terminal.showRecentProfiles)\n        } else {\n            recentProfiles = []\n        }\n        window.localStorage['recentProfiles'] = JSON.stringify(recentProfiles)\n    }\n\n    static getProfileHotkeyName (profile: PartialProfile<Profile>): string {\n        return (profile.id ?? profile.name).replace(/\\./g, '-')\n    }\n\n    /*\n    * Methods used to interact with Profile Selector\n    */\n\n    selectorOptionForProfile <P extends Profile, T> (profile: PartialProfile<P>): SelectorOption<T> {\n        const fullProfile = this.getConfigProxyForProfile(profile)\n        const provider = this.providerForProfile(fullProfile)\n        const freeInputEquivalent = provider instanceof QuickConnectProfileProvider ? provider.intoQuickConnectString(fullProfile) ?? undefined : undefined\n        return {\n            name: profile.name,\n            icon: profile.icon ?? undefined,\n            color: profile.color ?? undefined,\n            weight: profile.weight,\n            group: this.resolveProfileGroupName(profile.group ?? ''),\n            freeInputEquivalent,\n            description: provider?.getDescription(fullProfile),\n        }\n    }\n\n    showProfileSelector (): Promise<PartialProfile<Profile>|null> {\n        if (this.selector.active) {\n            return Promise.resolve(null)\n        }\n\n        return new Promise<PartialProfile<Profile>|null>(async (resolve, reject) => {\n            try {\n                const recentProfiles = this.getRecentProfiles()\n\n                let options: SelectorOption<void>[] = recentProfiles.map((p, i) => ({\n                    ...this.selectorOptionForProfile(p),\n                    group: this.translate.instant('Recent'),\n                    icon: 'fas fa-history',\n                    color: p.color ?? undefined,\n                    weight: i - (recentProfiles.length + 1),\n                    callback: async () => {\n                        if (p.id) {\n                            p = (await this.getProfiles()).find(x => x.id === p.id) ?? p\n                        }\n                        resolve(p)\n                    },\n                }))\n                if (recentProfiles.length) {\n                    options.push({\n                        name: this.translate.instant('Clear recent profiles'),\n                        group: this.translate.instant('Recent'),\n                        icon: 'fas fa-eraser',\n                        weight: -1,\n                        callback: async () => {\n                            window.localStorage.removeItem('recentProfiles')\n                            this.config.save()\n                            resolve(null)\n                        },\n                    })\n                }\n\n                let profiles = await this.getProfiles()\n\n                if (!this.config.store.terminal.showBuiltinProfiles) {\n                    profiles = profiles.filter(x => !x.isBuiltin)\n                }\n\n                profiles = profiles.filter(x => !x.isTemplate)\n\n                profiles = profiles.filter(x => x.id && !this.config.store.profileBlacklist.includes(x.id))\n\n                options = [...options, ...profiles.map((p): SelectorOption<void> => ({\n                    ...this.selectorOptionForProfile(p),\n                    weight: p.isBuiltin ? 2 : 1,\n                    callback: () => resolve(p),\n                }))]\n\n                try {\n                    const { SettingsTabComponent } = window['nodeRequire']('tabby-settings')\n                    options.push({\n                        name: this.translate.instant('Manage profiles'),\n                        icon: 'fas fa-window-restore',\n                        weight: 10,\n                        callback: () => {\n                            this.app.openNewTabRaw({\n                                type: SettingsTabComponent,\n                                inputs: { activeTab: 'profiles' },\n                            })\n                            resolve(null)\n                        },\n                    })\n                } catch { }\n\n                this.getProviders().forEach(provider => {\n                    if (provider instanceof QuickConnectProfileProvider) {\n                        options.push({\n                            name: this.translate.instant('Quick connect'),\n                            freeInputPattern: this.translate.instant('Connect to \"%s\"...'),\n                            description: `(${provider.name.toUpperCase()})`,\n                            icon: 'fas fa-arrow-right',\n                            weight: provider.id !== this.config.store.defaultQuickConnectProvider ? 1 : 0,\n                            callback: query => {\n                                const profile = provider.quickConnect(query)\n                                resolve(profile)\n                            },\n                        })\n                    }\n                })\n\n                await this.selector.show(this.translate.instant('Select profile or enter an address'), options).catch(() => reject())\n            } catch (err) {\n                reject(err)\n            }\n        })\n    }\n\n    getRecentProfiles (): PartialProfile<Profile>[] {\n        let recentProfiles: PartialProfile<Profile>[] = JSON.parse(window.localStorage['recentProfiles'] ?? '[]')\n        recentProfiles = recentProfiles.slice(0, this.config.store.terminal.showRecentProfiles)\n        return recentProfiles\n    }\n\n    async quickConnect (query: string): Promise<PartialProfile<Profile>|null> {\n        for (const provider of this.getProviders()) {\n            if (provider instanceof QuickConnectProfileProvider) {\n                const profile = provider.quickConnect(query)\n                if (profile) {\n                    return profile\n                }\n            }\n        }\n        this.notifications.error(`Could not parse \"${query}\"`)\n        return null\n    }\n\n    /*\n    * Methods used to interact with Profile/ProfileGroup/Global defaults\n    */\n\n    /**\n    * Return global defaults for a given profile provider\n    * Always return something, empty object if no defaults found\n    */\n    getProviderDefaults (provider: ProfileProvider<Profile>): any {\n        const defaults = this.config.store.profileDefaults\n        return defaults[provider.id] ?? {}\n    }\n\n    /**\n    * Set global defaults for a given profile provider\n    */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    setProviderDefaults (provider: ProfileProvider<Profile>, pdefaults: any): void {\n        this.config.store.profileDefaults[provider.id] = pdefaults\n    }\n\n    /**\n    * Return defaults for a given profile\n    * Always return something, empty object if no defaults found\n    * arg: skipUserDefaults -> do not merge global provider defaults in ConfigProxy\n    * arg: skipGroupDefaults -> do not merge parent group provider defaults in ConfigProxy\n    */\n    getProfileDefaults (profile: PartialProfile<Profile>, options?: { skipGlobalDefaults?: boolean, skipGroupDefaults?: boolean }): any[] {\n        const provider = this.providerForProfile(profile)\n\n        return [\n            this.profileDefaults,\n            provider?.configDefaults ?? {},\n            provider && !options?.skipGlobalDefaults ? this.getProviderDefaults(provider) : {},\n            provider && !options?.skipGlobalDefaults && !options?.skipGroupDefaults ? this.getProviderProfileGroupDefaults(profile.group ?? '', provider) : {},\n        ]\n    }\n\n    /*\n    * Methods used to interact with ProfileGroup\n    */\n\n    /**\n    * Synchronously return an Array of the existing ProfileGroups\n    * Does not return builtin groups\n    */\n    getSyncProfileGroups (): PartialProfileGroup<ProfileGroup>[] {\n        return deepClone(this.config.store.groups ?? [])\n    }\n\n    /**\n    * Return an Array of the existing ProfileGroups\n    * arg: includeProfiles (default: false) -> if false, does not fill up the profiles field of ProfileGroup\n    * arg: includeNonUserGroup (default: false) -> if false, does not add built-in and ungrouped groups\n    */\n    async getProfileGroups (options?: { includeProfiles?: boolean, includeNonUserGroup?: boolean }): Promise<PartialProfileGroup<ProfileGroup>[]> {\n        let profiles: PartialProfile<Profile>[] = []\n        if (options?.includeProfiles) {\n            profiles = await this.getProfiles({ includeBuiltin: options.includeNonUserGroup, clone: true })\n        }\n\n        let groups: PartialProfileGroup<ProfileGroup>[] = this.getSyncProfileGroups()\n        groups = groups.map(x => {\n            x.editable = true\n\n            if (options?.includeProfiles) {\n                x.profiles = profiles.filter(p => p.group === x.id)\n                profiles = profiles.filter(p => p.group !== x.id)\n            }\n\n            return x\n        })\n\n        if (options?.includeNonUserGroup) {\n            const builtInGroups: PartialProfileGroup<ProfileGroup>[] = []\n            builtInGroups.push({\n                id: 'built-in',\n                name: this.translate.instant('Built-in'),\n                editable: false,\n                profiles: [],\n            })\n\n            const ungrouped: PartialProfileGroup<ProfileGroup> = {\n                id: 'ungrouped',\n                name: this.translate.instant('Ungrouped'),\n                editable: false,\n            }\n\n            if (options.includeProfiles) {\n                for (const profile of profiles.filter(p => p.isBuiltin)) {\n                    let group: PartialProfileGroup<ProfileGroup> | undefined = builtInGroups.find(g => g.id === slugify(profile.group ?? 'built-in'))\n                    if (!group) {\n                        group = {\n                            id: `${slugify(profile.group!)}`,\n                            name: `${profile.group!}`,\n                            editable: false,\n                            profiles: [],\n                        }\n                        builtInGroups.push(group)\n                    }\n\n                    group.profiles!.push(profile)\n                }\n\n                ungrouped.profiles = profiles.filter(p => !p.isBuiltin)\n            }\n\n            groups = groups.concat(builtInGroups)\n            groups.push(ungrouped)\n        }\n\n        return groups\n    }\n\n    /**\n    * Insert a new ProfileGroup in config\n    * arg: genId (default: true) -> generate uuid in before pushing Profile into config\n    */\n    async newProfileGroup (group: PartialProfileGroup<ProfileGroup>, options?: { genId?: boolean }): Promise<void> {\n        if (options?.genId ?? true) {\n            group.id = `${uuidv4()}`\n        }\n\n        const cProfileGroup = this.config.store.groups.find(p => p.id === group.id)\n        if (cProfileGroup) {\n            throw new Error(`Cannot insert new ProfileGroup, duplicated Id: ${group.id}`)\n        }\n\n        this.config.store.groups.push(group)\n    }\n\n    /**\n    * Write a ProfileGroup in config\n    */\n    async writeProfileGroup (group: PartialProfileGroup<ProfileGroup>): Promise<void> {\n        delete group.profiles\n        delete group.editable\n\n        const cGroup = this.config.store.groups.find(g => g.id === group.id)\n        if (cGroup) {\n            Object.assign(cGroup, group)\n        }\n    }\n\n    /**\n    * Delete a ProfileGroup from config\n    */\n    async deleteProfileGroup (group: PartialProfileGroup<ProfileGroup>, options?: { deleteProfiles?: boolean }): Promise<void> {\n        this.config.store.groups = this.config.store.groups.filter(g => g.id !== group.id)\n        if (options?.deleteProfiles) {\n            await this.bulkDeleteProfiles((p) => p.group === group.id)\n        } else {\n            for (const profile of this.config.store.profiles.filter(x => x.group === group.id)) {\n                delete profile.group\n            }\n        }\n        if (this.config.store.hotkeys['group-selectors'].hasOwnProperty(group.id)) {\n            const groupSelectorsHotkeys = { ...this.config.store.hotkeys['group-selectors'] }\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete groupSelectorsHotkeys[group.id]\n            this.config.store.hotkeys['group-selectors'] = groupSelectorsHotkeys\n        }\n    }\n\n    /**\n    * Resolve and return ProfileGroup Name from ProfileGroup ID\n    */\n    resolveProfileGroupName (groupId: string): string {\n        return this.config.store.groups.find(g => g.id === groupId)?.name ?? groupId\n    }\n\n    /**\n    * Return defaults for a given group ID and provider\n    * Always return something, empty object if no defaults found\n    * arg: skipUserDefaults -> do not merge global provider defaults in ConfigProxy\n    */\n    getProviderProfileGroupDefaults (groupId: string, provider: ProfileProvider<Profile>): any {\n        return this.getSyncProfileGroups().find(g => g.id === groupId)?.defaults?.[provider.id] ?? {}\n    }\n\n}\n"
  },
  {
    "path": "tabby-core/src/services/selector.service.ts",
    "content": "\nimport { Injectable } from '@angular/core'\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'\n\nimport { SelectorModalComponent } from '../components/selectorModal.component'\nimport { SelectorOption } from '../api/selector'\n\n@Injectable({ providedIn: 'root' })\nexport class SelectorService {\n    private current: NgbModalRef|null = null\n\n    get active (): boolean {\n        return !!this.current\n    }\n\n    /** @hidden */\n    private constructor (\n        private ngbModal: NgbModal,\n    ) { }\n\n    show <T> (name: string, options: SelectorOption<T>[]): Promise<T> {\n        const modal = this.ngbModal.open(SelectorModalComponent)\n        this.current = modal\n        modal.result.finally(() => {\n            this.current = null\n        })\n        const instance: SelectorModalComponent<T> = modal.componentInstance\n        instance.name = name\n        instance.options = options\n        return modal.result as Promise<T>\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/tabRecovery.service.ts",
    "content": "import { Injectable, Inject } from '@angular/core'\nimport { TabRecoveryProvider, RecoveryToken } from '../api/tabRecovery'\nimport { BaseTabComponent, GetRecoveryTokenOptions } from '../components/baseTab.component'\nimport { Logger, LogService } from './log.service'\nimport { ConfigService } from './config.service'\nimport { NewTabParameters } from './tabs.service'\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class TabRecoveryService {\n    logger: Logger\n    enabled = false\n\n    private constructor (\n        @Inject(TabRecoveryProvider) private tabRecoveryProviders: TabRecoveryProvider<BaseTabComponent>[]|null,\n        private config: ConfigService,\n        log: LogService,\n    ) {\n        this.logger = log.create('tabRecovery')\n    }\n\n    async saveTabs (tabs: BaseTabComponent[]): Promise<void> {\n        if (!this.enabled || !this.config.store.recoverTabs) {\n            return\n        }\n        window.localStorage.tabsRecovery = JSON.stringify(\n            (await Promise.all(\n                tabs.map(async tab => this.getFullRecoveryToken(tab, { includeState: true })),\n            )).filter(token => !!token),\n        )\n    }\n\n    async getFullRecoveryToken (tab: BaseTabComponent, options?: GetRecoveryTokenOptions): Promise<RecoveryToken|null> {\n        const token = await tab.getRecoveryToken(options)\n        if (token) {\n            token.tabTitle = tab.title\n            token.tabCustomTitle = tab.customTitle\n            if (tab.icon) {\n                token.tabIcon = tab.icon\n            }\n            if (tab.color) {\n                token.tabColor = tab.color\n            }\n            token.disableDynamicTitle = tab['disableDynamicTitle']\n        }\n        return token\n    }\n\n    async recoverTab (token: RecoveryToken): Promise<NewTabParameters<BaseTabComponent>|null> {\n        for (const provider of this.config.enabledServices(this.tabRecoveryProviders ?? [])) {\n            try {\n                if (!await provider.applicableTo(token)) {\n                    continue\n                }\n                const tab = await provider.recover(token)\n                tab.inputs = tab.inputs ?? {}\n                tab.inputs.icon = token.tabIcon ?? null\n                tab.inputs.color = token.tabColor ?? null\n                tab.inputs.title = token.tabTitle || ''\n                tab.inputs.customTitle = token.tabCustomTitle || ''\n                tab.inputs.disableDynamicTitle = token.disableDynamicTitle\n                return tab\n            } catch (error) {\n                this.logger.warn('Tab recovery crashed:', token, provider, error)\n            }\n        }\n        return null\n    }\n\n    async recoverTabs (): Promise<NewTabParameters<BaseTabComponent>[]> {\n        if (window.localStorage.tabsRecovery) {\n            const tabs: NewTabParameters<BaseTabComponent>[] = []\n            for (const token of JSON.parse(window.localStorage.tabsRecovery)) {\n                const tab = await this.recoverTab(token)\n                if (tab) {\n                    tabs.push(tab)\n                }\n            }\n            return tabs\n        }\n        return []\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/tabs.service.ts",
    "content": "import deepClone from 'clone-deep'\nimport { Injectable, ComponentFactoryResolver, Injector } from '@angular/core'\nimport { BaseTabComponent } from '../components/baseTab.component'\nimport { TabRecoveryService } from './tabRecovery.service'\n\nexport interface TabComponentType<T extends BaseTabComponent> {\n    // eslint-disable-next-line @typescript-eslint/prefer-function-type\n    new (...args: any[]): T\n}\n\nexport interface NewTabParameters<T extends BaseTabComponent> {\n    /**\n     * Component type to be instantiated\n     */\n    type: TabComponentType<T>\n\n    /**\n     * Component instance inputs\n     */\n    inputs?: Record<string, any>\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TabsService {\n    /** @hidden */\n    private constructor (\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private injector: Injector,\n        private tabRecovery: TabRecoveryService,\n    ) { }\n\n    /**\n     * Instantiates a tab component and assigns given inputs\n     */\n    create <T extends BaseTabComponent> (params: NewTabParameters<T>): T {\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(params.type)\n        const componentRef = componentFactory.create(this.injector)\n        const tab = componentRef.instance\n        tab.hostView = componentRef.hostView\n        tab.destroyed$.subscribe(() => componentRef.destroy())\n        Object.assign(tab, params.inputs ?? {})\n        return tab\n    }\n\n    /**\n     * Duplicates an existing tab instance (using the tab recovery system)\n     */\n    async duplicate (tab: BaseTabComponent): Promise<BaseTabComponent|null> {\n        const token = await this.tabRecovery.getFullRecoveryToken(tab)\n        if (!token) {\n            return null\n        }\n        const dup = await this.tabRecovery.recoverTab(deepClone(token))\n        if (dup) {\n            return this.create(dup)\n        }\n        return null\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/themes.service.ts",
    "content": "import { Inject, Injectable } from '@angular/core'\nimport { Subject, Observable } from 'rxjs'\nimport * as Color from 'color'\nimport { ConfigService } from '../services/config.service'\nimport { Theme } from '../api/theme'\nimport { PlatformService, PlatformTheme } from '../api/platform'\nimport { NewTheme } from '../theme'\n\n@Injectable({ providedIn: 'root' })\nexport class ThemesService {\n    get themeChanged$ (): Observable<Theme> { return this.themeChanged }\n    private themeChanged = new Subject<Theme>()\n\n    private styleElement: HTMLElement|null = null\n    private rootElementStyleBackup = ''\n\n    /** @hidden */\n    private constructor (\n        private config: ConfigService,\n        private standardTheme: NewTheme,\n        private platform: PlatformService,\n        @Inject(Theme) private themes: Theme[],\n    ) {\n        this.rootElementStyleBackup = document.documentElement.style.cssText\n        this.applyTheme(standardTheme)\n        this.applyThemeVariables()\n        config.ready$.toPromise().then(() => {\n            this.applyCurrentTheme()\n            this.applyThemeVariables()\n            platform.themeChanged$.subscribe(() => {\n                this.applyCurrentTheme()\n                this.applyThemeVariables()\n            })\n            config.changed$.subscribe(() => {\n                this.applyCurrentTheme()\n                this.applyThemeVariables()\n            })\n        })\n    }\n\n    private getConfigStoreOrDefaults (): any {\n        /// Theme service is active before the vault is unlocked and config is available\n        return this.config.store ?? this.config.getDefaults()\n    }\n\n    private applyThemeVariables () {\n        if (!this.findCurrentTheme().followsColorScheme) {\n            document.documentElement.style.cssText = this.rootElementStyleBackup\n        }\n\n        const theme = this._getActiveColorScheme()\n        const isDark = Color(theme.background).luminosity() < Color(theme.foreground).luminosity()\n\n        function more (some, factor) {\n            if (isDark) {\n                return Color(some).darken(factor)\n            }\n            return Color(some).lighten(factor)\n        }\n\n        function less (some, factor) {\n            if (!isDark) {\n                return Color(some).darken(factor)\n            }\n            return Color(some).lighten(factor)\n        }\n\n        let background = Color(theme.background)\n        if (this.getConfigStoreOrDefaults().appearance.vibrancy) {\n            background = background.fade(0.6)\n        }\n        // const background = theme.background\n        const backgroundMore = more(background.string(), 0.25).string()\n        // const backgroundMore =more(theme.background, 0.25).string()\n        const accentIndex = 4\n        const vars: Record<string, string> = {}\n        const contrastPairs: string[][] = []\n\n        vars['--body-bg'] = background.string()\n        if (this.findCurrentTheme().followsColorScheme) {\n            vars['--bs-body-bg'] = theme.background\n            vars['--bs-body-color'] = theme.foreground\n            vars['--bs-black'] = theme.colors[0]\n            vars['--bs-red'] = theme.colors[1]\n            vars['--bs-green'] = theme.colors[2]\n            vars['--bs-yellow'] = theme.colors[3]\n            vars['--bs-blue'] = theme.colors[4]\n            vars['--bs-purple'] = theme.colors[5]\n            vars['--bs-cyan'] = theme.colors[6]\n            vars['--bs-gray'] = theme.colors[7]\n            vars['--bs-gray-dark'] = theme.colors[8]\n            // vars['--bs-red'] = theme.colors[9]\n            // vars['--bs-green'] = theme.colors[10]\n            // vars['--bs-yellow'] = theme.colors[11]\n            // vars['--bs-blue'] = theme.colors[12]\n            // vars['--bs-purple'] = theme.colors[13]\n            // vars['--bs-cyan'] = theme.colors[14]\n\n            contrastPairs.push(['--bs-body-bg', '--bs-body-color'])\n\n            vars['--theme-fg-more-2'] = more(theme.foreground, 0.5).string()\n            vars['--theme-fg-more'] = more(theme.foreground, 0.25).string()\n            vars['--theme-fg'] = theme.foreground\n            vars['--theme-fg-less'] = less(theme.foreground, 0.25).string()\n            vars['--theme-fg-less-2'] = less(theme.foreground, 0.5).string()\n\n            vars['--theme-bg-less-2'] = less(theme.background, 0.5).string()\n            vars['--theme-bg-less'] = less(theme.background, 0.25).string()\n            vars['--theme-bg'] = theme.background\n            vars['--theme-bg-more'] = backgroundMore\n            vars['--theme-bg-more-2'] = more(backgroundMore, 0.25).string()\n\n            contrastPairs.push(['--theme-bg', '--theme-fg'])\n            contrastPairs.push(['--theme-bg-less', '--theme-fg-less'])\n            contrastPairs.push(['--theme-bg-less-2', '--theme-fg-less-2'])\n            contrastPairs.push(['--theme-bg-more', '--theme-fg-more'])\n            contrastPairs.push(['--theme-bg-more-2', '--theme-fg-more-2'])\n\n            const themeColors = {\n                primary: theme.colors[accentIndex],\n                secondary: isDark\n                    ? less(theme.background, 0.5).string()\n                    : less(theme.background, 0.125).string(),\n                tertiary: more(theme.background, 0.75).string(),\n                warning: theme.colors[3],\n                danger: theme.colors[1],\n                success: theme.colors[2],\n                info: theme.colors[4],\n                dark: more(theme.background, 0.75).string(),\n                light: more(theme.foreground, 0.5).string(),\n                link: theme.colors[8], // for .btn-link\n            }\n\n            for (const [key, color] of Object.entries(themeColors)) {\n                vars[`--bs-${key}-bg`] = more(color, 0.5).string()\n                vars[`--bs-${key}-color`] = less(color, 0.5).string()\n                vars[`--bs-${key}`] = color\n                vars[`--bs-${key}-rgb`] = Color(color).rgb().array().join(', ')\n                vars[`--theme-${key}-more-2`] = more(color, 1).string()\n                vars[`--theme-${key}-more`] = more(color, 0.5).string()\n                vars[`--theme-${key}`] = color\n                vars[`--theme-${key}-less`] = less(color, 0.25).string()\n                vars[`--theme-${key}-less-2`] = less(color, 0.75).string()\n                vars[`--theme-${key}-fg`] = more(color, 3).string()\n\n                vars[`--theme-${key}-active-bg`] = less(color, 1).string()\n                vars[`--theme-${key}-active-fg`] = more(color, 1).string()\n\n                contrastPairs.push([`--theme-${key}`, `--theme-${key}-fg`])\n                contrastPairs.push([`--theme-${key}-active-bg`, `--theme-${key}-active-fg`])\n            }\n\n            const switchBackground = less(theme.colors[accentIndex], 0.25).string()\n            vars['--bs-form-switch-bg'] = `url(\"data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e\")`\n        }\n\n        vars['--spaciness'] = this.getConfigStoreOrDefaults().appearance.spaciness\n\n        for (const [bg, fg] of contrastPairs) {\n            const colorBg = Color(vars[bg]).hsl()\n            const colorFg = Color(vars[fg]).hsl()\n            const bgContrast = colorBg.contrast(colorFg)\n            if (bgContrast < this.getConfigStoreOrDefaults().terminal.minimumContrastRatio) {\n                vars[fg] = this.ensureContrast(colorFg, colorBg).string()\n            }\n        }\n\n        for (const [key, value] of Object.entries(vars)) {\n            document.documentElement.style.setProperty(key, value)\n        }\n\n        document.body.classList.toggle('no-animations', !this.getConfigStoreOrDefaults().accessibility.animations)\n    }\n\n    private ensureContrast (color: Color, against: Color): Color {\n        const a = this.increaseContrast(color, against, 1.1)\n        const b = this.increaseContrast(color, against, 0.9)\n        return a.contrast(against) > b.contrast(against) ? a : b\n    }\n\n    private increaseContrast (color: Color, against: Color, step=1.1): Color {\n        color = color.hsl()\n        color.color[2] = Math.max(color.color[2], 0.01)\n        while (\n            (step < 1 && color.color[2] > 1 ||\n             step > 1 && color.color[2] < 99) &&\n             color.contrast(against) < this.getConfigStoreOrDefaults().terminal.minimumContrastRatio) {\n            color.color[2] *= step\n        }\n        return color\n    }\n\n    findTheme (name: string): Theme|null {\n        return this.config.enabledServices(this.themes).find(x => x.name === name) ?? null\n    }\n\n    findCurrentTheme (): Theme {\n        return this.findTheme(this.getConfigStoreOrDefaults().appearance.theme) ?? this.standardTheme\n    }\n\n    /// @hidden\n    _getActiveColorScheme (): any {\n        let theme: PlatformTheme = 'dark'\n        if (this.getConfigStoreOrDefaults().appearance.colorSchemeMode === 'light') {\n            theme = 'light'\n        } else if (this.getConfigStoreOrDefaults().appearance.colorSchemeMode === 'auto') {\n            theme = this.platform.getTheme()\n        }\n\n        if (theme === 'light') {\n            return this.getConfigStoreOrDefaults().terminal.lightColorScheme\n        } else {\n            return this.getConfigStoreOrDefaults().terminal.colorScheme\n        }\n    }\n\n    applyTheme (theme: Theme): void {\n        if (!this.styleElement) {\n            this.styleElement = document.createElement('style')\n            this.styleElement.setAttribute('id', 'theme')\n            document.querySelector('head')!.appendChild(this.styleElement)\n        }\n        this.styleElement.textContent = theme.css\n        document.querySelector('style#custom-css')!.innerHTML = this.getConfigStoreOrDefaults().appearance.css\n        this.themeChanged.next(theme)\n    }\n\n    private applyCurrentTheme (): void {\n        this.applyTheme(this.findCurrentTheme())\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/services/updater.service.ts",
    "content": "export abstract class UpdaterService {\n    abstract check (): Promise<boolean>\n    abstract update (): Promise<void>\n}\n"
  },
  {
    "path": "tabby-core/src/services/vault.service.ts",
    "content": "import * as crypto from 'crypto'\nimport { promisify } from 'util'\nimport { Injectable, NgZone } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { AsyncSubject, Subject, Observable } from 'rxjs'\nimport { wrapPromise, serializeFunction } from '../utils'\nimport { UnlockVaultModalComponent } from '../components/unlockVaultModal.component'\nimport { NotificationsService } from './notifications.service'\nimport { SelectorService } from './selector.service'\nimport { FileProvider } from '../api/fileProvider'\nimport { PlatformService } from '../api/platform'\n\nconst PBKDF_ITERATIONS = 100000\nconst PBKDF_DIGEST = 'sha512'\nconst PBKDF_SALT_LENGTH = 64 / 8\nconst CRYPT_ALG = 'aes-256-cbc'\nconst CRYPT_KEY_LENGTH = 256 / 8\nconst CRYPT_IV_LENGTH = 128 / 8\n\nexport interface StoredVault {\n    version: number\n    contents: string\n    keySalt: string\n    iv: string\n}\n\nexport interface VaultSecret {\n    type: string\n    key: VaultSecretKey\n    value: string\n}\n\nexport interface VaultFileSecret extends VaultSecret {\n    key: {\n        id: string\n        description: string\n    }\n}\n\nexport interface Vault {\n    config: any\n    secrets: VaultSecret[]\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface VaultSecretKey { }\n\nfunction migrateVaultContent (content: any): Vault {\n    return {\n        config: content.config,\n        secrets: content.secrets ?? [],\n    }\n}\n\nfunction deriveVaultKey (passphrase: string, salt: Buffer): Promise<Buffer> {\n    return promisify(crypto.pbkdf2)(\n        Buffer.from(passphrase),\n        salt,\n        PBKDF_ITERATIONS,\n        CRYPT_KEY_LENGTH,\n        PBKDF_DIGEST,\n    )\n}\n\nasync function encryptVault (content: Vault, passphrase: string): Promise<StoredVault> {\n    const keySalt = await promisify(crypto.randomBytes)(PBKDF_SALT_LENGTH)\n    const iv = await promisify(crypto.randomBytes)(CRYPT_IV_LENGTH)\n    const key = await deriveVaultKey(passphrase, keySalt)\n\n    const plaintext = JSON.stringify(content)\n    const cipher = crypto.createCipheriv(CRYPT_ALG, key, iv)\n    const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()])\n\n    return {\n        version: 1,\n        contents: encrypted.toString('base64'),\n        keySalt: keySalt.toString('hex'),\n        iv: iv.toString('hex'),\n    }\n}\n\nasync function decryptVault (vault: StoredVault, passphrase: string): Promise<Vault> {\n    if (vault.version !== 1) {\n        throw new Error(`Unsupported vault format version ${vault.version}`)\n    }\n    const keySalt = Buffer.from(vault.keySalt, 'hex')\n    const key = await deriveVaultKey(passphrase, keySalt)\n    const iv = Buffer.from(vault.iv, 'hex')\n    const encrypted = Buffer.from(vault.contents, 'base64')\n\n    const decipher = crypto.createDecipheriv(CRYPT_ALG, key, iv)\n    const plaintext = decipher.update(encrypted, undefined, 'utf-8') + decipher.final('utf-8')\n    return migrateVaultContent(JSON.parse(plaintext))\n}\n\nexport const VAULT_SECRET_TYPE_FILE = 'file'\n\n// Don't make it accessible through VaultService fields\nlet _rememberedPassphrase: string|null = null\n\n@Injectable({ providedIn: 'root' })\nexport class VaultService {\n    /** Fires once when the config is loaded */\n    get ready$ (): Observable<boolean> { return this.ready }\n\n    get contentChanged$ (): Observable<void> { return this.contentChanged }\n\n    store: StoredVault|null = null\n    private ready = new AsyncSubject<boolean>()\n    private contentChanged = new Subject<void>()\n\n    /** @hidden */\n    private constructor (\n        private zone: NgZone,\n        private notifications: NotificationsService,\n        private ngbModal: NgbModal,\n    ) {\n        this.getPassphrase = serializeFunction(this.getPassphrase.bind(this))\n    }\n\n    async setEnabled (enabled: boolean, passphrase?: string): Promise<void> {\n        if (enabled) {\n            if (!this.store) {\n                await this.save(migrateVaultContent({}), passphrase)\n            }\n        } else {\n            this.store = null\n            this.contentChanged.next()\n        }\n    }\n\n    isOpen (): boolean {\n        return !!_rememberedPassphrase\n    }\n\n    forgetPassphrase (): void {\n        _rememberedPassphrase = null\n    }\n\n    async decrypt (storage: StoredVault, passphrase?: string): Promise<Vault> {\n        if (!passphrase) {\n            passphrase = await this.getPassphrase()\n        }\n        try {\n            return await wrapPromise(this.zone, decryptVault(storage, passphrase))\n        } catch (e) {\n            this.forgetPassphrase()\n            if (e.toString().includes('BAD_DECRYPT')) {\n                this.notifications.error('Incorrect passphrase')\n            }\n            throw e\n        }\n    }\n\n    async load (passphrase?: string): Promise<Vault|null> {\n        if (!this.store) {\n            return null\n        }\n        return this.decrypt(this.store, passphrase)\n    }\n\n    async encrypt (vault: Vault, passphrase?: string): Promise<StoredVault|null> {\n        if (!passphrase) {\n            passphrase = await this.getPassphrase()\n        }\n        if (_rememberedPassphrase) {\n            _rememberedPassphrase = passphrase\n        }\n        return wrapPromise(this.zone, encryptVault(vault, passphrase))\n    }\n\n    async save (vault: Vault, passphrase?: string): Promise<void> {\n        await this.ready$.toPromise()\n        this.store = await this.encrypt(vault, passphrase)\n        this.contentChanged.next()\n    }\n\n    async getPassphrase (): Promise<string> {\n        if (!_rememberedPassphrase) {\n            const modal = this.ngbModal.open(UnlockVaultModalComponent)\n            const { passphrase, rememberFor } = await modal.result\n            setTimeout(() => {\n                _rememberedPassphrase = null\n                // avoid multiple consequent prompts\n            }, Math.max(1000, rememberFor * 60000))\n            _rememberedPassphrase = passphrase\n        }\n\n        return _rememberedPassphrase!\n    }\n\n    async getSecret (type: string, key: VaultSecretKey): Promise<VaultSecret|null> {\n        await this.ready$.toPromise()\n        const vault = await this.load()\n        if (!vault) {\n            return null\n        }\n        let vaultSecret = vault.secrets.find(s => s.type === type && this.keyMatches(key, s))\n        if (!vaultSecret) {\n            // search for secret without host in vault (like a default user/password used in multiple servers)\n            key['host'] = null\n            vaultSecret = vault.secrets.find(s => s.type === type && this.keyMatches(key, s))\n        }\n        return vaultSecret ?? null\n    }\n\n    async addSecret (secret: VaultSecret): Promise<void> {\n        await this.ready$.toPromise()\n        const vault = await this.load()\n        if (!vault) {\n            return\n        }\n        vault.secrets = vault.secrets.filter(s => s.type !== secret.type || !this.keyMatches(secret.key, s))\n        vault.secrets.push(secret)\n        await this.save(vault)\n    }\n\n    async updateSecret (secret: VaultSecret, update: VaultSecret): Promise<void> {\n        await this.ready$.toPromise()\n        const vault = await this.load()\n        if (!vault) {\n            return\n        }\n        const target = vault.secrets.find(s => s.type === secret.type && this.keyMatches(secret.key, s))\n        if (!target) {\n            return\n        }\n        Object.assign(target, update)\n        await this.save(vault)\n    }\n\n    async removeSecret (type: string, key: VaultSecretKey): Promise<void> {\n        await this.ready$.toPromise()\n        const vault = await this.load()\n        if (!vault) {\n            return\n        }\n        vault.secrets = vault.secrets.filter(s => s.type !== type || !this.keyMatches(key, s))\n        await this.save(vault)\n    }\n\n    private keyMatches (key: VaultSecretKey, secret: VaultSecret): boolean {\n        return Object.keys(key).every(k => secret.key[k] === key[k])\n    }\n\n    setStore (store: StoredVault): void {\n        this.store = store\n        this.ready.next(true)\n        this.ready.complete()\n    }\n\n    isEnabled (): boolean {\n        return !!this.store\n    }\n}\n\n\n@Injectable()\nexport class VaultFileProvider extends FileProvider {\n    name = 'Vault'\n    prefix = 'vault://'\n\n    constructor (\n        private vault: VaultService,\n        private platform: PlatformService,\n        private selector: SelectorService,\n        private zone: NgZone,\n    ) {\n        super()\n    }\n\n    async isAvailable (): Promise<boolean> {\n        return this.vault.isEnabled()\n    }\n\n    async selectAndStoreFile (description: string): Promise<string> {\n        const vault = await this.vault.load()\n        if (!vault) {\n            throw new Error('Vault is locked')\n        }\n        const files = vault.secrets.filter(x => x.type === VAULT_SECRET_TYPE_FILE) as VaultFileSecret[]\n        if (files.length) {\n            const result = await this.selector.show<VaultFileSecret|null>('Select file', [\n                {\n                    name: 'Add a new file',\n                    icon: 'fas fa-plus',\n                    result: null,\n                },\n                ...files.map(f => ({\n                    name: f.key.description,\n                    icon: 'fas fa-file',\n                    result: f,\n                })),\n            ]).catch(() => null)\n            if (result) {\n                return `${this.prefix}${result.key.id}`\n            }\n        }\n        return this.addNewFile(description)\n    }\n\n    async addNewFile (description: string): Promise<string> {\n        const transfers = await this.platform.startUpload()\n        if (!transfers.length) {\n            throw new Error('Nothing selected')\n        }\n        const transfer = transfers[0]\n        const id = (await wrapPromise(this.zone, promisify(crypto.randomBytes)(32))).toString('hex')\n        await this.vault.addSecret({\n            type: VAULT_SECRET_TYPE_FILE,\n            key: {\n                id,\n                description: `${description} (${transfer.getName()})`,\n            },\n            value: Buffer.from(await transfer.readAll()).toString('base64'),\n        })\n        return `${this.prefix}${id}`\n    }\n\n    async retrieveFile (key: string): Promise<Buffer> {\n        if (!key.startsWith(this.prefix)) {\n            throw new Error('Incorrect type')\n        }\n        const secret = await this.vault.getSecret(VAULT_SECRET_TYPE_FILE, { id: key.substring(this.prefix.length) })\n        if (!secret) {\n            throw new Error('Not found')\n        }\n        return Buffer.from(secret.value, 'base64')\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/tabContextMenu.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Injectable } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { TranslateService } from '@ngx-translate/core'\nimport { Subscription } from 'rxjs'\nimport { AppService } from './services/app.service'\nimport { BaseTabComponent } from './components/baseTab.component'\nimport { SplitTabComponent, SplitDirection } from './components/splitTab.component'\nimport { TabContextMenuItemProvider } from './api/tabContextMenuProvider'\nimport { MenuItemOptions } from './api/menu'\nimport { ProfilesService } from './services/profiles.service'\nimport { TabsService } from './services/tabs.service'\nimport { HotkeysService } from './services/hotkeys.service'\nimport { PromptModalComponent } from './components/promptModal.component'\nimport { SplitLayoutProfilesService } from './profiles'\nimport { TAB_COLORS } from './utils'\n\n/** @hidden */\n@Injectable()\nexport class TabManagementContextMenu extends TabContextMenuItemProvider {\n    weight = 99\n\n    constructor (\n        private app: AppService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        let items: MenuItemOptions[] = [\n            {\n                label: this.translate.instant('Close'),\n                commandLabel: this.translate.instant('Close tab'),\n                click: () => {\n                    if (this.app.tabs.includes(tab)) {\n                        this.app.closeTab(tab, true)\n                    } else {\n                        tab.destroy()\n                    }\n                },\n            },\n        ]\n        if (!tab.parent) {\n            items = [\n                ...items,\n                {\n                    label: this.translate.instant('Close other tabs'),\n                    click: () => {\n                        for (const t of this.app.tabs.filter(x => x !== tab)) {\n                            this.app.closeTab(t, true)\n                        }\n                    },\n                },\n                {\n                    label: this.translate.instant('Close tabs to the right'),\n                    click: () => {\n                        for (const t of this.app.tabs.slice(this.app.tabs.indexOf(tab) + 1)) {\n                            this.app.closeTab(t, true)\n                        }\n                    },\n                },\n                {\n                    label: this.translate.instant('Close tabs to the left'),\n                    click: () => {\n                        for (const t of this.app.tabs.slice(0, this.app.tabs.indexOf(tab))) {\n                            this.app.closeTab(t, true)\n                        }\n                    },\n                },\n            ]\n        } else if (tab.parent instanceof SplitTabComponent) {\n            const directions: SplitDirection[] = ['r', 'b', 'l', 't']\n            items.push({\n                label: this.translate.instant('Split'),\n                submenu: directions.map(dir => ({\n                    label: {\n                        r: this.translate.instant('Right'),\n                        b: this.translate.instant('Down'),\n                        l: this.translate.instant('Left'),\n                        t: this.translate.instant('Up'),\n                    }[dir],\n                    commandLabel: {\n                        r: this.translate.instant('Split to the right'),\n                        b: this.translate.instant('Split to the down'),\n                        l: this.translate.instant('Split to the left'),\n                        t: this.translate.instant('Split to the up'),\n                    }[dir],\n                    click: () => {\n                        (tab.parent as SplitTabComponent).splitTab(tab, dir)\n                    },\n                })) as MenuItemOptions[],\n            })\n        }\n        return items\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class CommonOptionsContextMenu extends TabContextMenuItemProvider {\n    weight = -1\n\n    constructor (\n        private app: AppService,\n        private ngbModal: NgbModal,\n        private splitLayoutProfilesService: SplitLayoutProfilesService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]> {\n        let items: MenuItemOptions[] = []\n        if (tabHeader) {\n            const currentColor = TAB_COLORS.find(x => x.value === tab.color)?.name\n            items = [\n                ...items,\n                {\n                    label: this.translate.instant('Rename'),\n                    commandLabel: this.translate.instant('Rename tab'),\n                    click: () => {\n                        this.app.renameTab(tab)\n                    },\n                },\n                {\n                    label: this.translate.instant('Duplicate'),\n                    commandLabel: this.translate.instant('Duplicate tab'),\n                    click: () => this.app.duplicateTab(tab),\n                },\n                {\n                    label: this.translate.instant('Color'),\n                    commandLabel: this.translate.instant('Change tab color'),\n                    sublabel: currentColor ? this.translate.instant(currentColor) : undefined,\n                    submenu: TAB_COLORS.map(color => ({\n                        label: this.translate.instant(color.name) ?? color.name,\n                        type: 'radio',\n                        checked: tab.color === color.value,\n                        click: () => {\n                            tab.color = color.value\n                        },\n                    })) as MenuItemOptions[],\n                },\n            ]\n\n            if (tab instanceof SplitTabComponent && tab.getAllTabs().length > 1) {\n                items.push({\n                    label: this.translate.instant('Save layout as profile'),\n                    click: async () => {\n                        const modal = this.ngbModal.open(PromptModalComponent)\n                        modal.componentInstance.prompt = this.translate.instant('Profile name')\n                        const name = (await modal.result.catch(() => null))?.value\n                        if (!name) {\n                            return\n                        }\n                        this.splitLayoutProfilesService.createProfile(tab, name)\n                    },\n                })\n            }\n        }\n        return items\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class TaskCompletionContextMenu extends TabContextMenuItemProvider {\n    constructor (\n        private app: AppService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        const process = await tab.getCurrentProcess()\n        const items: MenuItemOptions[] = []\n\n        const extTab: (BaseTabComponent & { __completionNotificationEnabled?: boolean, __outputNotificationSubscription?: Subscription|null }) = tab\n\n        if (process) {\n            items.push({\n                enabled: false,\n                label: this.translate.instant('Current process: {name}', process),\n            })\n            items.push({\n                label: this.translate.instant('Notify when done'),\n                type: 'checkbox',\n                checked: extTab.__completionNotificationEnabled,\n                click: () => {\n                    extTab.__completionNotificationEnabled = !extTab.__completionNotificationEnabled\n\n                    if (extTab.__completionNotificationEnabled) {\n                        this.app.observeTabCompletion(tab).subscribe(() => {\n                            new Notification(this.translate.instant('Process completed'), {\n                                body: process.name,\n                            }).addEventListener('click', () => {\n                                this.app.selectTab(tab)\n                            })\n                            extTab.__completionNotificationEnabled = false\n                        })\n                    } else {\n                        this.app.stopObservingTabCompletion(tab)\n                    }\n                },\n            })\n        }\n        items.push({\n            label: this.translate.instant('Notify on activity'),\n            type: 'checkbox',\n            checked: !!extTab.__outputNotificationSubscription,\n            click: () => {\n                tab.clearActivity()\n\n                if (extTab.__outputNotificationSubscription) {\n                    extTab.__outputNotificationSubscription.unsubscribe()\n                    extTab.__outputNotificationSubscription = null\n                } else {\n                    extTab.__outputNotificationSubscription = tab.activity$.subscribe(active => {\n                        if (extTab.__outputNotificationSubscription && active) {\n                            extTab.__outputNotificationSubscription.unsubscribe()\n                            extTab.__outputNotificationSubscription = null\n                            new Notification(this.translate.instant('Tab activity'), {\n                                body: tab.title,\n                            }).addEventListener('click', () => {\n                                this.app.selectTab(tab)\n                            })\n                        }\n                    })\n                }\n            },\n        })\n        return items\n    }\n}\n\n\n/** @hidden */\n@Injectable()\nexport class ProfilesContextMenu extends TabContextMenuItemProvider {\n    weight = 10\n\n    constructor (\n        private profilesService: ProfilesService,\n        private tabsService: TabsService,\n        private app: AppService,\n        private translate: TranslateService,\n        hotkeys: HotkeysService,\n    ) {\n        super()\n        hotkeys.hotkey$.subscribe(hotkey => {\n            if (hotkey === 'switch-profile') {\n                let tab = this.app.activeTab\n                if (tab instanceof SplitTabComponent) {\n                    tab = tab.getFocusedTab()\n                    if (tab) {\n                        this.switchTabProfile(tab)\n                    }\n                }\n            }\n        })\n    }\n\n    async switchTabProfile (tab: BaseTabComponent) {\n        const profile = await this.profilesService.showProfileSelector().catch(() => null)\n        if (!profile) {\n            return\n        }\n\n        const params = await this.profilesService.newTabParametersForProfile(profile)\n        if (!params) {\n            return\n        }\n\n        if (!await tab.canClose()) {\n            return\n        }\n\n        const newTab = this.tabsService.create(params)\n        ;(tab.parent as SplitTabComponent).replaceTab(tab, newTab)\n\n        tab.destroy()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n\n        if (tab.parent instanceof SplitTabComponent && tab.parent.getAllTabs().length > 1) {\n            return [\n                {\n                    label: this.translate.instant('Switch profile'),\n                    click: () => this.switchTabProfile(tab),\n                },\n            ]\n        }\n\n        return []\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/theme.new.scss",
    "content": "$font-family-sans-serif: \"Source Sans Pro\";\n$font-size-base: 14rem / 16;\n\napp-root {\n    background: transparent;\n\n    &.vibrant {\n        background: rgba(var(--bs-dark-rgb),.65);\n    }\n\n    &> .content {\n        .tab-bar {\n            background: var(--theme-bg-more-2);\n\n            .btn-tab-bar {\n                background: transparent;\n                line-height: 42px;\n                align-items: center;\n                svg, path {\n                    fill: var(--bs-body-color);\n                    fill-opacity: 0.75;\n                }\n\n                &:hover { background: rgba(0, 0, 0, .125) !important; }\n                &:active { background: rgba(0, 0, 0, .25) !important; }\n            }\n\n            &>.tabs {\n                tab-header {\n                    border-left: 1px solid transparent;\n                    border-right: 1px solid transparent;\n                    transition: 0.125s ease-out width;\n                    color: var(--theme-fg-more-2);\n\n                    .index {\n                        color: var(--bs-body-color);\n                        opacity: 0.4;\n                    }\n\n                    button {\n                        color: var(--bs-body-color);\n                        border: none;\n                        transition: 0.25s all;\n\n                        &:hover { background: var(--theme-bg-more-2) !important; }\n                        &:active { background: var(--theme-bg-more-2) !important; }\n                    }\n\n                    .progressbar {\n                        background: var(--bs-blue);\n                    }\n\n                    .activity-indicator {\n                        background:var(--bs-body-color);\n                        opacity: .2;\n                    }\n\n                    .current-tab-indicator {\n                        background:var(--bs-light);\n                    }\n\n                    &.active {\n                        color: var(--theme-fg);\n                        background: var(--body-bg);\n                    }\n                }\n            }\n        }\n    }\n}\n\ntab-body {\n    background: var(--body-bg);\n}\n\n$tab-border-radius: 5px;\n\n$modal-header-border-color:      transparent;\n$modal-footer-border-color:      transparent;\n\n$form-check-input-width: 1.4em;\n$form-switch-width: 2.5em;\n\n$input-placeholder-color: var(--theme-fg-more-2);\n\n@import '~bootstrap/scss/bootstrap.scss';\n@import \"./theme.vendor.scss\";\n\nbody {\n    background: var(--body-bg);\n    --bs-border-color: var(--theme-bg-more-2);\n    --bs-form-control-bg: var(--theme-bg-more-2);\n    --bs-emphasis-color: var(--theme-fg-less-2);\n}\n\n.list-group {\n    --bs-list-group-bg: var(--theme-bg-more);\n    --bs-list-group-border-color: var(--theme-bg-more-2);\n    --bs-list-group-border-width: 0;\n    --bs-list-group-action-color: var(--bs-body-color);\n    --bs-list-group-action-hover-color: var(--theme-fg);\n    --bs-list-group-action-hover-bg: var(--theme-bg-more-2);\n\n    --bs-list-group-action-active-color: var(--theme-fg);\n    --bs-list-group-action-active-bg: var(--theme-bg-more-2);\n    --bs-list-group-disabled-color: var(--bs-secondary-color);\n    --bs-list-group-disabled-bg: var(--bs-body-bg);\n    --bs-list-group-active-color: var(--bs-primary-color);\n    --bs-list-group-active-bg: var(--bs-primary-bg);\n}\n\n.nav {\n    --bs-nav-link-color: var(--theme-fg-more);\n    --bs-nav-link-hover-color: var(--theme-fg-less);\n    --bs-nav-link-disabled-color: var(--bs-gray);\n}\n\n.nav-tabs {\n    --bs-nav-tabs-border-width: 2px;\n    --bs-nav-tabs-border-radius: 0;\n    --bs-nav-tabs-link-hover-border-color: var(--bs-body-bg);\n    --bs-nav-tabs-border-color: var(--theme-fg);\n    --bs-nav-tabs-link-active-color: var(--theme-fg);\n\n    --bs-nav-tabs-link-active-bg: transparent;\n    --bs-nav-tabs-link-active-border-color: transparent;\n}\n\n.nav-pills {\n    --bs-nav-pills-border-radius: #{$nav-pills-border-radius};\n    --bs-nav-pills-link-active-color: var(--theme-primary-fg);\n    --bs-nav-pills-link-active-bg: var(--theme-primary);\n}\n\n.nav-tabs {\n    margin-bottom: 10px;\n    border: none;\n\n    &.nav-justified .nav-link {\n        margin-right: 5px;\n    }\n\n    .nav-link {\n        border: none;\n        border-bottom: var(--bs-nav-tabs-border-width) solid transparent;\n        text-transform: uppercase;\n        font-weight: bold;\n        padding: 5px 0;\n        margin-right: 20px;\n\n        uib-tab-heading > i {\n            font-size: 18px;\n        }\n\n        &.disabled {\n            color: var(--bs-nav-tabs-link-disabled-color);\n            border-color: transparent;\n        }\n    }\n\n    .nav-item:last-child .nav-link {\n        margin-right: 0;\n    }\n\n    .nav-link.active,\n    .nav-item.show .nav-link {\n        color: var(--bs-nav-tabs-link-active-color);\n        border-color: var(--bs-nav-tabs-border-color);\n    }\n\n    .nav-item {\n        outline: none !important;\n    }\n}\n\n.dropdown-menu {\n    --bs-dropdown-bg: var(--theme-bg-more);\n}\n\n.progress {\n    --bs-progress-height: 3px;\n}\n\ntab-body {\n    terminal-toolbar {\n        background: var(--bs-body-bg);\n\n        .btn, .toolbar-pin-button {\n            font-weight: bold;\n        }\n    }\n}\n\n@each $color, $value in $theme-colors {\n    .btn-#{$color} {\n        // 6c757d\n        --bs-btn-bg: var(--theme-#{$color});\n        --bs-btn-border-color: var(--theme-#{$color});\n        --bs-btn-disabled-bg: var(--theme-#{$color});\n        --bs-btn-disabled-border-color: var(--theme-#{$color});\n\n        --bs-btn-hover-border-color: var(--theme-#{$color}-less);\n        --bs-btn-hover-bg: var(--theme-#{$color}-less);\n\n        --bs-btn-active-border-color: var(--theme-#{$color});\n        --bs-btn-active-bg: var(--theme-#{$color}-active-bg);\n\n        --bs-btn-focus-shadow-rgb: 130, 138, 145;\n        --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n\n        --bs-btn-color: var(--theme-#{$color}-fg);\n        --bs-btn-hover-color: var(--theme-#{$color}-fg);\n        --bs-btn-active-color: var(--theme-#{$color}-active-fg);\n        --bs-btn-disabled-color: var(--theme-#{$color}-fg);\n    }\n\n    .alert-#{$color} {\n        --bs-alert-bg: var(--theme-#{$color}-fg);\n        --bs-alert-border-color: var(--theme-#{$color}-more);\n        --bs-alert-color: var(--theme-#{$color});\n    }\n}\n\n\nmulti-hotkey-input {\n    .item {\n        background: var(--theme-bg-more);\n        border: 1px solid var(--bs-primary);\n        border-radius: 3px;\n        margin-right: 5px;\n\n        .body {\n            padding: 3px 0 2px;\n\n            .stroke {\n                padding: 0 6px;\n                border-right: 1px solid var(--bs-body-bg);\n            }\n        }\n\n        .remove {\n            padding: 3px 8px 2px;\n        }\n    }\n\n    .item:has(.duplicate) {\n        background-color: var(--bs-danger);\n        border: 1px solid var(--bs-danger);\n    }\n\n    .add {\n        color: #777;\n        padding: 4px 10px 0;\n    }\n\n    .add, .item .body, .item .remove {\n        &:hover { background: var(--theme-bg-more); }\n        &:active { background: var(--theme-bg-more-2); }\n    }\n\n    .add:has(.duplicate), .item:has(.duplicate) .body, .item:has(.duplicate) .remove {\n        &:hover { background: var(--theme-danger-less); }\n        &:active { background: var(--theme-danger-less-2); }\n    }\n}\n\nhotkey-input-modal {\n    .input {\n        // background: $input-bg;\n        padding: 10px;\n        font-size: 24px;\n        line-height: 27px;\n        height: 55px;\n\n        .stroke {\n            background: var(--theme-bg-more);\n            border: 1px solid var(--bs-primary);\n            border-radius: 3px;\n            margin-right: 10px;\n            padding: 3px 10px;\n        }\n    }\n\n    .timeout {\n        background: $input-bg;\n\n        div {\n            background: $blue;\n        }\n    }\n}\n\n.mb-3 label {\n    margin-bottom: 2px;\n}\n\n.btn {\n    i + * {\n        margin-left: 5px;\n    }\n\n    &.btn-lg i + * {\n        margin-left: 10px;\n    }\n}\n\n.input-group-addon + .form-control {\n    border-left: none;\n}\n\n.input-group > select.form-control {\n    flex-direction: row;\n}\n\n.list-group-item {\n    // transition: 0.0625s background ease;\n\n    i + * {\n        margin-left: 10px;\n    }\n}\n\n.list-group.list-group-flush .list-group-item {\n    background: transparent;\n    border: none;\n\n    &:not(:last-child) {\n        border-bottom: none;\n    }\n}\n\n.list-group-light {\n    .list-group-item {\n        border: none !important;\n        outline: none !important;\n        background: transparent;\n        border-radius: $border-radius;\n        margin: 0 !important;\n\n        &.active {\n            background-color: var(--bs-list-group-active-bg);\n        }\n    }\n}\n\n.list-group-item svg {\n    fill: var(--bs-body-color);\n    fill-opacity: 0.75;\n}\n\n*::-webkit-scrollbar {\n    background: rgba(0, 0, 0, .125);\n    width: 10px;\n    margin: 5px;\n}\n\n*::-webkit-scrollbar-thumb {\n    background: rgba(255, 255, 255, .25);\n}\n\n*::-webkit-scrollbar-corner,\n*::-webkit-resizer {\n    opacity: 0;\n}\n\nsearch-panel {\n    background: var(--theme-bg-more) !important;\n\n    input {\n        border-radius: 0 !important;\n    }\n}\n\n\n.btn {\n    cursor: pointer;\n    justify-content: flex-start;\n    overflow: hidden;\n\n    &.disabled,\n    &:disabled {\n        cursor: not-allowed;\n    }\n}\n\n.btn-link {\n    text-decoration: none;\n}\n\nngx-colors-panel .opened {\n    background: var(--bs-body-bg) !important;\n\n    button {\n        color: var(--bs-body-color) !important;\n    }\n\n    .button svg {\n        fill: white;\n    }\n}\n\n.text-muted {\n    opacity: .5;\n    color: var(--theme-fg) !important;\n}\n\n.form-switch .form-check-input {\n    --bs-form-switch-bg: inherit;\n    border-color: var(--theme-bg-more);\n    background-color: var(--theme-bg-more-2);\n\n    &:checked {\n        border-color: var(--theme-primary-more);\n        background-color: var(--theme-primary);\n    }\n}\n\n.form-control:focus {\n    border-color: var(--theme-fg-more-2);\n}\n\n.accordion {\n    --bs-accordion-bg: var(--theme-bg-more);\n    --bs-accordion-active-color: var(--theme-fg);\n    --bs-accordion-active-bg: var(--theme-bg-more-2);\n}\n\nstart-page {\n    background: var(--theme-bg-more-2);\n}\n\nsplit-tab-spanner {\n    background: rgba(var(--bs-dark-rgb), .1);\n\n    &:hover, &.active {\n        background: rgba(var(--bs-dark-rgb), .2);\n    }\n}\n\nwindow-controls {\n    button svg {\n        fill: var(--theme-fg) !important;\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/theme.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { Injectable } from '@angular/core'\nimport { Theme } from './api'\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class NewTheme extends Theme {\n    name = _('Follow the color scheme')\n    css = require('./theme.new.scss')\n    terminalBackground = '#f7f1e0'\n    followsColorScheme = true\n}\n"
  },
  {
    "path": "tabby-core/src/theme.vars.scss",
    "content": "$white:    #fff;\n$gray-100: #f8f9fa;\n$gray-200: #e9ecef;\n$gray-300: #dee2e6;\n$gray-400: #ced4da;\n$gray-500: #adb5bd;\n$gray-600: #6c757d;\n$gray-700: #495057;\n$gray-800: #343a40;\n$gray-900: #212529;\n$black:    #000;\n\n\n$red:    #d9534f !default;\n$orange: #f0ad4e !default;\n$yellow: #ffd500 !default;\n$green:  #5cb85c !default;\n$blue:   #0275d8 !default;\n$teal:   #5bc0de !default;\n$pink:   #ff5b77 !default;\n$purple: #613d7c !default;\n\n\n@import \"~bootstrap/scss/functions\";\n\n$content-bg: rgba(39, 49, 60, 0.65); //#1D272D;\n$content-bg-solid: #1D272D;\n\n$table-bg: rgba(255,255,255,.025);\n$table-bg-hover: rgba(255,255,255,.05);\n$table-border-color: rgba(255,255,255,.1);\n\n$theme-colors: (\n  primary: $blue,\n  secondary: #38434e,\n  success: $green,\n  info: $blue,\n  warning: $orange,\n  danger: $red,\n  light: $gray-300,\n  dark: #0e151d,\n  rare: $purple\n);\n\n$body-color: #ccc;\n$body-bg: #131d27;\n$body-bg2: #20333e;\n\n$font-family-sans-serif: \"Source Sans Pro\";\n$font-family-monospace: \"Source Code Pro\";\n$font-size-base: 14rem / 16;\n$font-size-lg: 1.28rem;\n$font-size-sm: .85rem;\n\n$line-height-base: 1.6;\n\n$border-radius:               .4rem;\n$border-radius-lg:            .6rem;\n$border-radius-sm:            .2rem;\n\n// -----\n\n$headings-color: #ced9e2;\n$headings-font-weight: lighter;\n\n$input-btn-padding-y: .3rem;\n$input-btn-padding-x: .9rem;\n$input-btn-line-height: 1.6;\n$input-btn-line-height-sm: 1.8;\n$input-btn-line-height-lg: 1.8;\n\n$btn-link-disabled-color: $gray-600;\n$btn-focus-box-shadow: none;\n\n$h4-font-size: 18px;\n\n$link-color: $gray-400;\n$link-hover-color: $white;\n$link-hover-decoration: none;\n\n$component-active-color: #4fadff;\n$component-active-bg: #0059a559;\n\n$list-group-bg: $table-bg;\n$list-group-border-color: transparent;\n\n$list-group-item-padding-y: 0.8rem;\n$list-group-item-padding-x: 1rem;\n\n$list-group-hover-bg: $table-bg-hover;\n$list-group-active-bg: rgba(255,255,255,.05);\n$list-group-active-color: $component-active-color;\n$list-group-active-border-color: translate;\n\n$list-group-action-color: $body-color;\n$list-group-action-hover-color: white;\n\n$list-group-action-active-color: $component-active-color;\n$list-group-action-active-bg: $list-group-active-bg;\n\n$alert-padding-y: 0.9rem;\n$alert-padding-x: 1.25rem;\n\n$input-box-shadow: none;\n\n$transition-base: all .15s ease-in-out;\n$transition-fade: opacity .1s linear;\n$transition-collapse: height .35s ease;\n$btn-transition: all .15s ease-in-out;\n\n$popover-bg: $body-bg;\n$popover-body-color: $body-color;\n$popover-header-bg: $table-bg-hover;\n$popover-header-color: $headings-color;\n$popover-arrow-color: $popover-bg;\n$popover-max-width: 360px;\n\n$btn-border-width:  2px;\n\n$input-bg:                       #181e23;\n$input-disabled-bg:              #2e3235;\n\n$input-color:                    #ddd;\n$input-border-color:             $input-bg;\n$input-border-width:             2px;\n\n$input-focus-bg:                 $input-bg;\n$input-focus-border-color:       rgba(171, 171, 171, 0.61);\n$input-focus-color:              $input-color;\n\n$input-btn-focus-color: var(--focus-color);\n$input-btn-focus-box-shadow:  0 0 0 2px $input-btn-focus-color;\n\n$input-group-addon-color: $input-color;\n$input-group-addon-bg: $input-bg;\n$input-group-addon-border-color: transparent;\n$input-group-btn-border-color: $input-bg;\n\n$nav-tabs-border-radius: 0;\n$nav-tabs-border-color: transparent;\n$nav-tabs-border-width: 2px;\n$nav-tabs-link-hover-border-color: transparent;\n$nav-tabs-link-active-color: #eee;\n$nav-tabs-link-active-bg: transparent;\n$nav-tabs-link-active-border-color: #eee;\n\n$navbar-padding-y: 0;\n$navbar-padding-x: 0;\n\n$dropdown-bg: $content-bg-solid;\n$dropdown-color: $body-color;\n$dropdown-border-width: 1px;\n$dropdown-box-shadow: 0 0 1rem rgba($black, .25), 0 1px 1px rgba($black, .12);\n$dropdown-header-color: $gray-500;\n\n$dropdown-link-color: $body-color;\n$dropdown-link-hover-color: #eee;\n$dropdown-link-hover-bg: rgba(255,255,255,.04);\n$dropdown-link-active-color: white;\n$dropdown-link-active-bg: rgba(0, 0, 0, .2);\n$dropdown-item-padding-y: 0.5rem;\n$dropdown-item-padding-x: 1.5rem;\n\n\n$code-color: $orange;\n$code-bg: rgba(0, 0, 0, .25);\n$code-padding-y: 3px;\n$code-padding-x: 5px;\n$pre-bg: $dropdown-bg;\n$pre-color: $dropdown-link-color;\n\n$badge-font-size: 0.75rem;\n$badge-font-weight: bold;\n$badge-padding-y: 4px;\n$badge-padding-x: 6px;\n\n\n$form-check-input-border: lighten($body-bg, 25%);\n$form-check-input-width: 1.4em;\n$form-switch-width: 2.5em;\n$form-switch-color: lighten($body-bg, 25%);\n$form-switch-focus-color: lighten($body-bg, 40%);\n$form-switch-checked-color: map-get($theme-colors, \"primary\");\n\n\n$modal-content-bg:               $content-bg-solid;\n$modal-content-border-color:     $body-bg;\n$modal-header-border-width:         0;\n$modal-footer-border-color:         #222;\n$modal-footer-border-width:         1px;\n$modal-content-border-width:        0;\n\n$progress-bg: $table-bg;\n$progress-height: 3px;\n\n$alert-bg-level: 9;\n$alert-border-level: 5;\n$alert-color-level: -5;\n\n$text-muted: rgba(255, 255, 255, 0.5);\n\n$card-bg: $list-group-bg;\n\n$tooltip-color: rgba(255, 255, 255, .75);\n$tooltip-bg: rgba(0, 0, 0, .75);\n\n$accordion-border-color: $list-group-border-color;\n$accordion-bg: $list-group-bg;\n$accordion-button-active-bg: $list-group-active-bg;\n$accordion-button-active-color: $list-group-active-color;\n\n$btn-close-color: $body-color;\n"
  },
  {
    "path": "tabby-core/src/theme.vendor.scss",
    "content": "// $alert-border-radius: 0;\n// @mixin border-radius ($r) {}\n@import \"../../node_modules/ngx-toastr/toastr-bs5-alert.scss\";\n"
  },
  {
    "path": "tabby-core/src/utfSplitter.ts",
    "content": "const partials = [\n    [0b110, 5, 0],\n    [0b1110, 4, 1],\n    [0b11110, 3, 2],\n]\n\nexport class UTF8Splitter {\n    private internal = Buffer.alloc(0)\n\n    write (data: Buffer): Buffer {\n        this.internal = Buffer.concat([this.internal, data])\n\n        let keep = 0\n        for (const [pattern, shift, maxOffset] of partials) {\n            for (let offset = 0; offset < maxOffset + 1; offset++) {\n                if (this.internal[this.internal.length - offset - 1] >> shift === pattern) {\n                    keep = Math.max(keep, offset + 1)\n                }\n            }\n        }\n\n        const result = this.internal.slice(0, this.internal.length - keep)\n        this.internal = this.internal.slice(this.internal.length - keep)\n        return result\n    }\n\n    flush (): Buffer {\n        const result = this.internal\n        this.internal = Buffer.alloc(0)\n        return result\n    }\n}\n"
  },
  {
    "path": "tabby-core/src/utils.ts",
    "content": "import * as os from 'os'\nimport { NgZone } from '@angular/core'\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\n\nexport const WIN_BUILD_CONPTY_SUPPORTED = 17692\nexport const WIN_BUILD_CONPTY_STABLE = 18309\nexport const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763\nexport const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063\n\nexport function getWindows10Build (): number|undefined {\n    return process.platform === 'win32' && parseFloat(os.release()) >= 10 ? parseInt(os.release().split('.')[2]) : undefined\n}\n\nexport function isWindowsBuild (build: number): boolean {\n    const b = getWindows10Build()\n    return b !== undefined && b >= build\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getCSSFontFamily (config: any): string {\n    let fonts: string[] = config.terminal.font.split(',').map(x => x.trim().replaceAll('\"', ''))\n    if (config.terminal.fallbackFont) {\n        fonts.push(config.terminal.fallbackFont)\n    }\n    fonts.push('monospace-fallback')\n    fonts.push('monospace')\n    fonts = fonts.map(x => `\"${x}\"`)\n    return fonts.join(', ')\n}\n\nexport function wrapPromise <T> (zone: NgZone, promise: Promise<T>): Promise<T> {\n    return new Promise((resolve, reject) => {\n        promise.then(result => {\n            zone.run(() => resolve(result))\n        }).catch(error => {\n            zone.run(() => reject(error))\n        })\n    })\n}\n\nexport class ResettableTimeout {\n    private id: any = null\n\n    constructor (private fn: () => void, private timeout: number) {}\n\n    set (timeout?: number): void {\n        this.clear()\n        this.id = setTimeout(this.fn, timeout ?? this.timeout)\n    }\n\n    clear (): void {\n        if (this.id) {\n            clearTimeout(this.id)\n        }\n    }\n}\n\nexport const TAB_COLORS = [\n    { name: _('No color'), value: null },\n    { name: _('Blue'), value: '#0275d8' },\n    { name: _('Green'), value: '#5cb85c' },\n    { name: _('Orange'), value: '#f0ad4e' },\n    { name: _('Purple'), value: '#613d7c' },\n    { name: _('Red'), value: '#d9534f' },\n    { name: _('Yellow'), value: '#ffd500' },\n]\n\nexport function serializeFunction <T extends () => Promise<any>> (fn: T): T {\n    let queue = Promise.resolve()\n    return ((...args) => {\n        const res = queue.then(() => fn(...args))\n        queue = res.catch(() => null)\n        return res\n    }) as T\n}\n"
  },
  {
    "path": "tabby-core/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-core/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-core/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'core',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-electron/package.json",
    "content": "{\n  \"name\": \"tabby-electron\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Electron-specific bindings\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"peerDependencies\": {\n    \"@angular/core\": \"^15\",\n    \"tabby-local\": \"*\"\n  },\n  \"devDependencies\": {\n    \"electron-promise-ipc\": \"^2.2.4\",\n    \"ps-node\": \"^0.1.6\",\n    \"ssh-config\": \"^5.0.0\",\n    \"tmp-promise\": \"^3.0.2\",\n    \"which\": \"^3.0.0\",\n    \"winston\": \"^3.3.3\"\n  }\n}\n"
  },
  {
    "path": "tabby-electron/src/colorSchemes.ts",
    "content": "import * as fs from 'mz/fs'\nimport * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { TerminalColorSchemeProvider, TerminalColorScheme } from 'tabby-terminal'\n\n/** @hidden */\n@Injectable()\nexport class HyperColorSchemes extends TerminalColorSchemeProvider {\n    async getSchemes (): Promise<TerminalColorScheme[]> {\n        const pluginsPath = path.join(process.env.HOME!, '.hyper_plugins', 'node_modules')\n        if (!await fs.exists(pluginsPath)) {\n            return []\n        }\n        const plugins = await fs.readdir(pluginsPath)\n\n        const themes: TerminalColorScheme[] = []\n\n        plugins.forEach(plugin => {\n            try {\n                const module = (global as any).require(path.join(pluginsPath, plugin))\n                if (module.decorateConfig) {\n                    let config: any = {}\n                    try {\n                        config = module.decorateConfig({})\n                    } catch {\n                        console.warn('Could not load Hyper theme:', plugin)\n                        return\n                    }\n                    if (config.colors) {\n                        themes.push({\n                            name: plugin,\n                            foreground: config.foregroundColor,\n                            background: config.backgroundColor,\n                            cursor: config.cursorColor,\n                            colors: config.colors.black ? [\n                                config.colors.black,\n                                config.colors.red,\n                                config.colors.green,\n                                config.colors.yellow,\n                                config.colors.blue,\n                                config.colors.magenta,\n                                config.colors.cyan,\n                                config.colors.white,\n                                config.colors.lightBlack,\n                                config.colors.lightRed,\n                                config.colors.lightGreen,\n                                config.colors.lightYellow,\n                                config.colors.lightBlue,\n                                config.colors.lightMagenta,\n                                config.colors.lightCyan,\n                                config.colors.lightWhite,\n                            ] : config.colors,\n                        })\n                    }\n                }\n            } catch (err) {\n                console.debug('Skipping Hyper plugin', plugin, err)\n            }\n        })\n\n        return themes\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/config.ts",
    "content": "import { ConfigProvider, Platform } from 'tabby-core'\n\n/** @hidden */\nexport class ElectronConfigProvider extends ConfigProvider {\n    platformDefaults = {\n        [Platform.macOS]: {\n            hotkeys: {\n                'toggle-window': ['Ctrl-Space'],\n                'new-window': ['⌘-N'],\n            },\n        },\n        [Platform.Windows]: {\n            hotkeys: {\n                'toggle-window': ['Ctrl-Space'],\n                'new-window': ['Ctrl-Shift-N'],\n            },\n        },\n        [Platform.Linux]: {\n            hotkeys: {\n                'toggle-window': ['Ctrl-Space'],\n                'new-window': ['Ctrl-Shift-N'],\n            },\n        },\n    }\n\n    defaults = {}\n}\n"
  },
  {
    "path": "tabby-electron/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class ElectronHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'new-window',\n            name: this.translate.instant('New window'),\n        },\n        {\n            id: 'toggle-window',\n            name: this.translate.instant('Toggle terminal window'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { PlatformService, LogService, UpdaterService, DockingService, HostAppService, ThemesService, Platform, AppService, ConfigService, WIN_BUILD_FLUENT_BG_SUPPORTED, isWindowsBuild, HostWindowService, HotkeyProvider, ConfigProvider, FileProvider } from 'tabby-core'\nimport { TerminalColorSchemeProvider, TerminalDecorator } from 'tabby-terminal'\nimport { SFTPContextMenuItemProvider, SSHProfileImporter, AutoPrivateKeyLocator } from 'tabby-ssh'\nimport { PTYInterface, ShellProvider, UACService } from 'tabby-local'\nimport { auditTime } from 'rxjs'\n\nimport { HyperColorSchemes } from './colorSchemes'\nimport { ElectronPlatformService } from './services/platform.service'\nimport { ElectronLogService } from './services/log.service'\nimport { ElectronUpdaterService } from './services/updater.service'\nimport { TouchbarService } from './services/touchbar.service'\nimport { ElectronDockingService } from './services/docking.service'\nimport { ElectronHostWindow } from './services/hostWindow.service'\nimport { ElectronFileProvider } from './services/fileProvider.service'\nimport { ElectronHostAppService } from './services/hostApp.service'\nimport { ElectronService } from './services/electron.service'\nimport { DockMenuService } from './services/dockMenu.service'\nimport { ElectronUACService } from './services/uac.service'\n\nimport { ElectronHotkeyProvider } from './hotkeys'\nimport { ElectronConfigProvider } from './config'\nimport { EditSFTPContextMenu } from './sftpContextMenu'\nimport { OpenSSHImporter, PrivateKeyLocator, StaticFileImporter } from './sshImporters'\nimport { ElectronPTYInterface } from './pty'\nimport { PathDropDecorator } from './pathDrop'\n\nimport { CmderShellProvider } from './shells/cmder'\nimport { Cygwin32ShellProvider } from './shells/cygwin32'\nimport { Cygwin64ShellProvider } from './shells/cygwin64'\nimport { GitBashShellProvider } from './shells/gitBash'\nimport { LinuxDefaultShellProvider } from './shells/linuxDefault'\nimport { MacOSDefaultShellProvider } from './shells/macDefault'\nimport { MSYS2ShellProvider } from './shells/msys2'\nimport { POSIXShellsProvider } from './shells/posix'\nimport { PowerShellCoreShellProvider } from './shells/powershellCore'\nimport { WindowsDefaultShellProvider } from './shells/winDefault'\nimport { WindowsStockShellsProvider } from './shells/windowsStock'\nimport { WSLShellProvider } from './shells/wsl'\nimport { VSDevToolsProvider } from './shells/vs'\n\n@NgModule({\n    providers: [\n        { provide: TerminalColorSchemeProvider, useClass: HyperColorSchemes, multi: true },\n        { provide: PlatformService, useExisting: ElectronPlatformService },\n        { provide: HostWindowService, useExisting: ElectronHostWindow },\n        { provide: HostAppService, useExisting: ElectronHostAppService },\n        { provide: LogService, useClass: ElectronLogService },\n        { provide: UpdaterService, useClass: ElectronUpdaterService },\n        { provide: DockingService, useClass: ElectronDockingService },\n        { provide: HotkeyProvider, useClass: ElectronHotkeyProvider, multi: true },\n        { provide: ConfigProvider, useClass: ElectronConfigProvider, multi: true },\n        { provide: FileProvider, useClass: ElectronFileProvider, multi: true },\n        { provide: SFTPContextMenuItemProvider, useClass: EditSFTPContextMenu, multi: true },\n        { provide: SSHProfileImporter, useExisting: OpenSSHImporter, multi: true },\n        { provide: SSHProfileImporter, useExisting: StaticFileImporter, multi: true },\n        { provide: AutoPrivateKeyLocator, useExisting: PrivateKeyLocator, multi: true },\n\n        { provide: ShellProvider, useClass: WindowsDefaultShellProvider, multi: true },\n        { provide: ShellProvider, useClass: MacOSDefaultShellProvider, multi: true },\n        { provide: ShellProvider, useClass: LinuxDefaultShellProvider, multi: true },\n        { provide: ShellProvider, useClass: WindowsStockShellsProvider, multi: true },\n        { provide: ShellProvider, useClass: PowerShellCoreShellProvider, multi: true },\n        { provide: ShellProvider, useClass: CmderShellProvider, multi: true },\n        { provide: ShellProvider, useClass: Cygwin32ShellProvider, multi: true },\n        { provide: ShellProvider, useClass: Cygwin64ShellProvider, multi: true },\n        { provide: ShellProvider, useClass: GitBashShellProvider, multi: true },\n        { provide: ShellProvider, useClass: POSIXShellsProvider, multi: true },\n        { provide: ShellProvider, useClass: MSYS2ShellProvider, multi: true },\n        { provide: ShellProvider, useClass: WSLShellProvider, multi: true },\n        { provide: ShellProvider, useClass: VSDevToolsProvider, multi: true },\n\n        { provide: UACService, useClass: ElectronUACService },\n\n        { provide: PTYInterface, useClass: ElectronPTYInterface },\n\n        { provide: TerminalDecorator, useClass: PathDropDecorator, multi: true },\n\n        // For WindowsDefaultShellProvider\n        PowerShellCoreShellProvider,\n        WSLShellProvider,\n        WindowsStockShellsProvider,\n    ],\n})\nexport default class ElectronModule {\n    constructor (\n        private config: ConfigService,\n        private hostApp: ElectronHostAppService,\n        private electron: ElectronService,\n        private hostWindow: ElectronHostWindow,\n        touchbar: TouchbarService,\n        docking: DockingService,\n        themeService: ThemesService,\n        app: AppService,\n        dockMenu: DockMenuService,\n    ) {\n        config.ready$.toPromise().then(() => {\n            touchbar.update()\n            docking.dock()\n            hostWindow.windowShown$.subscribe(() => {\n                docking.dock()\n            })\n            this.registerGlobalHotkey()\n            this.updateVibrancy()\n            this.updateWindowControlsColor()\n        })\n\n        config.changed$.subscribe(() => {\n            this.registerGlobalHotkey()\n        })\n\n        themeService.themeChanged$.subscribe(theme => {\n            if (hostApp.platform === Platform.macOS) {\n                hostWindow.setTrafficLightPosition(\n                    theme.macOSWindowButtonsInsetX ?? 14,\n                    theme.macOSWindowButtonsInsetY ?? 11,\n                )\n            }\n        })\n\n        let lastProgress: number|null = null\n        app.tabOpened$.subscribe(tab => {\n            tab.progress$.pipe(auditTime(250)).subscribe(progress => {\n                if (lastProgress === progress) {\n                    return\n                }\n                if (progress !== null) {\n                    hostWindow.setProgressBar(progress / 100.0)\n                } else {\n                    hostWindow.setProgressBar(-1)\n                }\n                lastProgress = progress\n            })\n        })\n\n        config.changed$.subscribe(() => {\n            this.updateVibrancy()\n            this.updateDarkMode()\n        })\n\n        config.changed$.subscribe(() => this.updateWindowControlsColor())\n\n        config.ready$.toPromise().then(() => {\n            dockMenu.update()\n        })\n    }\n\n    private registerGlobalHotkey () {\n        let value = this.config.store.hotkeys['toggle-window'] || []\n        if (typeof value === 'string') {\n            value = [value]\n        }\n        const specs: string[] = []\n        value.forEach((item: string | string[]) => {\n            item = typeof item === 'string' ? [item] : item\n\n            try {\n                let electronKeySpec = item[0]\n                electronKeySpec = electronKeySpec.replaceAll('Meta', 'Super')\n                electronKeySpec = electronKeySpec.replaceAll('⌘', 'Command')\n                electronKeySpec = electronKeySpec.replaceAll('⌥', 'Alt')\n                electronKeySpec = electronKeySpec.replaceAll('-', '+')\n                specs.push(electronKeySpec)\n            } catch (err) {\n                console.error('Could not register the global hotkey:', err)\n            }\n        })\n\n        this.electron.ipcRenderer.send('app:register-global-hotkey', specs)\n    }\n\n    private updateVibrancy () {\n        let vibrancyType = this.config.store.appearance.vibrancyType\n        if (this.hostApp.platform === Platform.Windows && !isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {\n            vibrancyType = null\n        }\n        this.electron.ipcRenderer.send('window-set-vibrancy', this.config.store.appearance.vibrancy, vibrancyType)\n\n        this.hostWindow.setOpacity(this.config.store.appearance.opacity)\n    }\n\n    private updateDarkMode () {\n        const colorSchemeMode = this.config.store.appearance.colorSchemeMode\n        this.electron.ipcRenderer.send('window-set-dark-mode', colorSchemeMode)\n    }\n\n    private updateWindowControlsColor () {\n        // if windows and not using native frame, WCO does not exist, return.\n        if (this.hostApp.platform === Platform.Windows && this.config.store.appearance.frame === 'native') {\n            return\n        }\n\n        this.electron.ipcRenderer.send('window-set-window-controls-color', this.config.store.terminal.colorScheme)\n    }\n}\n\nexport { ElectronHostWindow, ElectronHostAppService, ElectronService }\n"
  },
  {
    "path": "tabby-electron/src/pathDrop.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { TerminalDecorator, BaseTerminalTabComponent } from 'tabby-terminal'\nimport { webUtils } from 'electron'\n\n/** @hidden */\n@Injectable()\nexport class PathDropDecorator extends TerminalDecorator {\n    attach (terminal: BaseTerminalTabComponent<any>): void {\n        setTimeout(() => {\n            this.subscribeUntilDetached(terminal, terminal.frontend?.dragOver$.subscribe(event => {\n                event.preventDefault()\n            }))\n            this.subscribeUntilDetached(terminal, terminal.frontend?.drop$.subscribe((event: DragEvent) => {\n                for (const file of event.dataTransfer!.files as unknown as Iterable<File>) {\n                    this.injectPath(terminal, webUtils.getPathForFile(file))\n                }\n                event.preventDefault()\n            }))\n        })\n    }\n\n    private injectPath (terminal: BaseTerminalTabComponent<any>, path: string) {\n        if (path.includes(' ')) {\n            path = `\"${path}\"`\n        }\n        path = path.replaceAll('\\\\', '\\\\\\\\')\n        terminal.sendInput(path + ' ')\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/pty.ts",
    "content": "import * as psNode from 'ps-node'\nimport { ipcRenderer } from 'electron'\nimport { ChildProcess, PTYInterface, PTYProxy } from 'tabby-local'\nimport { getWorkingDirectoryFromPID } from 'native-process-working-directory'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var macOSNativeProcessList = require('macos-native-processlist')  // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\ntry {\n    var windowsProcessTree = require('@tabby-gang/windows-process-tree')  // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\nexport class ElectronPTYInterface extends PTYInterface {\n    async spawn (...options: any[]): Promise<PTYProxy> {\n        const id = ipcRenderer.sendSync('pty:spawn', ...options)\n        return new ElectronPTYProxy(id)\n    }\n\n    async restore (id: string): Promise<ElectronPTYProxy|null> {\n        if (ipcRenderer.sendSync('pty:exists', id)) {\n            return new ElectronPTYProxy(id)\n        }\n        return null\n    }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class ElectronPTYProxy extends PTYProxy {\n    private subscriptions: Map<string, any> = new Map()\n    private truePID: Promise<number>\n\n    constructor (\n        private id: string,\n    ) {\n        super()\n        this.truePID = new Promise(async (resolve) => {\n            let pid = await this.getPID()\n            try {\n                await new Promise(r => setTimeout(r, 2000))\n\n                // Retrieve any possible single children now that shell has fully started\n                let processes = await this.getChildProcessesInternal(pid)\n                while (pid && processes.length === 1) {\n                    if (!processes[0].pid) {\n                        break\n                    }\n                    pid = processes[0].pid\n                    processes = await this.getChildProcessesInternal(pid)\n                }\n            } finally {\n                resolve(pid)\n            }\n        })\n        this.truePID = this.truePID.catch(() => this.getPID())\n    }\n\n    getID (): string {\n        return this.id\n    }\n\n    getTruePID (): Promise<number> {\n        return this.truePID\n    }\n\n    async getPID (): Promise<number> {\n        return ipcRenderer.sendSync('pty:get-pid', this.id)\n    }\n\n    subscribe (event: string, handler: (..._: any[]) => void): void {\n        const key = `pty:${this.id}:${event}`\n        const newHandler = (_event, ...args) => handler(...args)\n        this.subscriptions.set(key, newHandler)\n        ipcRenderer.on(key, newHandler)\n    }\n\n    ackData (length: number): void {\n        ipcRenderer.send('pty:ack-data', this.id, length)\n    }\n\n    unsubscribeAll (): void {\n        for (const k of this.subscriptions.keys()) {\n            ipcRenderer.off(k, this.subscriptions.get(k))\n        }\n    }\n\n    async resize (columns: number, rows: number): Promise<void> {\n        ipcRenderer.send('pty:resize', this.id, columns, rows)\n    }\n\n    async write (data: Buffer): Promise<void> {\n        ipcRenderer.send('pty:write', this.id, data)\n    }\n\n    async kill (signal?: string): Promise<void> {\n        ipcRenderer.send('pty:kill', this.id, signal)\n    }\n\n    async getChildProcesses (): Promise<ChildProcess[]> {\n        return this.getChildProcessesInternal(await this.getTruePID())\n    }\n\n    async getChildProcessesInternal (truePID: number): Promise<ChildProcess[]> {\n        if (process.platform === 'darwin') {\n            const processes = await macOSNativeProcessList.getProcessList()\n            return processes.filter(x => x.ppid === truePID).map(p => ({\n                pid: p.pid,\n                ppid: p.ppid,\n                command: p.name,\n            }))\n        }\n        if (process.platform === 'win32') {\n            return new Promise<ChildProcess[]>(resolve => {\n                windowsProcessTree.getProcessTree(truePID, tree => {\n                    resolve(tree ? tree.children.map(child => ({\n                        pid: child.pid,\n                        ppid: tree.pid,\n                        command: child.name,\n                    })) : [])\n                })\n            })\n        }\n        return new Promise<ChildProcess[]>((resolve, reject) => {\n            psNode.lookup({ ppid: truePID }, (err, processes) => {\n                if (err) {\n                    reject(err)\n                    return\n                }\n                resolve(processes as ChildProcess[])\n            })\n        })\n    }\n\n    async getWorkingDirectory (): Promise<string|null> {\n        return getWorkingDirectoryFromPID(await this.getTruePID())\n    }\n\n}\n"
  },
  {
    "path": "tabby-electron/src/services/dockMenu.service.ts",
    "content": "import { NgZone, Injectable } from '@angular/core'\nimport { ConfigService, HostAppService, Platform, ProfilesService, TranslateService } from 'tabby-core'\nimport { ElectronService } from './electron.service'\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class DockMenuService {\n    appVersion: string\n\n    private constructor (\n        config: ConfigService,\n        private electron: ElectronService,\n        private hostApp: HostAppService,\n        private zone: NgZone,\n        private profilesService: ProfilesService,\n        private translate: TranslateService,\n    ) {\n        config.changed$.subscribe(() => this.update())\n    }\n\n    async update (): Promise<void> {\n        const profiles = await this.profilesService.getProfiles()\n\n        if (this.hostApp.platform === Platform.Windows) {\n            this.electron.app.setJumpList([\n                {\n                    type: 'custom',\n                    name: this.translate.instant('Recent'),\n                    items: this.profilesService.getRecentProfiles().map((profile, index) => ({\n                        type: 'task',\n                        program: process.execPath,\n                        args: `recent ${index}`,\n                        title: profile.name,\n                        iconPath: process.execPath,\n                        iconIndex: 0,\n                    })),\n                },\n                {\n                    type: 'custom',\n                    name: this.translate.instant('Profiles'),\n                    items: profiles.map(profile => ({\n                        type: 'task',\n                        program: process.execPath,\n                        args: `profile \"${profile.name}\"`,\n                        title: profile.name,\n                        iconPath: process.execPath,\n                        iconIndex: 0,\n                    })),\n                },\n            ])\n        }\n        if (this.hostApp.platform === Platform.macOS) {\n            this.electron.app.dock?.setMenu(this.electron.Menu.buildFromTemplate(\n                [\n                    ...[...this.profilesService.getRecentProfiles(), ...profiles].map(profile => ({\n                        label: profile.name,\n                        click: () => this.zone.run(async () => {\n                            this.profilesService.openNewTabForProfile(profile)\n                        }),\n                    })),\n                    {\n                        label: this.translate.instant('New Window'),\n                        click: () => this.zone.run(() => this.hostApp.newWindow()),\n                    },\n                ],\n            ))\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/docking.service.ts",
    "content": "import { Injectable, NgZone, Inject } from '@angular/core'\nimport type { Display } from 'electron'\nimport { ConfigService, DockingService, Screen, PlatformService, BootstrapData, BOOTSTRAP_DATA } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\nimport { ElectronHostWindow, Bounds } from './hostWindow.service'\n\n@Injectable()\nexport class ElectronDockingService extends DockingService {\n    constructor (\n        private electron: ElectronService,\n        private config: ConfigService,\n        private zone: NgZone,\n        private hostWindow: ElectronHostWindow,\n        platform: PlatformService,\n        @Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,\n    ) {\n        super()\n        this.screensChanged$.subscribe(() => this.repositionWindow())\n        platform.displayMetricsChanged$.subscribe(() => this.repositionWindow())\n\n        electron.ipcRenderer.on('host:displays-changed', () => {\n            this.zone.run(() => this.screensChanged.next())\n        })\n    }\n\n    dock (): void {\n        const dockSide = this.config.store.appearance.dock\n\n        if (dockSide === 'off' || !this.bootstrapData.isMainWindow) {\n            this.hostWindow.setAlwaysOnTop(false)\n            return\n        }\n\n        let display = this.electron.screen.getAllDisplays()\n            .filter(x => x.id === this.config.store.appearance.dockScreen)[0]\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (!display) {\n            display = this.getCurrentScreen()\n        }\n\n        const newBounds: Bounds = { x: 0, y: 0, width: 0, height: 0 }\n\n        const fill = this.config.store.appearance.dockFill <= 1 ? this.config.store.appearance.dockFill : 1\n        const space = this.config.store.appearance.dockSpace <= 1 ? this.config.store.appearance.dockSpace : 1\n        const [minWidth, minHeight] = this.hostWindow.getWindow().getMinimumSize()\n\n        if (dockSide === 'left' || dockSide === 'right') {\n            newBounds.width = Math.max(minWidth, Math.round(fill * display.workArea.width))\n            newBounds.height = Math.round(display.workArea.height * space)\n        }\n        if (dockSide === 'top' || dockSide === 'bottom') {\n            newBounds.width = Math.round(display.workArea.width * space)\n            newBounds.height = Math.max(minHeight, Math.round(fill * display.workArea.height))\n        }\n        if (dockSide === 'right') {\n            newBounds.x = display.workArea.x + display.workArea.width - newBounds.width\n        } else if (dockSide === 'left') {\n            newBounds.x = display.workArea.x\n        } else {\n            newBounds.x = display.workArea.x + Math.round(display.workArea.width / 2 * (1 - space))\n        }\n        if (dockSide === 'bottom') {\n            newBounds.y = display.workArea.y + display.workArea.height - newBounds.height\n        } else if (dockSide === 'top') {\n            newBounds.y = display.workArea.y\n        } else {\n            newBounds.y = display.workArea.y + Math.round(display.workArea.height / 2 * (1 - space))\n        }\n\n        const alwaysOnTop = this.config.store.appearance.dockAlwaysOnTop\n\n        this.hostWindow.setAlwaysOnTop(alwaysOnTop)\n        setImmediate(() => {\n            this.hostWindow.setBounds(newBounds)\n        })\n    }\n\n    getScreens (): Screen[] {\n        const primaryDisplayID = this.electron.screen.getPrimaryDisplay().id\n        return this.electron.screen.getAllDisplays().sort((a, b) =>\n            a.bounds.x === b.bounds.x ? a.bounds.y - b.bounds.y : a.bounds.x - b.bounds.x,\n        ).map((display, index) => {\n            return {\n                ...display,\n                id: display.id,\n                name: display.id === primaryDisplayID ? 'Primary Display' : `Display ${index + 1}`,\n            }\n        })\n    }\n\n    private getCurrentScreen (): Display {\n        return this.electron.screen.getDisplayNearestPoint(this.electron.screen.getCursorScreenPoint())\n    }\n\n    private repositionWindow () {\n        const [x, y] = this.hostWindow.getWindow().getPosition()\n        for (const screen of this.electron.screen.getAllDisplays()) {\n            const bounds = screen.bounds\n            if (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height) {\n                return\n            }\n        }\n        const screen = this.electron.screen.getPrimaryDisplay()\n        this.hostWindow.getWindow().setPosition(screen.bounds.x, screen.bounds.y)\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/electron.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { App, IpcRenderer, Shell, Dialog, Clipboard, GlobalShortcut, Screen, AutoUpdater, TouchBar, BrowserWindow, Menu, MenuItem, PowerSaveBlocker, NativeTheme } from 'electron'\nimport * as remote from '@electron/remote'\n\nexport interface MessageBoxResponse {\n    response: number\n    checkboxChecked?: boolean\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ElectronService {\n    app: App\n    ipcRenderer: IpcRenderer\n    shell: Shell\n    dialog: Dialog\n    clipboard: Clipboard\n    globalShortcut: GlobalShortcut\n    screen: Screen\n    process: any\n    autoUpdater: AutoUpdater\n    powerSaveBlocker: PowerSaveBlocker\n    nativeTheme: NativeTheme\n    TouchBar: typeof TouchBar\n    BrowserWindow: typeof BrowserWindow\n    Menu: typeof Menu\n    MenuItem: typeof MenuItem\n\n    /** @hidden */\n    private constructor () {\n        const electron = require('electron')\n        this.shell = electron.shell\n        this.clipboard = electron.clipboard\n        this.ipcRenderer = electron.ipcRenderer\n\n        this.process = remote.getGlobal('process')\n        this.app = remote.app\n        this.screen = remote.screen\n        this.dialog = remote.dialog\n        this.globalShortcut = remote.globalShortcut\n        this.autoUpdater = remote.autoUpdater\n        this.powerSaveBlocker = remote.powerSaveBlocker\n        this.TouchBar = remote.TouchBar\n        this.BrowserWindow = remote.BrowserWindow\n        this.Menu = remote.Menu\n        this.MenuItem = remote.MenuItem\n        this.nativeTheme = remote.nativeTheme\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/fileProvider.service.ts",
    "content": "import { promises as fs } from 'fs'\nimport { Injectable } from '@angular/core'\nimport { FileProvider } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\nimport { ElectronHostWindow } from './hostWindow.service'\n\n@Injectable()\nexport class ElectronFileProvider extends FileProvider {\n    name = 'Filesystem'\n\n    constructor (\n        private electron: ElectronService,\n        private hostWindow: ElectronHostWindow,\n    ) {\n        super()\n    }\n\n    async selectAndStoreFile (description: string): Promise<string> {\n        const result = await this.electron.dialog.showOpenDialog(\n            this.hostWindow.getWindow(),\n            {\n                buttonLabel: `Select ${description}`,\n                properties: ['openFile', 'treatPackageAsDirectory'],\n            },\n        )\n        if (result.canceled || !result.filePaths.length) {\n            throw new Error('canceled')\n        }\n\n        return `file://${result.filePaths[0]}`\n    }\n\n    async retrieveFile (key: string): Promise<Buffer> {\n        if (key.startsWith('file://')) {\n            key = key.substring('file://'.length)\n        } else if (key.includes('://')) {\n            throw new Error('Incorrect type')\n        }\n        return fs.readFile(key, { encoding: null })\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/hostApp.service.ts",
    "content": "import { Injectable, NgZone, Injector } from '@angular/core'\nimport { isWindowsBuild, WIN_BUILD_FLUENT_BG_SUPPORTED, HostAppService, Platform, CLIHandler } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\n\n@Injectable({ providedIn: 'root' })\nexport class ElectronHostAppService extends HostAppService {\n    get platform (): Platform {\n        return this.configPlatform\n    }\n\n    get configPlatform (): Platform {\n        return {\n            win32: Platform.Windows,\n            darwin: Platform.macOS,\n            linux: Platform.Linux,\n        }[process.platform]\n    }\n\n    constructor (\n        private zone: NgZone,\n        private electron: ElectronService,\n        injector: Injector,\n    ) {\n        super(injector)\n\n        electron.ipcRenderer.on('host:preferences-menu', () => this.zone.run(() => this.settingsUIRequest.next()))\n\n        electron.ipcRenderer.on('cli', (_$event, argv: any, cwd: string, secondInstance: boolean) => this.zone.run(async () => {\n            const event = { argv, cwd, secondInstance }\n            this.logger.info('CLI arguments received:', event)\n\n            const cliHandlers = injector.get(CLIHandler) as unknown as CLIHandler[]\n            cliHandlers.sort((a, b) => b.priority - a.priority)\n\n            let handled = false\n            for (const handler of cliHandlers) {\n                if (handled && handler.firstMatchOnly) {\n                    continue\n                }\n                if (await handler.handle(event)) {\n                    this.logger.info('CLI handler matched:', handler.constructor.name)\n                    handled = true\n                }\n            }\n        }))\n\n        electron.ipcRenderer.on('host:config-change', () => this.zone.run(() => {\n            this.configChangeBroadcast.next()\n        }))\n\n        if (isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {\n            electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true)\n        }\n    }\n\n    newWindow (): void {\n        this.electron.ipcRenderer.send('app:new-window')\n    }\n\n    async saveConfig (data: string): Promise<void> {\n        await this.electron.ipcRenderer.invoke('app:save-config', data)\n    }\n\n    emitReady (): void {\n        this.electron.ipcRenderer.send('app:ready')\n    }\n\n    relaunch (): void {\n        const isPortable = !!process.env.PORTABLE_EXECUTABLE_FILE\n        if (isPortable) {\n            this.electron.app.relaunch({ execPath: process.env.PORTABLE_EXECUTABLE_FILE })\n        } else {\n            let args: string[] = []\n            if (this.platform === Platform.Linux) {\n                args = ['--no-sandbox']\n            }\n            this.electron.app.relaunch({ args })\n        }\n        this.electron.app.exit()\n    }\n\n    quit (): void {\n        this.logger.info('Quitting')\n        this.electron.app.quit()\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/hostWindow.service.ts",
    "content": "import type { BrowserWindow, TouchBar } from 'electron'\nimport { Injectable, Inject, NgZone } from '@angular/core'\nimport { BootstrapData, BOOTSTRAP_DATA, HostWindowService } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\nexport interface Bounds {\n    x: number\n    y: number\n    width: number\n    height: number\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ElectronHostWindow extends HostWindowService {\n    get isFullscreen (): boolean { return this._isFullscreen }\n\n    private _isFullscreen = false\n    private _isMaximized = false\n\n    constructor (\n        zone: NgZone,\n        private electron: ElectronService,\n        @Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,\n    ) {\n        super()\n        electron.ipcRenderer.on('host:window-enter-full-screen', () => zone.run(() => {\n            this._isFullscreen = true\n        }))\n\n        electron.ipcRenderer.on('host:window-leave-full-screen', () => zone.run(() => {\n            this._isFullscreen = false\n        }))\n\n        electron.ipcRenderer.on('host:window-shown', () => zone.run(() => this.windowShown.next()))\n\n        electron.ipcRenderer.on('host:window-close-request', () => zone.run(() => {\n            this.windowCloseRequest.next()\n        }))\n\n        electron.ipcRenderer.on('host:window-moved', () => zone.run(() => {\n            this.windowMoved.next()\n        }))\n\n        electron.ipcRenderer.on('host:window-focused', () => zone.run(() => {\n            this.windowFocused.next()\n        }))\n\n        electron.ipcRenderer.on('host:became-main-window', () => zone.run(() => {\n            this.bootstrapData.isMainWindow = true\n        }))\n\n        electron.ipcRenderer.on('host:window-maximized', () => zone.run(() => {\n            this._isMaximized = true\n        }))\n\n        electron.ipcRenderer.on('host:window-unmaximized', () => zone.run(() => {\n            this._isMaximized = false\n        }))\n\n        this._isMaximized = this.getWindow().isMaximized()\n    }\n\n    getWindow (): BrowserWindow {\n        return this.electron.BrowserWindow.fromId(this.bootstrapData.windowID)!\n    }\n\n    openDevTools (): void {\n        this.getWindow().webContents.openDevTools({ mode: 'undocked' })\n    }\n\n    reload (): void {\n        this.getWindow().reload()\n    }\n\n    setTitle (title?: string): void {\n        this.electron.ipcRenderer.send('window-set-title', title ?? 'Tabby')\n    }\n\n    toggleFullscreen (): void {\n        this.getWindow().setFullScreen(!this._isFullscreen)\n    }\n\n    minimize (): void {\n        this.electron.ipcRenderer.send('window-minimize')\n    }\n\n    isMaximized (): boolean {\n        return this._isMaximized\n    }\n\n    toggleMaximize (): void {\n        if (this.getWindow().isMaximized()) {\n            this.getWindow().unmaximize()\n        } else {\n            this.getWindow().maximize()\n        }\n    }\n\n    close (): void {\n        this.electron.ipcRenderer.send('window-close')\n    }\n\n    setBounds (bounds: Bounds): void {\n        this.electron.ipcRenderer.send('window-set-bounds', bounds)\n    }\n\n    setAlwaysOnTop (flag: boolean): void {\n        this.electron.ipcRenderer.send('window-set-always-on-top', flag)\n    }\n\n    setTouchBar (touchBar: TouchBar): void {\n        this.getWindow().setTouchBar(touchBar)\n    }\n\n    setTrafficLightPosition (x: number, y: number): void {\n        this.electron.ipcRenderer.send('window-set-traffic-light-position', x, y)\n    }\n\n    setOpacity (opacity: number): void {\n        this.electron.ipcRenderer.send('window-set-opacity', opacity)\n    }\n\n    setProgressBar (value: number): void {\n        this.electron.ipcRenderer.send('window-set-progress-bar', value)\n    }\n\n    bringToFront (): void {\n        this.electron.ipcRenderer.send('window-bring-to-front')\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/log.service.ts",
    "content": "import * as fs from 'fs'\nimport * as path from 'path'\nimport * as winston from 'winston'\nimport { Injectable } from '@angular/core'\nimport { ConsoleLogger, Logger } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\nconst initializeWinston = (electron: ElectronService) => {\n    const logDirectory = electron.app.getPath('userData')\n    // eslint-disable-next-line\n    const winston = require('winston')\n\n    if (!fs.existsSync(logDirectory)) {\n        fs.mkdirSync(logDirectory)\n    }\n\n    return winston.createLogger({\n        transports: [\n            new winston.transports.File({\n                level: 'debug',\n                filename: path.join(logDirectory, 'log.txt'),\n                format: winston.format.simple(),\n                handleExceptions: false,\n                maxsize: 5242880,\n                maxFiles: 5,\n            }),\n        ],\n        exitOnError: false,\n    })\n}\n\nexport class WinstonAndConsoleLogger extends ConsoleLogger {\n    constructor (private winstonLogger: winston.Logger, name: string) {\n        super(name)\n    }\n\n    protected doLog (level: string, ...args: any[]): void {\n        super.doLog(level, ...args)\n        this.winstonLogger[level](...args)\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ElectronLogService {\n    private log: winston.Logger\n\n    /** @hidden */\n    constructor (electron: ElectronService) {\n        this.log = initializeWinston(electron)\n    }\n\n    create (name: string): Logger {\n        return new WinstonAndConsoleLogger(this.log, name)\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/platform.service.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'fs/promises'\nimport * as fsSync from 'fs'\nimport * as os from 'os'\nimport promiseIpc, { RendererProcessType } from 'electron-promise-ipc'\nimport { execFile } from 'mz/child_process'\nimport { Injectable, NgZone } from '@angular/core'\nimport { PlatformService, ClipboardContent, Platform, MenuItemOptions, MessageBoxOptions, MessageBoxResult, DirectoryUpload, FileUpload, FileDownload, DirectoryDownload, FileUploadOptions, wrapPromise, TranslateService, FileTransfer, PlatformTheme } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\nimport { ElectronHostWindow } from './hostWindow.service'\nimport { ShellIntegrationService } from './shellIntegration.service'\nimport { ElectronHostAppService } from './hostApp.service'\nimport { configPath } from '../../../app/lib/config'\nconst fontManager = require('fontmanager-redux') // eslint-disable-line\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    // eslint-disable-next-line no-var\n    var windowsProcessTreeNative = require('@tabby-gang/windows-process-tree/build/Release/windows_process_tree.node')\n    // eslint-disable-next-line no-var\n    var wnr = require('windows-native-registry')\n} catch { }\n\n@Injectable({ providedIn: 'root' })\nexport class ElectronPlatformService extends PlatformService {\n    supportsWindowControls = true\n    private configPath: string\n\n    constructor (\n        private hostApp: ElectronHostAppService,\n        private hostWindow: ElectronHostWindow,\n        private electron: ElectronService,\n        private zone: NgZone,\n        private shellIntegration: ShellIntegrationService,\n        private translate: TranslateService,\n    ) {\n        super()\n        this.configPath = configPath\n\n        electron.ipcRenderer.on('host:display-metrics-changed', () => {\n            this.zone.run(() => this.displayMetricsChanged.next())\n        })\n\n        electron.nativeTheme.on('updated', () => {\n            this.zone.run(() => this.themeChanged.next(this.getTheme()))\n        })\n    }\n\n    async getAllFiles (dir: string, root: DirectoryUpload): Promise<DirectoryUpload> {\n        const items = await fs.readdir(dir, { withFileTypes: true })\n        for (const item of items) {\n            if (item.isDirectory()) {\n                root.pushChildren(await this.getAllFiles(path.join(dir, item.name), new DirectoryUpload(item.name)))\n            } else {\n                const file = new ElectronFileUpload(path.join(dir, item.name), this.electron)\n                root.pushChildren(file)\n                await wrapPromise(this.zone, file.open())\n                this.fileTransferStarted.next(file)\n            }\n        }\n        return root\n    }\n\n    readClipboard (): string {\n        return this.electron.clipboard.readText()\n    }\n\n    setClipboard (content: ClipboardContent): void {\n        require('@electron/remote').clipboard.write(content)\n    }\n\n    async installPlugin (name: string, version: string): Promise<void> {\n        await (promiseIpc as RendererProcessType).send('plugin-manager:install', name, version)\n    }\n\n    async uninstallPlugin (name: string): Promise<void> {\n        await (promiseIpc as RendererProcessType).send('plugin-manager:uninstall', name)\n    }\n\n    async isProcessRunning (name: string): Promise<boolean> {\n        if (this.hostApp.platform === Platform.Windows) {\n            return new Promise<boolean>(resolve => {\n                windowsProcessTreeNative.getProcessList(list => { // eslint-disable-line block-scoped-var\n                    resolve(list.some(x => x.name === name))\n                }, 0)\n            })\n        } else {\n            throw new Error('Not supported')\n        }\n    }\n\n    getWinSCPPath (): string|null {\n        const key = wnr.getRegistryKey(wnr.HK.CR, 'WinSCP.Url\\\\DefaultIcon')\n        if (key?.['']) {\n            let detectedPath = key[''].value?.split(',')[0]\n            detectedPath = detectedPath?.substring(1, detectedPath.length - 1)\n            return detectedPath\n        }\n        return null\n    }\n\n    async exec (app: string, argv: string[]): Promise<void> {\n        await execFile(app, argv)\n    }\n\n    isShellIntegrationSupported (): boolean {\n        return this.hostApp.platform !== Platform.Linux\n    }\n\n    async isShellIntegrationInstalled (): Promise<boolean> {\n        return this.shellIntegration.isInstalled()\n    }\n\n    async installShellIntegration (): Promise<void> {\n        await this.shellIntegration.install()\n    }\n\n    async uninstallShellIntegration (): Promise<void> {\n        await this.shellIntegration.remove()\n    }\n\n    async loadConfig (): Promise<string> {\n        if (fsSync.existsSync(this.configPath)) {\n            return fs.readFile(this.configPath, 'utf8')\n        } else {\n            return ''\n        }\n    }\n\n    async saveConfig (content: string): Promise<void> {\n        await this.hostApp.saveConfig(content)\n    }\n\n    getConfigPath (): string|null {\n        return this.configPath\n    }\n\n    showItemInFolder (p: string): void {\n        this.electron.shell.showItemInFolder(p)\n    }\n\n    openExternal (url: string): void {\n        this.electron.shell.openExternal(url)\n    }\n\n    openPath (p: string): void {\n        this.electron.shell.openPath(p)\n    }\n\n    getOSRelease (): string {\n        return os.release()\n    }\n\n    getAppVersion (): string {\n        return this.electron.app.getVersion()\n    }\n\n    async listFonts (): Promise<string[]> {\n        if (this.hostApp.platform === Platform.Windows || this.hostApp.platform === Platform.macOS) {\n            let fonts = await new Promise<any[]>(resolve => fontManager.getAvailableFonts(resolve))\n            fonts = fonts.map(x => x.family.trim())\n            return fonts\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        if (this.hostApp.platform === Platform.Linux) {\n            const stdout = (await execFile('fc-list', [':spacing=mono']))[0]\n            const fonts = stdout.toString()\n                .split('\\n')\n                .filter(x => !!x)\n                .map(x => x.split(':')[1].trim())\n                .map(x => x.split(',')[0].trim())\n            fonts.sort()\n            return fonts\n        }\n        return []\n    }\n\n    popupContextMenu (menu: MenuItemOptions[], _event?: MouseEvent): void {\n        this.electron.Menu.buildFromTemplate(menu.map(item => this.rewrapMenuItemOptions(item))).popup({})\n    }\n\n    rewrapMenuItemOptions (menu: MenuItemOptions): MenuItemOptions {\n        return {\n            ...menu,\n            click: () => {\n                this.zone.run(() => {\n                    menu.click?.()\n                })\n            },\n            submenu: menu.submenu ? menu.submenu.map(x => this.rewrapMenuItemOptions(x)) : undefined,\n        }\n    }\n\n    async showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult> {\n        return this.electron.dialog.showMessageBox(this.hostWindow.getWindow(), options)\n    }\n\n    quit (): void {\n        this.electron.app.exit(0)\n    }\n\n    async startUpload (options?: FileUploadOptions, paths?: string[]): Promise<FileUpload[]> {\n        options ??= { multiple: false }\n\n        const properties: any[] = ['openFile', 'treatPackageAsDirectory']\n        if (options.multiple) {\n            properties.push('multiSelections')\n        }\n\n        if (!paths) {\n            const result = await this.electron.dialog.showOpenDialog(\n                this.hostWindow.getWindow(),\n                {\n                    buttonLabel: this.translate.instant('Select'),\n                    properties,\n                },\n            )\n            if (result.canceled) {\n                return []\n            }\n            paths = result.filePaths\n        }\n\n        return Promise.all(paths.map(async p => {\n            const transfer = new ElectronFileUpload(p, this.electron)\n            await wrapPromise(this.zone, transfer.open())\n            this.fileTransferStarted.next(transfer)\n            return transfer\n        }))\n    }\n\n    async startUploadDirectory (paths?: string[]): Promise<DirectoryUpload> {\n        const properties: any[] = ['openFile', 'treatPackageAsDirectory', 'openDirectory']\n\n        if (!paths) {\n            const result = await this.electron.dialog.showOpenDialog(\n                this.hostWindow.getWindow(),\n                {\n                    buttonLabel: this.translate.instant('Select'),\n                    properties,\n                },\n            )\n            if (result.canceled) {\n                return new DirectoryUpload()\n            }\n            paths = result.filePaths\n        }\n\n        const root = new DirectoryUpload()\n        root.pushChildren(await this.getAllFiles(paths[0].split(path.sep).join(path.posix.sep), new DirectoryUpload(path.basename(paths[0]))))\n        return root\n    }\n\n    async startDownload (name: string, mode: number, size: number, filePath?: string): Promise<FileDownload|null> {\n        if (!filePath) {\n            const result = await this.electron.dialog.showSaveDialog(\n                this.hostWindow.getWindow(),\n                {\n                    defaultPath: name,\n                },\n            )\n            if (!result.filePath) {\n                return null\n            }\n            filePath = result.filePath\n        }\n        const transfer = new ElectronFileDownload(filePath, mode, size, this.electron)\n        await wrapPromise(this.zone, transfer.open())\n        this.fileTransferStarted.next(transfer)\n        return transfer\n    }\n\n    async startDownloadDirectory (name: string, estimatedSize?: number): Promise<DirectoryDownload|null> {\n        const selectedFolder = await this.pickDirectory(this.translate.instant('Select destination folder for {name}', { name }), this.translate.instant('Download here'))\n        if (!selectedFolder) {\n            return null\n        }\n\n        let downloadPath = path.join(selectedFolder, name)\n        let counter = 1\n        while (fsSync.existsSync(downloadPath)) {\n            downloadPath = path.join(selectedFolder, `${name} (${counter})`)\n            counter++\n        }\n\n        const transfer = new ElectronDirectoryDownload(downloadPath, name, estimatedSize ?? 0, this.electron, this.zone)\n        await wrapPromise(this.zone, transfer.open())\n        this.fileTransferStarted.next(transfer)\n        return transfer\n    }\n\n    _registerFileTransfer (transfer: FileTransfer): void {\n        this.fileTransferStarted.next(transfer)\n    }\n\n    setErrorHandler (handler: (_: any) => void): void {\n        this.electron.ipcRenderer.on('uncaughtException', (_$event, err) => {\n            handler(err)\n        })\n    }\n\n    async pickDirectory (title?: string, buttonLabel?: string): Promise<string | null> {\n        const result = await this.electron.dialog.showOpenDialog(\n            this.hostWindow.getWindow(),\n            {\n                title,\n                buttonLabel,\n                properties: ['openDirectory', 'showHiddenFiles'],\n            },\n        )\n        if (result.canceled || !result.filePaths.length) {\n            return null\n        }\n        return result.filePaths[0]\n    }\n\n    getTheme (): PlatformTheme {\n        if (this.electron.nativeTheme.shouldUseDarkColors) {\n            return 'dark'\n        } else {\n            return 'light'\n        }\n    }\n}\n\nclass ElectronFileUpload extends FileUpload {\n    private size: number\n    private mode: number\n    private file: fs.FileHandle\n    private buffer: Uint8Array\n    private powerSaveBlocker = 0\n\n    constructor (private filePath: string, private electron: ElectronService) {\n        super()\n        this.buffer = new Uint8Array(256 * 1024)\n        this.powerSaveBlocker = electron.powerSaveBlocker.start('prevent-app-suspension')\n    }\n\n    async open (): Promise<void> {\n        const stat = await fs.stat(this.filePath)\n        this.size = stat.size\n        this.mode = stat.mode\n        this.setTotalSize(this.size)\n        this.file = await fs.open(this.filePath, 'r')\n    }\n\n    getName (): string {\n        return path.basename(this.filePath)\n    }\n\n    getMode (): number {\n        return this.mode\n    }\n\n    getSize (): number {\n        return this.size\n    }\n\n    async read (): Promise<Uint8Array> {\n        const result = await this.file.read(this.buffer, 0, this.buffer.length, null)\n        this.increaseProgress(result.bytesRead)\n        if (this.getCompletedBytes() >= this.getSize()) {\n            this.setCompleted(true)\n        }\n        return this.buffer.slice(0, result.bytesRead)\n    }\n\n    close (): void {\n        this.electron.powerSaveBlocker.stop(this.powerSaveBlocker)\n        this.file.close()\n    }\n}\n\nclass ElectronFileDownload extends FileDownload {\n    private file: fs.FileHandle\n    private powerSaveBlocker = 0\n\n    constructor (\n        private filePath: string,\n        private mode: number,\n        private size: number,\n        private electron: ElectronService,\n    ) {\n        super()\n        this.powerSaveBlocker = electron.powerSaveBlocker.start('prevent-app-suspension')\n        this.setTotalSize(size)\n    }\n\n    async open (): Promise<void> {\n        this.file = await fs.open(this.filePath, 'w', this.mode)\n    }\n\n    getName (): string {\n        return path.basename(this.filePath)\n    }\n\n    getSize (): number {\n        return this.size\n    }\n\n    async write (buffer: Uint8Array): Promise<void> {\n        let pos = 0\n        while (pos < buffer.length) {\n            const result = await this.file.write(buffer, pos, buffer.length - pos, null)\n            this.increaseProgress(result.bytesWritten)\n            pos += result.bytesWritten\n        }\n        if (this.getCompletedBytes() >= this.getSize()) {\n            this.setCompleted(true)\n        }\n    }\n\n    close (): void {\n        this.electron.powerSaveBlocker.stop(this.powerSaveBlocker)\n        this.file.close()\n    }\n}\n\nclass ElectronDirectoryDownload extends DirectoryDownload {\n    private powerSaveBlocker = 0\n\n    constructor (\n        private basePath: string,\n        private name: string,\n        estimatedSize: number,\n        private electron: ElectronService,\n        private zone: NgZone,\n    ) {\n        super()\n        this.powerSaveBlocker = electron.powerSaveBlocker.start('prevent-app-suspension')\n        this.setTotalSize(estimatedSize)\n    }\n\n    async open (): Promise<void> {\n        await fs.mkdir(this.basePath, { recursive: true })\n    }\n\n    getName (): string {\n        return this.name\n    }\n\n    getSize (): number {\n        return this.getTotalSize()\n    }\n\n    async createDirectory (relativePath: string): Promise<void> {\n        const fullPath = path.join(this.basePath, relativePath)\n        await fs.mkdir(fullPath, { recursive: true })\n    }\n\n    async createFile (relativePath: string, mode: number, size: number): Promise<FileDownload> {\n        const fullPath = path.join(this.basePath, relativePath)\n        await fs.mkdir(path.dirname(fullPath), { recursive: true })\n\n        const fileDownload = new ElectronFileDownload(fullPath, mode, size, this.electron)\n        await wrapPromise(this.zone, fileDownload.open())\n        return fileDownload\n    }\n\n    close (): void {\n        this.electron.powerSaveBlocker.stop(this.powerSaveBlocker)\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/shellIntegration.service.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'mz/fs'\nimport { exec } from 'mz/child_process'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch (_) { }\n\n@Injectable({ providedIn: 'root' })\nexport class ShellIntegrationService {\n    private automatorWorkflows = ['Open Tabby here.workflow', 'Paste path into Tabby.workflow']\n    private automatorWorkflowsLocation: string\n    private automatorWorkflowsDestination: string\n    private registryKeys = [\n        {\n            path: 'Software\\\\Classes\\\\Directory\\\\Background\\\\shell\\\\Tabby',\n            value: 'Open Tabby here',\n            command: 'open \"%V\"',\n        },\n        {\n            path: 'SOFTWARE\\\\Classes\\\\Directory\\\\shell\\\\Tabby',\n            value: 'Open Tabby here',\n            command: 'open \"%V\"',\n        },\n        {\n            path: 'Software\\\\Classes\\\\*\\\\shell\\\\Tabby',\n            value: 'Paste path into Tabby',\n            command: 'paste \"%V\"',\n        },\n    ]\n\n    private constructor (\n        private electron: ElectronService,\n        private hostApp: HostAppService,\n    ) {\n        if (this.hostApp.platform === Platform.macOS) {\n            this.automatorWorkflowsLocation = path.join(\n                path.dirname(path.dirname(this.electron.app.getPath('exe'))),\n                'Resources',\n                'extras',\n                'automator-workflows',\n            )\n            this.automatorWorkflowsDestination = path.join(process.env.HOME!, 'Library', 'Services')\n        }\n        this.updatePaths()\n    }\n\n    async isInstalled (): Promise<boolean> {\n        if (this.hostApp.platform === Platform.macOS) {\n            return fs.exists(path.join(this.automatorWorkflowsDestination, this.automatorWorkflows[0]))\n        } else if (this.hostApp.platform === Platform.Windows) {\n            return !!wnr.getRegistryKey(wnr.HK.CU, this.registryKeys[0].path)\n        }\n        return true\n    }\n\n    async install (): Promise<void> {\n        const exe: string = process.env.PORTABLE_EXECUTABLE_FILE ?? this.electron.app.getPath('exe')\n        if (this.hostApp.platform === Platform.macOS) {\n            for (const wf of this.automatorWorkflows) {\n                await exec(`cp -r \"${this.automatorWorkflowsLocation}/${wf}\" \"${this.automatorWorkflowsDestination}\"`)\n            }\n        } else if (this.hostApp.platform === Platform.Windows) {\n            for (const registryKey of this.registryKeys) {\n                wnr.createRegistryKey(wnr.HK.CU, registryKey.path)\n                wnr.createRegistryKey(wnr.HK.CU, registryKey.path + '\\\\command')\n                wnr.setRegistryValue(wnr.HK.CU, registryKey.path, '', wnr.REG.SZ, registryKey.value)\n                wnr.setRegistryValue(wnr.HK.CU, registryKey.path, 'Icon', wnr.REG.SZ, exe)\n                wnr.setRegistryValue(wnr.HK.CU, registryKey.path + '\\\\command', '', wnr.REG.SZ, exe + ' ' + registryKey.command)\n            }\n\n            if (wnr.getRegistryKey(wnr.HK.CU, 'Software\\\\Classes\\\\Directory\\\\Background\\\\shell\\\\Open Tabby here')) {\n                wnr.deleteRegistryKey(wnr.HK.CU, 'Software\\\\Classes\\\\Directory\\\\Background\\\\shell\\\\Open Tabby here')\n            }\n            if (wnr.getRegistryKey(wnr.HK.CU, 'Software\\\\Classes\\\\*\\\\shell\\\\Paste path into Tabby')) {\n                wnr.deleteRegistryKey(wnr.HK.CU, 'Software\\\\Classes\\\\*\\\\shell\\\\Paste path into Tabby')\n            }\n        }\n    }\n\n    async remove (): Promise<void> {\n        if (this.hostApp.platform === Platform.macOS) {\n            for (const wf of this.automatorWorkflows) {\n                await exec(`rm -rf \"${this.automatorWorkflowsDestination}/${wf}\"`)\n            }\n        } else if (this.hostApp.platform === Platform.Windows) {\n            for (const registryKey of this.registryKeys) {\n                wnr.deleteRegistryKey(wnr.HK.CU, registryKey.path)\n            }\n        }\n    }\n\n    private async updatePaths (): Promise<void> {\n        // Update paths in case of an update\n        if (this.hostApp.platform === Platform.Windows) {\n            if (await this.isInstalled()) {\n                await this.install()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/touchbar.service.ts",
    "content": "import deepEqual from 'deep-equal'\nimport { Subject, distinctUntilChanged, map } from 'rxjs'\nimport { ipcRenderer } from 'electron'\nimport { Injectable, NgZone } from '@angular/core'\nimport { AppService, HostAppService, Platform } from 'tabby-core'\n\n/** @hidden */\n@Injectable({ providedIn: 'root' })\nexport class TouchbarService {\n    private touchbarState$ = new Subject<any>()\n\n    private constructor (\n        private app: AppService,\n        private hostApp: HostAppService,\n        private zone: NgZone,\n    ) {\n        if (this.hostApp.platform !== Platform.macOS) {\n            return\n        }\n        app.tabsChanged$.subscribe(() => this.update())\n        app.activeTabChange$.subscribe(() => this.update())\n\n        app.tabOpened$.subscribe(tab => {\n            tab.titleChange$.subscribe(() => this.update())\n            tab.activity$.pipe(\n                map(x => !x || tab === app.activeTab),\n                distinctUntilChanged(),\n            ).subscribe(() => this.update())\n        })\n\n        ipcRenderer.on('touchbar-selection', (_event, index) => this.zone.run(() => {\n            this.app.selectTab(this.app.tabs[index])\n        }))\n\n        this.touchbarState$.pipe(distinctUntilChanged(deepEqual)).subscribe(state => {\n            ipcRenderer.send('window-set-touch-bar', ...state)\n        })\n    }\n\n    update (): void {\n        if (this.hostApp.platform !== Platform.macOS) {\n            return\n        }\n\n        const tabSegments = this.app.tabs.map(tab => ({\n            label: this.shortenTitle(tab.title),\n            hasActivity: this.app.activeTab !== tab && tab.hasActivity,\n        }))\n\n        this.touchbarState$.next([tabSegments, this.app.activeTab ? this.app.tabs.indexOf(this.app.activeTab) : undefined])\n    }\n\n    private shortenTitle (title: string): string {\n        if (title.length > 15) {\n            title = title.substring(0, 15) + '...'\n        }\n        return title\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/uac.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport * as path from 'path'\nimport { WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild } from 'tabby-core'\nimport { SessionOptions, UACService } from 'tabby-local'\nimport { ElectronService } from './electron.service'\n\n/** @hidden */\n@Injectable()\nexport class ElectronUACService extends UACService {\n    constructor (\n        private electron: ElectronService,\n    ) {\n        super()\n        this.isAvailable = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED)\n    }\n\n    patchSessionOptionsForUAC (sessionOptions: SessionOptions): SessionOptions {\n        let helperPath = path.join(\n            path.dirname(this.electron.app.getPath('exe')),\n            'resources',\n            'extras',\n            'UAC.exe',\n        )\n\n        if (process.env.TABBY_DEV) {\n            helperPath = path.join(\n                path.dirname(this.electron.app.getPath('exe')),\n                '..', '..', '..',\n                'extras',\n                'UAC.exe',\n            )\n        }\n\n        const options = { ...sessionOptions }\n        options.args = [options.command, ...options.args]\n        options.command = helperPath\n        return options\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/services/updater.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport axios from 'axios'\n\nimport { Logger, LogService, ConfigService, UpdaterService, PlatformService, TranslateService } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\nconst UPDATES_URL = 'https://api.github.com/repos/eugeny/tabby/releases/latest'\n\n@Injectable()\nexport class ElectronUpdaterService extends UpdaterService {\n    private logger: Logger\n    private downloaded: Promise<boolean>\n    private electronUpdaterAvailable = true\n    private updateURL: string\n\n    constructor (\n        log: LogService,\n        config: ConfigService,\n        private translate: TranslateService,\n        private platform: PlatformService,\n        private electron: ElectronService,\n    ) {\n        super()\n        this.logger = log.create('updater')\n\n        if (process.platform === 'linux' || process.env.PORTABLE_EXECUTABLE_FILE) {\n            this.electronUpdaterAvailable = false\n            return\n        }\n\n        this.electron.ipcRenderer.on('updater:update-available', () => {\n            this.logger.info('Update available')\n        })\n\n        this.electron.ipcRenderer.on('updater:update-not-available', () => {\n            this.logger.info('No updates')\n        })\n\n        this.electron.ipcRenderer.on('updater:error', err => {\n            this.logger.error(err)\n            this.electronUpdaterAvailable = false\n        })\n\n        this.downloaded = new Promise<boolean>(resolve => {\n            this.electron.ipcRenderer.once('updater:update-downloaded', () => resolve(true))\n        })\n\n        config.ready$.toPromise().then(() => {\n            if (config.store.enableAutomaticUpdates && this.electronUpdaterAvailable && !process.env.TABBY_DEV) {\n                this.logger.debug('Checking for updates')\n                try {\n                    this.electron.ipcRenderer.send('updater:check-for-updates')\n                } catch (e) {\n                    this.electronUpdaterAvailable = false\n                    this.logger.info('Electron updater unavailable, falling back', e)\n                }\n            }\n        })\n    }\n\n    async check (): Promise<boolean> {\n        if (this.electronUpdaterAvailable) {\n            return new Promise((resolve, reject) => {\n                // eslint-disable-next-line @typescript-eslint/init-declarations, prefer-const\n                let cancel\n                const onNoUpdate = () => {\n                    cancel()\n                    resolve(false)\n                }\n                const onUpdate = () => {\n                    cancel()\n                    resolve(this.downloaded)\n                }\n                const onError = (err) => {\n                    cancel()\n                    reject(err)\n                }\n                cancel = () => {\n                    this.electron.ipcRenderer.off('updater:error', onError)\n                    this.electron.ipcRenderer.off('updater:update-not-available', onNoUpdate)\n                    this.electron.ipcRenderer.off('updater:update-available', onUpdate)\n                }\n                this.electron.ipcRenderer.on('updater:error', onError)\n                this.electron.ipcRenderer.on('updater:update-not-available', onNoUpdate)\n                this.electron.ipcRenderer.on('updater:update-available', onUpdate)\n                try {\n                    this.electron.ipcRenderer.send('updater:check-for-updates')\n                } catch (e) {\n                    this.electronUpdaterAvailable = false\n                    this.logger.info('Electron updater unavailable, falling back', e)\n                }\n            })\n\n            this.electron.ipcRenderer.on('updater:update-available', () => {\n                this.logger.info('Update available')\n            })\n\n            this.electron.ipcRenderer.once('updater:update-not-available', () => {\n                this.logger.info('No updates')\n            })\n\n        } else {\n            this.logger.debug('Checking for updates through fallback method.')\n            const response = await axios.get(UPDATES_URL)\n            const data = response.data\n            const version = data.tag_name.substring(1)\n            if (this.electron.app.getVersion() !== version) {\n                this.logger.info('Update available')\n                this.updateURL = data.html_url\n                return true\n            }\n            this.logger.info('No updates')\n            return false\n        }\n        return this.downloaded\n    }\n\n    async update (): Promise<void> {\n        if (!this.electronUpdaterAvailable) {\n            await this.electron.shell.openExternal(this.updateURL)\n        } else {\n            if ((await this.platform.showMessageBox(\n                {\n                    type: 'warning',\n                    message: this.translate.instant('Installing the update will close all tabs and restart Tabby.'),\n                    buttons: [\n                        this.translate.instant('Update'),\n                        this.translate.instant('Cancel'),\n                    ],\n                    defaultId: 0,\n                    cancelId: 1,\n                },\n            )).response === 0) {\n                await this.downloaded\n                this.electron.ipcRenderer.send('updater:quit-and-install')\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/sftpContextMenu.ts",
    "content": "import * as tmp from 'tmp-promise'\nimport * as path from 'path'\nimport * as fs from 'fs'\nimport { Subject, debounceTime, debounce } from 'rxjs'\nimport { Injectable } from '@angular/core'\nimport { MenuItemOptions, TranslateService } from 'tabby-core'\nimport { SFTPFile, SFTPPanelComponent, SFTPContextMenuItemProvider, SFTPSession } from 'tabby-ssh'\nimport { ElectronPlatformService } from './services/platform.service'\n\n\n/** @hidden */\n@Injectable()\nexport class EditSFTPContextMenu extends SFTPContextMenuItemProvider {\n    weight = 0\n\n    constructor (\n        private translate: TranslateService,\n        private platform: ElectronPlatformService,\n    ) {\n        super()\n    }\n\n    async getItems (item: SFTPFile, panel: SFTPPanelComponent): Promise<MenuItemOptions[]> {\n        const items: MenuItemOptions[] = [\n            {\n                click: () => this.platform.setClipboard({\n                    text: item.fullPath,\n                }),\n                label: this.translate.instant('Copy full path'),\n            },\n        ]\n        if (!item.isDirectory) {\n            items.push({\n                click: () => this.edit(item, panel.sftp),\n                label: this.translate.instant('Edit locally'),\n            })\n        }\n        return items\n    }\n\n    private async edit (item: SFTPFile, sftp: SFTPSession) {\n        const tempDir = (await tmp.dir({ unsafeCleanup: true })).path\n        const tempPath = path.join(tempDir, item.name)\n        const transfer = await this.platform.startDownload(item.name, item.mode, item.size, tempPath)\n        if (!transfer) {\n            return\n        }\n        await sftp.download(item.fullPath, transfer)\n        this.platform.openPath(tempPath)\n\n        const events = new Subject<string>()\n        fs.chmodSync(tempPath, 0o700)\n\n        // skip the first burst of events\n        setTimeout(() => {\n            const watcher = fs.watch(tempPath, event => events.next(event))\n            events.pipe(debounceTime(1000), debounce(async event => {\n                if (event === 'rename') {\n                    watcher.close()\n                }\n                const upload = await this.platform.startUpload({ multiple: false }, [tempPath])\n                if (!upload.length) {\n                    return\n                }\n                await sftp.upload(item.fullPath, upload[0])\n                await sftp.chmod(item.fullPath, item.mode)\n            })).subscribe()\n            watcher.on('close', () => events.complete())\n            sftp.closed$.subscribe(() => watcher.close())\n        }, 1000)\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/cmder.ts",
    "content": "import * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/** @hidden */\n@Injectable()\nexport class CmderShellProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        if (!process.env.CMDER_ROOT) {\n            return []\n        }\n\n        return [\n            {\n                id: 'cmder',\n                name: 'Cmder',\n                command: 'cmd.exe',\n                args: [\n                    '/k',\n                    path.join(process.env.CMDER_ROOT, 'vendor', 'init.bat'),\n                ],\n                icon: require('../icons/cmder.svg'),\n                env: {\n                    TERM: 'cygwin',\n                },\n            },\n            {\n                id: 'cmderps',\n                name: 'Cmder PowerShell',\n                command: 'powershell.exe',\n                args: [\n                    '-ExecutionPolicy',\n                    'Bypass',\n                    '-nologo',\n                    '-noprofile',\n                    '-noexit',\n                    '-command',\n                    `Invoke-Expression '. ''${path.join(process.env.CMDER_ROOT, 'vendor', 'profile.ps1')}'''`,\n                ],\n                icon: require('../icons/cmder-powershell.svg'),\n                env: {},\n            },\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/cygwin32.ts",
    "content": "import * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\n/** @hidden */\n@Injectable()\nexport class Cygwin32ShellProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const cygwinPath = wnr.getRegistryValue(wnr.HK.LM, 'Software\\\\WOW6432Node\\\\Cygwin\\\\setup', 'rootdir')\n\n        if (!cygwinPath) {\n            return []\n        }\n\n        return [{\n            id: 'cygwin32',\n            name: 'Cygwin (32 bit)',\n            command: path.join(cygwinPath, 'bin', 'bash.exe'),\n            args: ['--login', '-i'],\n            icon: require('../icons/cygwin.svg'),\n            env: {\n                TERM: 'cygwin',\n            },\n        }]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/cygwin64.ts",
    "content": "import * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\n/** @hidden */\n@Injectable()\nexport class Cygwin64ShellProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const cygwinPath = wnr.getRegistryValue(wnr.HK.LM, 'Software\\\\Cygwin\\\\setup', 'rootdir')\n\n        if (!cygwinPath) {\n            return []\n        }\n\n        return [{\n            id: 'cygwin64',\n            name: 'Cygwin',\n            command: path.join(cygwinPath, 'bin', 'bash.exe'),\n            args: ['--login', '-i'],\n            icon: require('../icons/cygwin.svg'),\n            env: {\n                TERM: 'cygwin',\n            },\n        }]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/gitBash.ts",
    "content": "import * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { Platform, ConfigService, HostAppService } from 'tabby-core'\n\nimport { Shell } from 'tabby-local'\nimport { WindowsBaseShellProvider } from './windowsBase'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\n/** @hidden */\n@Injectable()\nexport class GitBashShellProvider extends WindowsBaseShellProvider {\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        hostApp: HostAppService,\n        config: ConfigService,\n    ) {\n        super(hostApp, config)\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        let gitBashPath = wnr.getRegistryValue(wnr.HK.LM, 'Software\\\\GitForWindows', 'InstallPath')\n\n        if (!gitBashPath) {\n            gitBashPath = wnr.getRegistryValue(wnr.HK.CU, 'Software\\\\GitForWindows', 'InstallPath')\n        }\n\n        if (!gitBashPath) {\n            return []\n        }\n\n        return [{\n            id: 'git-bash',\n            name: 'Git Bash',\n            command: path.join(gitBashPath, 'bin', 'bash.exe'),\n            args: ['--login', '-i'],\n            icon: require('../icons/git-bash.svg'),\n            env: this.getEnvironment(),\n        }]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/linuxDefault.ts",
    "content": "import * as fs from 'mz/fs'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform, LogService, Logger, TranslateService } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/** @hidden */\n@Injectable()\nexport class LinuxDefaultShellProvider extends ShellProvider {\n    private logger: Logger\n\n    constructor (\n        private hostApp: HostAppService,\n        private translate: TranslateService,\n        log: LogService,\n    ) {\n        super()\n        this.logger = log.create('linuxDefaultShell')\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Linux) {\n            return []\n        }\n        const line = (await fs.readFile('/etc/passwd', { encoding: 'utf-8' }))\n            .split('\\n').find(x => x.startsWith(`${process.env.LOGNAME}:`))\n        if (!line) {\n            this.logger.warn('Could not detect user shell')\n            return [{\n                id: 'default',\n                name: this.translate.instant('User default'),\n                command: '/bin/sh',\n                env: {},\n            }]\n        } else {\n            return [{\n                id: 'default',\n                name: this.translate.instant('User default'),\n                command: line.split(':')[6],\n                args: ['--login'],\n                hidden: true,\n                env: {},\n            }]\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/macDefault.ts",
    "content": "import { Injectable } from '@angular/core'\nimport promiseIpc, { RendererProcessType } from 'electron-promise-ipc'\nimport { HostAppService, Platform, TranslateService } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/** @hidden */\n@Injectable()\nexport class MacOSDefaultShellProvider extends ShellProvider {\n    private cachedShell?: string\n\n    constructor (\n        private hostApp: HostAppService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.macOS) {\n            return []\n        }\n        return [{\n            id: 'default',\n            name: this.translate.instant('OS default'),\n            command: await this.getDefaultShellCached(),\n            args: ['--login'],\n            hidden: true,\n            env: {},\n        }]\n    }\n\n    private async getDefaultShellCached () {\n        if (!this.cachedShell) {\n            this.cachedShell = await this.getDefaultShell()\n        }\n        return this.cachedShell\n    }\n\n    private async getDefaultShell (): Promise<string> {\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        return (promiseIpc as RendererProcessType).send('get-default-mac-shell') as Promise<string>\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/msys2.ts",
    "content": "import * as fs from 'fs/promises'\nimport * as path from 'path'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/** @hidden */\n@Injectable()\nexport class MSYS2ShellProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const msys2Path = path.resolve(process.env.SystemRoot ?? 'C:\\\\Windows', '../msys64')\n        try {\n            await fs.access(msys2Path)\n        } catch {\n            return []\n        }\n\n        let homePath: string|undefined = path.resolve(msys2Path, 'home', process.env.USERNAME!)\n        try {\n            await fs.access(msys2Path)\n        } catch {\n            homePath = undefined\n        }\n\n        const environments = ['msys', 'mingw64', 'clang64', 'ucrt64']\n\n        return environments.map(e => ({\n            id: `msys2-${e}`,\n            name: `MSYS2 (${e.toUpperCase()})`,\n            command: path.join(msys2Path, 'msys2_shell.cmd'),\n            args: ['-defterm', '-here', '-no-start', '-' + e],\n            icon: require('../icons/msys2.svg'),\n            env: {},\n            cwd: homePath,\n        }))\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/posix.ts",
    "content": "import * as fs from 'mz/fs'\nimport slugify from 'slugify'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/** @hidden */\n@Injectable()\nexport class POSIXShellsProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform === Platform.Windows) {\n            return []\n        }\n        let shellListPath = '/etc/shells'\n        try {\n            await fs.stat(shellListPath)\n        } catch {\n            // Solus Linux\n            shellListPath = '/usr/share/defaults/etc/shells'\n        }\n        return (await fs.readFile(shellListPath, { encoding: 'utf-8' }))\n            .split('\\n')\n            .map(x => x.trim())\n            .filter(x => x && !x.startsWith('#'))\n            .map(x => ({\n                id: slugify(x),\n                name: x.split('/').pop(),\n                icon: 'fas fa-terminal',\n                command: x,\n                args: ['-l'],\n                env: {},\n            }))\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/powershellCore.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HostAppService, ConfigService, Platform } from 'tabby-core'\n\nimport { Shell } from 'tabby-local'\nimport { WindowsBaseShellProvider } from './windowsBase'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\n/** @hidden */\n@Injectable()\nexport class PowerShellCoreShellProvider extends WindowsBaseShellProvider {\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        hostApp: HostAppService,\n        config: ConfigService,\n    ) {\n        super(hostApp, config)\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const pwshPath = wnr.getRegistryValue(wnr.HK.LM, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\App Paths\\\\pwsh.exe', '')\n\n        if (!pwshPath) {\n            return []\n        }\n\n        return [{\n            id: 'powershell-core',\n            name: 'PowerShell Core',\n            command: pwshPath,\n            args: ['-nologo'],\n            icon: require('../icons/powershell-core.svg'),\n            env: this.getEnvironment(),\n        }]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/vs.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'fs/promises'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/* eslint-disable quote-props */\nconst vsIconMap: Record<string, string> = {\n    '2017': require('../icons/vs2017.svg'),\n    '2019': require('../icons/vs2019.svg'),\n    '2022': require('../icons/vs2022.svg'),\n}\n/* eslint-enable quote-props */\n\n/** @hidden */\n@Injectable()\nexport class VSDevToolsProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const x86ParentPath = path.join(process.env['programfiles(x86)'] ?? 'C:\\\\Program Files (x86)', 'Microsoft Visual Studio')\n        const x64ParentPath = path.join(process.env['programfiles'] ?? 'C:\\\\Program Files', 'Microsoft Visual Studio')\n\n        const result: Shell[] = []\n        for (const parentPath of [x86ParentPath, x64ParentPath]) {\n            try {\n                await fs.stat(parentPath)\n                for (const version of await fs.readdir(parentPath)) {\n                    const bat = path.join(parentPath, version, 'Community\\\\Common7\\\\Tools\\\\VsDevCmd.bat')\n                    try {\n                        await fs.stat(bat)\n                    } catch {\n                        continue\n                    }\n                    result.push({\n                        id: `vs-cmd-${version}`,\n                        name: `Developer Prompt for VS ${version}`,\n                        command: 'cmd.exe',\n                        args: ['/k', bat],\n                        icon: vsIconMap[version],\n                        env: {},\n                    })\n                }\n            } catch (_) {\n                // Ignore\n            }\n        }\n        return result\n\n        // return [\n        //     {\n        //         id: 'cmderps',\n        //         name: 'Cmder PowerShell',\n        //         command: 'powershell.exe',\n        //         args: [\n        //             '-ExecutionPolicy',\n        //             'Bypass',\n        //             '-nologo',\n        //             '-noprofile',\n        //             '-noexit',\n        //             '-command',\n        //             `Invoke-Expression '. ''${path.join(process.env.CMDER_ROOT, 'vendor', 'profile.ps1')}'''`,\n        //         ],\n        //         icon: require('../icons/cmder-powershell.svg'),\n        //         env: {},\n        //     },\n        // ]\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/winDefault.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HostAppService, Platform, TranslateService } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\nimport { WSLShellProvider } from './wsl'\nimport { PowerShellCoreShellProvider } from './powershellCore'\nimport { WindowsStockShellsProvider } from './windowsStock'\n\n/** @hidden */\n@Injectable()\nexport class WindowsDefaultShellProvider extends ShellProvider {\n    private providers: ShellProvider[]\n\n    constructor (\n        psc: PowerShellCoreShellProvider,\n        wsl: WSLShellProvider,\n        stock: WindowsStockShellsProvider,\n        private hostApp: HostAppService,\n        private translate: TranslateService,\n    ) {\n        super()\n        this.providers = [\n            psc,\n            wsl,\n            stock,\n        ]\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n        // Figure out a sensible default\n        const shellLists = await Promise.all(this.providers.map(x => x.provide()))\n        for (const list of shellLists) {\n            if (list.length) {\n                const shell = list[list.length - 1]\n\n                return [{\n                    ...shell,\n                    id: 'default',\n                    name: this.translate.instant('OS default ({name})', shell),\n                    hidden: true,\n                }]\n            }\n        }\n\n        return []\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/windowsBase.ts",
    "content": "import { ConfigService, HostAppService } from 'tabby-core'\n\nimport { ShellProvider } from 'tabby-local'\n\nexport abstract class WindowsBaseShellProvider extends ShellProvider {\n    constructor (\n        protected hostApp: HostAppService,\n        protected config: ConfigService,\n    ) {\n        super()\n    }\n\n    protected getEnvironment (): any {\n        return {\n            wt: {\n                WT_SESSION: 0,\n            },\n            cygwin: {\n                TERM: 'cygwin',\n            },\n        }[this.config.store.terminal.identification] ?? {}\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/windowsStock.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'fs/promises'\nimport * as which from 'which'\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform, ConfigService } from 'tabby-core'\nimport { ElectronService } from '../services/electron.service'\n\nimport { Shell } from 'tabby-local'\nimport { WindowsBaseShellProvider } from './windowsBase'\n\n/** @hidden */\n@Injectable()\nexport class WindowsStockShellsProvider extends WindowsBaseShellProvider {\n    constructor (\n        hostApp: HostAppService,\n        config: ConfigService,\n        private electron: ElectronService,\n    ) {\n        super(hostApp, config)\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        let clinkPath = path.join(\n            path.dirname(this.electron.app.getPath('exe')),\n            'resources',\n            'extras',\n            'clink',\n            `clink_${process.arch}.exe`,\n        )\n\n        if (process.env.TABBY_DEV) {\n            clinkPath = path.join(\n                path.dirname(this.electron.app.getPath('exe')),\n                '..', '..', '..',\n                'extras',\n                'clink',\n                `clink_${process.arch}.exe`,\n            )\n        }\n        return [\n            {\n                id: 'clink',\n                name: 'CMD (clink)',\n                command: 'cmd.exe',\n                args: ['/k', clinkPath, 'inject'],\n                env: {\n                    // Tell clink not to emulate ANSI handling\n                    WT_SESSION: '0',\n                },\n                icon: require('../icons/clink.svg'),\n            },\n            {\n                id: 'cmd',\n                name: 'CMD (stock)',\n                command: 'cmd.exe',\n                env: {},\n                icon: require('../icons/cmd.svg'),\n            },\n            {\n                id: 'powershell',\n                name: 'PowerShell',\n                command: await this.getPowerShellPath(),\n                args: ['-nologo'],\n                icon: require('../icons/powershell.svg'),\n                env: this.getEnvironment(),\n            },\n        ]\n    }\n\n    private async getPowerShellPath () {\n        for (const name of ['pwsh.exe', 'powershell.exe']) {\n            if (await which(name, { nothrow: true })) {\n                return name\n            }\n        }\n        for (const psPath of [\n            `${process.env.USERPROFILE}\\\\AppData\\\\Local\\\\Microsoft\\\\WindowsApps\\\\pwsh.exe`,\n            `${process.env.SystemRoot}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`,\n            `${process.env.SystemRoot}\\\\System32\\\\powershell.exe`,\n            (process.env.SystemRoot ?? 'C:\\\\Windows') + '\\\\powerhshell.exe',\n        ]) {\n            try {\n                await fs.stat(psPath)\n                return psPath\n            } catch { }\n        }\n        return 'powershell.exe'\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/shells/wsl.ts",
    "content": "import * as fs from 'mz/fs'\nimport slugify from 'slugify'\n\nimport { Injectable } from '@angular/core'\nimport { HostAppService, Platform, isWindowsBuild, WIN_BUILD_WSL_EXE_DISTRO_FLAG } from 'tabby-core'\n\nimport { ShellProvider, Shell } from 'tabby-local'\n\n/* eslint-disable block-scoped-var */\n\ntry {\n    var wnr = require('windows-native-registry') // eslint-disable-line @typescript-eslint/no-var-requires, no-var\n} catch { }\n\n// WSL Distribution List\n// https://docs.microsoft.com/en-us/windows/wsl/install-win10#install-your-linux-distribution-of-choice\n/* eslint-disable quote-props */\nconst wslIconMap: Record<string, string> = {\n    'Alpine': require('../icons/alpine.svg'),\n    'Debian': require('../icons/debian.svg'),\n    'kali-linux': require('../icons/kali.svg'),\n    'SLES-12': require('../icons/suse.svg'),\n    'openSUSE-Leap-15-1': require('../icons/suse.svg'),\n    'Ubuntu-16.04': require('../icons/ubuntu.svg'),\n    'Ubuntu-18.04': require('../icons/ubuntu.svg'),\n    'Ubuntu-22.04': require('../icons/ubuntu.svg'),\n    'Ubuntu': require('../icons/ubuntu.svg'),\n    'AlmaLinux-8': require('../icons/alma.svg'),\n    'OracleLinux_7_9': require('../icons/oracle-linux.svg'),\n    'OracleLinux_8_5': require('../icons/oracle-linux.svg'),\n    'openEuler': require('../icons/open-euler.svg'),\n    'Linux': require('../icons/linux.svg'),\n    'docker-desktop': require('../icons/docker.svg'),\n    'docker-desktop-data': require('../icons/docker.svg'),\n}\n/* eslint-enable quote-props */\n\n/** @hidden */\n@Injectable()\nexport class WSLShellProvider extends ShellProvider {\n    constructor (\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async provide (): Promise<Shell[]> {\n        if (this.hostApp.platform !== Platform.Windows) {\n            return []\n        }\n\n        const bashPath = `${process.env.windir}\\\\system32\\\\bash.exe`\n        const wslPath = `${process.env.windir}\\\\system32\\\\wsl.exe`\n\n        const lxssPath = 'Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Lxss'\n        const lxss = wnr.getRegistryKey(wnr.HK.CU, lxssPath)\n        const shells: Shell[] = []\n\n        if (lxss?.DefaultDistribution) {\n            const defaultDistKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\\\' + String(lxss.DefaultDistribution.value))\n            if (defaultDistKey?.DistributionName) {\n                const shell: Shell = {\n                    id: 'wsl',\n                    name: 'WSL / Default distro',\n                    command: wslPath,\n                    env: {\n                        TERM: 'xterm-color',\n                        COLORTERM: 'truecolor',\n                    },\n                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                    icon: wslIconMap[defaultDistKey.DistributionName.value] ?? wslIconMap.Linux,\n                }\n                shells.push(shell)\n            }\n        }\n\n        if (!lxss?.DefaultDistribution || !isWindowsBuild(WIN_BUILD_WSL_EXE_DISTRO_FLAG)) {\n            if (await fs.exists(bashPath)) {\n                return [{\n                    id: 'wsl',\n                    name: 'WSL / Bash on Windows',\n                    icon: wslIconMap.Linux,\n                    command: bashPath,\n                    env: {\n                        TERM: 'xterm-color',\n                        COLORTERM: 'truecolor',\n                    },\n                }]\n            } else {\n                return []\n            }\n        }\n        for (const child of wnr.listRegistrySubkeys(wnr.HK.CU, lxssPath) as string[]) {\n            const childKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\\\' + child)\n            if (!childKey.DistributionName || !childKey.BasePath) {\n                continue\n            }\n            const wslVersion = (childKey.Flags?.value || 0) & 8 ? 2 : 1\n            const name = childKey.DistributionName.value\n            const fsBase = wslVersion === 2 ? `\\\\\\\\wsl$\\\\${name}` : childKey.BasePath.value as string + '\\\\rootfs'\n            const slug = slugify(name, { remove: /[:.]/g })\n            const shell: Shell = {\n                id: `wsl-${slug}`,\n                name: `WSL / ${name}`,\n                command: wslPath,\n                args: ['-d', name],\n                fsBase,\n                env: {\n                    TERM: 'xterm-color',\n                    COLORTERM: 'truecolor',\n                },\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                icon: wslIconMap[name] ?? wslIconMap.Linux,\n            }\n            shells.push(shell)\n        }\n\n        return shells\n    }\n}\n"
  },
  {
    "path": "tabby-electron/src/sshImporters.ts",
    "content": "import * as fs from 'fs/promises'\nimport * as fsSync from 'fs'\nimport * as path from 'path'\nimport * as glob from 'glob'\nimport * as yaml from 'js-yaml'\nimport { Injectable } from '@angular/core'\nimport { PartialProfile } from 'tabby-core'\nimport {\n    SSHProfileImporter,\n    PortForwardType,\n    SSHProfile,\n    AutoPrivateKeyLocator,\n    ForwardedPortConfig,\n} from 'tabby-ssh'\n\nimport { ElectronService } from './services/electron.service'\nimport SSHConfig, { Directive, LineType } from 'ssh-config'\n\n// Enum to delineate the properties in SSHProfile options\nenum SSHProfilePropertyNames {\n    Host = 'host',\n    Port = 'port',\n    User = 'user',\n    X11 = 'x11',\n    PrivateKeys = 'privateKeys',\n    KeepaliveInterval = 'keepaliveInterval',\n    KeepaliveCountMax = 'keepaliveCountMax',\n    ReadyTimeout = 'readyTimeout',\n    JumpHost = 'jumpHost',\n    AgentForward = 'agentForward',\n    ProxyCommand = 'proxyCommand',\n    ForwardedPorts = 'forwardedPorts',\n}\n\n// Data structure to map the (lowercase) ssh-config attributes (as keys) to a tuple\n// containing the name of the corresponding SSHProfile attribute\nconst decodeFields: Record<string, SSHProfilePropertyNames> = {\n    hostname: SSHProfilePropertyNames.Host,\n    user: SSHProfilePropertyNames.User,\n    port: SSHProfilePropertyNames.Port,\n    forwardx11: SSHProfilePropertyNames.X11,\n    serveraliveinterval: SSHProfilePropertyNames.KeepaliveInterval,\n    serveralivecountmax: SSHProfilePropertyNames.KeepaliveCountMax,\n    connecttimeout: SSHProfilePropertyNames.ReadyTimeout,\n    proxyjump: SSHProfilePropertyNames.JumpHost,\n    forwardagent: SSHProfilePropertyNames.AgentForward,\n    identityfile: SSHProfilePropertyNames.PrivateKeys,\n    proxycommand: SSHProfilePropertyNames.ProxyCommand,\n    localforward: SSHProfilePropertyNames.ForwardedPorts,\n    remoteforward: SSHProfilePropertyNames.ForwardedPorts,\n    dynamicforward: SSHProfilePropertyNames.ForwardedPorts,\n}\n\n// Function to use the above to return details corresponding to the supplied SSHProperty name.\n// If the name of the supplied SSH Config file Property is valid, and one that we process,\n// then we get back the name of the corresponding Property in the SSHProfile object\nfunction decodeTarget (SSHProperty: string): string {\n    const lower = SSHProperty.toLowerCase()\n    if (lower in decodeFields) {\n        return decodeFields[lower]\n    }\n    return ''\n}\n\n// Function to combine SSHConfig values into a single string. This is used to smash\n// together the proxyCommand values which are split on whitespace and presented as\n// an array of objects in the SSHConfig object\nfunction convertSSHConfigValuesToString (arg: string | string[] | object[]): string {\n    if (typeof arg === 'string') { return arg }\n    let allStrings = true\n    for (const item of arg) {\n        if (typeof item !== 'string') {\n            allStrings = false\n            break\n        }\n    }\n    if (allStrings) {\n        return arg.join(' ')\n    }\n\n    // Have to explicitly unwrap the arg into a list of objects to avoid Typescript grumbles\n    const objList: object[] = []\n    for (const item of arg) {\n        if ( typeof item === 'object' && 'val' in item ) {\n            objList.push(item)\n        }\n    }\n    return objList.filter(obj => 'val' in obj)\n        .map(obj => 'val' in obj ? obj.val as string: '')\n        .join(' ')\n}\n\n// Function to read in the SSH config file recursively and parse any Include directives\nasync function parseSSHConfigFile (\n    filePath: string,\n    visited = new Set<string>(),\n): Promise<SSHConfig> {\n    // If we've already processed this file, return an empty config to avoid infinite recursion\n    if (visited.has(filePath)) {\n        return SSHConfig.parse('')\n    }\n    visited.add(filePath)\n\n    let raw = ''\n    try {\n        raw = await fs.readFile(filePath, 'utf8')\n    } catch (err) {\n        console.error(`Error reading SSH config file: ${filePath}`, err)\n        return SSHConfig.parse('')\n    }\n\n    const parsed = SSHConfig.parse(raw)\n    const merged = SSHConfig.parse('')\n    for (const entry of parsed) {\n        if (entry.type === LineType.DIRECTIVE && entry.param.toLowerCase() === 'include') {\n            const directive = entry as Directive\n            if (typeof directive.value !== 'string') {\n                continue\n            }\n\n            // ssh_config(5) says \"Files without absolute paths are assumed to be in ~/.ssh if included in a user configuration file or /etc/ssh if included from the system configuration file.\"\n            let incPath = ''\n            if (path.isAbsolute(directive.value)) {\n                incPath = directive.value\n            } else if (directive.value.startsWith('~')) {\n                incPath = path.join(process.env.HOME ?? '~', directive.value.slice(1))\n            } else {\n                incPath = path.join(process.env.HOME ?? '~', '.ssh', directive.value)\n            }\n\n            const matches = glob.sync(incPath)\n            for (const match of matches) {\n                const stat = await fs.stat(match)\n                if (stat.isDirectory()) {\n                    continue\n                }\n                const matchedConfig = await parseSSHConfigFile(match, visited)\n                merged.push(...matchedConfig)\n            }\n        } else {\n            merged.push(entry)\n        }\n    }\n    return merged\n}\n\n// Function to convert an SSH Profile name into a sha256 hash-based ID\nasync function hashSSHProfileName (name: string) {\n    const textEncoder = new TextEncoder()\n    const encoded = textEncoder.encode(name)\n    const hash = await crypto.subtle.digest('SHA-256', encoded)\n    const hashArray = Array.from(new Uint8Array(hash))\n    return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n}\n\n// Function to take an ssh-config entry and convert it into an SSHProfile\nasync function convertHostToSSHProfile (host: string, settings: Record<string, string | string[] | object[] >): Promise<PartialProfile<SSHProfile>> {\n\n    // inline function to generate an id for this profile\n    const deriveID = async (name: string) => 'openssh-config:' + await hashSSHProfileName(name)\n\n    // Start point of the profile, with an ID, name, type and group\n    const thisProfile: PartialProfile<SSHProfile> = {\n        id: await deriveID(host),\n        name: `${host} (.ssh/config)`,\n        type: 'ssh',\n        group: 'Imported from .ssh/config',\n    }\n    const options = {}\n\n    function convertToForwardedPortDescriptor (forwardType: PortForwardType.Local | PortForwardType.Remote | PortForwardType.Dynamic, details: string): ForwardedPortConfig {\n        const detailsParts = details.split(/\\s/)\n        const bindParts = detailsParts[0].trim().split(':')\n        if (bindParts.length === 1) {\n            bindParts.unshift('127.0.0.1')\n        }\n        let tgtParts = ['', '22']\n        if ( detailsParts.length > 1 ) {\n            tgtParts = detailsParts[1].trim().split(':')\n        }\n        return {\n            host: bindParts[0],\n            port: parseInt(bindParts[1]),\n            targetAddress: tgtParts[0],\n            targetPort: parseInt(tgtParts[1]),\n            type: forwardType,\n            description: details,\n        }\n    }\n\n    // for each ssh-config key in turn...\n    for (const key in settings) {\n        // decode a target attribute and an action\n        const targetName = decodeTarget(key)\n\n        switch (targetName) {\n\n            // The following have single string values\n            case SSHProfilePropertyNames.User:\n            case SSHProfilePropertyNames.Host:\n            case SSHProfilePropertyNames.JumpHost:\n                const basicString = settings[key]\n                if (typeof basicString === 'string') {\n                    if (targetName === SSHProfilePropertyNames.JumpHost) {\n                        options[targetName] = await deriveID(basicString)\n                    } else {\n                        options[targetName] = basicString\n                    }\n                } else {\n                    console.log('Unexpected value in settings for ' + key)\n                }\n                break\n\n            // The following have single integer values\n            case SSHProfilePropertyNames.Port:\n            case SSHProfilePropertyNames.KeepaliveCountMax:\n                const numberString = settings[key]\n                if (typeof numberString === 'string') {\n                    options[targetName] = parseInt(numberString, 10)\n                } else {\n                    console.log('Unexpected value in settings for ' + key)\n                }\n                break\n\n            // KeepaliveInterval and ReadyTimeout are in seconds in SSH config but milliseconds in Tabby\n            case SSHProfilePropertyNames.KeepaliveInterval:\n            case SSHProfilePropertyNames.ReadyTimeout:\n                const secondsString = settings[key]\n                if (typeof secondsString === 'string') {\n                    const parsedSeconds = parseInt(secondsString, 10)\n                    if (!isNaN(parsedSeconds) && parsedSeconds >= 0) {\n                        options[targetName] = parsedSeconds * 1000\n                    } else {\n                        console.log(`Invalid value for ${key}: \"${secondsString}\"`)\n                    }\n                } else {\n                    console.log('Unexpected value in settings for ' + key)\n                }\n                break\n\n            // The following have single yes/no values\n            case SSHProfilePropertyNames.X11:\n            case SSHProfilePropertyNames.AgentForward:\n                let booleanString = settings[key]\n                booleanString = typeof booleanString === 'string' ? booleanString.toLowerCase() : ''\n                if ( booleanString === 'yes' || booleanString === 'no' ) {\n                    options[targetName] = booleanString === 'yes'\n                } else {\n                    console.log('Unexpected value in settings for ' + key)\n                }\n                break\n\n            // ProxyCommand will be an array if unquoted and containing multiple words,\n            // or a simple string otherwise\n            case SSHProfilePropertyNames.ProxyCommand:\n                const proxyCommand = convertSSHConfigValuesToString(settings[key])\n                options[targetName] = proxyCommand\n                break\n\n            // IdentityFile may have multiple values and the need to have '~' converted to the\n            // path to the HOME directory\n            case SSHProfilePropertyNames.PrivateKeys:\n                const processedKeys: string [] = (settings[key] as string[]).map( s => {\n                    let retVal: string = s\n                    if (s.startsWith('~/')) {\n                        retVal = path.join(process.env.HOME ?? '~', s.slice(2))\n                    }\n                    return retVal\n                })\n                options[targetName] = processedKeys\n                break\n\n            // The port forwarding directives all end up in the same space, but with a different value\n            // in the SSHProfileOptions object\n            case SSHProfilePropertyNames.ForwardedPorts:\n                const forwardTypeString = key.toLowerCase()\n                let forwardType: PortForwardType | null = null\n                switch (forwardTypeString) {\n                    case 'localforward':\n                        forwardType = PortForwardType.Local\n                        break\n                    case 'remoteforward':\n                        forwardType = PortForwardType.Remote\n                        break\n                    case 'dynamicforward':\n                        forwardType = PortForwardType.Dynamic\n                        break\n                }\n                if (forwardType) {\n                    options[targetName] ??= []\n                    for (const forwarderDetails of settings[key]) {\n                        if (typeof forwarderDetails === 'string') {\n                            options[targetName].push(convertToForwardedPortDescriptor(forwardType, forwarderDetails))\n                        }\n                    }\n                }\n                break\n\n        }\n\n    }\n    thisProfile.options = options\n    return thisProfile\n}\n\nasync function convertToSSHProfiles (config: SSHConfig): Promise<PartialProfile<SSHProfile>[]> {\n    const myMap = new Map<string, PartialProfile<SSHProfile>>()\n\n    function noWildCardsInName (name: string) {\n        return !/[?*]/.test(name)\n    }\n\n    for (const entry of config) {\n        // Each entry represents a line in the SSH Config. If the line is a 'Host' line,\n        // then it will also contain the configuration for that identifiable Host.\n        // There may be more than one host per line and some 'Hosts' have wildcards in their\n        // names\n        // If this is a genuine entry rather than a Comment...\n        // ... and there is a 'Host' Parameter\n        if (entry.type === LineType.DIRECTIVE && entry.param === 'Host') {\n\n            // for each Name in this entry\n            const hostList: string[] = []\n            // if there is more than one host specified on this line, then the names will be\n            // in an array\n            if (typeof entry.value === 'string') {\n                hostList.push(entry.value)\n            } else if (Array.isArray(entry.value)) {\n                for (const item of entry.value) {\n                    hostList.push(item.val)\n                }\n            }\n            // for each Host identified on this line, check that there are no wildcards in the\n            // name and that we've not seen the name before.\n            // If that is the case, then get the full configuration for this name.\n            // If that has a 'Hostname' property (if that's missing, the name is not usable\n            // for our purposes) then convert the configuration into an SSHProfile and stash it\n            for (const host of hostList) {\n                if (noWildCardsInName(host)) {\n                    if (!(host in myMap)) {\n                        // NOTE: SSHConfig.compute() lies about the return types\n                        const configuration: Record<string, string | string[] | object[]> = config.compute(host)\n                        if (Object.keys(configuration).map(key => key.toLowerCase()).includes('hostname')) {\n                            myMap[host] = await convertHostToSSHProfile(host, configuration)\n                        }\n                    }\n                }\n            }\n        }\n    }\n    // Convert the values from the map into a list of Partial SSHProfiles sorted\n    // by Hostname\n    return Object.keys(myMap).sort().map(key => myMap[key])\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class OpenSSHImporter extends SSHProfileImporter {\n    async getProfiles (): Promise<PartialProfile<SSHProfile>[]> {\n\n        const configPath = path.join(process.env.HOME ?? '~', '.ssh', 'config')\n\n        try {\n            const config: SSHConfig = await parseSSHConfigFile(configPath)\n            return await convertToSSHProfiles(config)\n        } catch (e) {\n            if (e.code === 'ENOENT') {\n                return []\n            }\n            throw e\n        }\n    }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class StaticFileImporter extends SSHProfileImporter {\n    private configPath: string\n\n    constructor (\n        electron: ElectronService,\n    ) {\n        super()\n        this.configPath = path.join(electron.app.getPath('userData'), 'ssh-profiles.yaml')\n    }\n\n    async getProfiles (): Promise<PartialProfile<SSHProfile>[]> {\n        const deriveID = async name => 'file-config:' + await hashSSHProfileName(name)\n\n        if (!fsSync.existsSync(this.configPath)) {\n            return []\n        }\n\n        const content = await fs.readFile(this.configPath, 'utf8')\n        if (!content) {\n            return []\n        }\n\n        return Promise.all((yaml.load(content) as PartialProfile<SSHProfile>[]).map(async item => ({\n            ...item,\n            id: await deriveID(item.name),\n            type: 'ssh',\n        })))\n    }\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class PrivateKeyLocator extends AutoPrivateKeyLocator {\n    async getKeys (): Promise<[string, Buffer][]> {\n        const results: [string, Buffer][] = []\n        const keysPath = path.join(process.env.HOME!, '.ssh')\n        if (!fsSync.existsSync(keysPath)) {\n            return results\n        }\n        for (const file of await fs.readdir(keysPath)) {\n            if (/^id_[\\w\\d]+$/.test(file)) {\n                const privateKeyContents = await fs.readFile(\n                    path.join(keysPath, file),\n                    { encoding: null },\n                )\n                results.push([file, privateKeyContents])\n            }\n        }\n        return results\n    }\n}\n"
  },
  {
    "path": "tabby-electron/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-electron/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-electron/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'electron',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-linkifier/README.md",
    "content": "# Tabby Linkifier Plugin\n\nThis plugin makes URLs, IPs and file paths in the terminal clickable and adds a context menu that allows quickly copying them.\n"
  },
  {
    "path": "tabby-linkifier/package.json",
    "content": "{\n  \"name\": \"tabby-linkifier\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Makes URLs, IPs and file paths clickable in Tabby\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@xterm/addon-web-links\": \"^0.10.0\",\n    \"untildify\": \"^4.0.0\"\n  }\n}\n"
  },
  {
    "path": "tabby-linkifier/src/api.ts",
    "content": "import { BaseTerminalTabComponent } from 'tabby-terminal'\n\nexport abstract class LinkHandler {\n    regex: RegExp\n    priority = 1\n\n    convert (uri: string, _tab?: BaseTerminalTabComponent<any>): Promise<string>|string {\n        return uri\n    }\n\n    verify (_uri: string, _tab?: BaseTerminalTabComponent<any>): Promise<boolean>|boolean {\n        return true\n    }\n\n    abstract handle (uri: string, tab?: BaseTerminalTabComponent<any>): void\n\n    private _fullMatchRegex: RegExp | null = null\n    get fullMatchRegex (): RegExp {\n        if (!this._fullMatchRegex) {\n            this._fullMatchRegex = new RegExp(`^${this.regex.source}$`)\n        }\n        return this._fullMatchRegex\n    }\n}\n"
  },
  {
    "path": "tabby-linkifier/src/config.ts",
    "content": "import { ConfigProvider } from 'tabby-core'\n\n/** @hidden */\nexport class ClickableLinksConfigProvider extends ConfigProvider {\n    defaults = {\n        clickableLinks: {\n            modifier: null,\n        },\n    }\n\n    platformDefaults = { }\n}\n"
  },
  {
    "path": "tabby-linkifier/src/decorator.ts",
    "content": "import { Inject, Injectable } from '@angular/core'\nimport { ConfigService, PlatformService } from 'tabby-core'\nimport { TerminalDecorator, BaseTerminalTabComponent, XTermFrontend } from 'tabby-terminal'\nimport { WebLinksAddon } from '@xterm/addon-web-links'\nimport { LinkHandler } from './api'\n\n@Injectable()\nexport class LinkHighlighterDecorator extends TerminalDecorator {\n    constructor (\n        private config: ConfigService,\n        private platform: PlatformService,\n        @Inject(LinkHandler) private handlers: LinkHandler[],\n    ) {\n        super()\n    }\n\n    attach (tab: BaseTerminalTabComponent<any>): void {\n        if (!(tab.frontend instanceof XTermFrontend)) {\n            // not xterm\n            return\n        }\n\n        tab.frontend.xterm.options.linkHandler = {\n            activate: (event, uri) => {\n                if (!this.willHandleEvent(event)) {\n                    return\n                }\n                this.platform.openExternal(uri)\n            },\n        }\n\n        const openLink = async uri => {\n            for (const handler of this.handlers) {\n                if (!handler.fullMatchRegex.test(uri)) {\n                    continue\n                }\n                if (!await handler.verify(await handler.convert(uri, tab), tab)) {\n                    continue\n                }\n                handler.handle(await handler.convert(uri, tab), tab)\n            }\n        }\n\n        let regex = new RegExp('')\n        const regexSource = this.handlers.map(x => `(${x.regex.source})`).join('|')\n        try {\n            regex = new RegExp(regexSource)\n            console.debug('Linkifier regexp', regex)\n        } catch (error) {\n            console.error('Could not build regex for your link handlers:', error)\n            console.error('Regex source was:', regexSource)\n            return\n        }\n\n        const addon = new WebLinksAddon(\n            async (event, uri) => {\n                if (!this.willHandleEvent(event)) {\n                    return\n                }\n                openLink(uri)\n            },\n            {\n                urlRegex: regex,\n            },\n        )\n\n        tab.frontend.xterm.loadAddon(addon)\n    }\n\n    private willHandleEvent (event: MouseEvent) {\n        const modifier = this.config.store.clickableLinks.modifier\n        return !modifier || event[modifier]\n    }\n}\n"
  },
  {
    "path": "tabby-linkifier/src/handlers.ts",
    "content": "import * as fs from 'fs/promises'\nimport * as path from 'path'\nimport untildify from 'untildify'\nimport { Injectable } from '@angular/core'\nimport { ToastrService } from 'ngx-toastr'\nimport { PlatformService } from 'tabby-core'\nimport { BaseTerminalTabComponent } from 'tabby-terminal'\n\nimport { LinkHandler } from './api'\n\n@Injectable()\nexport class URLHandler extends LinkHandler {\n    // From https://urlregex.com/\n    // with \"-\" added to last group (https://github.com/Eugeny/tabby/issues/5611)\n    regex = /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((:((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{1,5})|([0-9]{1,4})))?(?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w-]*))?)/\n\n    priority = 5\n\n    constructor (private platform: PlatformService) {\n        super()\n    }\n\n    handle (uri: string): void {\n        this.platform.openExternal(uri)\n    }\n}\n\n@Injectable()\nexport class IPHandler extends LinkHandler {\n    regex = /\\b((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)/\n\n    priority = 4\n\n    constructor (private platform: PlatformService) {\n        super()\n    }\n\n    handle (uri: string): void {\n        this.platform.openExternal(`http://${uri}`)\n    }\n}\n\nexport class BaseFileHandler extends LinkHandler {\n    constructor (\n        protected toastr: ToastrService,\n        protected platform: PlatformService,\n    ) {\n        super()\n    }\n\n    async handle (uri: string): Promise<void> {\n        try {\n            this.platform.openExternal('file://' + uri)\n        } catch (err) {\n            this.toastr.error(err.toString())\n        }\n    }\n\n    async verify (uri: string): Promise<boolean> {\n        try {\n            await fs.access(uri)\n            return true\n        } catch {\n            return false\n        }\n    }\n\n    async convert (uri: string, tab?: BaseTerminalTabComponent<any>): Promise<string> {\n        let p = untildify(uri)\n        if (!path.isAbsolute(p) && tab) {\n            const cwd = await tab.session?.getWorkingDirectory()\n            if (cwd) {\n                p = path.resolve(cwd, p)\n            }\n        }\n        return p\n    }\n}\n\n@Injectable()\nexport class UnixFileHandler extends BaseFileHandler {\n    // Only absolute and home paths\n    regex = /[~]?(\\/[\\w\\d.~-]{1,100})+/\n\n    constructor (\n        protected toastr: ToastrService,\n        protected platform: PlatformService,\n    ) {\n        super(toastr, platform)\n    }\n}\n\n\n@Injectable()\nexport class WindowsFileHandler extends BaseFileHandler {\n    regex = /(([a-zA-Z]:|\\\\|~)\\\\[\\w\\-()\\\\\\.]{1,1024}|\"([a-zA-Z]:|\\\\)\\\\[\\w\\s\\-()\\\\\\.]{1,1024}\")/\n\n    constructor (\n        protected toastr: ToastrService,\n        protected platform: PlatformService,\n    ) {\n        super(toastr, platform)\n    }\n\n    convert (uri: string, tab?: BaseTerminalTabComponent<any>): Promise<string> {\n        const sanitizedUri = uri.replace(/\"/g, '')\n        return super.convert(sanitizedUri, tab)\n    }\n}\n"
  },
  {
    "path": "tabby-linkifier/src/index.ts",
    "content": "/* eslint-disable @typescript-eslint/no-extraneous-class */\nimport { NgModule } from '@angular/core'\nimport { ToastrModule } from 'ngx-toastr'\nimport { ConfigProvider } from 'tabby-core'\nimport { TerminalDecorator } from 'tabby-terminal'\n\nimport { LinkHandler } from './api'\nimport { UnixFileHandler, WindowsFileHandler, URLHandler, IPHandler } from './handlers'\nimport { LinkHighlighterDecorator } from './decorator'\nimport { ClickableLinksConfigProvider } from './config'\n\n@NgModule({\n    imports: [\n        ToastrModule,\n    ],\n    providers: [\n        { provide: LinkHandler, useClass: URLHandler, multi: true },\n        { provide: LinkHandler, useClass: IPHandler, multi: true },\n        { provide: LinkHandler, useClass: UnixFileHandler, multi: true },\n        { provide: LinkHandler, useClass: WindowsFileHandler, multi: true },\n        { provide: TerminalDecorator, useClass: LinkHighlighterDecorator, multi: true },\n        { provide: ConfigProvider, useClass: ClickableLinksConfigProvider, multi: true },\n    ],\n})\nexport default class LinkifierModule { }\n\nexport * from './api'\n"
  },
  {
    "path": "tabby-linkifier/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n  }\n}\n"
  },
  {
    "path": "tabby-linkifier/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-linkifier/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'linkifier',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-local/README.md",
    "content": "# Tabby Local Plugin\n\n* local shells\n\nUsing the API:\n\n```ts\nimport { ShellProvider } from 'tabby-local'\n```\n\nExporting your subclasses:\n\n```ts\n@NgModule({\n  ...\n  providers: [\n    ...\n    { provide: ShellProvider, useClass: MyShellPlugin, multi: true },\n    ...\n  ]\n})\n```\n"
  },
  {
    "path": "tabby-local/package.json",
    "content": "{\n  \"name\": \"tabby-local\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Tabby's local shell plugin\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"ansi-colors\": \"^4.1.1\",\n    \"dataurl\": \"0.1.0\",\n    \"runes\": \"^0.4.2\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\",\n    \"tabby-terminal\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-local/src/api.ts",
    "content": "import { BaseTerminalProfile } from 'tabby-terminal'\n\nexport interface Shell {\n    id: string\n    name: string\n    command: string\n    args?: string[]\n    env: Record<string, string>\n\n    /**\n     * Base path to which shell's internal FS is relative\n     * Currently used for WSL only\n     */\n    fsBase?: string\n\n    cwd?: string\n\n    /**\n     * SVG icon\n     */\n    icon?: string\n\n    hidden?: boolean\n}\n\n/**\n * Extend to add support for more shells\n */\nexport abstract class ShellProvider {\n    abstract provide (): Promise<Shell[]>\n}\n\n\nexport interface SessionOptions {\n    restoreFromPTYID: string | null\n    command: string\n    args: string[]\n    cwd: string | null\n    env: Record<string, string>\n    width: number | null\n    height: number | null\n    pauseAfterExit: boolean\n    runAsAdministrator: boolean\n}\n\nexport interface LocalProfile extends BaseTerminalProfile {\n    options: SessionOptions\n}\n\nexport interface ChildProcess {\n    pid: number\n    ppid: number\n    command: string\n}\n\nexport abstract class UACService {\n    isAvailable = false\n\n    abstract patchSessionOptionsForUAC (sessionOptions: SessionOptions): SessionOptions\n}\n\nexport abstract class PTYProxy {\n    abstract getID (): string\n    abstract getPID (): Promise<number>\n    abstract resize (columns: number, rows: number): Promise<void>\n    abstract write (data: Buffer): Promise<void>\n    abstract kill (signal?: string): Promise<void>\n    abstract ackData (length: number): void\n    abstract subscribe (event: string, handler: (..._: any[]) => void): void\n    abstract unsubscribeAll (): void\n    abstract getChildProcesses (): Promise<ChildProcess[]>\n    abstract getTruePID (): Promise<number>\n    abstract getWorkingDirectory (): Promise<string|null>\n}\n\nexport abstract class PTYInterface {\n    abstract spawn (...options: any[]): Promise<PTYProxy>\n    abstract restore (id: string): Promise<PTYProxy|null>\n}\n"
  },
  {
    "path": "tabby-local/src/buttonProvider.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Injectable } from '@angular/core'\nimport { ToolbarButtonProvider, ToolbarButton, TranslateService } from 'tabby-core'\nimport { TerminalService } from './services/terminal.service'\n\n/** @hidden */\n@Injectable()\nexport class ButtonProvider extends ToolbarButtonProvider {\n    constructor (\n        private terminal: TerminalService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    provide (): ToolbarButton[] {\n        return [\n            {\n                icon: require('./icons/plus.svg'),\n                title: this.translate.instant('New terminal'),\n                touchBarNSImage: 'NSTouchBarAddDetailTemplate',\n                click: () => {\n                    this.terminal.openTab()\n                },\n            },\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/cli.ts",
    "content": "import * as path from 'path'\nimport * as fs from 'mz/fs'\nimport { Injectable } from '@angular/core'\nimport { CLIHandler, CLIEvent, AppService, ConfigService, HostWindowService, ProfilesService, NotificationsService } from 'tabby-core'\nimport { TerminalService } from './services/terminal.service'\n\n@Injectable()\nexport class TerminalCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = 0\n\n    constructor (\n        private hostWindow: HostWindowService,\n        private terminal: TerminalService,\n    ) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        const op = event.argv._[0]\n\n        if (op === 'open') {\n            this.handleOpenDirectory(path.resolve(event.cwd, event.argv.directory!))\n        } else if (op === 'run') {\n            this.handleRunCommand(event.argv.command!)\n        } else {\n            return false\n        }\n\n        return true\n    }\n\n    private async handleOpenDirectory (directory: string) {\n        if (directory.length > 1 && (directory.endsWith('/') || directory.endsWith('\\\\'))) {\n            directory = directory.substring(0, directory.length - 1)\n        }\n        if (await fs.exists(directory)) {\n            if ((await fs.stat(directory)).isDirectory()) {\n                this.terminal.openTab(undefined, directory)\n                this.hostWindow.bringToFront()\n            }\n        }\n    }\n\n    private handleRunCommand (command: string[]) {\n        this.terminal.openTab({\n            type: 'local',\n            name: '',\n            options: {\n                command: command[0],\n                args: command.slice(1),\n            },\n        }, null, true)\n        this.hostWindow.bringToFront()\n    }\n}\n\n\n@Injectable()\nexport class OpenPathCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = -100\n\n    constructor (\n        private terminal: TerminalService,\n        private profiles: ProfilesService,\n        private hostWindow: HostWindowService,\n        private notifications: NotificationsService,\n    ) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        const op = event.argv._[0]\n        const opAsPath = op ? path.resolve(event.cwd, op) : null\n\n        const profile = await this.terminal.getDefaultProfile()\n\n        if (opAsPath && (await fs.lstat(opAsPath)).isDirectory()) {\n            this.terminal.openTab(profile, opAsPath)\n            this.hostWindow.bringToFront()\n            return true\n        }\n\n        if (opAsPath && await fs.exists(opAsPath)) {\n            if (opAsPath.endsWith('.sh') || opAsPath.endsWith('.command')) {\n                profile.options!.pauseAfterExit = true\n                profile.options?.args?.push(opAsPath)\n                this.terminal.openTab(profile)\n                this.hostWindow.bringToFront()\n                return true\n            } else if (opAsPath.endsWith('.bat')) {\n                const psProfile = (await this.profiles.getProfiles()).find(x => x.id === 'cmd')\n                if (psProfile) {\n                    psProfile.options!.pauseAfterExit = true\n                    psProfile.options?.args?.push(opAsPath)\n                    this.terminal.openTab(psProfile)\n                    this.hostWindow.bringToFront()\n                    return true\n                }\n            } else if (opAsPath.endsWith('.ps1')) {\n                const cmdProfile = (await this.profiles.getProfiles()).find(x => x.id === 'powershell')\n                if (cmdProfile) {\n                    cmdProfile.options!.pauseAfterExit = true\n                    cmdProfile.options?.args?.push(opAsPath)\n                    this.terminal.openTab(cmdProfile)\n                    this.hostWindow.bringToFront()\n                    return true\n                }\n            } else {\n                this.notifications.error('Cannot handle scripts of this type')\n            }\n        }\n\n        return false\n    }\n}\n\n@Injectable()\nexport class AutoOpenTabCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = -1000\n\n    constructor (\n        private app: AppService,\n        private config: ConfigService,\n        private terminal: TerminalService,\n    ) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        if (!event.secondInstance && this.config.store.terminal.autoOpen && !this.config.store.enableWelcomeTab) {\n            this.app.ready$.subscribe(() => {\n                if (this.app.tabs.length === 0) {\n                    this.terminal.openTab()\n                }\n            })\n            return true\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/components/commandLineEditor.component.pug",
    "content": "ng-container(*ngIf='!argvMode')\n    .mb-3\n        label(translate) Command line\n        .input-group\n            a.input-group-text.text-decoration-none(\n                (click)='switchToArgv()',\n                ngbTooltip='Split into unescaped arguments',\n                href='#'\n            )\n                i.fas.fa-fw.fa-caret-right\n            input.form-control.text-monospace(\n                [(ngModel)]='command',\n                (ngModelChange)='parseCommand()'\n            )\n\nng-container(*ngIf='argvMode && _model')\n    .mb-3\n        label(translate) Program\n        .input-group\n            a.input-group-text.text-decoration-none(\n                (click)='switchToCommand()',\n                ngbTooltip='Combine into a single escaped command',\n                href='#'\n            )\n                i.fas.fa-fw.fa-caret-down\n            input.form-control.text-monospace(\n                type='text',\n                [(ngModel)]='_model.command',\n            )\n\n    .mb-3(*ngIf='_model.args')\n        label(translate) Arguments\n        .input-group(\n            *ngFor='let arg of _model.args; index as i; trackBy: trackByIndex',\n        )\n            input.form-control.text-monospace(\n                type='text',\n                [(ngModel)]='_model.args[i]',\n            )\n            button.btn.btn-secondary((click)='_model.args.splice(i, 1)')\n                i.fas.fa-fw.fa-trash\n\n        .mt-2\n            button.btn.btn-secondary((click)='_model.args.push(\"\")')\n                i.fas.fa-plus.me-2\n                span(translate) Add\n"
  },
  {
    "path": "tabby-local/src/components/commandLineEditor.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport * as shellQuote from 'shell-quote'\nimport { Component, Input } from '@angular/core'\nimport { SessionOptions } from '../api'\n\n/** @hidden */\n@Component({\n    selector: 'command-line-editor',\n    templateUrl: './commandLineEditor.component.pug',\n})\nexport class CommandLineEditorComponent {\n    @Input() argvMode = false\n    @Input() _model: SessionOptions\n    command = ''\n\n    @Input() get model (): SessionOptions {\n        return this._model\n    }\n\n    set model (value: SessionOptions) {\n        this._model = value\n        this.updateCommand()\n    }\n\n    switchToCommand () {\n        this.updateCommand()\n        this.argvMode = false\n    }\n\n    switchToArgv () {\n        this.argvMode = true\n    }\n\n    parseCommand () {\n        const args = shellQuote.parse(this.command)\n        this.model.command = args[0] ?? ''\n        this.model.args = args.slice(1)\n    }\n\n    updateCommand () {\n        this.command = shellQuote.quote([\n            this.model.command,\n            ...this.model.args,\n        ])\n    }\n\n    trackByIndex (index) {\n        return index\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/components/environmentEditor.component.pug",
    "content": ".mb-2.d-flex.align-items-center(*ngFor='let pair of vars')\n    .input-group\n        input.form-control.w-25.text-monospace([(ngModel)]='pair.key', (blur)='emitUpdate()', placeholder='Variable name')\n        .input-group-text =\n        input.form-control.w-50.text-monospace([(ngModel)]='pair.value', (blur)='emitUpdate()', placeholder='Value')\n        button.btn.btn-secondary((click)='removeEnvironmentVar(pair.key)')\n            i.fas.fa-fw.fa-trash\n\n.d-flex\n    button.btn.btn-secondary((click)='addEnvironmentVar()')\n        i.fas.fa-plus.me-2\n        span(translate) Add\n\n    .ms-auto\n    .text-muted(translate) Substitutions allowed.\n    .d-flex.ms-1(*ngIf='shouldShowExample()')\n        .text-muted(translate) Example:\n        a.ms-1((click)='addExample()', href='#') extend PATH\n"
  },
  {
    "path": "tabby-local/src/components/environmentEditor.component.scss",
    "content": ":host {\n    display: block;\n}\n"
  },
  {
    "path": "tabby-local/src/components/environmentEditor.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Output, Input } from '@angular/core'\nimport { Subject } from 'rxjs'\n\n/** @hidden */\n@Component({\n    selector: 'environment-editor',\n    templateUrl: './environmentEditor.component.pug',\n    styleUrls: ['./environmentEditor.component.scss'],\n})\nexport class EnvironmentEditorComponent {\n    @Output() modelChange = new Subject<any>()\n    vars: { key: string, value: string }[] = []\n    private cachedModel: any\n\n    @Input() get model (): any {\n        return this.cachedModel\n    }\n\n    set model (value) {\n        this.vars = Object.entries(value).map(([k, v]) => ({ key: k, value: v as string }))\n        this.cachedModel = this.getModel()\n    }\n\n    getModel () {\n        const model = {}\n        for (const pair of this.vars) {\n            model[pair.key] = pair.value\n        }\n        return model\n    }\n\n    emitUpdate () {\n        this.cachedModel = this.getModel()\n        this.modelChange.next(this.cachedModel)\n    }\n\n    addEnvironmentVar () {\n        this.vars.push({ key: '', value: '' })\n    }\n\n    removeEnvironmentVar (key: string) {\n        this.vars = this.vars.filter(x => x.key !== key)\n        this.emitUpdate()\n    }\n\n    shouldShowExample (): boolean {\n        return !this.vars.find(v => v.key.toLowerCase() === 'path')\n    }\n\n    addExample (): void {\n        const value = process.platform === 'win32' ? 'C:\\\\Program Files\\\\Custom:%PATH%' : '/opt/custom:$PATH'\n        this.vars.push({ key: 'PATH', value })\n        this.emitUpdate()\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/components/localProfileSettings.component.pug",
    "content": "ul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) General\n        ng-template(ngbNavContent)\n            command-line-editor([model]='profile.options')\n\n            .form-line(*ngIf='uac?.isAvailable')\n                .header\n                    .title(translate) Run as administrator\n                toggle(\n                    [(ngModel)]='profile.options.runAsAdministrator',\n                )\n\n            .mb-3\n                label(translate) Working directory\n\n                .input-group\n                    input.form-control(\n                        type='text',\n                        placeholder='Home directory',\n                        [(ngModel)]='profile.options.cwd'\n                    )\n                    button.btn.btn-secondary((click)='pickWorkingDirectory()')\n                        i.fas.fa-folder-open\n\n            .mb-3\n                label(translate) Environment\n                environment-editor(\n                    type='text',\n                    [(model)]='profile.options.env',\n                )\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Colors\n        ng-template(ngbNavContent)\n            color-scheme-selector([(model)]='profile.terminalColorScheme')\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-local/src/components/localProfileSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Inject, Optional } from '@angular/core'\nimport { LocalProfile, UACService } from '../api'\nimport { FullyDefined, PlatformService, ProfileSettingsComponent } from 'tabby-core'\nimport { LocalProfilesService } from '../profiles'\n\n\n/** @hidden */\n@Component({\n    templateUrl: './localProfileSettings.component.pug',\n})\nexport class LocalProfileSettingsComponent implements ProfileSettingsComponent<LocalProfile, LocalProfilesService> {\n    profile: FullyDefined<LocalProfile>\n\n    constructor (\n        @Optional() @Inject(UACService) public uac: UACService|undefined,\n        private platform: PlatformService,\n    ) { }\n\n    async pickWorkingDirectory (): Promise<void> {\n        const cwd = await this.platform.pickDirectory()\n        if (!cwd) {\n            return\n        }\n        this.profile.options.cwd = cwd\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/components/shellSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Shell\n\n.form-line(*ngIf='isConPTYAvailable')\n    .header\n        .title(translate) Use ConPTY\n        .description(translate) Enables the experimental Windows ConPTY API\n\n    toggle(\n        [(ngModel)]='config.store.terminal.useConPTY',\n        (ngModelChange)='config.save()'\n    )\n\n.alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.useConPTY && isConPTYAvailable && !isConPTYStable')\n    .me-auto(translate) Windows 10 build 18309 or above is recommended for ConPTY\n\n.alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.profile.startsWith(\"WSL\") && (!config.store.terminal.useConPTY)')\n    .me-auto(translate) WSL terminal only supports TrueColor with ConPTY\n"
  },
  {
    "path": "tabby-local/src/components/shellSettingsTab.component.ts",
    "content": "import { Component, HostBinding } from '@angular/core'\nimport { WIN_BUILD_CONPTY_SUPPORTED, WIN_BUILD_CONPTY_STABLE, isWindowsBuild, ConfigService } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './shellSettingsTab.component.pug',\n})\nexport class ShellSettingsTabComponent {\n    isConPTYAvailable: boolean\n    isConPTYStable: boolean\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public config: ConfigService,\n    ) {\n        this.isConPTYAvailable = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED)\n        this.isConPTYStable = isWindowsBuild(WIN_BUILD_CONPTY_STABLE)\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/components/terminalTab.component.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { Component, Input, Injector, Inject, Optional } from '@angular/core'\nimport { BaseTabProcess, WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild, GetRecoveryTokenOptions } from 'tabby-core'\nimport { BaseTerminalTabComponent } from 'tabby-terminal'\nimport { LocalProfile, SessionOptions, UACService } from '../api'\nimport { Session } from '../session'\n\n/** @hidden */\n@Component({\n    selector: 'terminalTab',\n    template: BaseTerminalTabComponent.template,\n    styles: BaseTerminalTabComponent.styles,\n    animations: BaseTerminalTabComponent.animations,\n})\nexport class TerminalTabComponent extends BaseTerminalTabComponent<LocalProfile> {\n    @Input() sessionOptions: SessionOptions // Deprecated\n    session: Session|null = null\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n        @Optional() @Inject(UACService) private uac: UACService|undefined,\n    ) {\n        super(injector)\n    }\n\n    ngOnInit (): void {\n        this.sessionOptions = this.profile.options\n\n        this.logger = this.log.create('terminalTab')\n\n        const isConPTY = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED) && this.config.store.terminal.useConPTY\n\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n            switch (hotkey) {\n                case 'home':\n                    this.sendInput(isConPTY ? '\\x1b[H' : '\\x1bOH')\n                    break\n                case 'end':\n                    this.sendInput(isConPTY ? '\\x1b[F' : '\\x1bOF')\n                    break\n            }\n        })\n\n        super.ngOnInit()\n    }\n\n    protected onFrontendReady (): void {\n        this.initializeSession(this.size.columns, this.size.rows)\n        this.savedStateIsLive = this.profile.options.restoreFromPTYID === this.session?.getID()\n        super.onFrontendReady()\n    }\n\n    initializeSession (columns: number, rows: number): void {\n\n        const session = new Session(this.injector)\n\n        if (this.profile.options.runAsAdministrator && this.uac?.isAvailable) {\n            this.profile = {\n                ...this.profile,\n                options: this.uac.patchSessionOptionsForUAC(this.profile.options),\n            }\n        }\n\n        session.start({\n            ...this.profile.options,\n            width: columns,\n            height: rows,\n        })\n\n        this.setSession(session)\n        this.recoveryStateChangedHint.next()\n    }\n\n    async getRecoveryToken (options?: GetRecoveryTokenOptions): Promise<any> {\n        const cwd = this.session ? await this.session.getWorkingDirectory() : null\n        return {\n            type: 'app:local-tab',\n            profile: {\n                ...this.profile,\n                options: {\n                    ...this.profile.options,\n                    cwd: cwd ?? this.profile.options.cwd,\n                    restoreFromPTYID: options?.includeState && this.session?.getID(),\n                },\n            },\n            savedState: options?.includeState && this.frontend?.saveState(),\n        }\n    }\n\n    async getCurrentProcess (): Promise<BaseTabProcess|null> {\n        const children = await this.session?.getChildProcesses()\n        if (!children?.length) {\n            return null\n        }\n        return {\n            name: children[0].command,\n        }\n    }\n\n    async canClose (): Promise<boolean> {\n        const children = await this.session?.getChildProcesses()\n        if (!children?.length) {\n            return true\n        }\n        return (await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant(\n                    _('\"{command}\" is still running. Close?'),\n                    children[0],\n                ),\n                buttons: [\n                    this.translate.instant(_('Kill')),\n                    this.translate.instant(_('Cancel')),\n                ],\n                defaultId: 0,\n                cancelId: 1,\n            },\n        )).response === 0\n    }\n\n    ngOnDestroy (): void {\n        super.ngOnDestroy()\n        this.session?.destroy()\n    }\n\n    /**\n     * Return true if the user explicitly exit the session.\n     * Always return true for terminalTab as the session can only be ended by the user\n     */\n    protected isSessionExplicitlyTerminated (): boolean {\n        return true\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/config.ts",
    "content": "import { ConfigProvider, Platform } from 'tabby-core'\n\n/** @hidden */\nexport class TerminalConfigProvider extends ConfigProvider {\n    defaults = {\n        terminal: {\n            autoOpen: true,\n            useConPTY: true,\n            environment: {},\n            setComSpec: false,\n        },\n    }\n\n    platformDefaults = {\n        [Platform.macOS]: {\n            terminal: {\n                profile: 'local:default',\n            },\n            hotkeys: {\n                'new-tab': [\n                    '⌘-T',\n                ],\n            },\n        },\n        [Platform.Windows]: {\n            terminal: {\n                profile: 'local:cmd-clink',\n            },\n            hotkeys: {\n                'new-tab': [\n                    'Ctrl-Shift-T',\n                ],\n            },\n        },\n        [Platform.Linux]: {\n            terminal: {\n                profile: 'local:default',\n            },\n            hotkeys: {\n                'new-tab': [\n                    'Ctrl-Shift-T',\n                ],\n            },\n        },\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class LocalTerminalHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'new-tab',\n            name: this.translate.instant('New tab'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { ToastrModule } from 'ngx-toastr'\n\nimport TabbyCorePlugin, { HostAppService, ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, TabContextMenuItemProvider, CLIHandler, ProfileProvider } from 'tabby-core'\nimport TabbyTerminalModule from 'tabby-terminal'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { TerminalTabComponent } from './components/terminalTab.component'\nimport { ShellSettingsTabComponent } from './components/shellSettingsTab.component'\nimport { EnvironmentEditorComponent } from './components/environmentEditor.component'\nimport { LocalProfileSettingsComponent } from './components/localProfileSettings.component'\nimport { CommandLineEditorComponent } from './components/commandLineEditor.component'\n\nimport { TerminalService } from './services/terminal.service'\n\nimport { ButtonProvider } from './buttonProvider'\nimport { RecoveryProvider } from './recoveryProvider'\nimport { ShellSettingsTabProvider } from './settings'\nimport { TerminalConfigProvider } from './config'\nimport { LocalTerminalHotkeyProvider } from './hotkeys'\nimport { NewTabContextMenu } from './tabContextMenu'\n\nimport { AutoOpenTabCLIHandler, OpenPathCLIHandler, TerminalCLIHandler } from './cli'\nimport { LocalProfilesService } from './profiles'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        NgbModule,\n        ToastrModule,\n        TabbyCorePlugin,\n        TabbyTerminalModule,\n    ],\n    providers: [\n        { provide: SettingsTabProvider, useClass: ShellSettingsTabProvider, multi: true },\n\n        { provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true },\n        { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true },\n        { provide: ConfigProvider, useClass: TerminalConfigProvider, multi: true },\n        { provide: HotkeyProvider, useClass: LocalTerminalHotkeyProvider, multi: true },\n\n        { provide: ProfileProvider, useClass: LocalProfilesService, multi: true },\n\n        { provide: TabContextMenuItemProvider, useClass: NewTabContextMenu, multi: true },\n\n        { provide: CLIHandler, useClass: TerminalCLIHandler, multi: true },\n        { provide: CLIHandler, useClass: OpenPathCLIHandler, multi: true },\n        { provide: CLIHandler, useClass: AutoOpenTabCLIHandler, multi: true },\n    ],\n    declarations: [\n        TerminalTabComponent,\n        ShellSettingsTabComponent,\n        EnvironmentEditorComponent,\n        CommandLineEditorComponent,\n        LocalProfileSettingsComponent,\n    ],\n    exports: [\n        TerminalTabComponent,\n        EnvironmentEditorComponent,\n        CommandLineEditorComponent,\n    ],\n})\nexport default class LocalTerminalModule { // eslint-disable-line @typescript-eslint/no-extraneous-class\n    private constructor (\n        hotkeys: HotkeysService,\n        terminal: TerminalService,\n        hostApp: HostAppService,\n    ) {\n        hotkeys.hotkey$.subscribe(async (hotkey) => {\n            if (hotkey === 'new-tab') {\n                terminal.openTab()\n            }\n            if (hotkey === 'new-window') {\n                hostApp.newWindow()\n            }\n        })\n    }\n}\n\nexport { TerminalTabComponent }\nexport { TerminalService }\nexport * from './api'\n"
  },
  {
    "path": "tabby-local/src/profiles.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport deepClone from 'clone-deep'\nimport { Injectable, Inject } from '@angular/core'\nimport { ProfileProvider, NewTabParameters, ConfigService, SplitTabComponent, AppService, PartialProfile } from 'tabby-core'\nimport { TerminalTabComponent } from './components/terminalTab.component'\nimport { LocalProfileSettingsComponent } from './components/localProfileSettings.component'\nimport { ShellProvider, Shell, SessionOptions, LocalProfile } from './api'\n\n@Injectable({ providedIn: 'root' })\nexport class LocalProfilesService extends ProfileProvider<LocalProfile> {\n    id = 'local'\n    name = _('Local terminal')\n    settingsComponent = LocalProfileSettingsComponent\n    configDefaults = {\n        options: {\n            restoreFromPTYID: null,\n            command: '',\n            args: [],\n            cwd: null,\n            env: {\n                __nonStructural: true,\n            },\n            width: null,\n            height: null,\n            pauseAfterExit: false,\n            runAsAdministrator: false,\n        },\n    }\n\n    constructor (\n        private app: AppService,\n        private config: ConfigService,\n        @Inject(ShellProvider) private shellProviders: ShellProvider[],\n    ) {\n        super()\n    }\n\n    async getBuiltinProfiles (): Promise<PartialProfile<LocalProfile>[]> {\n        return (await this.getShells()).map(shell => ({\n            id: `local:${shell.id}`,\n            type: 'local',\n            name: shell.name,\n            icon: shell.icon,\n            options: this.optionsFromShell(shell),\n            isBuiltin: true,\n        }))\n    }\n\n    async getNewTabParameters (profile: LocalProfile): Promise<NewTabParameters<TerminalTabComponent>> {\n        profile = deepClone(profile)\n\n        if (!profile.options.cwd) {\n            if (this.app.activeTab instanceof TerminalTabComponent && this.app.activeTab.session) {\n                profile.options.cwd = await this.app.activeTab.session.getWorkingDirectory() ?? null\n            }\n            if (this.app.activeTab instanceof SplitTabComponent) {\n                const focusedTab = this.app.activeTab.getFocusedTab()\n\n                if (focusedTab instanceof TerminalTabComponent && focusedTab.session) {\n                    profile.options.cwd = await focusedTab.session.getWorkingDirectory() ?? null\n                }\n            }\n        }\n\n        return {\n            type: TerminalTabComponent,\n            inputs: {\n                profile,\n            },\n        }\n    }\n\n    async getShells (): Promise<Shell[]> {\n        const shellLists = await Promise.all(this.config.enabledServices(this.shellProviders).map(x => x.provide()))\n        return shellLists.reduce((a, b) => a.concat(b), [])\n    }\n\n    optionsFromShell (shell: Shell): SessionOptions {\n        return {\n            ...this.configDefaults.options,\n            command: shell.command,\n            args: shell.args ?? [],\n            env: shell.env,\n            cwd: shell.cwd ?? null,\n        }\n    }\n\n    getSuggestedName (profile: LocalProfile): string {\n        return this.getDescription(profile)\n    }\n\n    getDescription (profile: PartialProfile<LocalProfile>): string {\n        return profile.options?.command ?? ''\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/recoveryProvider.ts",
    "content": "import { Injectable, Injector } from '@angular/core'\nimport { TabRecoveryProvider, NewTabParameters, RecoveryToken, ProfilesService } from 'tabby-core'\n\nimport { TerminalTabComponent } from './components/terminalTab.component'\n\n/** @hidden */\n@Injectable()\nexport class RecoveryProvider extends TabRecoveryProvider<TerminalTabComponent> {\n    constructor (private injector: Injector) { super() }\n\n    async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {\n        return recoveryToken.type === 'app:local-tab'\n    }\n\n    async recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<TerminalTabComponent>> {\n        return {\n            type: TerminalTabComponent,\n            inputs: {\n                profile: this.injector.get(ProfilesService).getConfigProxyForProfile(recoveryToken.profile),\n                savedState: recoveryToken.savedState,\n            },\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/services/terminal.service.ts",
    "content": "import * as fsSync from 'fs'\nimport { Injectable } from '@angular/core'\nimport { Logger, LogService, ConfigService, ProfilesService, PartialProfile } from 'tabby-core'\nimport { TerminalTabComponent } from '../components/terminalTab.component'\nimport { LocalProfile } from '../api'\n\n@Injectable({ providedIn: 'root' })\nexport class TerminalService {\n    private logger: Logger\n\n    /** @hidden */\n    private constructor (\n        private profilesService: ProfilesService,\n        private config: ConfigService,\n        log: LogService,\n    ) {\n        this.logger = log.create('terminal')\n    }\n\n    async getDefaultProfile (): Promise<PartialProfile<LocalProfile>> {\n        const profiles = await this.profilesService.getProfiles()\n        let profile = profiles.find(x => x.id === this.config.store.terminal.profile)\n        if (!profile) {\n            profile = profiles.filter(x => x.type === 'local' && x.isBuiltin)[0]\n        }\n        return profile\n    }\n\n    /**\n     * Launches a new terminal with a specific shell and CWD\n     * @param pause Wait for a keypress when the shell exits\n     */\n    async openTab (profile?: PartialProfile<LocalProfile>|null, cwd?: string|null, pause?: boolean): Promise<TerminalTabComponent|null> {\n        if (!profile) {\n            profile = await this.getDefaultProfile()\n        }\n\n        const fullProfile = this.profilesService.getConfigProxyForProfile(profile)\n\n        cwd = cwd ?? fullProfile.options.cwd\n\n        if (cwd && !fsSync.existsSync(cwd)) {\n            console.warn('Ignoring non-existent CWD:', cwd)\n            cwd = null\n        }\n\n        this.logger.info(`Starting profile ${fullProfile.name}`, fullProfile)\n        const options = {\n            ...fullProfile.options,\n            // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n            pauseAfterExit: fullProfile.options.pauseAfterExit || pause,\n            cwd: cwd ?? undefined,\n        }\n\n        return (await this.profilesService.openNewTabForProfile({\n            ...fullProfile,\n            options,\n        })) as TerminalTabComponent|null\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/session.ts",
    "content": "import * as fs from 'mz/fs'\nimport * as fsSync from 'fs'\nimport { Injector } from '@angular/core'\nimport { HostAppService, ConfigService, WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild, Platform, BootstrapData, BOOTSTRAP_DATA, LogService } from 'tabby-core'\nimport { BaseSession } from 'tabby-terminal'\nimport { SessionOptions, ChildProcess, PTYInterface, PTYProxy } from './api'\n\nconst windowsDirectoryRegex = /([a-zA-Z]:[^\\:\\[\\]\\?\\\"\\<\\>\\|\u001b]+)/mi\n\nfunction mergeEnv (...envs) {\n    const result = {}\n    const keyMap = {}\n    for (const env of envs) {\n        for (const [key, value] of Object.entries(env)) {\n            // const lookup = process.platform === 'win32' ? key.toLowerCase() : key\n            const lookup = key.toLowerCase()\n            keyMap[lookup] ??= key\n            result[keyMap[lookup]] = value\n        }\n    }\n    return result\n}\n\nfunction substituteEnv (env: Record<string, string>) {\n    env = { ...env }\n    const pattern = process.platform === 'win32' ? /%(\\w+)%/g : /\\$(\\w+)\\b/g\n    for (const [key, value] of Object.entries(env)) {\n        env[key] = value.toString().replace(pattern, function (substring, p1) {\n            if (process.platform === 'win32') {\n                return Object.entries(process.env).find(x => x[0].toLowerCase() === p1.toLowerCase())?.[1] ?? ''\n            } else {\n                return process.env[p1] ?? ''\n            }\n        })\n    }\n    return env\n}\n\n/** @hidden */\nexport class Session extends BaseSession {\n    private pty: PTYProxy|null = null\n    private ptyClosed = false\n    private pauseAfterExit = false\n    private guessedCWD: string|null = null\n    private initialCWD: string|null = null\n    private config: ConfigService\n    private hostApp: HostAppService\n    private bootstrapData: BootstrapData\n    private ptyInterface: PTYInterface\n\n    constructor (\n        injector: Injector,\n    ) {\n        super(injector.get(LogService).create('local'))\n        this.config = injector.get(ConfigService)\n        this.hostApp = injector.get(HostAppService)\n        this.ptyInterface = injector.get(PTYInterface)\n        this.bootstrapData = injector.get(BOOTSTRAP_DATA)\n    }\n\n    async start (options: SessionOptions): Promise<void> {\n        let pty: PTYProxy|null = null\n\n        if (options.restoreFromPTYID) {\n            pty = await this.ptyInterface.restore(options.restoreFromPTYID)\n            options.restoreFromPTYID = null\n        }\n\n        if (!pty) {\n            let env = mergeEnv(\n                process.env,\n                {\n                    COLORTERM: 'truecolor',\n                    TERM: 'xterm-256color',\n                    TERM_PROGRAM: 'Tabby',\n                },\n                substituteEnv(options.env),\n                this.config.store.terminal.environment || {},\n            )\n\n            if (this.hostApp.platform === Platform.Windows && this.config.store.terminal.setComSpec) {\n                env = mergeEnv(env, { COMSPEC: this.bootstrapData.executable })\n            }\n\n            delete env['']\n\n            if (this.hostApp.platform === Platform.macOS && !process.env.LC_ALL) {\n                const locale = process.env.LC_CTYPE ?? 'en_US.UTF-8'\n                Object.assign(env, {\n                    LANG: locale,\n                    LC_ALL: locale,\n                    LC_MESSAGES: locale,\n                    LC_NUMERIC: locale,\n                    LC_COLLATE: locale,\n                    LC_MONETARY: locale,\n                })\n            }\n\n            // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n            let cwd = options.cwd || process.env.HOME\n\n            if (!fsSync.existsSync(cwd!)) {\n                console.warn('Ignoring non-existent CWD:', cwd)\n                cwd = undefined\n            }\n\n            pty = await this.ptyInterface.spawn(options.command, options.args, {\n                name: 'xterm-256color',\n                cols: options.width ?? 80,\n                rows: options.height ?? 30,\n                encoding: null,\n                cwd,\n                env: env,\n                // `1` instead of `true` forces ConPTY even if unstable\n                useConpty: isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED) && this.config.store.terminal.useConPTY ? 1 : false,\n            })\n\n            this.guessedCWD = cwd ?? null\n        }\n\n        this.pty = pty\n\n        pty.getTruePID().then(async () => {\n            this.initialCWD = await this.getWorkingDirectory()\n        })\n\n        this.open = true\n\n        this.pty.subscribe('data', (array: Uint8Array) => {\n            this.pty!.ackData(array.length)\n            const data = Buffer.from(array)\n            this.emitOutput(data)\n            if (this.hostApp.platform === Platform.Windows) {\n                this.guessWindowsCWD(data.toString())\n            }\n        })\n\n        this.pty.subscribe('exit', () => {\n            if (this.pauseAfterExit) {\n                return\n            } else if (this.open) {\n                this.destroy()\n            }\n        })\n\n        this.pty.subscribe('close', () => {\n            this.ptyClosed = true\n            if (this.pauseAfterExit) {\n                this.emitOutput(Buffer.from('\\r\\nPress any key to close\\r\\n'))\n            } else if (this.open) {\n                this.destroy()\n            }\n        })\n\n        this.pauseAfterExit = options.pauseAfterExit\n\n        this.destroyed$.subscribe(() => this.pty!.unsubscribeAll())\n    }\n\n    getID (): string|null {\n        return this.pty?.getID() ?? null\n    }\n\n    resize (columns: number, rows: number): void {\n        this.pty?.resize(columns, rows)\n    }\n\n    write (data: Buffer): void {\n        if (this.ptyClosed) {\n            this.destroy()\n        }\n        if (this.open) {\n            this.pty?.write(data)\n        }\n    }\n\n    kill (signal?: string): void {\n        this.pty?.kill(signal)\n    }\n\n    async getChildProcesses (): Promise<ChildProcess[]> {\n        return this.pty?.getChildProcesses() ?? []\n    }\n\n    async gracefullyKillProcess (): Promise<void> {\n        if (this.hostApp.platform === Platform.Windows) {\n            this.kill()\n        } else {\n            await new Promise<void>((resolve) => {\n                this.kill('SIGTERM')\n                setTimeout(async () => {\n                    try {\n                        process.kill(await this.pty!.getPID(), 0)\n                        // still alive\n                        this.kill('SIGKILL')\n                        resolve()\n                    } catch {\n                        resolve()\n                    }\n                }, 500)\n            })\n        }\n    }\n\n    supportsWorkingDirectory (): boolean {\n        return !!(this.initialCWD ?? this.reportedCWD ?? this.guessedCWD)\n    }\n\n    async getWorkingDirectory (): Promise<string|null> {\n        if (this.reportedCWD) {\n            return this.reportedCWD\n        }\n        let cwd: string|null = null\n        try {\n            cwd = await this.pty?.getWorkingDirectory() ?? null\n        } catch (exc) {\n            console.info('Could not read working directory:', exc)\n        }\n\n        try {\n            cwd = await fs.realpath(cwd)\n        } catch {}\n\n        if (this.hostApp.platform === Platform.Windows && (cwd === this.initialCWD || cwd === process.env.WINDIR)) {\n            // shell doesn't truly change its process' CWD\n            cwd = null\n        }\n\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        cwd = cwd || this.guessedCWD\n\n        try {\n            await fs.access(cwd)\n        } catch {\n            return null\n        }\n        return cwd\n    }\n\n    private guessWindowsCWD (data: string) {\n        const match = windowsDirectoryRegex.exec(data)\n        if (match) {\n            this.guessedCWD = match[0]\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/settings.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { ShellSettingsTabComponent } from './components/shellSettingsTab.component'\n\n/** @hidden */\n@Injectable()\nexport class ShellSettingsTabProvider extends SettingsTabProvider {\n    id = 'terminal-shell'\n    icon = 'list-ul'\n    title = 'Shell'\n\n    constructor (private hostApp: HostAppService) {\n        super()\n    }\n\n    getComponentType (): any {\n        if (this.hostApp.platform === Platform.Windows) {\n            return ShellSettingsTabComponent\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-local/src/tabContextMenu.ts",
    "content": "import { Inject, Injectable, Optional } from '@angular/core'\nimport { ConfigService, BaseTabComponent, TabContextMenuItemProvider, MenuItemOptions, ProfilesService, TranslateService } from 'tabby-core'\nimport { TerminalTabComponent } from './components/terminalTab.component'\nimport { TerminalService } from './services/terminal.service'\nimport { LocalProfile, UACService } from './api'\n\n/** @hidden */\n@Injectable()\nexport class NewTabContextMenu extends TabContextMenuItemProvider {\n    weight = 10\n\n    constructor (\n        public config: ConfigService,\n        private profilesService: ProfilesService,\n        private terminalService: TerminalService,\n        @Optional() @Inject(UACService) private uac: UACService|undefined,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]> {\n        const profiles = (await this.profilesService.getProfiles()).filter(x => x.type === 'local') as LocalProfile[]\n\n        const items: MenuItemOptions[] = [\n            {\n                label: this.translate.instant('New terminal'),\n                click: () => {\n                    if (tab instanceof TerminalTabComponent) {\n                        this.profilesService.openNewTabForProfile(tab.profile)\n                    } else {\n                        this.terminalService.openTab()\n                    }\n                },\n            },\n            {\n                label: this.translate.instant('New with profile'),\n                submenu: profiles.map(profile => ({\n                    label: profile.name,\n                    click: async () => {\n                        let workingDirectory = profile.options.cwd\n                        if (!workingDirectory && tab instanceof TerminalTabComponent) {\n                            workingDirectory = await tab.session?.getWorkingDirectory() ?? null\n                        }\n                        await this.terminalService.openTab(profile, workingDirectory)\n                    },\n                })),\n            },\n        ]\n\n        if (this.uac?.isAvailable) {\n            items.push({\n                label: this.translate.instant('New admin tab'),\n                submenu: profiles.map(profile => ({\n                    label: profile.name,\n                    click: () => {\n                        this.profilesService.openNewTabForProfile({\n                            ...profile,\n                            options: {\n                                ...profile.options,\n                                runAsAdministrator: true,\n                            },\n                        })\n                    },\n                })),\n            })\n        }\n\n        if (tab instanceof TerminalTabComponent && tabHeader && this.uac?.isAvailable) {\n            const terminalTab = tab\n            items.push({\n                label: this.translate.instant('Duplicate as administrator'),\n                click: () => {\n                    this.profilesService.openNewTabForProfile({\n                        ...terminalTab.profile,\n                        options: {\n                            ...terminalTab.profile.options,\n                            runAsAdministrator: true,\n                        },\n                    })\n                },\n            })\n        }\n\n        return items\n    }\n}\n"
  },
  {
    "path": "tabby-local/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-local/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\n        \"../../app/node_modules/*\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-local/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'local',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-plugin-manager/package.json",
    "content": "{\n  \"name\": \"tabby-plugin-manager\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Tabby's plugin manager\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/semver\": \"^7.1.0\",\n    \"semver\": \"^7.1.1\"\n  },\n  \"peerDependencies\": {\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/src/components/pluginsSettingsTab.component.pug",
    "content": ".d-flex.mb-3\n    h3(translate) Plugins\n    button.btn.btn-secondary.btn-sm.ms-auto((click)='openPluginsFolder()')\n        i.fas.fa-folder\n        span(translate) Plugins folder\n\n.alert.alert-danger(*ngIf='errorMessage')\n    strong(\n        translate='Error in {plugin}:',\n        [translateParams]='{plugin: erroredPlugin}'\n    )\n    pre {{errorMessage}}\n\nul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Available\n        ng-template(ngbNavContent)\n            .input-group.mb-3.mt-3\n                .input-group-text\n                    i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='!availablePluginsReady')\n                    i.fas.fa-fw.fa-search(*ngIf='availablePluginsReady')\n                input.form-control(\n                    type='text',\n                    [(ngModel)]='availableFilter',\n                    (ngModelChange)='searchAvailable(availableFilter)',\n                    [placeholder]='\"Search plugins\"|translate'\n                )\n\n            ngb-accordion.mb-4(*ngIf='availablePlugins$', [closeOthers]='true')\n                ng-container(*ngFor='let plugin of (availablePlugins$|async)')\n                    ngb-panel(*ngIf='!isAlreadyInstalled(plugin)')\n                        ng-template(ngbPanelTitle)\n                            .text-left\n                                strong.d-block {{plugin.name}}\n                                small.d-block.text-muted {{plugin.description}}\n                        ng-template(ngbPanelContent)\n                            .row\n                                .col-4\n                                    div.d-flex.flex-column.flex-md-row.gap-2\n                                        button.btn.btn-primary.btn-block.justify-content-center(\n                                            (click)='installPlugin(plugin)',\n                                            [disabled]='busy.has(plugin.name)'\n                                        )\n                                            i.fas.fa-fw.fa-cloud-download(*ngIf='busy.get(plugin.name) != BusyState.Installing')\n                                            i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')\n                                            span.ms-2(translate) Get\n    \n                                        button.btn.btn-secondary.btn-block.justify-content-center(\n                                            *ngIf='plugin.homepage',\n                                            (click)='showPluginHomepage(plugin)'\n                                        )\n                                            i.fas.fa-fw.fa-external-link-alt\n                                            span.ms-2(translate) Homepage\n\n                                .col-8\n                                    ng-container(*ngTemplateOutlet='pluginInfo; context: { plugin }')\n\n                            .mt-2 {{plugin.description}}\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Installed\n        ng-template(ngbNavContent)\n            .input-group.mb-3.mt-3\n                .input-group-text\n                    i.fas.fa-fw.fa-search\n                input.form-control(\n                    type='text',\n                    [(ngModel)]='installedFilter',\n                    (ngModelChange)='searchInstalled(installedFilter)',\n                    [placeholder]='\"Search plugins\"|translate'\n                )\n\n            ngb-accordion.mb-4([closeOthers]='true')\n                ng-container(*ngFor='let plugin of installedPlugins$')\n                    ngb-panel\n                        ng-template(ngbPanelTitle)\n                            .text-left.me-auto\n                                div\n                                    strong {{plugin.name}}\n                                    small.text-muted.ms-2(*ngIf='plugin.isBuiltin', translate) Built-in\n                                    small.text-warning.ms-2(*ngIf='!isPluginEnabled(plugin)', translate) Disabled\n                                small.d-block.text-muted {{plugin.description}}\n\n                            button.btn.btn-primary.ms-2(\n                                *ngIf='knownUpgrades[plugin.name]',\n                                (click)='upgradePlugin(plugin)',\n                                [disabled]='busy.has(plugin.name)'\n                            )\n                                i.fas.fa-fw.fa-arrow-up(*ngIf='busy.get(plugin.name) != BusyState.Installing')\n                                i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')\n                                span(\n                                    translate='Upgrade to {version}',\n                                    [translateParams]='{version: knownUpgrades[plugin.name]?.version}'\n                                )\n\n                        ng-template(ngbPanelContent)\n                            .row\n                                .col-4\n                                    button.btn.btn-warning.btn-block.justify-content-center(\n                                        (click)='togglePlugin(plugin)',\n                                        *ngIf='isPluginEnabled(plugin)',\n                                        [disabled]='!canDisablePlugin(plugin)',\n                                        translate\n                                    ) Disable\n\n                                    button.btn.btn-success.btn-block.justify-content-center(\n                                        (click)='togglePlugin(plugin)',\n                                        *ngIf='canDisablePlugin(plugin) && !isPluginEnabled(plugin)',\n                                        translate\n                                    ) Enable\n\n                                    button.btn.btn-danger.btn-block.justify-content-center(\n                                        (click)='uninstallPlugin(plugin)',\n                                        *ngIf='!plugin.isBuiltin',\n                                        [disabled]='busy.has(plugin.name)'\n                                    )\n                                        i.fas.fa-fw.fa-trash(*ngIf='busy.get(plugin.name) != BusyState.Uninstalling')\n                                        i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Uninstalling')\n                                        span(translate) Uninstall\n                                .col-8\n                                    ng-container(*ngTemplateOutlet='pluginInfo; context: { plugin }')\n\n                            .mt-2 {{plugin.description}}\n\nng-template(#pluginInfo, let-plugin='plugin')\n    .row.align-items-center\n        .col-4\n            strong(translate) Version\n        .col-8\n            span {{plugin.version}}\n    .row.align-items-center\n        .col-4\n            strong(translate) Author\n        .col-8\n            .badge.text-bg-success(*ngIf='plugin.isOfficial')\n                i.fas.fa-check\n                span.ms-1(translate) Official\n            a.btn.btn-link.px-0.w-auto((click)='showPluginInfo(plugin)', *ngIf='!plugin.isOfficial')\n                span {{plugin.author}}\n                i.fas.fa-fw.fa-external-link-alt.ms-2\n\n.mb-4([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-plugin-manager/src/components/pluginsSettingsTab.component.scss",
    "content": "::ng-deep .card-header {\n    padding: 0;\n\n    > button {\n        width: 100%;\n    }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { BehaviorSubject, Observable, debounceTime, distinctUntilChanged, first, tap, flatMap, map } from 'rxjs'\nimport semverGt from 'semver/functions/gt'\n\nimport { Component, HostBinding, Input } from '@angular/core'\nimport { ConfigService, PlatformService, PluginInfo } from 'tabby-core'\nimport { PluginManagerService } from '../services/pluginManager.service'\n\nenum BusyState { Installing = 'Installing', Uninstalling = 'Uninstalling' }\n\nconst FORCE_ENABLE = ['tabby-core', 'tabby-settings', 'tabby-electron', 'tabby-web', 'tabby-plugin-manager']\n\n_('Search plugins')\n\n/** @hidden */\n@Component({\n    templateUrl: './pluginsSettingsTab.component.pug',\n    styleUrls: ['./pluginsSettingsTab.component.scss'],\n})\nexport class PluginsSettingsTabComponent {\n    BusyState = BusyState\n    @Input() availablePlugins$: Observable<PluginInfo[]>\n    @Input() availablePluginsQuery$ = new BehaviorSubject<string>('')\n    @Input() availablePluginsReady = false\n    @Input() installedPluginsQuery$ = new BehaviorSubject<string>('')\n    @Input() knownUpgrades: Record<string, PluginInfo|null> = {}\n    @Input() busy = new Map<string, BusyState>()\n    @Input() erroredPlugin: string\n    @Input() errorMessage: string\n\n    @HostBinding('class.content-box') true\n\n    installedPlugins$: PluginInfo[] = []\n    installedFilter = ''\n    availableFilter = ''\n\n    constructor (\n        private config: ConfigService,\n        private platform: PlatformService,\n        public pluginManager: PluginManagerService,\n    ) {\n    }\n\n    ngOnInit () {\n        this.availablePlugins$ = this.availablePluginsQuery$\n            .asObservable()\n            .pipe(\n                debounceTime(200),\n                distinctUntilChanged(),\n                flatMap(query => {\n                    this.availablePluginsReady = false\n                    return this.pluginManager.listAvailable(query).pipe(tap(() => {\n                        this.availablePluginsReady = true\n                    }))\n                }),\n            )\n        this.availablePlugins$.pipe(first(), map((plugins: PluginInfo[]) => {\n            plugins.sort((a, b) => a.name > b.name ? 1 : -1)\n            return plugins\n        })).subscribe(available => {\n            for (const plugin of this.pluginManager.installedPlugins) {\n                this.knownUpgrades[plugin.name] = available.find(x => x.name === plugin.name && semverGt(x.version, plugin.version)) ?? null\n            }\n        })\n\n        this.installedPluginsQuery$\n            .asObservable()\n            .pipe(\n                debounceTime(200),\n                distinctUntilChanged(),\n                flatMap(query => {\n                    return this.pluginManager.listInstalled(query)\n                }),\n            ).subscribe(plugin => {\n                this.installedPlugins$ = plugin\n            })\n    }\n\n    openPluginsFolder (): void {\n        this.platform.openPath(this.pluginManager.userPluginsPath)\n    }\n\n    searchAvailable (query: string) {\n        this.availablePluginsQuery$.next(query)\n    }\n\n    searchInstalled (query: string) {\n        this.installedPluginsQuery$.next(query)\n    }\n\n    isAlreadyInstalled (plugin: PluginInfo): boolean {\n        return this.pluginManager.installedPlugins.some(x => x.name === plugin.name)\n    }\n\n    async installPlugin (plugin: PluginInfo): Promise<void> {\n        this.busy.set(plugin.name, BusyState.Installing)\n        try {\n            await this.pluginManager.installPlugin(plugin)\n            this.busy.delete(plugin.name)\n            this.config.requestRestart()\n        } catch (err) {\n            console.error('Error installing plugin', plugin.name, err)\n            this.erroredPlugin = plugin.name\n            this.errorMessage = err\n            this.busy.delete(plugin.name)\n            throw err\n        }\n    }\n\n    async uninstallPlugin (plugin: PluginInfo): Promise<void> {\n        this.busy.set(plugin.name, BusyState.Uninstalling)\n        try {\n            await this.pluginManager.uninstallPlugin(plugin)\n            this.busy.delete(plugin.name)\n            this.config.requestRestart()\n        } catch (err) {\n            console.error('Error uninstalling plugin', plugin.name, err)\n            this.erroredPlugin = plugin.name\n            this.errorMessage = err\n            this.busy.delete(plugin.name)\n            throw err\n        }\n    }\n\n    async upgradePlugin (plugin: PluginInfo): Promise<void> {\n        return this.installPlugin(this.knownUpgrades[plugin.name]!)\n    }\n\n    showPluginInfo (plugin: PluginInfo) {\n        this.platform.openExternal('https://www.npmjs.com/package/' + plugin.packageName)\n    }\n\n    showPluginHomepage (plugin: PluginInfo) {\n        this.platform.openExternal(plugin.homepage ?? '')\n    }\n\n    isPluginEnabled (plugin: PluginInfo) {\n        return !this.config.store.pluginBlacklist.includes(plugin.name)\n    }\n\n    canDisablePlugin (plugin: PluginInfo) {\n        return !FORCE_ENABLE.includes(plugin.packageName)\n    }\n\n    togglePlugin (plugin: PluginInfo) {\n        if (this.isPluginEnabled(plugin)) {\n            this.disablePlugin(plugin)\n        } else {\n            this.enablePlugin(plugin)\n        }\n    }\n\n    enablePlugin (plugin: PluginInfo) {\n        this.config.store.pluginBlacklist = this.config.store.pluginBlacklist.filter(x => x !== plugin.name)\n        this.config.save()\n        this.config.requestRestart()\n    }\n\n    disablePlugin (plugin: PluginInfo) {\n        this.config.store.pluginBlacklist = [...this.config.store.pluginBlacklist, plugin.name]\n        this.config.save()\n        this.config.requestRestart()\n    }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/src/index.ts",
    "content": "import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\n\nimport TabbyCorePlugin from 'tabby-core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { PluginsSettingsTabComponent } from './components/pluginsSettingsTab.component'\nimport { PluginManagerService } from './services/pluginManager.service'\nimport { PluginsSettingsTabProvider } from './settings'\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        NgbModule,\n        TabbyCorePlugin,\n    ],\n    providers: [\n        { provide: SettingsTabProvider, useClass: PluginsSettingsTabProvider, multi: true },\n    ],\n    declarations: [\n        PluginsSettingsTabComponent,\n    ],\n})\nexport default class PluginManagerModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class\n\nexport { PluginManagerService }\n"
  },
  {
    "path": "tabby-plugin-manager/src/services/pluginManager.service.ts",
    "content": "import axios from 'axios'\nimport { compare as semverCompare } from 'semver'\nimport { Observable, from, forkJoin, map, of } from 'rxjs'\nimport { Injectable, Inject } from '@angular/core'\nimport { Logger, LogService, PlatformService, BOOTSTRAP_DATA, BootstrapData, PluginInfo } from 'tabby-core'\nimport { PLUGIN_BLACKLIST } from '../../../app/src/pluginBlacklist'\n\nconst OFFICIAL_NPM_ACCOUNT = 'eugenepankov'\n\n\n@Injectable({ providedIn: 'root' })\nexport class PluginManagerService {\n    logger: Logger\n    userPluginsPath: string\n    installedPlugins: PluginInfo[]\n\n    private constructor (\n        log: LogService,\n        private platform: PlatformService,\n        @Inject(BOOTSTRAP_DATA) bootstrapData: BootstrapData,\n    ) {\n        this.logger = log.create('pluginManager')\n        this.installedPlugins = [...bootstrapData.installedPlugins]\n        this.installedPlugins.sort((a, b) => a.name.localeCompare(b.name))\n        this.userPluginsPath = bootstrapData.userPluginsPath\n    }\n\n    listAvailable (query?: string): Observable<PluginInfo[]> {\n        return forkJoin(\n            this._listAvailableInternal('tabby-', 'tabby-plugin', query),\n            this._listAvailableInternal('terminus-', 'terminus-plugin', query),\n        ).pipe(\n            map(x => x.reduce((a, b) => a.concat(b), [])),\n            map(x => {\n                const names = new Set<string>()\n                return x.filter(item => {\n                    if (names.has(item.name)) {\n                        return false\n                    }\n                    names.add(item.name)\n                    return true\n                })\n            }),\n            map(x => x.sort((a, b) => a.name.localeCompare(b.name))),\n        )\n    }\n\n    listInstalled (query: string): Observable<PluginInfo[]> {\n        return of(this.installedPlugins.filter(x=>x.name.includes(query)))\n    }\n\n    _listAvailableInternal (namePrefix: string, keyword: string, query?: string): Observable<PluginInfo[]> {\n        return from(\n            axios.get(`https://registry.npmjs.com/-/v1/search?text=keywords%3A${keyword}%20${query}&size=250`),\n        ).pipe(\n            map(response => response.data.objects\n                .filter(item => !item.keywords?.includes('tabby-dummy-transition-plugin'))\n                .map(item => ({\n                    name: item.package.name.substring(namePrefix.length),\n                    packageName: item.package.name,\n                    description: item.package.description,\n                    version: item.package.version,\n                    homepage: item.package.links.homepage,\n                    author: item.package.author?.name,\n                    isOfficial: item.package.publisher.username === OFFICIAL_NPM_ACCOUNT,\n                })),\n            ),\n            map(plugins => plugins.filter(x => x.packageName.startsWith(namePrefix))),\n            map(plugins => plugins.filter(x => !PLUGIN_BLACKLIST.includes(x.packageName))),\n            map(plugins => {\n                const mapping: Record<string, PluginInfo[]> = {}\n                for (const p of plugins) {\n                    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                    mapping[p.name] ??= []\n                    mapping[p.name].push(p)\n                }\n                return Object.values(mapping).map(list => {\n                    list.sort((a, b) => -semverCompare(a.version, b.version))\n                    return list[0]\n                })\n            }),\n            map(plugins => plugins.sort((a, b) => a.name.localeCompare(b.name))),\n        )\n    }\n\n    async installPlugin (plugin: PluginInfo): Promise<void> {\n        try {\n            await this.platform.installPlugin(plugin.packageName, plugin.version)\n            this.installedPlugins = this.installedPlugins.filter(x => x.packageName !== plugin.packageName)\n            this.installedPlugins.push(plugin)\n        } catch (err) {\n            this.logger.error(err)\n            throw err\n        }\n    }\n\n    async uninstallPlugin (plugin: PluginInfo): Promise<void> {\n        try {\n            await this.platform.uninstallPlugin(plugin.packageName)\n            this.installedPlugins = this.installedPlugins.filter(x => x.packageName !== plugin.packageName)\n        } catch (err) {\n            this.logger.error(err)\n            throw err\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/src/settings.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { PluginsSettingsTabComponent } from './components/pluginsSettingsTab.component'\n\n/** @hidden */\n@Injectable()\nexport class PluginsSettingsTabProvider extends SettingsTabProvider {\n    id = 'plugins'\n    title = 'Plugins'\n\n    getComponentType (): any {\n        return PluginsSettingsTabComponent\n    }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n  }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-plugin-manager/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'plugin-manager',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-serial/package.json",
    "content": "{\n  \"name\": \"tabby-serial\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Serial connections for Tabby\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/node\": \"14.14.14\",\n    \"ansi-colors\": \"^4.1.1\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@angular/platform-browser-dynamic\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\",\n    \"tabby-terminal\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-serial/src/api.ts",
    "content": "import stripAnsi from 'strip-ansi'\nimport { SerialPortStream } from '@serialport/stream'\nimport { LogService, NotificationsService } from 'tabby-core'\nimport { Subject, Observable } from 'rxjs'\nimport { Injector, NgZone } from '@angular/core'\nimport { BaseSession, ConnectableTerminalProfile, InputProcessingOptions, InputProcessor, LoginScriptsOptions, SessionMiddleware, StreamProcessingOptions, TerminalStreamProcessor, UTF8SplitterMiddleware } from 'tabby-terminal'\nimport { SerialService } from './services/serial.service'\n\nexport interface SerialProfile extends ConnectableTerminalProfile {\n    options: SerialProfileOptions\n}\n\nexport interface SerialProfileOptions extends StreamProcessingOptions, LoginScriptsOptions {\n    port: string\n    baudrate: number | null\n    databits: 5 | 6 | 7 | 8\n    stopbits: 1 | 1.5 | 2\n    parity: string\n    rtscts: boolean\n    xon: boolean\n    xoff: boolean\n    xany: boolean\n    slowSend: boolean\n    input: InputProcessingOptions,\n}\n\nexport const BAUD_RATES = [\n    110, 150, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1500000,\n]\n\nexport interface SerialPortInfo {\n    name: string\n    description?: string\n}\n\nclass SlowFeedMiddleware extends SessionMiddleware {\n    feedFromTerminal (data: Buffer): void {\n        for (const byte of data) {\n            this.outputToSession.next(Buffer.from([byte]))\n        }\n    }\n}\n\nexport class SerialSession extends BaseSession {\n    serial: SerialPortStream|null\n\n    get serviceMessage$ (): Observable<string> { return this.serviceMessage }\n    private serviceMessage = new Subject<string>()\n    private streamProcessor: TerminalStreamProcessor\n    private zone: NgZone\n    private notifications: NotificationsService\n    private serialService: SerialService\n\n    constructor (injector: Injector, public profile: SerialProfile) {\n        super(injector.get(LogService).create(`serial-${profile.options.port}`))\n        this.serialService = injector.get(SerialService)\n\n        this.zone = injector.get(NgZone)\n        this.notifications = injector.get(NotificationsService)\n\n        this.streamProcessor = new TerminalStreamProcessor(profile.options)\n        this.middleware.push(this.streamProcessor)\n\n        if (this.profile.options.slowSend) {\n            this.middleware.unshift(new SlowFeedMiddleware())\n        }\n\n        this.middleware.push(new UTF8SplitterMiddleware())\n        this.middleware.push(new InputProcessor(profile.options.input))\n\n        this.setLoginScriptsOptions(profile.options)\n    }\n\n    async start (): Promise<void> {\n        if (!this.profile.options.port) {\n            this.profile.options.port = (await this.serialService.listPorts())[0].name\n        }\n\n        const serial = this.serial = new SerialPortStream({\n            binding: this.serialService.detectBinding(),\n            path: this.profile.options.port,\n            autoOpen: false,\n            baudRate: parseInt(this.profile.options.baudrate as any),\n            dataBits: this.profile.options.databits,\n            stopBits: this.profile.options.stopbits,\n            parity: this.profile.options.parity,\n            rtscts: this.profile.options.rtscts,\n            xon: this.profile.options.xon,\n            xoff: this.profile.options.xoff,\n            xany: this.profile.options.xany,\n        })\n        let connected = false\n        await new Promise(async (resolve, reject) => {\n            serial.on('open', () => {\n                connected = true\n                this.zone.run(resolve)\n            })\n            serial.on('error', error => {\n                this.zone.run(() => {\n                    if (connected) {\n                        this.notifications.error(error.message)\n                    } else {\n                        reject(error)\n                    }\n                    this.destroy()\n                })\n            })\n            serial.on('close', () => {\n                this.emitServiceMessage('Port closed')\n                this.destroy()\n            })\n\n            try {\n                serial.open()\n            } catch (e) {\n                this.notifications.error(e.message)\n                reject(e)\n            }\n        })\n\n        this.open = true\n        setTimeout(() => this.streamProcessor.start())\n\n        serial.on('readable', () => {\n            this.emitOutput(serial.read())\n        })\n\n        serial.on('end', () => {\n            this.logger.info('Shell session ended')\n            if (this.open) {\n                this.destroy()\n            }\n        })\n\n        this.loginScriptProcessor?.executeUnconditionalScripts()\n    }\n\n    write (data: Buffer): void {\n        this.serial?.write(data)\n    }\n\n    async destroy (): Promise<void> {\n        this.serviceMessage.complete()\n        await super.destroy()\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-empty-function\n    resize (_, __) {\n        this.streamProcessor.resize()\n    }\n\n    kill (_?: string): void {\n        this.serial?.close()\n    }\n\n    emitServiceMessage (msg: string): void {\n        this.serviceMessage.next(msg)\n        this.logger.info(stripAnsi(msg))\n    }\n\n    async getChildProcesses (): Promise<any[]> {\n        return []\n    }\n\n    async gracefullyKillProcess (): Promise<void> {\n        this.kill('TERM')\n    }\n\n    supportsWorkingDirectory (): boolean {\n        return false\n    }\n\n    async getWorkingDirectory (): Promise<string|null> {\n        return null\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/components/serialProfileSettings.component.pug",
    "content": "ul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) General\n        ng-template(ngbNavContent)\n            .row\n                .col-6(ng:if='hostApp.platform !== Platform.Web')\n                    .mb-3\n                        label(translate) Device\n                        input.form-control(\n                            type='text',\n                            alwaysVisibleTypeahead,\n                            [(ngModel)]='profile.options.port',\n                            [ngbTypeahead]='portsAutocomplete',\n                            [resultFormatter]='portsFormatter'\n                        )\n\n                .col-6\n                    .mb-3\n                        label(translate) Baud rate\n                        input.form-control(\n                            type='number',\n                            alwaysVisibleTypeahead,\n                            placeholder='Ask every time',\n                            [(ngModel)]='profile.options.baudrate',\n                            [ngbTypeahead]='baudratesAutocomplete'\n                        )\n\n            stream-processing-settings([options]='profile.options')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Advanced\n        ng-template(ngbNavContent)\n            .form-line\n                .header\n                    .title(translate) Data bits\n                input.form-control(\n                    type='number',\n                    placeholder='8',\n                    [(ngModel)]='profile.options.databits',\n                )\n\n            .form-line\n                .header\n                    .title(translate) Stop bits\n                input.form-control(\n                    type='number',\n                    placeholder='1',\n                    [(ngModel)]='profile.options.stopbits',\n                )\n\n            .form-line\n                .header\n                    .title(translate) Parity\n                select.form-control(\n                    type='text',\n                    [(ngModel)]='profile.options.parity'\n                )\n                    option(value='none', translate) None\n                    option(value='even') Even\n                    option(value='odd') Odd\n                    option(value='mark', ng:if='hostApp.platform === Platform.Windows') Mark\n                    option(value='space', ng:if='hostApp.platform === Platform.Windows') Space\n\n            .form-line\n                .header\n                    .title RTS / CTS\n                toggle([(ngModel)]='profile.options.rtscts')\n\n            .form-line\n                .header\n                    .title XON\n                toggle([(ngModel)]='profile.options.xon')\n\n            .form-line\n                .header\n                    .title XOFF\n                toggle([(ngModel)]='profile.options.xoff')\n\n            .form-line\n                .header\n                    .title Xany\n                toggle([(ngModel)]='profile.options.xany')\n\n            .form-line\n                .header\n                    .title(translate) Slow feed\n                    .description(translate) Sends data one byte at a time\n                toggle([(ngModel)]='profile.options.slowSend')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Colors\n        ng-template(ngbNavContent)\n            color-scheme-selector([(model)]='profile.terminalColorScheme')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Login scripts\n        ng-template(ngbNavContent)\n            login-scripts-settings([options]='profile.options')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Input\n        ng-template(ngbNavContent)\n            input-processing-settings([options]='profile.options.input')\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-serial/src/components/serialProfileSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component } from '@angular/core'\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs'\nimport { FullyDefined, HostAppService, Platform, ProfileSettingsComponent } from 'tabby-core'\nimport { SerialPortInfo, BAUD_RATES, SerialProfile } from '../api'\nimport { SerialService } from '../services/serial.service'\nimport { SerialProfilesService } from '../profiles'\n\n/** @hidden */\n@Component({\n    templateUrl: './serialProfileSettings.component.pug',\n})\nexport class SerialProfileSettingsComponent implements ProfileSettingsComponent<SerialProfile, SerialProfilesService> {\n    profile: FullyDefined<SerialProfile>\n    foundPorts: SerialPortInfo[]\n    Platform = Platform\n\n    constructor (\n        private serial: SerialService,\n        public hostApp: HostAppService,\n    ) { }\n\n    portsAutocomplete = text$ => text$.pipe(map(() => {\n        return this.foundPorts.map(x => x.name)\n    }))\n\n    baudratesAutocomplete = text$ => text$.pipe(\n        debounceTime(200),\n        distinctUntilChanged(),\n        map((q: string) => [\n            null,\n            ...BAUD_RATES.filter(x => !q || x.toString().startsWith(q)),\n        ]),\n    )\n\n    portsFormatter = port => {\n        const p = this.foundPorts.find(x => x.name === port)\n        if (p?.description) {\n            return `${port} (${p.description})`\n        }\n        return port\n    }\n\n    async ngOnInit () {\n        this.foundPorts = await this.serial.listPorts()\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/components/serialTab.component.pug",
    "content": "terminal-toolbar([tab]='this')\n    i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open')\n    i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open')\n    strong {{profile.options.port}} ({{profile.options.baudrate}})\n\n    .me-auto\n\n    button.btn.btn-sm.btn-link.me-3((click)='changeBaudRate()', *ngIf='session && session.open && hostApp.platform !== Platform.Web')\n        span(translate) Change baud rate\n\n    button.btn.btn-sm.btn-link((click)='reconnect()', *ngIf='!session || !session.open')\n        i.fas.fa-redo\n        span(translate) Reconnect\n"
  },
  {
    "path": "tabby-serial/src/components/serialTab.component.scss",
    "content": "@import '../../../tabby-ssh/src/components/sshTab.component.scss';\n\n:host {\n    select {\n        width: auto;\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/components/serialTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport colors from 'ansi-colors'\nimport { Component, Injector } from '@angular/core'\nimport { Platform, SelectorService } from 'tabby-core'\nimport { BaseTerminalTabComponent, ConnectableTerminalTabComponent } from 'tabby-terminal'\nimport { SerialSession, BAUD_RATES, SerialProfile } from '../api'\n\n/** @hidden */\n@Component({\n    selector: 'serial-tab',\n    template: `${BaseTerminalTabComponent.template} ${require('./serialTab.component.pug')}`,\n    styleUrls: ['./serialTab.component.scss', ...BaseTerminalTabComponent.styles],\n    animations: BaseTerminalTabComponent.animations,\n})\nexport class SerialTabComponent extends ConnectableTerminalTabComponent<SerialProfile> {\n    session: SerialSession|null = null\n    Platform = Platform\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n        private selector: SelectorService,\n    ) {\n        super(injector)\n        this.enableToolbar = true\n    }\n\n    ngOnInit () {\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n            switch (hotkey) {\n                case 'home':\n                    this.sendInput('\\x1b[H' )\n                    break\n                case 'end':\n                    this.sendInput('\\x1b[F' )\n                    break\n                case 'restart-serial-session':\n                    this.reconnect()\n                    break\n            }\n        })\n\n        super.ngOnInit()\n\n        setImmediate(() => {\n            this.setTitle(this.profile.name)\n        })\n    }\n\n    async initializeSession () {\n        super.initializeSession()\n\n        const session = new SerialSession(this.injector, this.profile)\n        this.setSession(session)\n\n        this.startSpinner(this.translate.instant(_('Connecting')))\n\n        try {\n            await this.session!.start()\n            this.stopSpinner()\n            session.emitServiceMessage(this.translate.instant(_('Port opened')))\n        } catch (e) {\n            this.stopSpinner()\n            this.write(colors.black.bgRed(' X ') + ' ' + colors.red(e.message) + '\\r\\n')\n            return\n        }\n        this.session!.resize(this.size.columns, this.size.rows)\n    }\n\n    protected attachSessionHandlers () {\n        this.attachSessionHandler(this.session!.serviceMessage$, msg => {\n            this.write(`\\r\\n${colors.black.bgWhite(' Serial ')} ${msg}\\r\\n`)\n            this.session?.resize(this.size.columns, this.size.rows)\n        })\n        super.attachSessionHandlers()\n    }\n\n    protected onSessionDestroyed (): void {\n        if (this.frontend) {\n            // Session was closed abruptly\n            this.write('\\r\\n' + colors.black.bgWhite(' SERIAL ') + ` session closed\\r\\n`)\n\n            super.onSessionDestroyed()\n        }\n    }\n\n    async changeBaudRate () {\n        const rate = await this.selector.show(\n            this.translate.instant(_('Baud rate')),\n            BAUD_RATES.map(x => ({\n                name: x.toString(), result: x,\n            })),\n        )\n        this.session?.serial?.update({ baudRate: rate })\n        this.profile.options.baudrate = rate\n    }\n\n    protected isSessionExplicitlyTerminated (): boolean {\n        return super.isSessionExplicitlyTerminated() ||\n        this.recentInputs.endsWith('close\\r') ||\n        this.recentInputs.endsWith('quit\\r')\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/config.ts",
    "content": "import { ConfigProvider } from 'tabby-core'\n\n/** @hidden */\nexport class SerialConfigProvider extends ConfigProvider {\n    defaults = {\n        hotkeys: {\n            serial: [\n                'Alt-K',\n            ],\n            'restart-serial-session': [],\n        },\n    }\n\n    platformDefaults = { }\n}\n"
  },
  {
    "path": "tabby-serial/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class SerialHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'serial',\n            name: this.translate.instant('Show Serial connections'),\n        },\n        {\n            id: 'restart-serial-session',\n            name: this.translate.instant('Restart current serial session'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { ToastrModule } from 'ngx-toastr'\nimport TabbyCoreModule, { ConfigProvider, TabRecoveryProvider, HotkeyProvider, ProfileProvider } from 'tabby-core'\nimport TabbyTerminalModule from 'tabby-terminal'\n\nimport { SerialProfileSettingsComponent } from './components/serialProfileSettings.component'\nimport { SerialTabComponent } from './components/serialTab.component'\n\nimport { SerialConfigProvider } from './config'\nimport { RecoveryProvider } from './recoveryProvider'\nimport { SerialHotkeyProvider } from './hotkeys'\nimport { SerialProfilesService } from './profiles'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        NgbModule,\n        CommonModule,\n        FormsModule,\n        ToastrModule,\n        TabbyCoreModule,\n        TabbyTerminalModule,\n    ],\n    providers: [\n        { provide: ConfigProvider, useClass: SerialConfigProvider, multi: true },\n        { provide: ProfileProvider, useClass: SerialProfilesService, multi: true },\n        { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true },\n        { provide: HotkeyProvider, useClass: SerialHotkeyProvider, multi: true },\n    ],\n    declarations: [\n        SerialProfileSettingsComponent,\n        SerialTabComponent,\n    ],\n})\nexport default class SerialModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class\n\nexport { SerialTabComponent }\nexport { SerialSession } from './api'\n"
  },
  {
    "path": "tabby-serial/src/profiles.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport slugify from 'slugify'\nimport deepClone from 'clone-deep'\nimport { Injectable } from '@angular/core'\nimport { NewTabParameters, SelectorService, HostAppService, Platform, TranslateService, ConnectableProfileProvider } from 'tabby-core'\nimport { SerialProfileSettingsComponent } from './components/serialProfileSettings.component'\nimport { SerialTabComponent } from './components/serialTab.component'\nimport { SerialService } from './services/serial.service'\nimport { BAUD_RATES, SerialProfile } from './api'\n\n@Injectable({ providedIn: 'root' })\nexport class SerialProfilesService extends ConnectableProfileProvider<SerialProfile> {\n    id = 'serial'\n    name = _('Serial')\n    settingsComponent = SerialProfileSettingsComponent\n    configDefaults = {\n        options: {\n            port: null,\n            baudrate: null,\n            databits: 8,\n            stopbits: 1,\n            parity: 'none',\n            rtscts: false,\n            xon: false,\n            xoff: false,\n            xany: false,\n            inputMode: null,\n            outputMode: null,\n            inputNewlines: null,\n            outputNewlines: null,\n            scripts: [],\n            slowSend: false,\n            input: { backspace: 'backspace' },\n        },\n        clearServiceMessagesOnConnect: false,\n    }\n\n    constructor (\n        private selector: SelectorService,\n        private serial: SerialService,\n        private hostApp: HostAppService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getBuiltinProfiles (): Promise<SerialProfile[]> {\n        if (this.hostApp.platform === Platform.Web) {\n            return [\n                {\n                    id: `serial:web`,\n                    type: 'serial',\n                    name: this.translate.instant('Serial connection'),\n                    icon: 'fas fa-microchip',\n                    isBuiltin: true,\n                } as SerialProfile,\n            ]\n        }\n\n        return [\n            {\n                id: `serial:template`,\n                type: 'serial',\n                name: this.translate.instant('Serial connection'),\n                icon: 'fas fa-microchip',\n                isBuiltin: true,\n                isTemplate: true,\n            } as SerialProfile,\n            ...(await this.serial.listPorts()).map(p => ({\n                id: `serial:port-${slugify(p.name).replace('.', '-')}`,\n                type: 'serial',\n                name: p.description ?\n                    this.translate.instant('Serial: {description}', p) :\n                    this.translate.instant('Serial'),\n                icon: 'fas fa-microchip',\n                isBuiltin: true,\n                options: {\n                    port: p.name,\n                },\n            } as SerialProfile)),\n        ]\n    }\n\n    async getNewTabParameters (profile: SerialProfile): Promise<NewTabParameters<SerialTabComponent>> {\n        if (!profile.options.baudrate) {\n            profile = deepClone(profile)\n            profile.options.baudrate = await this.selector.show(\n                this.translate.instant('Baud rate'),\n                BAUD_RATES.map(x => ({\n                    name: x.toString(), result: x,\n                })),\n            )\n        }\n        return {\n            type: SerialTabComponent,\n            inputs: { profile },\n        }\n    }\n\n    getSuggestedName (profile: SerialProfile): string {\n        return this.getDescription(profile)\n    }\n\n    getDescription (profile: SerialProfile): string {\n        return profile.options.port\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/recoveryProvider.ts",
    "content": "import { Injectable, Injector } from '@angular/core'\nimport { TabRecoveryProvider, NewTabParameters, RecoveryToken, ProfilesService } from 'tabby-core'\n\nimport { SerialTabComponent } from './components/serialTab.component'\n\n/** @hidden */\n@Injectable()\nexport class RecoveryProvider extends TabRecoveryProvider<SerialTabComponent> {\n    constructor (private injector: Injector) { super() }\n\n    async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {\n        return recoveryToken.type === 'app:serial-tab'\n    }\n\n    async recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<SerialTabComponent>> {\n        return {\n            type: SerialTabComponent,\n            inputs: {\n                profile: this.injector.get(ProfilesService).getConfigProxyForProfile(recoveryToken.profile),\n                savedState: recoveryToken.savedState,\n            },\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-serial/src/services/serial.service.ts",
    "content": "import { Injectable, Injector } from '@angular/core'\nimport WSABinding from 'serialport-binding-webserialapi'\nimport AbstractBinding from '@serialport/binding-abstract'\nimport { autoDetect } from '@serialport/bindings-cpp'\nimport { HostAppService, PartialProfile, Platform, ProfilesService } from 'tabby-core'\nimport { SerialPortInfo, SerialProfile } from '../api'\nimport { SerialTabComponent } from '../components/serialTab.component'\n\n@Injectable({ providedIn: 'root' })\nexport class SerialService {\n    private constructor (\n        private injector: Injector,\n        private hostApp: HostAppService,\n    ) { }\n\n    detectBinding (): typeof AbstractBinding {\n        return this.hostApp.platform === Platform.Web ? WSABinding : autoDetect()\n    }\n\n    async listPorts (): Promise<SerialPortInfo[]> {\n        try {\n            return (await this.detectBinding().list()).map(x => ({\n                name: x.path,\n                description: `${x.manufacturer ?? ''} ${x.serialNumber ?? ''}`.trim() || undefined,\n            }))\n        } catch (err) {\n            console.error('Failed to list serial ports', err)\n            return []\n        }\n    }\n\n    quickConnect (query: string): Promise<SerialTabComponent|null> {\n        let path = query\n        let baudrate = 115200\n        if (query.includes('@')) {\n            baudrate = parseInt(path.split('@')[1])\n            path = path.split('@')[0]\n        }\n        const profile: PartialProfile<SerialProfile> = {\n            name: query,\n            type: 'serial',\n            options: {\n                port: path,\n                baudrate: baudrate,\n            },\n        }\n        window.localStorage.lastSerialConnection = JSON.stringify(profile)\n        return this.injector.get(ProfilesService).openNewTabForProfile(profile) as Promise<SerialTabComponent|null>\n    }\n}\n"
  },
  {
    "path": "tabby-serial/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-serial/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"include\": [\"src\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-serial/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'serial',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-settings/README.md",
    "content": "# Tabby Settings Plugin\n\n* tabbed settings interface\n\nUsing the API:\n\n```ts\nimport { SettingsTabProvider } from 'tabby-settings'\n```\n\nExporting your subclasses:\n\n```ts\n@NgModule({\n  ...\n  providers: [\n    ...\n    { provide: SettingsTabProvider, useClass: MySettingsTab, multi: true },\n    ...\n  ]\n})\n```\n"
  },
  {
    "path": "tabby-settings/package.json",
    "content": "{\n  \"name\": \"tabby-settings\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Tabby terminal settings page\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/marked\": \"^5.0.1\",\n    \"marked\": \"^5.1.2\",\n    \"ngx-infinite-scroll\": \"^16\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-settings/src/api.ts",
    "content": "/**\n * Extend to add your own settings tabs\n */\nexport abstract class SettingsTabProvider {\n    id: string\n    icon: string\n    title: string\n    weight = 0\n    prioritized = false\n\n    getComponentType (): any {\n        return null\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/buttonProvider.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ToolbarButtonProvider, ToolbarButton, AppService, HostAppService, HotkeysService, TranslateService } from 'tabby-core'\n\nimport { SettingsTabComponent } from './components/settingsTab.component'\n\n/** @hidden */\n@Injectable()\nexport class ButtonProvider extends ToolbarButtonProvider {\n    constructor (\n        hostApp: HostAppService,\n        hotkeys: HotkeysService,\n        private app: AppService,\n        private translate: TranslateService,\n    ) {\n        super()\n        hostApp.settingsUIRequest$.subscribe(() => this.open())\n\n        hotkeys.hotkey$.subscribe(async (hotkey) => {\n            if (hotkey === 'settings') {\n                this.open()\n            }\n        })\n    }\n\n    provide (): ToolbarButton[] {\n        return [{\n            icon: require('./icons/cog.svg'),\n            title: this.translate.instant('Settings'),\n            touchBarNSImage: 'NSTouchBarComposeTemplate',\n            weight: 10,\n            click: (): void => this.open(),\n        }]\n    }\n\n    open (): void {\n        const settingsTab = this.app.tabs.find(tab => tab instanceof SettingsTabComponent)\n        if (settingsTab) {\n            this.app.selectTab(settingsTab)\n        } else {\n            this.app.openNewTabRaw({ type: SettingsTabComponent })\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/configSyncSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Config sync\n\nul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Sync\n        ng-template(ngbNavContent)\n            .form-line\n                .header\n                    .title(translate) Sync host\n\n                .input-group.w-50\n                    input.form-control(\n                        type='text',\n                        [(ngModel)]='config.store.configSync.host',\n                        (keydown.enter)='config.save()',\n                    )\n                    button.btn.btn-secondary(\n                        *ngIf='config.store.configSync.host',\n                        (click)='openSyncHost()'\n                    )\n                        i.fas.fa-external-link-alt\n\n            .form-line(*ngIf='config.store.configSync.host')\n                .header\n                    .title(translate) Secret sync token\n                    .description(translate) Get it from the Tabby Web settings window\n\n                .input-group\n                    input.form-control(\n                        type='password',\n                        [(ngModel)]='config.store.configSync.token',\n                        (keydown.enter)='config.save(); testConnection()'\n                    )\n                    .input-group-text(*ngIf='config.store.configSync.token')\n                        i.fas.fa-fw.fa-circle-notch.fa-spin.text-warning(*ngIf='connectionSuccessful === null')\n                        i.fas.fa-fw.fa-check.text-success(*ngIf='connectionSuccessful')\n                        i.fas.fa-fw.fa-exclamation-triangle.text-danger(*ngIf='connectionSuccessful === false')\n\n            .alert.alert-info.d-flex.align-items-center\n                .me-auto\n                    span(translate) Config sync requires an instance of the Tabby Web service.\n                    a.ml-1((click)='openTabbyWebInfo()', href='#', translate) Learn more\n\n            ng-container(*ngIf='config.store.configSync.token')\n                .alert.alert-danger(*ngIf='connectionSuccessful === false')\n                    i.fas.fa-exclamation-triangle\n                    span.ms-2(translate='Connection failed: {error}', [translateParams]='{error: connectionError}')\n\n            ng-container(*ngIf='connectionSuccessful')\n                .form-line\n                    .header\n                        .title(translate) Configs\n\n                div(*ngIf='configs === null')\n                    i.fas.fa-fw.fa-circle-notch.fa-spin\n                    span.ms-2(translate) Loading configs...\n\n                ng-container(*ngIf='configs !== null')\n                    .list-group.list-group-light\n                        .list-group-item.d-flex.align-items-center(\n                            *ngFor='let cfg of configs',\n                            [class.active]='isActiveConfig(cfg)',\n                        )\n                            i.fas.fa-fw.text-success([class.fa-check]='isActiveConfig(cfg)')\n                            i.fas.fa-fw.fa-file\n                            .ms-2.d-flex.flex-column.align-items-start\n                                div {{cfg.name}}\n                                small.text-muted(\n                                    translate='Modified on {date}',\n                                    [translateParams]='{date: cfg.modified_at|tabbyDate}'\n                                )\n                            .me-auto\n                            button.btn.btn-link.ms-1(\n                                (click)='uploadAndSync(cfg)',\n                                [class.hover-reveal]='!isActiveConfig(cfg)'\n                            )\n                                i.fas.fa-arrow-up\n                                span.ms-2(*ngIf='isActiveConfig(cfg)', translate) Upload\n                                span.ms-2(*ngIf='!isActiveConfig(cfg)', translate) Replace\n                            button.btn.btn-link.ms-1(\n                                (click)='downloadAndSync(cfg)',\n                                [class.hover-reveal]='!isActiveConfig(cfg)'\n                            )\n                                i.fas.fa-arrow-down\n                                span.ms-2(translate) Download\n                            button.btn.btn-link.ms-1(\n                                (click)='delete(cfg)',\n                                [class.hover-reveal]='!isActiveConfig(cfg)'\n                            )\n                                i.fas.fa-trash\n                                span.ms-2(translate) Delete\n                        a.list-group-item.list-group-item-action.d-flex.align-items-center(\n                            href='#',\n                            (click)='uploadAsNew()'\n                        )\n                            i.fas.fa-fw\n                            i.fas.fa-fw.fa-cloud-upload-alt\n                            .ms-2(translate) Upload as a new config\n\n            ng-container(*ngIf='hasMatchingRemoteConfig()')\n                .form-line\n                    .header\n                        .title(translate) Sync automatically\n                        .description(translate) Automatically upload changes and check for updates every minute\n\n                    toggle(\n                        [(ngModel)]='config.store.configSync.auto',\n                        (ngModelChange)='config.save()',\n                    )\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Advanced\n        ng-template(ngbNavContent)\n            .alert.alert-info(*ngIf='config.store.encrypted')\n                div(translate) Partial config sync is not possible when the config is encrypted via Vault.\n\n            .form-line(*ngIf='!config.store.encrypted')\n                .header\n                    .title(translate) Sync hotkeys\n                toggle(\n                    [(ngModel)]='config.store.configSync.parts.hotkeys',\n                    (ngModelChange)='config.save()',\n                )\n\n            .form-line(*ngIf='!config.store.encrypted')\n                .header\n                    .title(translate) Sync window settings\n                toggle(\n                    [(ngModel)]='config.store.configSync.parts.appearance',\n                    (ngModelChange)='config.save()',\n                )\n\n            .form-line(*ngIf='!config.store.encrypted')\n                .header\n                    .title(translate) Sync Vault\n                toggle(\n                    [(ngModel)]='config.store.configSync.parts.vault',\n                    (ngModelChange)='config.save()',\n                )\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-settings/src/components/configSyncSettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, HostBinding } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseComponent, ConfigService, PromptModalComponent, HostAppService, PlatformService, NotificationsService, TranslateService } from 'tabby-core'\nimport { Config, ConfigSyncService } from '../services/configSync.service'\n\n\n/** @hidden */\n@Component({\n    selector: 'config-sync-settings-tab',\n    templateUrl: './configSyncSettingsTab.component.pug',\n})\nexport class ConfigSyncSettingsTabComponent extends BaseComponent {\n    connectionSuccessful: boolean|null = null\n    connectionError: Error|null = null\n    configs: Config[]|null = null\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public config: ConfigService,\n        public platform: PlatformService,\n        private configSync: ConfigSyncService,\n        private hostApp: HostAppService,\n        private ngbModal: NgbModal,\n        private notifications: NotificationsService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async ngOnInit () {\n        await this.testConnection()\n        this.loadConfigs()\n    }\n\n    async testConnection () {\n        if (!this.config.store.configSync.host || !this.config.store.configSync.token) {\n            return\n        }\n        this.connectionSuccessful = null\n        try {\n            await this.configSync.getUser()\n            this.connectionSuccessful = true\n            this.loadConfigs()\n        } catch (e) {\n            this.connectionSuccessful = false\n            this.connectionError = e\n            this.configs = null\n        }\n    }\n\n    async loadConfigs () {\n        this.configs = await this.configSync.getConfigs()\n    }\n\n    async uploadAsNew () {\n        let name = this.translate.instant('New config on {platform}', this.hostApp)\n        const modal = this.ngbModal.open(PromptModalComponent)\n        modal.componentInstance.prompt = this.translate.instant('Name for the new config')\n        modal.componentInstance.value = name\n        name = (await modal.result.catch(() => null))?.value\n        if (!name) {\n            return\n        }\n        const cfg = await this.configSync.createNewConfig(name)\n        this.loadConfigs()\n        this.configSync.setConfig(cfg)\n        this.uploadAndSync(cfg)\n    }\n\n    async uploadAndSync (cfg: Config) {\n        if (this.config.store.configSync.configID !== cfg.id) {\n            if ((await this.platform.showMessageBox({\n                type: 'warning',\n                message: this.translate.instant('Overwrite the config on the remote side and start syncing?'),\n                buttons: [\n                    this.translate.instant('Overwrite remote and sync'),\n                    this.translate.instant('Cancel'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            })).response === 1) {\n                return\n            }\n        }\n        this.configSync.setConfig(cfg)\n        await this.configSync.upload()\n        this.loadConfigs()\n        this.notifications.info(this.translate.instant('Config uploaded'))\n    }\n\n    async downloadAndSync (cfg: Config) {\n        if ((await this.platform.showMessageBox({\n            type: 'warning',\n            message: this.translate.instant('Overwrite the local config and start syncing?'),\n            buttons: [\n                this.translate.instant('Overwrite local and sync'),\n                this.translate.instant('Cancel'),\n            ],\n            defaultId: 1,\n            cancelId: 1,\n        })).response === 1) {\n            return\n        }\n        this.configSync.setConfig(cfg)\n        await this.configSync.download()\n        this.notifications.info(this.translate.instant('Config downloaded'))\n    }\n\n    async delete (cfg: Config) {\n        if ((await this.platform.showMessageBox({\n            type: 'warning',\n            message: this.translate.instant('Delete the config on the remote side?'),\n            buttons: [\n                this.translate.instant('Delete'),\n                this.translate.instant('Cancel'),\n            ],\n            defaultId: 1,\n            cancelId: 1,\n        })).response === 1) {\n            return\n        }\n        await this.configSync.delete(cfg)\n        this.loadConfigs()\n        this.notifications.info(this.translate.instant('Config deleted'))\n    }\n\n    hasMatchingRemoteConfig () {\n        return !!this.configs?.find(c => this.isActiveConfig(c))\n    }\n\n    isActiveConfig (c: Config) {\n        return c.id === this.config.store.configSync.configID\n    }\n\n    openSyncHost () {\n        if (this.config.store.configSync.host === 'https://api.tabby.sh') {\n            this.platform.openExternal('https://app.tabby.sh')\n        } else {\n            this.platform.openExternal(this.config.store.configSync.host)\n        }\n    }\n\n    openTabbyWebInfo () {\n        this.platform.openExternal('https://github.com/Eugeny/tabby-web')\n    }\n\n}\n"
  },
  {
    "path": "tabby-settings/src/components/editProfileGroupModal.component.pug",
    "content": ".modal-header\n    h3.m-0 {{group.name}}\n\n.modal-body\n    .row\n        .col-12.col-lg-4\n            .mb-3\n                label(translate) Name\n                input.form-control(\n                    type='text',\n                    autofocus,\n                    [(ngModel)]='group.name',\n                )\n\n        .col-12.col-lg-8\n            .form-line.content-box\n                .header\n                    .title(translate) Default profile group settings\n                    .description(translate) These apply to all profiles of a given type in this group\n\n            .list-group.mt-3.mb-3.content-box\n                a.list-group-item.list-group-item-action.d-flex.align-items-center(\n                    (click)='editDefaults(provider)',\n                    *ngFor='let provider of providers'\n                ) {{provider.name|translate}}\n                    .me-auto\n                    button.btn.btn-link.hover-reveal.ms-1((click)='$event.stopPropagation(); deleteDefaults(provider)')\n                        i.fas.fa-trash-arrow-up\n\n.modal-footer\n    button.btn.btn-primary((click)='save()', translate) Save\n    button.btn.btn-danger((click)='cancel()', translate) Cancel\n"
  },
  {
    "path": "tabby-settings/src/components/editProfileGroupModal.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { ConfigProxy, ProfileGroup, Profile, ProfileProvider, PlatformService, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './editProfileGroupModal.component.pug',\n})\nexport class EditProfileGroupModalComponent<G extends ProfileGroup> {\n    @Input() group: G & ConfigProxy<G>\n    @Input() providers: ProfileProvider<Profile>[]\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n        private platform: PlatformService,\n        private translate: TranslateService,\n    ) {}\n\n    save () {\n        this.modalInstance.close({ group: this.group })\n    }\n\n    cancel () {\n        this.modalInstance.dismiss()\n    }\n\n    editDefaults (provider: ProfileProvider<Profile>) {\n        this.modalInstance.close({ group: this.group, provider })\n    }\n\n    async deleteDefaults (provider: ProfileProvider<Profile>): Promise<void> {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Restore settings to inherited defaults ?'),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete this.group.defaults?.[provider.id]\n        }\n    }\n}\n\nexport interface EditProfileGroupModalComponentResult<G extends ProfileGroup> {\n    group: G\n    provider?: ProfileProvider<Profile>\n}\n"
  },
  {
    "path": "tabby-settings/src/components/editProfileModal.component.pug",
    "content": ".modal-header(*ngIf='defaultsMode === \"disabled\"')\n    h3.m-0 {{profile.name}}\n\n.modal-header(*ngIf='defaultsMode !== \"disabled\"')\n    h3.m-0(\n        translate='Defaults for {type}',\n        [translateParams]='{type: profileProvider.name}'\n    )\n\n.modal-body\n    .row\n        .col-12.col-lg-4\n            .mb-3(*ngIf='defaultsMode === \"disabled\"')\n                label(translate) Name\n                input.form-control(\n                    type='text',\n                    autofocus,\n                    [(ngModel)]='profile.name',\n                )\n\n            .mb-3(*ngIf='defaultsMode === \"disabled\"')\n                label(translate) Group\n                input.form-control(\n                    type='text',\n                    alwaysVisibleTypeahead,\n                    placeholder='Ungrouped',\n                    [(ngModel)]='profileGroup',\n                    [ngbTypeahead]='groupTypeahead',\n                    [inputFormatter]=\"groupFormatter\",\n\t\t\t        [resultFormatter]=\"groupFormatter\",\n\t\t\t        [editable]=\"false\"\n                )\n\n            .mb-3(*ngIf='defaultsMode === \"disabled\"')\n                label(translate) Icon\n                .input-group\n                    input.form-control(\n                        type='text',\n                        alwaysVisibleTypeahead,\n                        [(ngModel)]='profile.icon',\n                        [ngbTypeahead]='iconSearch',\n                        [resultTemplate]='rt'\n                    )\n                    .input-group-text\n                        profile-icon(\n                            [icon]='profile.icon',\n                            [color]='profile.color'\n                        )\n\n                ng-template(#rt,let-r='result',let-t='term')\n                    i([class]='\"fa-fw \" + r')\n                    ngb-highlight.ms-2([result]='r', [term]='t')\n\n            .form-line\n                .header\n                    .title(translate) Color\n                input.form-control.w-50(\n                    type='text',\n                    [(ngModel)]='profile.color',\n                    placeholder='#000000',\n                    [ngbTypeahead]='colorsAutocomplete',\n                    [resultFormatter]='colorsFormatter'\n                )\n\n            .form-line\n                .header\n                    .title(translate) Disable dynamic tab title\n                    .description(translate) Connection name will be used instead\n                toggle([(ngModel)]='profile.disableDynamicTitle')\n\n            .form-line\n                .header\n                    .title(translate) When a session ends\n                    .description(*ngIf='profile.behaviorOnSessionEnd == \"auto\"', translate) Only close the tab when session is explicitly terminated\n                select.form-control(\n                    [(ngModel)]='profile.behaviorOnSessionEnd',\n                )\n                    option(ngValue='auto', translate) Auto\n                    option(ngValue='keep', translate) Keep\n                    option(*ngIf='isConnectable()', ngValue='reconnect', translate) Reconnect\n                    option(ngValue='close', translate) Close\n            \n            .form-line(*ngIf='isConnectable()')\n                .header\n                    .title(translate) Clear terminal after connection\n                toggle(\n                    [(ngModel)]='profile.clearServiceMessagesOnConnect',\n                )\n            .mb-4\n\n        .col-12.col-lg-8(*ngIf='this.profileProvider.settingsComponent')\n            ng-template(#placeholder)\n\n.modal-footer\n    button.btn.btn-primary((click)='save()', translate) Save\n    button.btn.btn-danger((click)='cancel()', translate) Cancel\n"
  },
  {
    "path": "tabby-settings/src/components/editProfileModal.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Observable, OperatorFunction, debounceTime, map, distinctUntilChanged } from 'rxjs'\nimport { Component, Input, ViewChild, ViewContainerRef, ComponentFactoryResolver, Injector } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { PartialProfileGroup, Profile, ProfileProvider, ProfileSettingsComponent, ProfilesService, TAB_COLORS, ProfileGroup, ConnectableProfileProvider, FullyDefined, ConfigProxy } from 'tabby-core'\n\nconst iconsData = require('../../../tabby-core/src/icons.json')\nconst iconsClassList = Object.keys(iconsData).map(\n    icon => iconsData[icon].map(\n        style => `fa${style[0]} fa-${icon}`,\n    ),\n).flat()\n\n/** @hidden */\n@Component({\n    templateUrl: './editProfileModal.component.pug',\n})\nexport class EditProfileModalComponent<P extends Profile, PP extends ProfileProvider<P>> {\n    @Input('profile') _profile: P\n    @Input() profileProvider: PP\n    @Input() settingsComponent: new () => ProfileSettingsComponent<P, PP>\n    @Input() defaultsMode: 'enabled'|'group'|'disabled' = 'disabled'\n    @Input() profileGroup: PartialProfileGroup<ProfileGroup> | undefined\n    groups: PartialProfileGroup<ProfileGroup>[]\n    @ViewChild('placeholder', { read: ViewContainerRef }) placeholder: ViewContainerRef\n\n    protected profile: FullyDefined<P> & ConfigProxy<FullyDefined<P>>\n    private settingsComponentInstance?: ProfileSettingsComponent<P, PP>\n\n    constructor (\n        private injector: Injector,\n        private componentFactoryResolver: ComponentFactoryResolver,\n        private profilesService: ProfilesService,\n        private modalInstance: NgbActiveModal,\n    ) {\n        if (this.defaultsMode === 'disabled') {\n            this.profilesService.getProfileGroups().then(groups => {\n                this.groups = groups\n                this.profileGroup = groups.find(g => g.id === this.profile.group)\n            })\n        }\n    }\n\n    colorsAutocomplete = text$ => text$.pipe(\n        debounceTime(200),\n        distinctUntilChanged(),\n        map((q: string) =>\n            TAB_COLORS\n                .filter(x => !q || x.name.toLowerCase().startsWith(q.toLowerCase()))\n                .map(x => x.value),\n        ),\n    )\n\n    colorsFormatter = value => {\n        return TAB_COLORS.find(x => x.value === value)?.name ?? value\n    }\n\n    ngOnInit () {\n        this.profile = this.profilesService.getConfigProxyForProfile<P>(this._profile, { skipGlobalDefaults: this.defaultsMode === 'enabled', skipGroupDefaults: this.defaultsMode === 'group' })\n    }\n\n    ngAfterViewInit () {\n        const componentType = this.profileProvider.settingsComponent\n        if (componentType) {\n            setTimeout(() => {\n                const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType)\n                const componentRef = componentFactory.create(this.injector)\n                this.settingsComponentInstance = componentRef.instance\n                this.settingsComponentInstance.profile = this.profile\n                this.placeholder.insert(componentRef.hostView)\n            })\n        }\n    }\n\n    groupTypeahead: OperatorFunction<string, readonly PartialProfileGroup<ProfileGroup>[]> = (text$: Observable<string>) =>\n        text$.pipe(\n            debounceTime(200),\n            distinctUntilChanged(),\n            map(q => this.groups.filter(g => !q || g.name.toLowerCase().includes(q.toLowerCase()))),\n        )\n\n    groupFormatter = (g: PartialProfileGroup<ProfileGroup>) => g.name\n\n    iconSearch: OperatorFunction<string, string[]> = (text$: Observable<string>) =>\n        text$.pipe(\n            debounceTime(200),\n            map(term => iconsClassList.filter(v => v.toLowerCase().includes(term.toLowerCase())).slice(0, 10)),\n        )\n\n    save () {\n        if (!this.profileGroup) {\n            this.profile.group = ''\n        } else {\n            this.profile.group = this.profileGroup.id\n        }\n\n        this.settingsComponentInstance?.save?.()\n        this.profile.__cleanup()\n        this.modalInstance.close(this._profile)\n    }\n\n    cancel () {\n        this.modalInstance.dismiss()\n    }\n\n    isConnectable (): boolean {\n        return this.profileProvider instanceof ConnectableProfileProvider\n    }\n\n}\n"
  },
  {
    "path": "tabby-settings/src/components/hotkeyInputModal.component.pug",
    "content": ".modal-header\n    h5(translate) Press the key now\n\n.modal-body\n    .input\n        .stroke(\n            *ngFor='let stroke of value',\n            [@animateKey]='true',\n            [@.disabled]='!config.store.accessibility.animations'\n        ) {{stroke}}\n\n    .timeout\n        div([style.width]='timeoutProgress + \"%\"')\n\n.modal-footer\n    button.btn.btn-primary((click)='close()', translate) Cancel\n"
  },
  {
    "path": "tabby-settings/src/components/hotkeyInputModal.component.scss",
    "content": ":host {\n    >.modal-body {\n        padding: 0 !important;\n    }\n\n    .input {\n        display: flex;\n\n        .stroke {\n            flex: none;\n        }\n    }\n\n    .timeout {\n        height: 5px;\n        margin: 0 0 15px;\n\n        div {\n            height: 5px;\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/hotkeyInputModal.component.ts",
    "content": "import { Component, Input } from '@angular/core'\nimport { trigger, transition, style, animate } from '@angular/animations'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { HotkeysService, BaseComponent, Keystroke, ConfigService } from 'tabby-core'\n\nconst INPUT_TIMEOUT = 1000\n\n/** @hidden */\n@Component({\n    selector: 'hotkey-input-modal',\n    templateUrl: './hotkeyInputModal.component.pug',\n    styleUrls: ['./hotkeyInputModal.component.scss'],\n    animations: [\n        trigger('animateKey', [\n            transition(':enter', [\n                style({\n                    transform: 'translateX(25px)',\n                    opacity: '0',\n                }),\n                animate('250ms ease-out', style({\n                    transform: 'translateX(0)',\n                    opacity: '1',\n                })),\n            ]),\n            transition(':leave', [\n                style({\n                    transform: 'translateX(0)',\n                    opacity: '1',\n                }),\n                animate('250ms ease-in', style({\n                    transform: 'translateX(25px)',\n                    opacity: '0',\n                })),\n            ]),\n        ]),\n    ],\n})\nexport class HotkeyInputModalComponent extends BaseComponent {\n    @Input() value: Keystroke[] = []\n    @Input() timeoutProgress = 0\n\n    private lastKeyEvent: number|null = null\n    private keyTimeoutInterval: number|null = null\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n        public hotkeys: HotkeysService,\n        public config: ConfigService,\n    ) {\n        super()\n        this.hotkeys.clearCurrentKeystrokes()\n        this.subscribeUntilDestroyed(hotkeys.keyEvent$, event => {\n            event.preventDefault()\n            event.stopPropagation()\n        })\n        this.subscribeUntilDestroyed(hotkeys.keystroke$, keystroke => {\n            this.lastKeyEvent = performance.now()\n            this.value.push(keystroke)\n        })\n    }\n\n    splitKeys (keys: string): string[] {\n        return keys.split('+').map((x) => x.trim())\n    }\n\n    ngOnInit (): void {\n        this.keyTimeoutInterval = window.setInterval(() => {\n            if (!this.lastKeyEvent) {\n                return\n            }\n            this.timeoutProgress = Math.min(100, (performance.now() - this.lastKeyEvent) * 100 / INPUT_TIMEOUT)\n            if (this.timeoutProgress === 100) {\n                clearInterval(this.keyTimeoutInterval!)\n                this.modalInstance.close(this.value)\n            }\n        }, 25)\n        this.hotkeys.disable()\n    }\n\n    ngOnDestroy (): void {\n        clearInterval(this.keyTimeoutInterval!)\n        this.hotkeys.clearCurrentKeystrokes()\n        this.hotkeys.enable()\n        super.ngOnDestroy()\n    }\n\n    close (): void {\n        clearInterval(this.keyTimeoutInterval!)\n        this.modalInstance.dismiss()\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/hotkeySettingsTab.component.pug",
    "content": "h3.mb-3(translate) Hotkeys\n\n.input-group.mb-4\n    .input-group-text\n        i.fas.fa-fw.fa-search\n    input.form-control(type='search', [placeholder]='\"Search hotkeys\"|translate', [(ngModel)]='hotkeyFilter')\n\n.mb-3.hotkeys-table\n    ng-container(*ngFor='let hotkey of hotkeyDescriptions')\n        .row.align-items-center(*ngIf='!hotkeyFilter || hotkeyFilterFn(hotkey, hotkeyFilter)')\n            .col-8.py-2\n                span {{hotkey.name|translate}}\n                span.ms-2.text-muted ({{hotkey.id}})\n            .col-4.pe-5\n                multi-hotkey-input(\n                    [hotkeys]='getHotkeys(hotkey.id) || []',\n                    (hotkeysChange)='setHotkeys(hotkey.id, $event)'\n                )\n"
  },
  {
    "path": "tabby-settings/src/components/hotkeySettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { Component, NgZone } from '@angular/core'\nimport {\n    ConfigService,\n    Hotkey,\n    HotkeyDescription,\n    HotkeysService,\n    HostAppService,\n} from 'tabby-core'\n\n_('Search hotkeys')\n\n/** @hidden */\n@Component({\n    selector: 'hotkey-settings-tab',\n    templateUrl: './hotkeySettingsTab.component.pug',\n})\nexport class HotkeySettingsTabComponent {\n    hotkeyFilter = ''\n    hotkeyDescriptions: HotkeyDescription[]\n    allDuplicateHotkeys = this.getAllDuplicateHotkeys()\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        public zone: NgZone,\n        hotkeys: HotkeysService,\n    ) {\n        hotkeys.getHotkeyDescriptions().then(descriptions => {\n            this.hotkeyDescriptions = descriptions\n        })\n    }\n\n    getHotkeys (id: string): Hotkey[] {\n        let ptr = this.config.store.hotkeys\n        for (const token of id.split(/\\./g)) {\n            ptr = ptr[token]\n        }\n        return (ptr || []).map(hotkey => this.detectDuplicates(hotkey))\n    }\n\n    setHotkeys (id: string, hotkeys: Hotkey[]) {\n        let ptr = this.config.store\n        let prop = 'hotkeys'\n        for (const token of id.split(/\\./g)) {\n            ptr = ptr[prop]\n            prop = token\n        }\n        ptr[prop] = hotkeys.map(hotkey =>\n            hotkey.strokes.length === 1 && Array.isArray(hotkey.strokes)\n                ? hotkey.strokes[0]\n                : hotkey.strokes,\n        )\n        this.config.save()\n        this.allDuplicateHotkeys = this.getAllDuplicateHotkeys()\n    }\n\n    hotkeyFilterFn (hotkey: HotkeyDescription, query: string): boolean {\n        const s = hotkey.name + hotkey.id + this.getHotkeys(hotkey.id).map(h => h.strokes).toString()\n        return s.toLowerCase().includes(query.toLowerCase())\n    }\n\n    private getAllDuplicateHotkeys (): string[] {\n        const allHotkeys = Object\n            .values(this.config.store.hotkeys)\n            .filter((value: unknown) => Array.isArray(value))\n            .flat()\n            .map((hotkey: string | string[]) => this.toHotkeyIdentifier(hotkey))\n\n        return allHotkeys.filter(hotkey => allHotkeys.indexOf(hotkey) !== allHotkeys.lastIndexOf(hotkey))\n    }\n\n    private detectDuplicates (strokes: string[] | string): Hotkey {\n        const hotkeyIdentifier = this.toHotkeyIdentifier(strokes)\n        const isDuplicate = this.allDuplicateHotkeys.includes(hotkeyIdentifier)\n        return { strokes, isDuplicate }\n    }\n\n    private toHotkeyIdentifier (hotkey: string[] | string): string {\n        return Array.isArray(hotkey) ? hotkey.join('$#!') : hotkey\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/multiHotkeyInput.component.pug",
    "content": ".item(*ngFor='let hotkey of hotkeys')\n    .body((click)='editItem(hotkey)')\n        .stroke(*ngFor='let stroke of castAny(hotkey.strokes)')\n            span(*ngIf='!hotkey.isDuplicate') {{stroke}}\n            span.duplicate(*ngIf='hotkey.isDuplicate') {{stroke}}\n    .remove((click)='removeItem(hotkey)') &times;\n\n.add((click)='addItem()', translate) Add...\n"
  },
  {
    "path": "tabby-settings/src/components/multiHotkeyInput.component.scss",
    "content": ":host {\n    display: flex;\n    flex-wrap: nowrap;\n\n    &:hover .add {\n      display: initial;\n    }\n}\n\n.item {\n    display: flex;\n    flex: none;\n\n    .body {\n        flex: none;\n        display: flex;\n\n        .stroke {\n            flex: none;\n        }\n    }\n\n    .remove {\n        flex: none;\n    }\n}\n\n.add {\n    flex: auto;\n    display: none;\n\n    &:first-child {\n        display: block;\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/multiHotkeyInput.component.ts",
    "content": "import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { HotkeyInputModalComponent } from './hotkeyInputModal.component'\nimport { Hotkey } from 'tabby-core'\nimport deepEqual from 'deep-equal'\n\n/** @hidden */\n@Component({\n    selector: 'multi-hotkey-input',\n    templateUrl: './multiHotkeyInput.component.pug',\n    styleUrls: ['./multiHotkeyInput.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MultiHotkeyInputComponent {\n    @Input() hotkeys: Hotkey[] = []\n    @Output() hotkeysChange = new EventEmitter()\n\n    constructor (\n        private ngbModal: NgbModal,\n    ) { }\n\n    ngOnChanges (): void {\n        this.hotkeys = this.hotkeys.map(hotkey => typeof hotkey.strokes === 'string' ? { ...hotkey, strokes: [hotkey.strokes] } : hotkey)\n    }\n\n    editItem (item: Hotkey): void {\n        this.ngbModal.open(HotkeyInputModalComponent).result.then((newStrokes: string[]) => {\n            this.hotkeys.find(hotkey => deepEqual(hotkey.strokes, item.strokes))!.strokes = newStrokes\n            this.storeUpdatedHotkeys()\n        })\n    }\n\n    addItem (): void {\n        this.ngbModal.open(HotkeyInputModalComponent).result.then((value: string[]) => {\n            this.hotkeys.push({ strokes: value, isDuplicate: false })\n            this.storeUpdatedHotkeys()\n        })\n    }\n\n    removeItem (item: Hotkey): void {\n        this.hotkeys = this.hotkeys.filter(x => x !== item)\n        this.storeUpdatedHotkeys()\n    }\n\n    private storeUpdatedHotkeys () {\n        this.hotkeysChange.emit(this.hotkeys)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    protected castAny = (x: any): any => x\n}\n"
  },
  {
    "path": "tabby-settings/src/components/profilesSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Profiles\n\nul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Profiles\n        ng-template(ngbNavContent)\n            .form-line\n                .header\n                    .title(translate) Default profile for new tabs\n\n                select.form-control(\n                    [(ngModel)]='config.store.terminal.profile',\n                    (ngModelChange)='config.save()',\n                )\n                    optgroup([label]='\"Custom Profiles\"|translate', *ngIf='customProfiles?.length > 0')\n                        option(\n                            *ngFor='let profile of customProfiles',\n                            [ngValue]='profile.id'\n                        ) {{profile.name}}\n                    optgroup([label]='\"Built-in Profiles\"|translate')\n                        option(\n                            *ngFor='let profile of builtinProfiles',\n                            [ngValue]='profile.id'\n                        ) {{profile.name}}\n\n            .d-flex.mb-3\n                .input-group\n                    .input-group-text\n                        i.fas.fa-fw.fa-search\n                    input.form-control(type='search', [placeholder]='\"Filter\"|translate', [(ngModel)]='filter')\n\n                div(ngbDropdown).d-inline-block.flex-shrink-0.ms-3\n                    button.btn.btn-primary(ngbDropdownToggle)\n                        i.fas.fa-fw.fa-plus\n                        span(translate) New\n                    div(ngbDropdownMenu)\n                        button(ngbDropdownItem, (click)='newProfile()')\n                            i.fas.fa-fw.fa-plus\n                            span(translate) New profile\n                        button(ngbDropdownItem, (click)='newProfileGroup()')\n                            i.fas.fa-fw.fa-plus\n                            span(translate) New profile Group\n\n            .list-group.mt-3.mb-3\n                ng-container(*ngFor='let group of profileGroups')\n                    ng-container(*ngIf='isGroupVisible(group)')\n                        .list-group-item.list-group-item-action.d-flex.align-items-center(\n                            (click)='toggleGroupCollapse(group)'\n                        )\n                            .fa.fa-fw.fa-chevron-right(*ngIf='group.collapsed && group.profiles?.length > 0')\n                            .fa.fa-fw.fa-chevron-down(*ngIf='!group.collapsed && group.profiles?.length > 0')\n                            span.ms-3.me-auto {{group.name || (\"Ungrouped\"|translate)}}\n                            button.btn.btn-sm.btn-link.hover-reveal.ms-2(\n                                *ngIf='group.editable && group.name',\n                                (click)='$event.stopPropagation(); editProfileGroup(group)'\n                            )\n                                i.fas.fa-pencil-alt\n                            button.btn.btn-sm.btn-link.hover-reveal.ms-2(\n                                *ngIf='group.editable && group.name',\n                                (click)='$event.stopPropagation(); deleteProfileGroup(group)'\n                            )\n                                i.fas.fa-trash-alt\n                        ng-container(*ngIf='!group.collapsed')\n                            ng-container(*ngFor='let profile of group.profiles')\n                                .list-group-item.ps-5.d-flex.align-items-center(\n                                    *ngIf='isProfileVisible(profile)',\n                                    [class.list-group-item-action]='!profile.isBuiltin',\n                                    (click)='profile.isBuiltin ? null : editProfile(profile)'\n                                )\n                                    profile-icon(\n                                        [icon]='profile.icon',\n                                        [color]='profile.color'\n                                    )\n\n                                    .no-wrap {{profile.name}}\n                                    .text-muted.no-wrap.ms-2 {{getDescription(profile)}}\n\n                                    .me-auto\n\n                                    button.btn.btn-link.hover-reveal.ms-1(*ngIf='!profile.isTemplate', (click)='$event.stopPropagation(); launchProfile(profile)')\n                                        i.fas.fa-play\n\n                                    .ms-1.hover-reveal(ngbDropdown, placement='bottom-right top-right auto')\n                                        button.btn.btn-link.ms-1(\n                                            ngbDropdownToggle,\n                                            (click)='$event.stopPropagation()'\n                                        )\n                                            i.fas.fa-fw.fa-ellipsis-vertical\n                                        div(ngbDropdownMenu)\n                                            button.dropdown-item(\n                                                ngbDropdownItem,\n                                                (click)='$event.stopPropagation(); newProfile(profile)'\n                                            )\n                                                i.fas.fa-fw.fa-copy\n                                                span(translate) Duplicate\n\n                                            button.dropdown-item(\n                                                ngbDropdownItem,\n                                                *ngIf='profile.id && !isProfileBlacklisted(profile)',\n                                                (click)='$event.stopPropagation(); blacklistProfile(profile)'\n                                            )\n                                                i.fas.fa-fw.fa-eye-slash\n                                                span(translate) Hide\n\n                                            button.dropdown-item(\n                                                ngbDropdownItem,\n                                                *ngIf='profile.id && isProfileBlacklisted(profile)',\n                                                (click)='$event.stopPropagation(); unblacklistProfile(profile)'\n                                            )\n                                                i.fas.fa-fw.fa-eye\n                                                span(translate) Show\n\n                                            button.dropdown-item(\n                                                *ngIf='!profile.isBuiltin',\n                                                (click)='$event.stopPropagation(); deleteProfile(profile)'\n                                            )\n                                                i.fas.fa-fw.fa-trash-alt\n                                                span(translate) Delete\n\n                                    .ms-1(class='badge text-bg-{{getTypeColorClass(profile)}}') {{getTypeLabel(profile)}}\n\n                                    .ms-1.text-danger.fas.fa-eye-slash(*ngIf='isProfileBlacklisted(profile)')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Advanced\n        ng-template(ngbNavContent)\n            .form-line.content-box(*ngIf='config.store.profiles.length > 0')\n                .header\n                    .title(translate) Show recent profiles in selector\n                    .description(translate) Set to 0 to disable recent profiles\n\n                input.form-control(\n                    type='number',\n                    min='0',\n                    step='1',\n                    [(ngModel)]='config.store.terminal.showRecentProfiles',\n                    (ngModelChange)='config.save()'\n                )\n\n            .form-line.content-box(*ngIf='config.store.profiles.length > 0')\n                .header\n                    .title(translate) Show built-in profiles in selector\n                    .description(translate) If disabled, only custom profiles will show up in the profile selector\n\n                toggle(\n                    [(ngModel)]='config.store.terminal.showBuiltinProfiles',\n                    (ngModelChange)='config.save()'\n                )\n\n            .form-line.content-box(*ngIf='hostApp.platform === Platform.Windows')\n                .header\n                    .title(translate) Terminal identification\n                    .description(translate) How Tabby presents itself through environment vars\n\n                select.form-control(\n                    [(ngModel)]='config.store.terminal.identification',\n                    (ngModelChange)='config.save()',\n                )\n                    option(ngValue='wt', translation) Windows Terminal\n                    option(ngValue='cygwin', translation) Cygwin\n\n            .form-line\n                .header\n                    .title(translate) Default \"Connect to\" type\n                    .description(translate) Default connection type used by quick connect feature (ex. SSH, Telnet)\n\n                select.form-control(\n                    [(ngModel)]='config.store.defaultQuickConnectProvider',\n                    (ngModelChange)='config.save()',\n                )\n                    option(\n                        *ngFor='let provider of getQuickConnectProviders()',\n                        [ngValue]='provider.id'\n                    ) {{provider.name}}\n\n            .form-line.content-box\n                .header\n                    .title(translate) Default profile settings\n                    .description(translate) These apply to all profiles of a given type\n\n            .list-group.mt-3.mb-3.content-box\n                a.list-group-item.list-group-item-action.d-flex.align-items-center(\n                    (click)='editDefaults(provider)',\n                    *ngFor='let provider of profileProviders'\n                ) {{provider.name|translate}}\n                    .me-auto\n                    button.btn.btn-link.hover-reveal.ms-1((click)='$event.stopPropagation(); deleteDefaults(provider)')\n                        i.fas.fa-trash-arrow-up\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-settings/src/components/profilesSettingsTab.component.scss",
    "content": "profile-icon {\n    width: 1.25rem;\n    margin-right: 0.25rem;\n}\n\nprofile-icon + * {\n    margin-left: 10px;\n}\n"
  },
  {
    "path": "tabby-settings/src/components/profilesSettingsTab.component.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport deepClone from 'clone-deep'\nimport { Component, Inject } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { ConfigService, HostAppService, Profile, SelectorService, ProfilesService, PromptModalComponent, PlatformService, BaseComponent, PartialProfile, ProfileProvider, TranslateService, Platform, ProfileGroup, PartialProfileGroup, QuickConnectProfileProvider } from 'tabby-core'\nimport { EditProfileModalComponent } from './editProfileModal.component'\nimport { EditProfileGroupModalComponent, EditProfileGroupModalComponentResult } from './editProfileGroupModal.component'\n\n_('Filter')\n_('Ungrouped')\n\ninterface CollapsableProfileGroup extends ProfileGroup {\n    collapsed: boolean\n}\n\n/** @hidden */\n@Component({\n    templateUrl: './profilesSettingsTab.component.pug',\n    styleUrls: ['./profilesSettingsTab.component.scss'],\n})\nexport class ProfilesSettingsTabComponent extends BaseComponent {\n    builtinProfiles: PartialProfile<Profile>[] = []\n    profiles: PartialProfile<Profile>[] = []\n    templateProfiles: PartialProfile<Profile>[] = []\n    customProfiles: PartialProfile<Profile>[] = []\n    profileGroups: PartialProfileGroup<CollapsableProfileGroup>[]\n    filter = ''\n    Platform = Platform\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        @Inject(ProfileProvider) public profileProviders: ProfileProvider<Profile>[],\n        private profilesService: ProfilesService,\n        private selector: SelectorService,\n        private ngbModal: NgbModal,\n        private platform: PlatformService,\n        private translate: TranslateService,\n    ) {\n        super()\n        this.profileProviders.sort((a, b) => a.name.localeCompare(b.name))\n    }\n\n    async ngOnInit (): Promise<void> {\n        await this.refreshProfileGroups()\n        await this.refreshProfiles()\n        this.subscribeUntilDestroyed(this.config.changed$, () => this.refreshProfileGroups())\n        this.subscribeUntilDestroyed(this.config.changed$, () => this.refreshProfiles())\n    }\n\n    async refreshProfiles (): Promise<void> {\n        this.builtinProfiles = (await this.profilesService.getProfiles()).filter(x => x.isBuiltin)\n        this.customProfiles = (await this.profilesService.getProfiles()).filter(x => !x.isBuiltin)\n        this.templateProfiles = this.builtinProfiles.filter(x => x.isTemplate)\n        this.builtinProfiles = this.builtinProfiles.filter(x => !x.isTemplate)\n    }\n\n    launchProfile (profile: PartialProfile<Profile>): void {\n        this.profilesService.openNewTabForProfile(profile)\n    }\n\n    async newProfile (base?: PartialProfile<Profile>): Promise<void> {\n        if (!base) {\n            let profiles = await this.profilesService.getProfiles()\n            profiles = profiles.filter(x => !this.isProfileBlacklisted(x))\n            profiles.sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))\n            base = await this.selector.show(\n                this.translate.instant('Select a base profile to use as a template'),\n                profiles.map(p => ({\n                    icon: p.icon ?? undefined,\n                    description: this.profilesService.getDescription(p) ?? undefined,\n                    name: p.group ? `${this.profilesService.resolveProfileGroupName(p.group)} / ${p.name}` : p.name,\n                    result: p,\n                })),\n            ).catch(() => undefined)\n            if (!base) {\n                return\n            }\n        }\n        const baseProfile: PartialProfile<Profile> = deepClone(base)\n        delete baseProfile.id\n        if (base.isTemplate) {\n            baseProfile.name = ''\n        } else if (!base.isBuiltin) {\n            baseProfile.name = this.translate.instant('{name} copy', base)\n        }\n        baseProfile.isBuiltin = false\n        baseProfile.isTemplate = false\n        const result = await this.showProfileEditModal(baseProfile)\n        if (!result) {\n            return\n        }\n        if (!result.name) {\n            const cfgProxy = this.profilesService.getConfigProxyForProfile(result)\n            result.name = this.profilesService.providerForProfile(result)?.getSuggestedName(cfgProxy) ?? this.translate.instant('{name} copy', base)\n        }\n        await this.profilesService.newProfile(result)\n        await this.config.save()\n    }\n\n    async editProfile (profile: PartialProfile<Profile>): Promise<void> {\n        const result = await this.showProfileEditModal(profile)\n        if (!result) {\n            return\n        }\n        await this.profilesService.writeProfile(result)\n        await this.config.save()\n    }\n\n    async showProfileEditModal (profile: PartialProfile<Profile>): Promise<PartialProfile<Profile>|null> {\n        const modal = this.ngbModal.open(\n            EditProfileModalComponent,\n            { size: 'lg' },\n        )\n        const provider = this.profilesService.providerForProfile(profile)\n        if (!provider) {\n            throw new Error('Cannot edit a profile without a provider')\n        }\n        modal.componentInstance.profile = deepClone(profile)\n        modal.componentInstance.profileProvider = provider\n\n        const result = await modal.result.catch(() => null)\n        if (!result) {\n            return null\n        }\n\n        result.type = provider.id\n        return result\n    }\n\n    async deleteProfile (profile: PartialProfile<Profile>): Promise<void> {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Delete \"{name}\"?', profile),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            await this.profilesService.deleteProfile(profile)\n            await this.config.save()\n        }\n    }\n\n    async newProfileGroup (): Promise<void> {\n        const modal = this.ngbModal.open(PromptModalComponent)\n        modal.componentInstance.prompt = this.translate.instant('New group name')\n        const result = await modal.result.catch(() => null)\n        if (result?.value.trim()) {\n            await this.profilesService.newProfileGroup({ id: '', name: result.value })\n            await this.config.save()\n        }\n    }\n\n    async editProfileGroup (group: PartialProfileGroup<CollapsableProfileGroup>): Promise<void> {\n        const result = await this.showProfileGroupEditModal(group)\n        if (!result) {\n            return\n        }\n        await this.profilesService.writeProfileGroup(ProfilesSettingsTabComponent.collapsableIntoPartialProfileGroup(result))\n        await this.config.save()\n    }\n\n    async showProfileGroupEditModal (group: PartialProfileGroup<CollapsableProfileGroup>): Promise<PartialProfileGroup<CollapsableProfileGroup>|null> {\n        const modal = this.ngbModal.open(\n            EditProfileGroupModalComponent,\n            { size: 'lg' },\n        )\n\n        modal.componentInstance.group = deepClone(group)\n        modal.componentInstance.providers = this.profileProviders\n\n        const result: EditProfileGroupModalComponentResult<CollapsableProfileGroup> | null = await modal.result.catch(() => null)\n        if (!result) {\n            return null\n        }\n\n        if (result.provider) {\n            return this.editProfileGroupDefaults(result.group, result.provider)\n        }\n\n        return result.group\n    }\n\n    private async editProfileGroupDefaults (group: PartialProfileGroup<CollapsableProfileGroup>, provider: ProfileProvider<Profile>): Promise<PartialProfileGroup<CollapsableProfileGroup>|null> {\n        const modal = this.ngbModal.open(\n            EditProfileModalComponent,\n            { size: 'lg' },\n        )\n        const model = group.defaults?.[provider.id] ?? {}\n        model.type = provider.id\n        modal.componentInstance.profile = Object.assign({}, model)\n        modal.componentInstance.profileProvider = provider\n        modal.componentInstance.defaultsMode = 'group'\n\n        const result = await modal.result.catch(() => null)\n        if (result) {\n            // Fully replace the config\n            for (const k in model) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete model[k]\n            }\n            Object.assign(model, result)\n            if (!group.defaults) {\n                group.defaults = {}\n            }\n            group.defaults[provider.id] = model\n        }\n        return this.showProfileGroupEditModal(group)\n    }\n\n    async deleteProfileGroup (group: PartialProfileGroup<ProfileGroup>): Promise<void> {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Delete \"{name}\"?', group),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            let deleteProfiles = false\n            if ((group.profiles?.length ?? 0) > 0 && (await this.platform.showMessageBox(\n                {\n                    type: 'warning',\n                    message: this.translate.instant('Delete the group\\'s profiles?'),\n                    buttons: [\n                        this.translate.instant('Move to \"Ungrouped\"'),\n                        this.translate.instant('Delete'),\n                    ],\n                    defaultId: 0,\n                    cancelId: 0,\n                },\n            )).response !== 0) {\n                deleteProfiles = true\n            }\n\n            await this.profilesService.deleteProfileGroup(group, { deleteProfiles })\n            await this.config.save()\n        }\n    }\n\n    async refreshProfileGroups (): Promise<void> {\n        const profileGroupCollapsed = JSON.parse(window.localStorage.profileGroupCollapsed ?? '{}')\n        const groups = await this.profilesService.getProfileGroups({ includeNonUserGroup: true, includeProfiles: true })\n        groups.sort((a, b) => a.name.localeCompare(b.name))\n        groups.sort((a, b) => (a.id === 'built-in' || !a.editable ? 1 : 0) - (b.id === 'built-in' || !b.editable ? 1 : 0))\n        groups.sort((a, b) => (a.id === 'ungrouped' ? 0 : 1) - (b.id === 'ungrouped' ? 0 : 1))\n        this.profileGroups = groups.map(g => ProfilesSettingsTabComponent.intoPartialCollapsableProfileGroup(g, profileGroupCollapsed[g.id] ?? false))\n    }\n\n    isGroupVisible (group: PartialProfileGroup<ProfileGroup>): boolean {\n        return !this.filter || (group.profiles ?? []).some(x => this.isProfileVisible(x))\n    }\n\n    isProfileVisible (profile: PartialProfile<Profile>): boolean {\n        return !this.filter || (profile.name + '$' + (this.getDescription(profile) ?? '')).toLowerCase().includes(this.filter.toLowerCase())\n    }\n\n    getDescription (profile: PartialProfile<Profile>): string|null {\n        return this.profilesService.getDescription(profile)\n    }\n\n    getTypeLabel (profile: PartialProfile<Profile>): string {\n        const name = this.profilesService.providerForProfile(profile)?.name\n        if (name === 'Local terminal') {\n            return ''\n        }\n        return name ? this.translate.instant(name) : this.translate.instant('Unknown')\n    }\n\n    getTypeColorClass (profile: PartialProfile<Profile>): string {\n        return {\n            ssh: 'secondary',\n            serial: 'success',\n            telnet: 'info',\n            'split-layout': 'primary',\n        }[this.profilesService.providerForProfile(profile)?.id ?? ''] ?? 'warning'\n    }\n\n    toggleGroupCollapse (group: PartialProfileGroup<CollapsableProfileGroup>): void {\n        if (group.profiles?.length === 0) {\n            return\n        }\n        group.collapsed = !group.collapsed\n        this.saveProfileGroupCollapse(group)\n    }\n\n    async editDefaults (provider: ProfileProvider<Profile>): Promise<void> {\n        const modal = this.ngbModal.open(\n            EditProfileModalComponent,\n            { size: 'lg' },\n        )\n        const model = this.profilesService.getProviderDefaults(provider)\n        model.type = provider.id\n        modal.componentInstance.profile = Object.assign({}, model)\n        modal.componentInstance.profileProvider = provider\n        modal.componentInstance.defaultsMode = 'enabled'\n        const result = await modal.result.catch(() => null)\n        if (result) {\n            // Fully replace the config\n            for (const k in model) {\n                // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n                delete model[k]\n            }\n            Object.assign(model, result)\n            this.profilesService.setProviderDefaults(provider, model)\n            await this.config.save()\n        }\n    }\n\n    async deleteDefaults (provider: ProfileProvider<Profile>): Promise<void> {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Restore settings to defaults ?'),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            this.profilesService.setProviderDefaults(provider, {})\n            await this.config.save()\n        }\n    }\n\n    blacklistProfile (profile: PartialProfile<Profile>): void {\n        this.config.store.profileBlacklist = [...this.config.store.profileBlacklist, profile.id]\n        this.config.save()\n    }\n\n    unblacklistProfile (profile: PartialProfile<Profile>): void {\n        this.config.store.profileBlacklist = this.config.store.profileBlacklist.filter(x => x !== profile.id)\n        this.config.save()\n    }\n\n    isProfileBlacklisted (profile: PartialProfile<Profile>): boolean {\n        return profile.id && this.config.store.profileBlacklist.includes(profile.id)\n    }\n\n    getQuickConnectProviders (): ProfileProvider<Profile>[] {\n        return this.profileProviders.filter(x => x instanceof QuickConnectProfileProvider)\n    }\n\n    /**\n    * Save ProfileGroup collapse state in localStorage\n    */\n    private saveProfileGroupCollapse (group: PartialProfileGroup<CollapsableProfileGroup>): void {\n        const profileGroupCollapsed = JSON.parse(window.localStorage.profileGroupCollapsed ?? '{}')\n        profileGroupCollapsed[group.id] = group.collapsed\n        window.localStorage.profileGroupCollapsed = JSON.stringify(profileGroupCollapsed)\n    }\n\n    private static collapsableIntoPartialProfileGroup (group: PartialProfileGroup<CollapsableProfileGroup>): PartialProfileGroup<ProfileGroup> {\n        const g: any = { ...group }\n        delete g.collapsed\n        return g\n    }\n\n    private static intoPartialCollapsableProfileGroup (group: PartialProfileGroup<ProfileGroup>, collapsed: boolean): PartialProfileGroup<CollapsableProfileGroup> {\n        const collapsableGroup = {\n            ...group,\n            collapsed,\n        }\n        return collapsableGroup\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/releaseNotesTab.component.pug",
    "content": ".container(\n    infiniteScroll,\n    [infiniteScrollDistance]='2',\n    [infiniteScrollThrottle]='50',\n    infiniteScrollContainer='release-notes-tab',\n    [fromRoot]='true',\n    (scrolled)='onScrolled()'\n)\n    div(*ngFor='let release of releases')\n        h1 {{release.name}}\n        .text-muted {{release.version}} / {{release.date|tabbyDate}}\n        section([fastHtmlBind]='release.content')\n"
  },
  {
    "path": "tabby-settings/src/components/releaseNotesTab.component.scss",
    "content": ":host {\n    overflow-y: scroll;\n    width: 100%;\n    padding: 30px;\n}\n\n::ng-deep img {\n    max-width: 100%;\n}\n\nh1 {\n    margin: 0;\n}\n\nsection {\n    margin: 20px 0;\n}\n"
  },
  {
    "path": "tabby-settings/src/components/releaseNotesTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport axios from 'axios'\nimport * as marked from '../../node_modules/marked/src/marked'\nimport { Component, Injector } from '@angular/core'\nimport { BaseTabComponent, TranslateService } from 'tabby-core'\n\nexport interface Release {\n    name: string\n    version: string\n    content: string\n    date: Date\n}\n\n/** @hidden */\n@Component({\n    selector: 'release-notes-tab',\n    templateUrl: './releaseNotesTab.component.pug',\n    styleUrls: ['./releaseNotesTab.component.scss'],\n})\nexport class ReleaseNotesComponent extends BaseTabComponent {\n    releases: Release[] = []\n    lastPage = 1\n\n    constructor (translate: TranslateService, injector: Injector) {\n        super(injector)\n        this.setTitle(translate.instant(_('Release notes')))\n        this.loadReleases(1)\n    }\n\n    async loadReleases (page) {\n        console.log('Loading releases page', page)\n        const response = await axios.get(`https://api.github.com/repos/eugeny/tabby/releases?page=${page}`, {\n            headers: { Accept: 'application/vnd.github.v3+json' },\n        })\n        this.releases = this.releases.concat(response.data.map(r => ({\n            name: r.name,\n            version: r.tag_name,\n            content: marked.marked(r.body),\n            date: new Date(r.created_at),\n        })))\n        this.lastPage = page\n    }\n\n    onScrolled () {\n        this.loadReleases(this.lastPage + 1)\n    }\n\n}\n"
  },
  {
    "path": "tabby-settings/src/components/setVaultPassphraseModal.component.pug",
    "content": "h3.modal-header.m-0.pb-0(translate) Set master passphrase\n.modal-body\n    .mb-2(translate) You can change it later, but it's unrecoverable if forgotten.\n    .input-group\n        input.form-control.form-control-lg(\n            [type]='showPassphrase ? \"text\" : \"password\"',\n            autofocus,\n            [(ngModel)]='passphrase',\n            #input,\n            placeholder='Master passphrase',\n            (keyup.enter)='ok()',\n            (keyup.esc)='cancel()',\n        )\n        button.btn.btn-secondary((click)='showPassphrase = !showPassphrase')\n            i.fas.fa-eye\n\n.modal-footer\n    button.btn.btn-primary((click)='ok()', translate) Set passphrase\n    button.btn.btn-danger((click)='cancel()', translate) Cancel\n"
  },
  {
    "path": "tabby-settings/src/components/setVaultPassphraseModal.component.ts",
    "content": "import { Component, ViewChild, ElementRef } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\n\n/** @hidden */\n@Component({\n    templateUrl: './setVaultPassphraseModal.component.pug',\n})\nexport class SetVaultPassphraseModalComponent {\n    passphrase: string\n    showPassphrase = false\n    @ViewChild('input') input: ElementRef\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) { }\n\n    ngOnInit (): void {\n        setTimeout(() => {\n            this.input.nativeElement.focus()\n        })\n    }\n\n    ok (): void {\n        this.modalInstance.close(this.passphrase)\n    }\n\n    cancel (): void {\n        this.modalInstance.close(null)\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/settingsTab.component.pug",
    "content": ".content\n    ul.nav-pills(ngbNav, #nav='ngbNav', [activeId]='activeTab', orientation='vertical')\n        li(ngbNavItem='application')\n            a(ngbNavLink)\n                i.fas.fa-fw.fa-window-maximize.me-2\n                span(translate) Application\n            ng-template(ngbNavContent)\n                .content-box\n                    .row\n                        .col-12.col-md-6\n                            .logo-area\n                                .tabby-logo.mt-3\n\n                                h1.tabby-title Tabby\n                                    sup α\n                                .text-muted {{homeBase.appVersion}}\n\n                                button.btn.btn-secondary.mt-3.mb-2(\n                                    *ngIf='!updateAvailable && hostApp.platform !== Platform.Web',\n                                    (click)='checkForUpdates()',\n                                    [disabled]='checkingForUpdate'\n                                )\n                                    i.fas.fa-sync(\n                                        [class.fa-spin]='checkingForUpdate'\n                                    )\n                                    span(translate) Check for updates\n\n                                button.btn.btn-info.mt-3.mb-2(\n                                    *ngIf='updateAvailable',\n                                    (click)='updater.update()',\n                                )\n                                    i.fas.fa-sync\n                                    span(translate) Update\n\n                        .col-12.col-md-6\n                            .list-group.list-group-light.mb-5\n                                button.list-group-item.list-group-item-action.link-card((click)='homeBase.reportBug()')\n                                    i.fas.fa-fw.fa-bug\n                                    div\n                                        div(translate) Report a problem\n                                        small.text-muted(translate) Generate a pre-filled GitHub issue\n\n                                button.list-group-item.list-group-item-action.link-card((click)='homeBase.openDiscord()')\n                                    i.fab.fa-fw.fa-discord\n                                    div\n                                        div(translate) Community\n                                        small.text-muted(translate) On Discord\n\n                                button.list-group-item.list-group-item-action.link-card((click)='homeBase.openGitHub()')\n                                    i.fab.fa-fw.fa-github\n                                    div\n                                        div GitHub\n                                        small.text-muted(translate) Source code\n\n                                button.list-group-item.list-group-item-action.link-card((click)='showReleaseNotes()')\n                                    i.fas.fa-fw.fa-book\n                                    div\n                                        div(translate) What's new\n                                        small.text-muted(translate) Show release notes\n\n\n                    h3(translate) Application settings\n                    .form-line\n                        .header\n                            .title(translate) Language\n                            a.description((click)='homeBase.openTranslations()')\n                                span(translate) Help translate Tabby\n                                i.fas.fa-external-link-square-alt.ms-1\n                        select.form-control([(ngModel)]='config.store.language', (ngModelChange)='saveConfiguration(true)')\n                            option([ngValue]='null', translate) Automatic\n                            option(\n                                [value]='lang.code',\n                                *ngFor='let lang of allLanguages'\n                            ) {{lang.name}}\n\n                    .form-line(*ngIf='platform.isShellIntegrationSupported()')\n                        .header\n                            .title(translate) Shell integration\n                            .description(translate) Allows quickly opening a terminal in the selected folder\n                        toggle([ngModel]='isShellIntegrationInstalled', (ngModelChange)='toggleShellIntegration()')\n\n                    .form-line(*ngIf='hostApp.platform !== Platform.Web')\n                        .header\n                            .title(translate) Enable analytics\n                            .description(translate) We're only tracking your Tabby and OS versions.\n                        toggle(\n                            [(ngModel)]='config.store.enableAnalytics',\n                            (ngModelChange)='saveConfiguration(true)',\n                        )\n\n                    .form-line(*ngIf='hostApp.platform !== Platform.Web')\n                        .header\n                            .title(translate) Automatic Updates\n                            .description(translate) Enable automatic installation of updates when they become available.\n                        toggle([(ngModel)]='config.store.enableAutomaticUpdates', (ngModelChange)='saveConfiguration()')\n\n                    .form-line(*ngIf='hostApp.platform !== Platform.Web')\n                        .header\n                            .title(translate) Debugging\n\n                        button.btn.btn-secondary((click)='hostWindow.openDevTools()')\n                            i.fas.fa-bug\n                            span(translate) Open DevTools\n\n                    h3(translate) Accessibility\n                    .form-line\n                        .header\n                            .title(translate) Enable animations\n                        toggle([(ngModel)]='config.store.accessibility.animations', (ngModelChange)='saveConfiguration()')\n\n                    .form-line\n                        .header\n                            .title(translate) Minimum contrast ratio\n                        input.form-control(\n                            type='number',\n                            min='1',\n                            max='21',\n                            step='0.5',\n                            [(ngModel)]='config.store.terminal.minimumContrastRatio',\n                            (ngModelChange)='config.save()'\n                        )\n\n        ng-container(*ngFor='let provider of settingsProviders')\n            li(*ngIf='provider.prioritized', [ngbNavItem]='provider.id')\n                a.d-flex.align-items-center(ngbNavLink)\n                    i(class='fas fa-fw me-2 fa-{{provider.icon}}')\n                    span {{provider.title|translate}}\n                ng-template(ngbNavContent)\n                    settings-tab-body([provider]='provider')\n\n        .mb-3\n\n        ng-container(*ngFor='let provider of settingsProviders')\n            li(*ngIf='!provider.prioritized', [ngbNavItem]='provider.id')\n                a.d-flex.align-items-center(ngbNavLink)\n                    i(class='fas fa-fw me-2 fa-{{provider.icon || \"puzzle-piece\"}}')\n                    span {{provider.title|translate}}\n                ng-template(ngbNavContent)\n                    settings-tab-body([provider]='provider')\n\n        li(ngbNavItem='config-file')\n            a.d-flex.align-items-center(ngbNavLink)\n                i.fas.fa-fw.fa-code.me-2\n                span(translate) Config file\n            ng-template.test(ngbNavContent)\n                .d-flex.flex-column.w-100.h-100\n                    .h-100.d-flex\n                        .w-100.d-flex.flex-column\n                            h3(translate) Config file\n                            textarea.form-control.h-100(\n                                [(ngModel)]='configFile'\n                            )\n                        .w-100.d-flex.flex-column(*ngIf='showConfigDefaults')\n                            h3(translate) Defaults\n                            textarea.form-control.h-100(\n                                [(ngModel)]='configDefaults',\n                                readonly\n                            )\n                    .mt-3.d-flex\n                        button.btn.btn-primary((click)='saveConfigFile()', *ngIf='isConfigFileValid()')\n                            i.fas.fa-check.me-2\n                            span(translate) Save and apply\n                        button.btn.btn-primary(disabled, *ngIf='!isConfigFileValid()')\n                            i.fas.fa-exclamation-triangle.me-2\n                            span(translate) Invalid syntax\n                        button.btn.btn-secondary.ms-auto(\n                            (click)='showConfigDefaults = !showConfigDefaults',\n                            translate\n                        ) Show defaults\n                        button.btn.btn-secondary.ms-3(\n                            *ngIf='platform.getConfigPath()',\n                            (click)='showConfigFile()'\n                        )\n                            i.fas.fa-external-link-square-alt.me-2\n                            span(translate) Show config file\n\n    div([ngbNavOutlet]='nav')\n\nbutton.btn.btn-warning.btn-block(\n    *ngIf='config.restartRequested',\n    (click)='restartApp()',\n    translate\n) Restart the app to apply changes\n"
  },
  {
    "path": "tabby-settings/src/components/settingsTab.component.scss",
    "content": ":host {\n    display: flex;\n    flex: auto;\n    flex-direction: column;\n    min-width: 0;\n\n    >.btn-block {\n        margin: 20px;\n        width: auto;\n        flex: none;\n    }\n\n    .logo-area {\n        .tabby-logo {\n            margin: 0 0 0 -8px;\n            width: 60px;\n            height: 60px;\n        }\n\n        .tabby-title {\n            text-align: left;\n        }\n    }\n\n    .link-card {\n        display: flex;\n        line-height: 1;\n        align-items: center;\n    }\n\n    > .content {\n        display: flex;\n        min-height: 0;\n        flex: 1 0 0;\n\n        > .nav {\n            padding: 20px 10px;\n            width: 222px;\n            flex: none;\n            overflow-y: auto;\n            flex-wrap: nowrap;\n        }\n\n        > .tab-content {\n            flex: auto;\n            padding: 20px 0;\n            overflow-y: auto;\n            display: flex;\n            flex-direction: column;\n\n            > ::ng-deep .tab-pane {\n                padding: 0 30px;\n                min-height: 100%;\n\n                > settings-tab-body > * {\n                    display: block;\n                }\n            }\n        }\n    }\n\n    &.pad-window-controls > .content > .nav {\n        padding-top: 40px;\n    }\n}\n\ntextarea {\n    font-family: 'Source Code Pro', monospace;\n    font-size: 12px;\n    min-height: 120px;\n}\n"
  },
  {
    "path": "tabby-settings/src/components/settingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport * as yaml from 'js-yaml'\nimport { debounce } from 'utils-decorators/dist/esm/debounce/debounce'\nimport { Component, Inject, Input, HostBinding, Injector } from '@angular/core'\nimport {\n    ConfigService,\n    BaseTabComponent,\n    HostAppService,\n    Platform,\n    HomeBaseService,\n    UpdaterService,\n    PlatformService,\n    HostWindowService,\n    AppService,\n    LocaleService,\n    TranslateService,\n} from 'tabby-core'\n\nimport { SettingsTabProvider } from '../api'\nimport { ReleaseNotesComponent } from './releaseNotesTab.component'\n\n/** @hidden */\n@Component({\n    selector: 'settings-tab',\n    templateUrl: './settingsTab.component.pug',\n    styleUrls: [\n        './settingsTab.component.scss',\n    ],\n})\nexport class SettingsTabComponent extends BaseTabComponent {\n    @Input() activeTab: string\n    Platform = Platform\n    configDefaults: any\n    configFile: string\n    isShellIntegrationInstalled = false\n    checkingForUpdate = false\n    updateAvailable = false\n    showConfigDefaults = false\n    allLanguages = LocaleService.allLanguages\n    @HostBinding('class.pad-window-controls') padWindowControls = false\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        public hostWindow: HostWindowService,\n        public homeBase: HomeBaseService,\n        public platform: PlatformService,\n        public locale: LocaleService,\n        public updater: UpdaterService,\n        private app: AppService,\n        @Inject(SettingsTabProvider) public settingsProviders: SettingsTabProvider[],\n        translate: TranslateService,\n        injector: Injector,\n    ) {\n        super(injector)\n        this.setTitle(translate.instant(_('Settings')))\n        this.settingsProviders = config.enabledServices(this.settingsProviders)\n        this.settingsProviders = this.settingsProviders.filter(x => !!x.getComponentType())\n        this.settingsProviders.sort((a, b) => a.weight - b.weight + a.title.localeCompare(b.title))\n\n        this.configDefaults = yaml.dump(config.getDefaults())\n\n        const onConfigChange = () => {\n            this.configFile = config.readRaw()\n            this.padWindowControls = hostApp.platform === Platform.macOS\n                && config.store.appearance.tabsLocation !== 'top'\n        }\n\n        this.subscribeUntilDestroyed(config.changed$, onConfigChange)\n        onConfigChange()\n    }\n\n    async ngOnInit () {\n        this.isShellIntegrationInstalled = await this.platform.isShellIntegrationInstalled()\n    }\n\n    async toggleShellIntegration () {\n        if (!this.isShellIntegrationInstalled) {\n            await this.platform.installShellIntegration()\n        } else {\n            await this.platform.uninstallShellIntegration()\n        }\n        this.isShellIntegrationInstalled = await this.platform.isShellIntegrationInstalled()\n    }\n\n    ngOnDestroy () {\n        this.config.save()\n    }\n\n    restartApp () {\n        this.hostApp.relaunch()\n    }\n\n    @debounce(500)\n    saveConfiguration (requireRestart?: boolean) {\n        this.config.save()\n        if (requireRestart) {\n            this.config.requestRestart()\n        }\n    }\n\n    saveConfigFile () {\n        if (this.isConfigFileValid()) {\n            this.config.writeRaw(this.configFile)\n        }\n    }\n\n    showConfigFile () {\n        this.platform.showItemInFolder(this.platform.getConfigPath()!)\n    }\n\n    isConfigFileValid () {\n        try {\n            yaml.load(this.configFile)\n            return true\n        } catch {\n            return false\n        }\n    }\n\n    async checkForUpdates () {\n        this.checkingForUpdate = true\n        this.updateAvailable = await this.updater.check()\n        this.checkingForUpdate = false\n    }\n\n    showReleaseNotes () {\n        this.app.openNewTabRaw({\n            type: ReleaseNotesComponent,\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/settingsTabBody.component.ts",
    "content": "import { Component, Input, ViewContainerRef, ViewChild, ComponentFactoryResolver, ComponentRef } from '@angular/core'\nimport { SettingsTabProvider } from '../api'\n\n/** @hidden */\n@Component({\n    selector: 'settings-tab-body',\n    template: '<ng-template #placeholder></ng-template>',\n    styles: [`\n        :host {\n            display: block;\n            padding-bottom: 20px;\n            max-width: 600px;\n        }\n    `],\n})\nexport class SettingsTabBodyComponent {\n    @Input() provider: SettingsTabProvider\n    @ViewChild('placeholder', { read: ViewContainerRef }) placeholder: ViewContainerRef\n    component: ComponentRef<unknown>\n\n    constructor (private componentFactoryResolver: ComponentFactoryResolver) { }\n\n    ngAfterViewInit (): void {\n        // run after the change detection finishes\n        setImmediate(() => {\n            this.component = this.placeholder.createComponent(\n                this.componentFactoryResolver.resolveComponentFactory(\n                    this.provider.getComponentType(),\n                ),\n            )\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/showSecretModal.component.pug",
    "content": "h4.modal-header.m-0.pb-0 {{title}}\n.modal-body\n    .input-group.w-100\n        input.form-control(\n            type='text',\n            [(ngModel)]='secret.value',\n            disabled\n        )\n        button.btn.btn-secondary(\n            (click)='copySecret()'\n        )\n            i.fas.fa-copy\n\n.modal-footer\n    button.btn.btn-primary((click)='close()', translate) Close\n"
  },
  {
    "path": "tabby-settings/src/components/showSecretModal.component.ts",
    "content": "import { Component, Input } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { NotificationsService, VaultFileSecret } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './showSecretModal.component.pug',\n})\nexport class ShowSecretModalComponent {\n    @Input() title: string\n    @Input() secret: VaultFileSecret\n\n    constructor (\n        public modalInstance: NgbActiveModal,\n        private notifications: NotificationsService,\n    ) { }\n\n    close (): void {\n        this.modalInstance.dismiss()\n    }\n\n    copySecret (): void {\n        navigator.clipboard.writeText(this.secret.value)\n        // Show a notification\n        this.notifications.info('Copied to clipboard')\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/components/vaultSettingsTab.component.pug",
    "content": ".text-center(*ngIf='!vault.isEnabled()')\n    i.fas.fa-key.fa-3x.m-3\n    h3.m-3(translate) Vault is not configured\n    .m-3(translate) Vault is an always-encrypted container for secrets such as SSH passwords and private key passphrases.\n    button.btn.btn-primary.m-2((click)='enableVault()', translate) Set master passphrase\n\n\ndiv(*ngIf='vault.isEnabled()')\n    .d-flex.align-items-center.mb-3\n        h3.m-0(translate) Vault\n        .d-flex.ms-auto(ngbDropdown, *ngIf='vault.isEnabled()')\n            button.btn.btn-secondary(ngbDropdownToggle, translate) Options\n            div(ngbDropdownMenu)\n                a(ngbDropdownItem, (click)='changePassphrase()')\n                    i.fas.fa-fw.fa-key\n                    span(translate) Change the master passphrase\n                a(ngbDropdownItem, (click)='disableVault()')\n                    i.fas.fa-fw.fa-radiation-alt\n                    span(translate) Erase the Vault\n\n    div(*ngIf='vaultContents')\n        .text-center(*ngIf='!vaultContents.secrets.length')\n            i.fas.fa-empty-set.fa-3x\n            h3.m-3(translate) Vault is empty\n\n        .list-group\n            .list-group-item.d-flex.align-items-center.p-1.ps-3(*ngFor='let secret of vaultContents.secrets')\n                i.fas.fa-key\n                .me-auto {{getSecretLabel(secret)}}\n\n                .hover-reveal(ngbDropdown)\n                    button.btn.btn-link(ngbDropdownToggle)\n                        i.fas.fa-ellipsis-v\n                    div(ngbDropdownMenu)\n                        button(ngbDropdownItem, (click)='showSecret(secret)')\n                            i.fas.fa-fw.fa-eye\n                            span(translate) Show\n                        button(\n                            ngbDropdownItem,\n                            *ngIf='secret.type === VAULT_SECRET_TYPE_FILE',\n                            (click)='renameFile(castAny(secret))'\n                        )\n                            i.fas.fa-fw.fa-pencil-alt\n                            span(translate) Rename\n                        button(\n                            ngbDropdownItem,\n                            *ngIf='secret.type === VAULT_SECRET_TYPE_FILE',\n                            (click)='replaceFileContent(castAny(secret))'\n                        )\n                            i.fas.fa-fw.fa-file-import\n                            span(translate) Replace\n                        button(\n                            ngbDropdownItem,\n                            *ngIf='secret.type === VAULT_SECRET_TYPE_FILE',\n                            (click)='exportFile(castAny(secret))'\n                        )\n                            i.fas.fa-fw.fa-file-export\n                            span(translate) Export\n                        button(ngbDropdownItem, (click)='removeSecret(secret)')\n                            i.fas.fa-fw.fa-trash\n                            span(translate) Delete\n\n        h3.mt-5(translate) Options\n        .form-line\n            .header\n                .title(translate) Encrypt config file\n                .description(translate) Puts all of Tabby's configuration into the vault\n            toggle(\n                [ngModel]='config.store.encrypted',\n                (click)='toggleConfigEncrypted()',\n            )\n\n    .text-center(*ngIf='!vaultContents')\n        i.fas.fa-key.fa-3x\n        h3.m-3(translate) Vault is locked\n        button.btn.btn-primary.m-2((click)='loadVault()', translate) Show vault contents\n"
  },
  {
    "path": "tabby-settings/src/components/vaultSettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, HostBinding } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseComponent, VaultService, VaultSecret, Vault, PlatformService, ConfigService, VAULT_SECRET_TYPE_FILE, PromptModalComponent, VaultFileSecret, TranslateService } from 'tabby-core'\nimport { SetVaultPassphraseModalComponent } from './setVaultPassphraseModal.component'\nimport { ShowSecretModalComponent } from './showSecretModal.component'\n\n\n/** @hidden */\n@Component({\n    selector: 'vault-settings-tab',\n    templateUrl: './vaultSettingsTab.component.pug',\n})\nexport class VaultSettingsTabComponent extends BaseComponent {\n    vaultContents: Vault|null = null\n    VAULT_SECRET_TYPE_FILE = VAULT_SECRET_TYPE_FILE\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public vault: VaultService,\n        public config: ConfigService,\n        private platform: PlatformService,\n        private ngbModal: NgbModal,\n        private translate: TranslateService,\n    ) {\n        super()\n        if (vault.isOpen()) {\n            this.loadVault()\n        }\n    }\n\n    async loadVault (): Promise<void> {\n        this.vaultContents = await this.vault.load()\n    }\n\n    async enableVault () {\n        const modal = this.ngbModal.open(SetVaultPassphraseModalComponent)\n        const newPassphrase = await modal.result.catch(() => null)\n        if (newPassphrase) {\n            await this.vault.setEnabled(true, newPassphrase)\n            this.vaultContents = await this.vault.load(newPassphrase)\n        }\n    }\n\n    async disableVault () {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Delete vault contents?'),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            await this.vault.setEnabled(false)\n        }\n    }\n\n    async changePassphrase () {\n        if (!this.vaultContents) {\n            this.vaultContents = await this.vault.load()\n        }\n        if (!this.vaultContents) {\n            return\n        }\n        const modal = this.ngbModal.open(SetVaultPassphraseModalComponent)\n        const newPassphrase = await modal.result.catch(() => null)\n        if (newPassphrase) {\n            this.vault.save(this.vaultContents, newPassphrase)\n        }\n    }\n\n    async toggleConfigEncrypted () {\n        this.config.store.encrypted = !this.config.store.encrypted\n        try {\n            await this.config.save()\n        } catch (e) {\n            this.config.store.encrypted = !this.config.store.encrypted\n            throw e\n        }\n    }\n\n    getSecretLabel (secret: VaultSecret) {\n        if (secret.type === 'ssh:password') {\n            return this.translate.instant('SSH password for {user}@{host}:{port}', (secret as any).key)\n        }\n        if (secret.type === 'ssh:key-passphrase') {\n            return this.translate.instant('Passphrase for a private key with hash {hash}...', { hash: (secret as any).key.hash.substring(0, 8) })\n        }\n        if (secret.type === VAULT_SECRET_TYPE_FILE) {\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n            return this.translate.instant('File: {description}', (secret as VaultFileSecret).key)\n        }\n        return this.translate.instant('Unknown secret of type {type} for {key}', { type: secret.type, key: JSON.stringify(secret.key) })\n    }\n\n    showSecret (secret: VaultSecret) {\n        if (!this.vaultContents) {\n            return\n        }\n        const modal = this.ngbModal.open(ShowSecretModalComponent)\n        modal.componentInstance.title = this.getSecretLabel(secret)\n        modal.componentInstance.secret = secret\n\n    }\n\n    removeSecret (secret: VaultSecret) {\n        if (!this.vaultContents) {\n            return\n        }\n        this.vaultContents.secrets = this.vaultContents.secrets.filter(x => x !== secret)\n        this.vault.removeSecret(secret.type, secret.key)\n    }\n\n    async replaceFileContent (secret: VaultFileSecret) {\n        const transfers = await this.platform.startUpload()\n        if (!transfers.length) {\n            return\n        }\n        await this.vault.updateSecret(secret, {\n            ...secret,\n            value: Buffer.from(await transfers[0].readAll()).toString('base64'),\n        })\n        this.loadVault()\n    }\n\n    async renameFile (secret: VaultFileSecret) {\n        const modal = this.ngbModal.open(PromptModalComponent)\n        modal.componentInstance.prompt = this.translate.instant('New name')\n        modal.componentInstance.value = secret.key.description\n\n        const description = (await modal.result.catch(() => null))?.value\n        if (!description) {\n            return\n        }\n\n        await this.vault.updateSecret(secret, {\n            ...secret,\n            key: {\n                ...secret.key,\n                description,\n            },\n        })\n\n        this.loadVault()\n    }\n\n    async exportFile (secret: VaultFileSecret) {\n        this.vault.forgetPassphrase()\n\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        secret = (await this.vault.getSecret(secret.type, secret.key)) as VaultFileSecret\n\n        const content = Buffer.from(secret.value, 'base64')\n        const download = await this.platform.startDownload(secret.key.description, 0o600, content.length)\n\n        if (download) {\n            await download.write(content)\n            download.close()\n        }\n    }\n\n    castAny = (x: any) => x\n}\n"
  },
  {
    "path": "tabby-settings/src/components/windowSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Window\n\n.form-line(*ngIf='themes.length > 1')\n    .header\n        .title(translate) Theme\n    select.form-control(\n        [(ngModel)]='config.store.appearance.theme',\n        (ngModelChange)='saveConfiguration()',\n    )\n        option(*ngFor='let theme of themes', [ngValue]='theme.name') {{theme.name|translate}}\n\n.form-line\n    .header\n        .title(translate) Spaciness\n        .description(translate) Controls the amount of space between elements\n    input(\n        type='range',\n        [(ngModel)]='config.store.appearance.spaciness',\n        (mouseup)='saveConfiguration()',\n        min='0.6',\n        max='1.4',\n        step='0.1'\n    )\n\n.form-line(*ngIf='hostApp.platform === Platform.Web')\n    .header\n        .title(translate) Ask before closing the browser tab\n        .description(translate) Prevents accidental closing\n    toggle(\n        [(ngModel)]='config.store.web.preventAccidentalTabClosure',\n        (ngModelChange)='saveConfiguration()',\n    )\n\n\n.form-line(*ngIf='platform.supportsWindowControls')\n    .header\n        .title(*ngIf='hostApp.platform !== Platform.macOS', translate) Acrylic background\n        .title(*ngIf='hostApp.platform === Platform.macOS', translate) Vibrancy\n        .description(translate) Gives the window a blurred transparent background\n\n    toggle(\n        [(ngModel)]='config.store.appearance.vibrancy',\n        (ngModelChange)='saveConfiguration()'\n    )\n\n.form-line(*ngIf='config.store.appearance.vibrancy && isFluentVibrancySupported && config.store.hacks.enableFluentBackground')\n    .header\n        .title(translate) Background type\n    .btn-group\n        input.btn-check(\n            type='radio',\n            name='vibracy',\n            [(ngModel)]='config.store.appearance.vibrancyType',\n            (ngModelChange)='saveConfiguration()',\n            id='vibrancyTypeBlur',\n            [value]='\"blur\"'\n        )\n        label.btn.btn-secondary(\n            for='vibrancyTypeBlur'\n        )\n            span(translate) Blur\n        input.btn-check(\n            type='radio',\n            name='vibracy',\n            [(ngModel)]='config.store.appearance.vibrancyType',\n            (ngModelChange)='saveConfiguration()',\n            id='vibrancyTypeFluent',\n            [value]='\"fluent\"'\n        )\n        label.btn.btn-secondary(\n            for='vibrancyTypeFluent'\n        )\n            span Fluent\n\n.form-line(*ngIf='platform.supportsWindowControls')\n    .header\n        .title(translate) Opacity\n    input(\n        type='range',\n        [(ngModel)]='config.store.appearance.opacity',\n        (ngModelChange)='saveConfiguration(); (hostApp.platform === Platform.Linux && config.requestRestart())',\n        min='0.4',\n        max='1',\n        step='0.01'\n    )\n\n.form-line(*ngIf='platform.supportsWindowControls')\n    .header\n        .title(translate) Window frame\n        .description(translate) Whether a custom window or an OS native window should be used\n\n    .btn-group\n        input.btn-check(\n            type='radio',\n            name='frame',\n            [(ngModel)]='config.store.appearance.frame',\n            (ngModelChange)='saveConfiguration(true)',\n            id='frameNative',\n            [value]='\"native\"'\n        )\n        label.btn.btn-secondary(for='frameNative')\n            span(translate) Native\n        input.btn-check(\n            type='radio',\n            name='frame',\n            [(ngModel)]='config.store.appearance.frame',\n            (ngModelChange)='saveConfiguration(true)',\n            id='frameThin',\n            [value]='\"thin\"'\n        )\n        label.btn.btn-secondary(for='frameThin')\n            span(translate) Thin\n        input.btn-check(\n            type='radio',\n            name='frame',\n            [(ngModel)]='config.store.appearance.frame',\n            (ngModelChange)='saveConfiguration(true)',\n            id='frameFull',\n            [value]='\"full\"'\n        )\n        label.btn.btn-secondary(for='frameFull')\n            span(translate) Full\n\n.form-line(*ngIf='hostApp.platform !== Platform.Web && hostApp.platform !== Platform.Linux')\n    .header\n        .title(translate) Hide tray icon\n        .description(translate) Hide Tabby from tray or menu bar.\n    toggle(\n        [(ngModel)]='config.store.hideTray',\n        (ngModelChange)='saveConfiguration(true)'\n    )\n\nh3.mt-4(translate) Docking\n\n.form-line(*ngIf='docking')\n    .header\n        .title(translate) Dock the terminal\n        .description(translate) Snaps the window to a side of the screen\n\n    .btn-group\n        input.btn-check(\n            type='radio',\n            name='docking',\n            [(ngModel)]='config.store.appearance.dock',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockingOff',\n            [value]='\"off\"'\n        )\n        label.btn.btn-secondary(for='dockingOff')\n            span(translate) Off\n        input.btn-check(\n            type='radio',\n            name='docking',\n            [(ngModel)]='config.store.appearance.dock',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockingTop',\n            [value]='\"top\"'\n        )\n        label.btn.btn-secondary(for='dockingTop')\n            span(translate) Top\n        input.btn-check(\n            type='radio',\n            name='docking',\n            [(ngModel)]='config.store.appearance.dock',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockingLeft',\n            [value]='\"left\"'\n        )\n        label.btn.btn-secondary(for='dockingLeft')\n            span(translate) Left\n        input.btn-check(\n            type='radio',\n            name='docking',\n            [(ngModel)]='config.store.appearance.dock',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockingRight',\n            [value]='\"right\"'\n        )\n        label.btn.btn-secondary(for='dockingRight')\n            span(translate) Right\n        input.btn-check(\n            type='radio',\n            name='docking',\n            [(ngModel)]='config.store.appearance.dock',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockingBottom',\n            [value]='\"bottom\"'\n        )\n        label.btn.btn-secondary(for='dockingBottom')\n            span(translate) Bottom\n\n.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != \"off\"')\n    .header\n        .title(translate) Display on\n        .description(translate) Snaps the window to a side of the screen\n\n    div\n        input.btn-check(\n            type='radio',\n            name='dockScreen',\n            [(ngModel)]='config.store.appearance.dockScreen',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockScreenCurrent',\n            value='current'\n        )\n        label.btn.btn-secondary(id='dockScreenCurrent')\n            span(translate) Current\n        input.btn-check(\n            *ngFor='let screen of screens',\n            type='radio',\n            name='dockScreen',\n            [(ngModel)]='config.store.appearance.dockScreen',\n            (ngModelChange)='saveConfiguration(); docking.dock()',\n            id='dockScreen{{screen.id}}',\n            [value]='screen.id'\n        )\n        label.btn.btn-secondary(*ngFor='let screen of screens', for='dockScreen{{screen.id}}')\n            | {{screen.name}}\n\n.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != \"off\"')\n    .header\n        .title(translate) Dock always on top\n        .description(translate) Keep docked terminal always on top\n    toggle(\n        [(ngModel)]='config.store.appearance.dockAlwaysOnTop',\n        (ngModelChange)='saveConfiguration(); docking.dock()',\n    )\n\n.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != \"off\"')\n    .header\n        .title(translate) Docked terminal size\n        .description(translate) Window dimension away from the edge\n    input(\n        type='range',\n        [(ngModel)]='config.store.appearance.dockFill',\n        (mouseup)='saveConfiguration(); docking.dock()',\n        min='0.05',\n        max='1',\n        step='0.01'\n    )\n\n.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != \"off\"')\n    .header\n        .title(translate) Docked terminal space\n        .description(translate) Window dimension along the edge\n    input(\n        type='range',\n        [(ngModel)]='config.store.appearance.dockSpace',\n        (mouseup)='saveConfiguration(); docking.dock()',\n        min='0.2',\n        max='1',\n        step='0.01'\n    )\n\n.ms-5.form-line(*ngIf='docking && config.store.appearance.dock != \"off\"')\n    .header\n        .title(translate) Hide window on focus loss\n        .description(translate) Hides the docked terminal when you click away.\n    toggle(\n        [(ngModel)]='config.store.appearance.dockHideOnBlur',\n        (ngModelChange)='saveConfiguration(); ',\n    )\n\nh3.mt-4(translate) Tabs\n\n.form-line\n    .header\n        .title(translate) Tabs location\n    .btn-group\n        input.btn-check(\n            type='radio',\n            name='tabsLocation',\n            [(ngModel)]='config.store.appearance.tabsLocation',\n            (ngModelChange)='saveConfiguration()',\n            id='tabsLocationTop',\n            [value]='\"top\"'\n        )\n        label.btn.btn-secondary(for='tabsLocationTop')\n            span(translate) Top\n        input.btn-check(\n            type='radio',\n            name='tabsLocation',\n            [(ngModel)]='config.store.appearance.tabsLocation',\n            (ngModelChange)='saveConfiguration()',\n            id='tabsLocationBottom',\n            [value]='\"bottom\"'\n        )\n        label.btn.btn-secondary(for='tabsLocationBottom')\n            span(translate) Bottom\n        input.btn-check(\n            type='radio',\n            name='tabsLocation',\n            [(ngModel)]='config.store.appearance.tabsLocation',\n            (ngModelChange)='saveConfiguration()',\n            id='tabsLocationLeft',\n            [value]='\"left\"'\n        )\n        label.btn.btn-secondary(for='tabsLocationLeft')\n            span(translate) Left\n        input.btn-check(\n            type='radio',\n            name='tabsLocation',\n            [(ngModel)]='config.store.appearance.tabsLocation',\n            (ngModelChange)='saveConfiguration()',\n            id='tabsLocationRight',\n            [value]='\"right\"'\n        )\n        label.btn.btn-secondary(for='tabsLocationRight')\n            span(translate) Right\n\n.form-line\n    .header\n        .title(translate) Tabs width\n    .btn-group\n        input.btn-check(\n            type='radio',\n            name='flexTabs',\n            [(ngModel)]='config.store.appearance.flexTabs',\n            (ngModelChange)='saveConfiguration()',\n            id='flexTabsTrue',\n            [value]='true'\n        )\n        label.btn.btn-secondary(for='flexTabsTrue')\n            span(translate, translateComment='[Dynamic] tab width') id.tab-width.dynamic\n        input.btn-check(\n            type='radio',\n            name='flexTabs',\n            [(ngModel)]='config.store.appearance.flexTabs',\n            (ngModelChange)='saveConfiguration()',\n            id='flexTabsFalse',\n            [value]='false'\n        )\n        label.btn.btn-secondary(for='flexTabsFalse')\n            span(translate) Fixed\n\n.form-line\n    .header\n        .title(translate) Show tabs in fullscreen mode\n\n    toggle(\n        [(ngModel)]='config.store.appearance.tabsInFullscreen',\n        (ngModelChange)='config.save();',\n    )\n\n.form-line\n    .header\n        .title(translate) Hide tab index\n\n    toggle(\n        [(ngModel)]='config.store.terminal.hideTabIndex',\n        (ngModelChange)='config.save();',\n    )\n\n.form-line\n    .header\n        .title(translate) Show profile icon on tab\n\n    toggle(\n        [(ngModel)]='config.store.terminal.showTabProfileIcon',\n        (ngModelChange)='config.save();',\n    )\n\n.form-line\n    .header\n        .title(translate) Hide tab options button\n\n    toggle(\n        [(ngModel)]='config.store.terminal.hideTabOptionsButton',\n        (ngModelChange)='config.save();',\n    )\n\n.form-line\n    .header\n        .title(translate) Hide tab close button\n\n    toggle(\n        [(ngModel)]='config.store.terminal.hideCloseButton',\n        (ngModelChange)='config.save();',\n    )\n\n.form-line\n    .header\n        .title(translate) Close the window after closing the last tab\n\n    toggle(\n        [(ngModel)]='config.store.appearance.lastTabClosesWindow',\n        (ngModelChange)='config.save();',\n    )\n\nh3.mt-4(translate) Panes\n\n.form-line()\n    .header\n        .title(translate) Pane resize step\n        .description(translate) For keyboard shortcuts\n    input(\n        type='range',\n        [(ngModel)]='config.store.terminal.paneResizeStep',\n        (ngModelChange)='saveConfiguration();',\n        min='0.1',\n        max='0.9',\n        step='0.05'\n    )\n\n.form-line()\n    .header\n        .title(translate) Focus follows mouse\n        .description(translate) Moving the mouse over an inactive pane will cause it to activate\n    toggle(\n        [(ngModel)]='config.store.terminal.focusFollowsMouse',\n        (ngModelChange)='config.save(); config.requestRestart()'\n    )\n\nh3.mt-4(translate) Hacks\n\n.form-line(*ngIf='hostApp.platform !== Platform.Web')\n    .header\n        .title(translate) Disable GPU acceleration\n        .description(translate) Tick this if you're experiencing aliasing, ghosting or other visual issues\n\n    toggle(\n        [(ngModel)]='config.store.hacks.disableGPU',\n        (ngModelChange)='config.save(); config.requestRestart()'\n    )\n\n.form-line(*ngIf='hostApp.platform === Platform.Windows && isFluentVibrancySupported')\n    .header\n        .title(translate) Enable fluent background option\n        .description(translate) Experimental Windows 10 background style known to cause issues\n\n    toggle(\n        [(ngModel)]='config.store.hacks.enableFluentBackground',\n        (ngModelChange)='config.save()'\n    )\n\n.form-line(*ngIf='hostApp.platform === Platform.Windows && isFluentVibrancySupported')\n    .header\n        .title(translate) Disable fluent background while dragging\n        .description(translate) Fluent background sometimes causes drag lag\n\n    toggle(\n        [(ngModel)]='config.store.hacks.disableVibrancyWhileDragging',\n        (ngModelChange)='config.save(); config.requestRestart()'\n    )\n"
  },
  {
    "path": "tabby-settings/src/components/windowSettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { debounce } from 'utils-decorators/dist/esm/debounce/debounce'\nimport { Component, HostBinding, Inject, NgZone, Optional } from '@angular/core'\nimport {\n    DockingService,\n    ConfigService,\n    Theme,\n    HostAppService,\n    Platform,\n    isWindowsBuild,\n    WIN_BUILD_FLUENT_BG_SUPPORTED,\n    BaseComponent,\n    Screen,\n    PlatformService,\n} from 'tabby-core'\n\n\n/** @hidden */\n@Component({\n    selector: 'window-settings-tab',\n    templateUrl: './windowSettingsTab.component.pug',\n})\nexport class WindowSettingsTabComponent extends BaseComponent {\n    screens: Screen[]\n    Platform = Platform\n    isFluentVibrancySupported = false\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        public platform: PlatformService,\n        public zone: NgZone,\n        @Inject(Theme) public themes: Theme[],\n        @Optional() public docking?: DockingService,\n    ) {\n        super()\n\n        this.themes = config.enabledServices(this.themes)\n\n        const dockingService = docking\n        if (dockingService) {\n            this.subscribeUntilDestroyed(dockingService.screensChanged$, () => {\n                this.zone.run(() => this.screens = dockingService.getScreens())\n            })\n            this.screens = dockingService.getScreens()\n        }\n\n        this.isFluentVibrancySupported = isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)\n    }\n\n    @debounce(500)\n    saveConfiguration (requireRestart?: boolean) {\n        this.config.save()\n        if (requireRestart) {\n            this.config.requestRestart()\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/config.ts",
    "content": "import { ConfigProvider, Platform } from 'tabby-core'\n\n/** @hidden */\nexport class SettingsConfigProvider extends ConfigProvider {\n    defaults = {\n        configSync: {\n            host: null,\n            token: null,\n            configID: null,\n            auto: false,\n            parts: {\n                hotkeys: true,\n                appearance: true,\n                vault: true,\n            },\n        },\n        hotkeys: {\n            'settings-tab': {\n                __nonStructural: true,\n            },\n        },\n    }\n\n    platformDefaults = {\n        [Platform.macOS]: {\n            hotkeys: {\n                settings: ['⌘-,'],\n            },\n        },\n        [Platform.Windows]: {\n            hotkeys: {\n                settings: ['Ctrl-,'],\n            },\n        },\n        [Platform.Linux]: {\n            hotkeys: {\n                settings: ['Ctrl-,'],\n            },\n        },\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/hotkeys.ts",
    "content": "import { Inject, Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\nimport { SettingsTabProvider } from './api'\n\n/** @hidden */\n@Injectable()\nexport class SettingsHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'settings',\n            name: this.translate.instant('Open Settings'),\n        },\n    ]\n\n    constructor (\n        private translate: TranslateService,\n        @Inject(SettingsTabProvider) private settingsProviders: SettingsTabProvider[],\n    ) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return [\n            ...this.hotkeys,\n            ...this.settingsProviders.map(provider => ({\n                id: `settings-tab.${provider.id}`,\n                name: this.translate.instant('Open settings tab: {tab}', { tab: provider.title }),\n            })),\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll'\n\nimport TabbyCorePlugin, { ToolbarButtonProvider, HotkeyProvider, ConfigProvider, HotkeysService, AppService } from 'tabby-core'\n\nimport { EditProfileModalComponent } from './components/editProfileModal.component'\nimport { EditProfileGroupModalComponent } from './components/editProfileGroupModal.component'\nimport { HotkeyInputModalComponent } from './components/hotkeyInputModal.component'\nimport { HotkeySettingsTabComponent } from './components/hotkeySettingsTab.component'\nimport { MultiHotkeyInputComponent } from './components/multiHotkeyInput.component'\nimport { SettingsTabComponent } from './components/settingsTab.component'\nimport { SettingsTabBodyComponent } from './components/settingsTabBody.component'\nimport { WindowSettingsTabComponent } from './components/windowSettingsTab.component'\nimport { VaultSettingsTabComponent }  from './components/vaultSettingsTab.component'\nimport { SetVaultPassphraseModalComponent } from './components/setVaultPassphraseModal.component'\nimport { ProfilesSettingsTabComponent } from './components/profilesSettingsTab.component'\nimport { ReleaseNotesComponent } from './components/releaseNotesTab.component'\nimport { ConfigSyncSettingsTabComponent } from './components/configSyncSettingsTab.component'\nimport { ShowSecretModalComponent } from './components/showSecretModal.component'\n\nimport { ConfigSyncService } from './services/configSync.service'\n\nimport { SettingsTabProvider } from './api'\nimport { ButtonProvider } from './buttonProvider'\nimport { SettingsHotkeyProvider } from './hotkeys'\nimport { SettingsConfigProvider } from './config'\nimport { HotkeySettingsTabProvider, WindowSettingsTabProvider, VaultSettingsTabProvider, ProfilesSettingsTabProvider, ConfigSyncSettingsTabProvider } from './settings'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        NgbModule,\n        TabbyCorePlugin,\n        InfiniteScrollModule,\n    ],\n    providers: [\n        { provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true },\n        { provide: ConfigProvider, useClass: SettingsConfigProvider, multi: true },\n        { provide: HotkeyProvider, useClass: SettingsHotkeyProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: HotkeySettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: WindowSettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: VaultSettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: ProfilesSettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: ConfigSyncSettingsTabProvider, multi: true },\n    ],\n    declarations: [\n        EditProfileModalComponent,\n        EditProfileGroupModalComponent,\n        HotkeyInputModalComponent,\n        HotkeySettingsTabComponent,\n        MultiHotkeyInputComponent,\n        ProfilesSettingsTabComponent,\n        SettingsTabComponent,\n        SettingsTabBodyComponent,\n        SetVaultPassphraseModalComponent,\n        VaultSettingsTabComponent,\n        WindowSettingsTabComponent,\n        ConfigSyncSettingsTabComponent,\n        ReleaseNotesComponent,\n        ShowSecretModalComponent,\n    ],\n})\nexport default class SettingsModule {\n    constructor (\n        public configSync: ConfigSyncService,\n        app: AppService,\n        hotkeys: HotkeysService,\n    ) {\n        hotkeys.hotkey$.subscribe(async hotkey => {\n            if (hotkey.startsWith('settings-tab.')) {\n                const id = hotkey.substring(hotkey.indexOf('.') + 1)\n                app.openNewTabRaw({\n                    type: SettingsTabComponent,\n                    inputs: { activeTab: id },\n                })\n            }\n        })\n    }\n}\n\nexport * from './api'\nexport { SettingsTabComponent }\n"
  },
  {
    "path": "tabby-settings/src/services/configSync.service.ts",
    "content": "import * as yaml from 'js-yaml'\nimport axios from 'axios'\nimport { Injectable } from '@angular/core'\nimport { ConfigService, HostAppService, Logger, LogService, Platform, PlatformService } from 'tabby-core'\n\nexport interface User {\n    id: number\n}\n\nexport interface Config {\n    id: number\n    name: string\n    content: string\n    last_used_with_version: string|null\n    created_at: Date\n    modified_at: Date\n}\n\nconst OPTIONAL_CONFIG_PARTS = ['hotkeys', 'appearance', 'vault']\n\n@Injectable({ providedIn: 'root' })\nexport class ConfigSyncService {\n    private logger: Logger\n    private lastRemoteChange = new Date(0)\n\n    constructor (\n        log: LogService,\n        private platform: PlatformService,\n        private hostApp: HostAppService,\n        private config: ConfigService,\n    ) {\n        this.logger = log.create('configSync')\n        config.ready$.toPromise().then(() => {\n            this.autoSync()\n            config.changed$.subscribe(() => {\n                if (this.isEnabled() && this.config.store.configSync.auto) {\n                    this.upload()\n                }\n            })\n        })\n    }\n\n    isAvailable (): boolean {\n        return this.hostApp.platform !== Platform.Web\n    }\n\n    isEnabled (): boolean {\n        return this.isAvailable() &&\n            !!this.config.store.configSync.host &&\n            !!this.config.store.configSync.token &&\n            !!this.config.store.configSync.configID\n    }\n\n    async getConfigs (): Promise<Config[]> {\n        return this.request('GET', '/api/1/configs')\n    }\n\n    async getConfig (id: number): Promise<Config> {\n        return this.request('GET', `/api/1/configs/${id}`)\n    }\n\n    async updateConfig (id: number, data: Partial<Config>): Promise<Config> {\n        return this.request('PATCH', `/api/1/configs/${id}`, { data })\n    }\n\n    async getUser (): Promise<any> {\n        return this.request('GET', '/api/1/user')\n    }\n\n    async createNewConfig (name: string): Promise<Config> {\n        return this.request('POST', '/api/1/configs', {\n            data: {\n                name,\n            },\n        })\n    }\n\n    async deleteConfig (id: number): Promise<any> {\n        return this.request('DELETE', `/api/1/configs/${id}`)\n    }\n\n    setConfig (config: Config): void {\n        this.config.store.configSync.configID = config.id\n        this.config.save()\n        this.lastRemoteChange = new Date(config.modified_at)\n    }\n\n    async upload (): Promise<void> {\n        if (!this.isEnabled()) {\n            return\n        }\n        try {\n            const data = await this.readConfigDataForSync()\n            const remoteData = yaml.load((await this.getConfig(this.config.store.configSync.configID)).content) as any\n            for (const part of OPTIONAL_CONFIG_PARTS) {\n                if (!this.config.store.configSync.parts[part]) {\n                    data[part] = remoteData[part]\n                }\n            }\n            const content = yaml.dump(data)\n            const result = await this.updateConfig(this.config.store.configSync.configID, {\n                content,\n                last_used_with_version: this.platform.getAppVersion(),\n            })\n            this.lastRemoteChange = new Date(result.modified_at)\n            this.logger.debug('Config uploaded')\n        } catch (error) {\n            this.logger.error('Upload failed:', error)\n            throw error\n        }\n    }\n\n    async download (): Promise<void> {\n        if (!this.isEnabled()) {\n            return\n        }\n        try {\n            const config = await this.getConfig(this.config.store.configSync.configID)\n            const data = yaml.load(config.content) as any\n\n            const localData = yaml.load(this.config.readRaw()) as any\n            data.configSync = localData.configSync\n\n            if (!data.encrypted) {\n                for (const part of OPTIONAL_CONFIG_PARTS) {\n                    if (!this.config.store.configSync.parts[part]) {\n                        data[part] = localData[part]\n                    }\n                }\n            }\n\n            await this.writeConfigDataFromSync(data)\n            this.logger.debug('Config downloaded')\n        } catch (error) {\n            this.logger.error('Download failed:', error)\n            throw error\n        }\n    }\n\n    async delete (config: Config): Promise<void> {\n        try {\n            await this.deleteConfig(config.id)\n            this.logger.debug('Config deleted')\n        } catch (error) {\n            this.logger.error('Delete failed:', error)\n            throw error\n        }\n    }\n\n    private async readConfigDataForSync (): Promise<any> {\n        const data = yaml.load(await this.platform.loadConfig()) as any\n        delete data.configSync\n        return data\n    }\n\n    private async writeConfigDataFromSync (data: any) {\n        await this.platform.saveConfig(yaml.dump(data))\n        await this.config.load()\n        await this.config.save()\n    }\n\n    private async request (method: 'GET'|'POST'|'PATCH'|'DELETE', url: string, params = {}) {\n        if (this.config.store.configSync.host.endsWith('/')) {\n            this.config.store.configSync.host = this.config.store.configSync.host.slice(0, -1)\n        }\n        url = this.config.store.configSync.host + url\n        this.logger.debug(`${method} ${url}`, params)\n        try {\n            const response = await axios.request({\n                url,\n                method,\n                headers: {\n                    Authorization: `Bearer ${this.config.store.configSync.token}`,\n                },\n                ...params,\n            })\n            this.logger.debug(response)\n            return response.data\n        } catch (error) {\n            this.logger.error(error)\n            throw error\n        }\n    }\n\n    private async autoSync () {\n        while (true) {\n            try {\n                if (this.isEnabled() && this.config.store.configSync.auto) {\n                    const cfg = await this.getConfig(this.config.store.configSync.configID)\n                    if (new Date(cfg.modified_at) > this.lastRemoteChange) {\n                        this.logger.info('Remote config changed, downloading')\n                        this.download()\n                        this.lastRemoteChange = new Date(cfg.modified_at)\n                    }\n                }\n            } catch (error) {\n                this.logger.debug('Recovering from autoSync network error')\n            }\n            await new Promise(resolve => setTimeout(resolve, 60000))\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-settings/src/settings.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { SettingsTabProvider } from './api'\nimport { HotkeySettingsTabComponent } from './components/hotkeySettingsTab.component'\nimport { WindowSettingsTabComponent } from './components/windowSettingsTab.component'\nimport { VaultSettingsTabComponent } from './components/vaultSettingsTab.component'\nimport { ConfigSyncSettingsTabComponent } from './components/configSyncSettingsTab.component'\nimport { ProfilesSettingsTabComponent } from './components/profilesSettingsTab.component'\nimport { TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class HotkeySettingsTabProvider extends SettingsTabProvider {\n    id = 'hotkeys'\n    icon = 'keyboard'\n    title = this.translate.instant('Hotkeys')\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return HotkeySettingsTabComponent\n    }\n}\n\n\n/** @hidden */\n@Injectable()\nexport class WindowSettingsTabProvider extends SettingsTabProvider {\n    id = 'window'\n    icon = 'window-maximize'\n    title = this.translate.instant('Window')\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return WindowSettingsTabComponent\n    }\n}\n\n\n/** @hidden */\n@Injectable()\nexport class VaultSettingsTabProvider extends SettingsTabProvider {\n    id = 'vault'\n    icon = 'key'\n    title = 'Vault'\n\n    getComponentType (): any {\n        return VaultSettingsTabComponent\n    }\n}\n\n\n/** @hidden */\n@Injectable()\nexport class ProfilesSettingsTabProvider extends SettingsTabProvider {\n    id = 'profiles'\n    icon = 'window-restore'\n    title = this.translate.instant('Profiles & connections')\n    prioritized = true\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return ProfilesSettingsTabComponent\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class ConfigSyncSettingsTabProvider extends SettingsTabProvider {\n    id = 'config-sync'\n    icon = 'cloud'\n    title = this.translate.instant('Config sync')\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return ConfigSyncSettingsTabComponent\n    }\n}\n"
  },
  {
    "path": "tabby-settings/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n  }\n}\n"
  },
  {
    "path": "tabby-settings/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-settings/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'settings',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-ssh/package.json",
    "content": "{\n  \"name\": \"tabby-ssh\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"SSH connections for Tabby\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\",\n    \"postinstall\": \"run-script-os\",\n    \"postinstall:darwin:linux\": \"exit\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/node\": \"20.3.1\",\n    \"ansi-colors\": \"^4.1.1\",\n    \"strip-ansi\": \"^7.0.0\"\n  },\n  \"dependencies\": {\n    \"@luminati-io/socksv5\": \"^0.0.7\",\n    \"run-script-os\": \"^1.1.3\",\n    \"tmp-promise\": \"^3.0.3\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\",\n    \"tabby-terminal\": \"*\"\n  },\n  \"resolutions\": {\n    \"glob\": \"7.2.3\"\n  }\n}\n"
  },
  {
    "path": "tabby-ssh/src/algorithms.ts",
    "content": "import * as russh from 'russh'\nimport { SSHAlgorithmType } from './api'\n\nexport const supportedAlgorithms = {\n    [SSHAlgorithmType.KEX]: russh.getSupportedKexAlgorithms().filter(x => x !== 'none'),\n    [SSHAlgorithmType.HOSTKEY]: russh.getSupportedKeyTypes().filter(x => x !== 'none'),\n    [SSHAlgorithmType.CIPHER]: russh.getSupportedCiphers().filter(x => x !== 'clear'),\n    [SSHAlgorithmType.HMAC]: russh.getSupportedMACs().filter(x => x !== 'none'),\n    [SSHAlgorithmType.COMPRESSION]: russh.getSupportedCompressionAlgorithms().reverse(),\n}\n\nexport const defaultAlgorithms = {\n    [SSHAlgorithmType.KEX]: [\n        'mlkem768x25519-sha256',\n        'curve25519-sha256',\n        'curve25519-sha256@libssh.org',\n        'diffie-hellman-group16-sha512',\n        'diffie-hellman-group14-sha256',\n        'ext-info-c',\n        'ext-info-s',\n        'kex-strict-c-v00@openssh.com',\n        'kex-strict-s-v00@openssh.com',\n    ],\n    [SSHAlgorithmType.HOSTKEY]: [\n        'ssh-ed25519',\n        'ecdsa-sha2-nistp256',\n        'ecdsa-sha2-nistp521',\n        'rsa-sha2-256',\n        'rsa-sha2-512',\n        'ssh-rsa',\n    ],\n    [SSHAlgorithmType.CIPHER]: [\n        'chacha20-poly1305@openssh.com',\n        'aes256-gcm@openssh.com',\n        'aes256-ctr',\n        'aes192-ctr',\n        'aes128-ctr',\n    ],\n    [SSHAlgorithmType.HMAC]: [\n        'hmac-sha2-512-etm@openssh.com',\n        'hmac-sha2-256-etm@openssh.com',\n        'hmac-sha2-512',\n        'hmac-sha2-256',\n        'hmac-sha1-etm@openssh.com',\n        'hmac-sha1',\n    ],\n    [SSHAlgorithmType.COMPRESSION]: [\n        'none',\n    ],\n}\n"
  },
  {
    "path": "tabby-ssh/src/api/contextMenu.ts",
    "content": "import { MenuItemOptions } from 'tabby-core'\nimport { SFTPFile } from '../session/sftp'\nimport { SFTPPanelComponent } from '../components/sftpPanel.component'\n\n/**\n * Extend to add items to the SFTPPanel context menu\n */\nexport abstract class SFTPContextMenuItemProvider {\n    weight = 0\n\n    abstract getItems (item: SFTPFile, panel: SFTPPanelComponent): Promise<MenuItemOptions[]>\n}\n"
  },
  {
    "path": "tabby-ssh/src/api/importer.ts",
    "content": "import { PartialProfile } from 'tabby-core'\nimport { SSHProfile } from './interfaces'\n\nexport abstract class SSHProfileImporter {\n    abstract getProfiles (): Promise<PartialProfile<SSHProfile>[]>\n}\n\nexport abstract class AutoPrivateKeyLocator {\n    abstract getKeys (): Promise<[string, Buffer][]>\n}\n"
  },
  {
    "path": "tabby-ssh/src/api/index.ts",
    "content": "export * from './contextMenu'\nexport * from './interfaces'\nexport * from './importer'\nexport { SSHMultiplexerService } from '../services/sshMultiplexer.service'\n"
  },
  {
    "path": "tabby-ssh/src/api/interfaces.ts",
    "content": "import { ConnectableTerminalProfile, InputProcessingOptions, LoginScriptsOptions } from 'tabby-terminal'\n\nexport enum SSHAlgorithmType {\n    HMAC = 'hmac',\n    KEX = 'kex',\n    CIPHER = 'cipher',\n    HOSTKEY = 'serverHostKey',\n    COMPRESSION = 'compression',\n\n}\n\nexport interface SSHProfile extends ConnectableTerminalProfile {\n    options: SSHProfileOptions\n}\n\nexport interface SSHProfileOptions extends LoginScriptsOptions {\n    host: string\n    port?: number\n    user: string\n    auth: null|'password'|'publicKey'|'agent'|'keyboardInteractive'\n    password: string\n    privateKeys: string[]\n    keepaliveInterval: number\n    keepaliveCountMax: number\n    readyTimeout: number | null\n    x11: boolean\n    skipBanner: boolean\n    jumpHost: string | null\n    agentForward: boolean\n    warnOnClose: boolean\n    algorithms: Record<SSHAlgorithmType, string[]>\n    proxyCommand: string | null\n    forwardedPorts: ForwardedPortConfig[]\n    socksProxyHost: string | null\n    socksProxyPort: number | null\n    httpProxyHost: string | null\n    httpProxyPort: number | null\n    reuseSession: boolean\n    input: InputProcessingOptions,\n}\n\nexport enum PortForwardType {\n    Local = 'Local',\n    Remote = 'Remote',\n    Dynamic = 'Dynamic',\n}\n\nexport interface ForwardedPortConfig {\n    type: PortForwardType\n    host: string\n    port: number\n    targetAddress: string\n    targetPort: number\n    description: string\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/hostKeyPromptModal.component.pug",
    "content": ".modal-header\n    h3.m-0(translate) Host key verification\n\n.modal-body.pt-0\n    .alert.alert-danger(*ngIf='isMismatched')\n        strong(translate) Warning: remote host's key has suddenly changed!\n        div(translate) You could be under a man-in-the-middle attack right now, or the host key could have just been changed.\n\n    .mb-3(*ngIf='isMismatched')\n        .d-flex.align-items-center\n            label(translate) Last known host key fingerprint\n            .badge.text-bg-danger.ms-auto {{ selector.type }}\n        code {{knownHost?.digest}}\n\n    .mb-3\n        .d-flex.align-items-center\n            label(translate) Current host key fingerprint\n            .badge.text-bg-success.ms-auto {{ selector.type }}\n        code {{digest}}\n\n.modal-footer\n    .w-100\n        button.d-block.w-100.mb-3.btn.btn-primary(\n            (click)='acceptAndSave()',\n            [class.btn-danger]='isMismatched',\n            translate\n        ) Accept and remember key\n        button.d-block.w-100.mb-3.btn.btn-secondary(\n            (click)='accept()',\n            [class.btn-warning]='isMismatched',\n            translate\n        ) Accept just this once\n        button.d-block.w-100.btn.btn-secondary(\n            [class.btn-danger]='!isMismatched',\n            (click)='cancel()',\n            translate\n        ) Disconnect\n"
  },
  {
    "path": "tabby-ssh/src/components/hostKeyPromptModal.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { KnownHost, KnownHostSelector, SSHKnownHostsService } from '../services/sshKnownHosts.service'\n\n/** @hidden */\n@Component({\n    templateUrl: './hostKeyPromptModal.component.pug',\n})\nexport class HostKeyPromptModalComponent {\n    @Input() selector: KnownHostSelector\n    @Input() digest: string\n    knownHost: KnownHost|null\n    isMismatched = false\n    isUnknown = false\n\n    constructor (\n        private knownHosts: SSHKnownHostsService,\n        private modalInstance: NgbActiveModal,\n    ) { }\n\n    ngOnInit () {\n        this.knownHost = this.knownHosts.getFor(this.selector)\n        if (!this.knownHost) {\n            this.isUnknown = true\n        } else if (this.knownHost.digest !== this.digest) {\n            this.isMismatched = true\n        }\n    }\n\n    accept () {\n        this.modalInstance.close(true)\n    }\n\n    async acceptAndSave () {\n        await this.knownHosts.store(this.selector, this.digest)\n        this.accept()\n    }\n\n    cancel () {\n        this.modalInstance.close(false)\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.pug",
    "content": ".d-flex\n    strong(translate) Keyboard-interactive auth\n    .ms-2 {{prompt.name}}\n\n.prompt-text {{prompt.prompts[step].prompt}}\n\ninput.form-control.mt-2(\n    #input,\n    autofocus,\n    [type]='isPassword() ? \"password\": \"text\"',\n    placeholder='Response',\n    (keyup.enter)='next()',\n    [(ngModel)]='prompt.responses[step]'\n)\n\n.d-flex.mt-3\n    checkbox(\n        *ngIf='isPassword()',\n        [(ngModel)]='remember',\n        [text]='\"Save password\"|translate'\n    )\n\n    .ms-auto\n\n    button.btn.btn-secondary.me-3(\n        *ngIf='step > 0',\n        (click)='previous()'\n    )\n\n    button.btn.btn-primary(\n        (click)='next()'\n    )\n        span(*ngIf='step < prompt.prompts.length - 1') Next\n        span(*ngIf='step == prompt.prompts.length - 1') Finish\n"
  },
  {
    "path": "tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.scss",
    "content": ":host {\n    display: flex;\n    flex-direction: column;\n    padding: 15px 20px;\n}\n\n.prompt-text {\n    white-space: pre-wrap;\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/keyboardInteractiveAuthPanel.component.ts",
    "content": "import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core'\nimport { KeyboardInteractivePrompt } from '../session/ssh'\nimport { SSHProfile } from '../api'\nimport { PasswordStorageService } from '../services/passwordStorage.service'\n\n@Component({\n    selector: 'keyboard-interactive-auth-panel',\n    templateUrl: './keyboardInteractiveAuthPanel.component.pug',\n    styleUrls: ['./keyboardInteractiveAuthPanel.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KeyboardInteractiveAuthComponent {\n    @Input() profile: SSHProfile\n    @Input() prompt: KeyboardInteractivePrompt\n    @Input() step = 0\n    @Output() done = new EventEmitter()\n    @ViewChild('input') input: ElementRef\n    remember = false\n\n    constructor (private passwordStorage: PasswordStorageService) {}\n\n    isPassword (): boolean {\n        return this.prompt.isAPasswordPrompt(this.step)\n    }\n\n    previous (): void {\n        if (this.step > 0) {\n            this.step--\n        }\n        this.input.nativeElement.focus()\n    }\n\n    next (): void {\n        if (this.isPassword() && this.remember) {\n            this.passwordStorage.savePassword(this.profile, this.prompt.responses[this.step])\n        }\n\n        if (this.step === this.prompt.prompts.length - 1) {\n            this.prompt.respond()\n            this.done.emit()\n            return\n        }\n        this.step++\n        this.input.nativeElement.focus()\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpCreateDirectoryModal.component.pug",
    "content": ".modal-body\n    label(translate) Name for the new directory\n    .mb-3.w-100.me-2\n        input.form-control(\n            type='text',\n            [(ngModel)]='directoryName',\n        )\n\n\n.modal-footer\n    button.btn.btn-success((click)='create()', translate) Create\n    button.btn.btn-danger((click)='cancel()', translate) Cancel\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpCreateDirectoryModal.component.ts",
    "content": "import { Component } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseComponent } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './sftpCreateDirectoryModal.component.pug',\n})\nexport class SFTPCreateDirectoryModalComponent extends BaseComponent {\n    directoryName: string\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) {\n        super()\n    }\n\n    create (): void {\n        this.modalInstance.close(this.directoryName)\n    }\n\n    cancel (): void {\n        this.modalInstance.close('')\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpDeleteModal.component.pug",
    "content": ".modal-body\n    label(translate) Deleting\n    .no-wrap {{progressMessage}}\n\n.modal-footer\n    button.btn.btn-danger((click)='cancel()', translate) Cancel\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpDeleteModal.component.ts",
    "content": "import { Component } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseComponent } from 'tabby-core'\nimport { SFTPFile, SFTPSession } from '../session/sftp'\n\n/** @hidden */\n@Component({\n    templateUrl: './sftpDeleteModal.component.pug',\n})\nexport class SFTPDeleteModalComponent extends BaseComponent {\n    sftp: SFTPSession\n    item: SFTPFile\n    progressMessage = ''\n    cancelled = false\n\n    constructor (\n        private modalInstance: NgbActiveModal,\n    ) {\n        super()\n    }\n\n    async ngOnInit (): Promise<void> {\n        this.destroyed$.subscribe(() => this.cancel())\n        await this.run(this.item)\n        this.modalInstance.close()\n    }\n\n    cancel (): void {\n        this.cancelled = true\n        this.modalInstance.close()\n    }\n\n    async run (file: SFTPFile): Promise<void> {\n        this.progressMessage = file.fullPath\n\n        if (file.isDirectory) {\n            for (const child of await this.sftp.readdir(file.fullPath)) {\n                await this.run(child)\n                if (this.cancelled) {\n                    break\n                }\n            }\n            await this.sftp.rmdir(file.fullPath)\n        } else {\n            this.sftp.unlink(file.fullPath)\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpPanel.component.pug",
    "content": ".header\n    input.form-control.flex-grow-1.w-0(\n        *ngIf='editingPath !== null',\n        type='text',\n        autofocus,\n        (keydown.enter)='confirmPath()',\n        (keydown.esc)='editingPath = null',\n        (blur)='editingPath = null',\n        [(ngModel)]='editingPath'\n    )\n    .breadcrumb(*ngIf='editingPath === null', (dblclick)='editPath()')\n        a.breadcrumb-item.text-decoration-none((click)='navigate(\"/\")') SFTP\n        a.breadcrumb-item.text-decoration-none(\n            *ngFor='let segment of pathSegments',\n            (click)='navigate(segment.path)'\n        ) {{segment.name}}\n\n    .breadcrumb-spacer.flex-grow-1.h-100((dblclick)='editPath()')\n\n    button.btn.btn-link.btn-sm.flex-shrink-0.d-flex(*ngIf='!showFilter', (click)='showFilter = true')\n        i.fas.fa-filter.me-1\n        div(translate) Filter\n\n    button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='openCreateDirectoryModal()')\n        i.fas.fa-plus.me-1\n        div(translate) Create directory\n\n    button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='upload()')\n        i.fas.fa-upload.me-1\n        div(translate) Upload files\n\n    button.btn.btn-link.btn-sm.flex-shrink-0.d-flex((click)='uploadFolder()')\n        i.fas.fa-upload.me-1\n        div(translate) Upload folder\n\n    button.btn.btn-link.text-decoration-none((click)='close()') !{require('../../../tabby-core/src/icons/times.svg')}\n\n.filter-bar.px-3.py-2.border-bottom(*ngIf='showFilter')\n    .input-group\n        input.form-control(\n            type='text',\n            placeholder='Filter...',\n            autofocus,\n            [(ngModel)]='filterText',\n            (input)='onFilterChange()',\n            (keydown.escape)='clearFilter()'\n        )\n        button.btn.btn-secondary((click)='clearFilter()')\n            i.fas.fa-times\n\n.body(dropZone, (transfer)='uploadOneFolder($event)')\n    a.alert.alert-info.d-flex.align-items-center(\n        *ngIf='shouldShowCWDTip && !cwdDetectionAvailable',\n        (click)='platform.openExternal(\"https://tabby.sh/go/cwd-detection\")'\n    )\n        .me-auto\n            strong(translate) Working directory detection\n            div(translate) Learn how to allow Tabby to detect remote shell's working directory.\n        button.close((click)='dismissCWDTip()')\n            i.fas.fa-close\n\n    div(*ngIf='!sftp', translate) Connecting\n    div(*ngIf='sftp')\n        div(*ngIf='fileList === null', translate) Loading\n        .list-group.list-group-light(*ngIf='fileList !== null')\n            .list-group-item.list-group-item-action.d-flex.align-items-center(\n                *ngIf='path !== \"/\" && (!showFilter || filterText.trim() === \"\")',\n                (click)='goUp()'\n            )\n                i.fas.fa-fw.fa-level-up-alt\n                div(translate) Go up\n            .list-group-item.list-group-item-action.d-flex.align-items-center(\n                *ngFor='let item of filteredFileList',\n                (contextmenu)='showContextMenu(item, $event)',\n                (click)='open(item)'\n            )\n                i.fa-fw([class]='getIcon(item)')\n                div {{item.name}}\n                .me-auto\n                .size(*ngIf='!item.isDirectory') {{item.size|filesize}}\n                .date {{item.modified|tabbyDate}}\n                .mode {{getModeString(item)}}\n        .alert.alert-info.text-center.mt-3(*ngIf='fileList !== null && filteredFileList.length === 0 && showFilter && filterText.trim() !== \"\"')\n            i.fas.fa-search.me-2\n            span(translate) No files match the filter \"{{filterText}}\"\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpPanel.component.scss",
    "content": ":host {\n    display: flex;\n    flex-direction: column;\n\n    > .header {\n        padding: 5px 15px 0 20px;\n        display: flex;\n        align-items: center;\n        flex: none;\n    }\n\n    > .filter-bar {\n        flex: none;\n    }\n\n    > .body {\n        padding: 10px 20px;\n        flex: 1 1 0;\n        overflow-y: auto;\n    }\n\n    .breadcrumb {\n        background: none;\n        padding: 0;\n        margin: 0;\n    }\n\n    .breadcrumb-item {\n        cursor: pointer;\n    }\n\n    .breadcrumb-item:first-child {\n        font-weight: bold;\n    }\n\n    .list-group-item-action {\n        &:hover {\n            background: rgba(white, .05);\n        }\n    }\n\n    .mode, .size, .date {\n        font-family: monospace;\n        opacity: .5;\n        font-size: 12px;\n        text-align: right;\n        margin-left: 20px;\n    }\n\n    .size {\n        width: 100px;\n    }\n\n    .date {\n        width: 200px;\n    }\n}\n\n.btn-link svg {\n    width: 12px;\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sftpPanel.component.ts",
    "content": "import * as C from 'constants'\nimport { posix as path } from 'path'\nimport { Component, Input, Output, EventEmitter, Inject, Optional } from '@angular/core'\nimport { FileUpload, DirectoryUpload, DirectoryDownload, MenuItemOptions, NotificationsService, PlatformService } from 'tabby-core'\nimport { SFTPSession, SFTPFile } from '../session/sftp'\nimport { SSHSession } from '../session/ssh'\nimport { SFTPContextMenuItemProvider } from '../api'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { SFTPCreateDirectoryModalComponent } from './sftpCreateDirectoryModal.component'\n\ninterface PathSegment {\n    name: string\n    path: string\n}\n\n@Component({\n    selector: 'sftp-panel',\n    templateUrl: './sftpPanel.component.pug',\n    styleUrls: ['./sftpPanel.component.scss'],\n})\nexport class SFTPPanelComponent {\n    @Input() session: SSHSession\n    @Output() closed = new EventEmitter<void>()\n    sftp: SFTPSession\n    fileList: SFTPFile[]|null = null\n    filteredFileList: SFTPFile[] = []\n    @Input() path = '/'\n    @Output() pathChange = new EventEmitter<string>()\n    pathSegments: PathSegment[] = []\n    @Input() cwdDetectionAvailable = false\n    editingPath: string|null = null\n    showFilter = false\n    filterText = ''\n\n    constructor (\n        private ngbModal: NgbModal,\n        private notifications: NotificationsService,\n        public platform: PlatformService,\n        @Optional() @Inject(SFTPContextMenuItemProvider) protected contextMenuProviders: SFTPContextMenuItemProvider[],\n    ) {\n        this.contextMenuProviders.sort((a, b) => a.weight - b.weight)\n    }\n\n    async ngOnInit (): Promise<void> {\n        this.sftp = await this.session.openSFTP()\n        try {\n            await this.navigate(this.path)\n        } catch (error) {\n            console.warn('Could not navigate to', this.path, ':', error)\n            this.notifications.error(error.message)\n            await this.navigate('/')\n        }\n    }\n\n    async navigate (newPath: string, fallbackOnError = true): Promise<void> {\n        const previousPath = this.path\n        this.path = newPath\n        this.pathChange.next(this.path)\n\n        this.clearFilter()\n\n        let p = newPath\n        this.pathSegments = []\n        while (p !== '/') {\n            this.pathSegments.unshift({\n                name: path.basename(p),\n                path: p,\n            })\n            p = path.dirname(p)\n        }\n\n        this.fileList = null\n        this.filteredFileList = []\n        try {\n            this.fileList = await this.sftp.readdir(this.path)\n        } catch (error) {\n            this.notifications.error(error.message)\n            if (previousPath && fallbackOnError) {\n                this.navigate(previousPath, false)\n            }\n            return\n        }\n\n        const dirKey = a => a.isDirectory ? 1 : 0\n        this.fileList.sort((a, b) =>\n            dirKey(b) - dirKey(a) ||\n            a.name.localeCompare(b.name))\n\n        this.updateFilteredList()\n    }\n\n    getFileType (fileExtension: string): string {\n        const codeExtensions = ['js', 'ts', 'py', 'java', 'cpp', 'h', 'cs', 'html', 'css', 'rb', 'php', 'swift', 'go', 'kt', 'sh', 'json', 'cc', 'c', 'xml']\n        const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp']\n        const pdfExtensions = ['pdf']\n        const archiveExtensions = ['zip', 'rar', 'tar', 'gz']\n        const wordExtensions = ['doc', 'docx']\n        const videoExtensions = ['mp4', 'avi', 'mkv', 'mov']\n        const powerpointExtensions = ['ppt', 'pptx']\n        const textExtensions = ['txt', 'log']\n        const audioExtensions = ['mp3', 'wav', 'flac']\n        const excelExtensions = ['xls', 'xlsx']\n\n        const lowerCaseExtension = fileExtension.toLowerCase()\n\n        if (codeExtensions.includes(lowerCaseExtension)) {\n            return 'code'\n        } else if (imageExtensions.includes(lowerCaseExtension)) {\n            return 'image'\n        } else if (pdfExtensions.includes(lowerCaseExtension)) {\n            return 'pdf'\n        } else if (archiveExtensions.includes(lowerCaseExtension)) {\n            return 'archive'\n        } else if (wordExtensions.includes(lowerCaseExtension)) {\n            return 'word'\n        } else if (videoExtensions.includes(lowerCaseExtension)) {\n            return 'video'\n        } else if (powerpointExtensions.includes(lowerCaseExtension)) {\n            return 'powerpoint'\n        } else if (textExtensions.includes(lowerCaseExtension)) {\n            return 'text'\n        } else if (audioExtensions.includes(lowerCaseExtension)) {\n            return 'audio'\n        } else if (excelExtensions.includes(lowerCaseExtension)) {\n            return 'excel'\n        } else {\n            return 'unknown'\n        }\n    }\n\n    getIcon (item: SFTPFile): string {\n        if (item.isDirectory) {\n            return 'fas fa-folder text-info'\n        }\n        if (item.isSymlink) {\n            return 'fas fa-link text-warning'\n        }\n        const fileMatch = /\\.([^.]+)$/.exec(item.name)\n        const extension = fileMatch ? fileMatch[1] : null\n        if (extension !== null) {\n            const fileType = this.getFileType(extension)\n\n            switch (fileType) {\n                case 'unknown':\n                    return 'fas fa-file'\n                default:\n                    return `fa-solid fa-file-${fileType} `\n            }\n        }\n        return 'fas fa-file'\n    }\n\n    goUp (): void {\n        this.navigate(path.dirname(this.path))\n    }\n\n    async open (item: SFTPFile): Promise<void> {\n        if (item.isDirectory) {\n            await this.navigate(item.fullPath)\n        } else if (item.isSymlink) {\n            const target = path.resolve(this.path, await this.sftp.readlink(item.fullPath))\n            const stat = await this.sftp.stat(target)\n            if (stat.isDirectory) {\n                await this.navigate(item.fullPath)\n            } else {\n                await this.download(item.fullPath, stat.mode, stat.size)\n            }\n        } else {\n            await this.download(item.fullPath, item.mode, item.size)\n        }\n    }\n\n    async downloadItem (item: SFTPFile): Promise<void> {\n        if (item.isDirectory) {\n            await this.downloadFolder(item)\n            return\n        }\n\n        if (item.isSymlink) {\n            const target = path.resolve(this.path, await this.sftp.readlink(item.fullPath))\n            const stat = await this.sftp.stat(target)\n            if (stat.isDirectory) {\n                await this.downloadFolder(item)\n                return\n            }\n            await this.download(item.fullPath, stat.mode, stat.size)\n            return\n        }\n\n        await this.download(item.fullPath, item.mode, item.size)\n    }\n\n    async openCreateDirectoryModal (): Promise<void> {\n        const modal = this.ngbModal.open(SFTPCreateDirectoryModalComponent)\n        const directoryName = await modal.result.catch(() => null)\n        if (directoryName?.trim()) {\n            this.sftp.mkdir(path.join(this.path, directoryName)).then(() => {\n                this.notifications.notice('The directory was created successfully')\n                this.navigate(path.join(this.path, directoryName))\n            }).catch(() => {\n                this.notifications.error('The directory could not be created')\n            })\n        }\n    }\n\n    async upload (): Promise<void> {\n        const transfers = await this.platform.startUpload({ multiple: true })\n        await Promise.all(transfers.map(t => this.uploadOne(t)))\n    }\n\n    async uploadFolder (): Promise<void> {\n        const transfer = await this.platform.startUploadDirectory()\n        await this.uploadOneFolder(transfer)\n    }\n\n    async uploadOneFolder (transfer: DirectoryUpload, accumPath = ''): Promise<void> {\n        const savedPath = this.path\n        for(const t of transfer.getChildrens()) {\n            if (t instanceof DirectoryUpload) {\n                try {\n                    await this.sftp.mkdir(path.posix.join(this.path, accumPath, t.getName()))\n                } catch {\n                    // Intentionally ignoring errors from making duplicate dirs.\n                }\n                await this.uploadOneFolder(t, path.posix.join(accumPath, t.getName()))\n            } else {\n                await this.sftp.upload(path.posix.join(this.path, accumPath, t.getName()), t)\n            }\n        }\n        if (this.path === savedPath) {\n            await this.navigate(this.path)\n        }\n    }\n\n    async uploadOne (transfer: FileUpload): Promise<void> {\n        const savedPath = this.path\n        await this.sftp.upload(path.join(this.path, transfer.getName()), transfer)\n        if (this.path === savedPath) {\n            await this.navigate(this.path)\n        }\n    }\n\n    async download (itemPath: string, mode: number, size: number): Promise<void> {\n        const transfer = await this.platform.startDownload(path.basename(itemPath), mode, size)\n        if (!transfer) {\n            return\n        }\n        this.sftp.download(itemPath, transfer)\n    }\n\n    async downloadFolder (folder: SFTPFile): Promise<void> {\n        try {\n            const transfer = await this.platform.startDownloadDirectory(folder.name, 0)\n            if (!transfer) {\n                return\n            }\n\n            // Start background size calculation and download simultaneously\n            const sizeCalculationPromise = this.calculateFolderSizeAndUpdate(folder, transfer)\n            const downloadPromise = this.downloadFolderRecursive(folder, transfer, '')\n\n            try {\n                await Promise.all([sizeCalculationPromise, downloadPromise])\n                transfer.setStatus('')\n                transfer.setCompleted(true)\n            } catch (error) {\n                transfer.cancel()\n                throw error\n            } finally {\n                transfer.close()\n            }\n        } catch (error) {\n            this.notifications.error(`Failed to download folder: ${error.message}`)\n            throw error\n        }\n    }\n\n    private async calculateFolderSizeAndUpdate (folder: SFTPFile, transfer: DirectoryDownload) {\n        let totalSize = 0\n        const items = await this.sftp.readdir(folder.fullPath)\n        for (const item of items) {\n            if (item.isDirectory) {\n                totalSize += await this.calculateFolderSizeAndUpdate(item, transfer)\n            } else {\n                totalSize += item.size\n            }\n            transfer.setTotalSize(totalSize)\n        }\n        return totalSize\n    }\n\n    private async downloadFolderRecursive (folder: SFTPFile, transfer: DirectoryDownload, relativePath: string): Promise<void> {\n        const items = await this.sftp.readdir(folder.fullPath)\n\n        for (const item of items) {\n            if (transfer.isCancelled()) {\n                throw new Error('Download cancelled')\n            }\n\n            const itemRelativePath = relativePath ? `${relativePath}/${item.name}` : item.name\n\n            transfer.setStatus(itemRelativePath)\n            if (item.isDirectory) {\n                await transfer.createDirectory(itemRelativePath)\n                await this.downloadFolderRecursive(item, transfer, itemRelativePath)\n            } else {\n                const fileDownload = await transfer.createFile(itemRelativePath, item.mode, item.size)\n                await this.sftp.download(item.fullPath, fileDownload)\n            }\n        }\n    }\n\n    getModeString (item: SFTPFile): string {\n        const s = 'SGdrwxrwxrwx'\n        const e = '   ---------'\n        const c = [\n            0o4000, 0o2000, C.S_IFDIR,\n            C.S_IRUSR, C.S_IWUSR, C.S_IXUSR,\n            C.S_IRGRP, C.S_IWGRP, C.S_IXGRP,\n            C.S_IROTH, C.S_IWOTH, C.S_IXOTH,\n        ]\n        let result = ''\n        for (let i = 0; i < c.length; i++) {\n            result += item.mode & c[i] ? s[i] : e[i]\n        }\n        return result\n    }\n\n    async buildContextMenu (item: SFTPFile): Promise<MenuItemOptions[]> {\n        let items: MenuItemOptions[] = []\n        for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(item, this)))) {\n            items.push({ type: 'separator' })\n            items = items.concat(section)\n        }\n        return items.slice(1)\n    }\n\n    async showContextMenu (item: SFTPFile, event: MouseEvent): Promise<void> {\n        event.preventDefault()\n        this.platform.popupContextMenu(await this.buildContextMenu(item), event)\n    }\n\n    get shouldShowCWDTip (): boolean {\n        return !window.localStorage.sshCWDTipDismissed\n    }\n\n    dismissCWDTip (): void {\n        window.localStorage.sshCWDTipDismissed = 'true'\n    }\n\n    editPath (): void {\n        this.editingPath = this.path\n    }\n\n    confirmPath (): void {\n        if (this.editingPath === null) {\n            return\n        }\n        this.navigate(this.editingPath)\n        this.editingPath = null\n    }\n\n    close (): void {\n        this.closed.emit()\n    }\n\n    clearFilter (): void {\n        this.showFilter = false\n        this.filterText = ''\n        this.updateFilteredList()\n    }\n\n    onFilterChange (): void {\n        this.updateFilteredList()\n    }\n\n    private updateFilteredList (): void {\n        if (!this.fileList) {\n            this.filteredFileList = []\n            return\n        }\n\n        if (!this.showFilter || this.filterText.trim() === '') {\n            this.filteredFileList = this.fileList\n            return\n        }\n\n        this.filteredFileList = this.fileList.filter(item =>\n            item.name.toLowerCase().includes(this.filterText.toLowerCase()),\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshPortForwardingConfig.component.pug",
    "content": ".list-group.mb-3\n    .list-group-item.d-flex.align-items-center(*ngFor='let fw of model')\n        div\n            .d-flex.align-items-center\n                strong(*ngIf='fw.type === PortForwardType.Local', translate) Local\n                strong(*ngIf='fw.type === PortForwardType.Remote', translate) Remote\n                strong(*ngIf='fw.type === PortForwardType.Dynamic', translate, translateContext='[Dynamic] port forwarding') id.port-forwarding.dynamic\n                .ms-3 {{fw.host}}:{{fw.port}}\n                .ms-2 &rarr;\n                .ms-2(*ngIf='fw.type !== PortForwardType.Dynamic') {{fw.targetAddress}}:{{fw.targetPort}}\n                .ms-2(*ngIf='fw.type === PortForwardType.Dynamic', translate) SOCKS proxy\n            div {{fw.description}}\n        button.btn.btn-link.hover-reveal.ms-auto((click)='remove(fw)')\n            i.fas.fa-trash-alt\n\nh5(translate) Add a port forward\n\n.input-group.mb-2(*ngIf='newForward.type === PortForwardType.Dynamic')\n    input.form-control(type='text', [(ngModel)]='newForward.host')\n    .input-group-text :\n    input.form-control(type='number', [(ngModel)]='newForward.port')\n    .input-group-text &rarr;\n    .input-group-text(style='flex: 3 1 0', translate) SOCKS proxy\n\n.input-group.mb-2(*ngIf='newForward.type !== PortForwardType.Dynamic')\n    input.form-control(type='text', [(ngModel)]='newForward.host')\n    .input-group-text :\n    input.form-control(type='number', [(ngModel)]='newForward.port')\n    .input-group-text &rarr;\n    input.form-control(type='text', [(ngModel)]='newForward.targetAddress')\n    .input-group-text :\n    input.form-control(type='number', [(ngModel)]='newForward.targetPort')\n\n.input-group.mb-2\n    input.form-control(\n        type='text',\n        [placeholder]='\"Description\"|translate',\n        [(ngModel)]='newForward.description'\n    )\n\n.d-flex\n    .btn-group.me-auto\n        input.btn-check(\n            type='radio',\n            [(ngModel)]='newForward.type',\n            id='newForwardTypeLocal',\n            name='newForwardType',\n            [value]='PortForwardType.Local'\n        )\n        label.btn.btn-secondary.m-0(\n            for='newForwardTypeLocal',\n            translate\n        ) Local\n        input.btn-check(\n            type='radio',\n            [(ngModel)]='newForward.type',\n            id='newForwardTypeRemote',\n            name='newForwardType',\n            [value]='PortForwardType.Remote'\n        )\n        label.btn.btn-secondary.m-0(\n            for='newForwardTypeRemote',\n            translate\n        ) Remote\n        input.btn-check(\n            type='radio',\n            [(ngModel)]='newForward.type',\n            id='newForwardTypeDynamic',\n            name='newForwardType',\n            [value]='PortForwardType.Dynamic'\n        )\n        label.btn.btn-secondary.m-0(\n            for='newForwardTypeDynamic',\n            translate,\n            translateContext='[Dynamic] port forwarding'\n        ) id.port-forwarding.dynamic\n\n    button.btn.btn-primary((click)='addForward()')\n        i.fas.fa-check.me-2\n        span(translate) Forward port\n"
  },
  {
    "path": "tabby-ssh/src/components/sshPortForwardingConfig.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { ForwardedPortConfig, PortForwardType } from '../api'\n\n/** @hidden */\n@Component({\n    selector: 'ssh-port-forwarding-config',\n    templateUrl: './sshPortForwardingConfig.component.pug',\n})\nexport class SSHPortForwardingConfigComponent {\n    @Input() model: ForwardedPortConfig[]\n    @Output() forwardAdded = new EventEmitter<ForwardedPortConfig>()\n    @Output() forwardRemoved = new EventEmitter<ForwardedPortConfig>()\n    newForward: ForwardedPortConfig\n    PortForwardType = PortForwardType\n\n    constructor (\n    ) {\n        this.reset()\n    }\n\n    reset () {\n        this.newForward = {\n            type: PortForwardType.Local,\n            host: '127.0.0.1',\n            port: 8000,\n            targetAddress: '127.0.0.1',\n            targetPort: 80,\n            description: '',\n        }\n    }\n\n    async addForward () {\n        try {\n            this.forwardAdded.emit(this.newForward)\n            this.reset()\n        } catch (e) {\n            console.error(e)\n        }\n    }\n\n    remove (fw: ForwardedPortConfig) {\n        this.forwardRemoved.emit(fw)\n        this.newForward = fw\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshPortForwardingModal.component.pug",
    "content": ".modal-header(*ngIf='session.forwardedPorts.length')\n    h5.m-0(translate) Forwarded ports\n\n.modal-body.pt-0\n    ssh-port-forwarding-config(\n        [model]='session.forwardedPorts',\n        (forwardAdded)='onForwardAdded($event)',\n        (forwardRemoved)='onForwardRemoved($event)'\n    )\n"
  },
  {
    "path": "tabby-ssh/src/components/sshPortForwardingModal.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input } from '@angular/core'\nimport { ForwardedPort } from '../session/forwards'\nimport { SSHSession } from '../session/ssh'\nimport { ForwardedPortConfig } from '../api'\n\n/** @hidden */\n@Component({\n    templateUrl: './sshPortForwardingModal.component.pug',\n})\nexport class SSHPortForwardingModalComponent {\n    @Input() session: SSHSession\n\n    onForwardAdded (fw: ForwardedPortConfig) {\n        const newForward = new ForwardedPort()\n        Object.assign(newForward, fw)\n        this.session.addPortForward(newForward)\n    }\n\n    onForwardRemoved (fw: ForwardedPortConfig) {\n        this.session.removePortForward(fw as ForwardedPort)\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshProfileSettings.component.pug",
    "content": "ul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) General\n        ng-template(ngbNavContent)\n            .d-flex.w-100.mt-3\n                .mb-3.me-2(\n                    ngbDropdown\n                )\n                    label(translate) Connection\n                    button.btn.btn-secondary.d-block(ngbDropdownToggle) {{getConnectionDropdownTitle()}}\n                    div(ngbDropdownMenu)\n                        button.dropdown-item(\n                            (click)='connectionMode = \"direct\"',\n                            translate\n                        ) Direct\n                        button.dropdown-item(\n                            *ngIf='hostApp.platform !== Platform.Web',\n                            (click)='connectionMode = \"proxyCommand\"',\n                        )\n                            div Proxy command\n                            .text-muted(translate) Command's stdin/stdout is used instead of a network connection\n                        button.dropdown-item(\n                            (click)='connectionMode = \"jumpHost\"',\n                        )\n                            div(translate) Jump host\n                            .text-muted(translate) Connect to a different host first and use it as a proxy\n                        button.dropdown-item(\n                            (click)='connectionMode = \"socksProxy\"',\n                        )\n                            div(translate) SOCKS proxy\n                            .text-muted(translate) Connect through a proxy server\n                        button.dropdown-item(\n                            (click)='connectionMode = \"httpProxy\"',\n                        )\n                            div(translate) HTTP proxy\n                            .text-muted(translate) Using CONNECT method\n\n                .mb-3.w-100(*ngIf='connectionMode === \"proxyCommand\"')\n                    label(translate) Proxy command\n                    input.form-control(\n                        type='text',\n                        [(ngModel)]='profile.options.proxyCommand',\n                    )\n\n                .mb-3.w-100.me-2(*ngIf='connectionMode !== \"proxyCommand\"')\n                    label(translate) Host\n                    input.form-control(\n                        type='text',\n                        [(ngModel)]='profile.options.host',\n                    )\n\n                .mb-3(*ngIf='connectionMode !== \"proxyCommand\"')\n                    label(translate) Port\n                    input.form-control(\n                        type='number',\n                        placeholder='22',\n                        [(ngModel)]='profile.options.port',\n                    )\n\n            .mb-3(*ngIf='connectionMode === \"jumpHost\"')\n                label(translate) Jump host\n                select.form-control([(ngModel)]='profile.options.jumpHost')\n                    option([ngValue]='null', translate) Select\n                    option([ngValue]='x.id', *ngFor='let x of jumpHosts') {{getJumpHostLabel(x)}}\n\n\n            .d-flex.w-100(*ngIf='connectionMode === \"socksProxy\"')\n                .mb-3.w-100.me-2\n                    label(translate) SOCKS proxy host\n                    input.form-control(\n                        type='text',\n                        [(ngModel)]='profile.options.socksProxyHost',\n                    )\n\n                .mb-3\n                    label(translate) SOCKS proxy port\n                    input.form-control(\n                        type='number',\n                        placeholder='5000',\n                        [(ngModel)]='profile.options.socksProxyPort',\n                    )\n\n            .d-flex.w-100(*ngIf='connectionMode === \"httpProxy\"')\n                .mb-3.w-100.me-2\n                    label(translate) HTTP proxy host\n                    input.form-control(\n                        type='text',\n                        [(ngModel)]='profile.options.httpProxyHost',\n                    )\n\n                .mb-3\n                    label(translate) HTTP proxy port\n                    input.form-control(\n                        type='number',\n                        placeholder='5000',\n                        [(ngModel)]='profile.options.httpProxyPort',\n                    )\n\n            .mb-3\n                label(translate) Username\n                input.form-control(\n                    type='text',\n                    placeholder='Ask every time',\n                    [(ngModel)]='profile.options.user',\n                )\n\n            .mb-3\n                label(translate) Authentication method\n\n                .btn-group.mt-1.w-100\n                    input.btn-check(\n                        type='radio',\n                        name='auth',\n                        [(ngModel)]='profile.options.auth',\n                        id='authAuto',\n                        [value]='null'\n                    )\n                    label.btn.btn-secondary(\n                        for='authAuto'\n                    )\n                        i.far.fa-lightbulb\n                        .m-0(translate) Auto\n                    input.btn-check(\n                        type='radio',\n                        name='auth',\n                        [(ngModel)]='profile.options.auth',\n                        id='authPassword',\n                        [value]='\"password\"'\n                    )\n                    label.btn.btn-secondary(\n                        for='authPassword'\n                    )\n                        i.fas.fa-font\n                        .m-0(translate) Password\n                    input.btn-check(\n                        type='radio',\n                        name='auth',\n                        [(ngModel)]='profile.options.auth',\n                        id='authPublicKey',\n                        [value]='\"publicKey\"'\n                    )\n                    label.btn.btn-secondary(\n                        for='authPublicKey'\n                    )\n                        i.fas.fa-key\n                        .m-0(translate) Key\n                    input.btn-check(\n                        type='radio',\n                        name='auth',\n                        [(ngModel)]='profile.options.auth',\n                        id='authAgent',\n                        [value]='\"agent\"'\n                    )\n                    label.btn.btn-secondary(\n                        for='authAgent'\n                    , ng:if='hostApp.platform !== Platform.Web')\n                        i.fas.fa-user-secret\n                        .m-0(translate) Agent\n                    input.btn-check(\n                        type='radio',\n                        name='auth',\n                        [(ngModel)]='profile.options.auth',\n                        id='auth\"keyboardInteractive\"',\n                        [value]='\"keyboardInteractive\"'\n                    )\n                    label.btn.btn-secondary(\n                        for='auth\"keyboardInteractive\"'\n                    )\n                        i.far.fa-keyboard\n                        .m-0(translate) Interactive\n\n            .form-line(*ngIf='profile.options.user && (!profile.options.auth || profile.options.auth === \"password\")')\n                .header\n                    .title(translate) Password\n                    .description(*ngIf='!hasSavedPassword', translate) Save a password in the keychain\n                    .description(*ngIf='hasSavedPassword', translate) There is a saved password for this connection\n                button.btn.btn-success.ms-4(*ngIf='!hasSavedPassword', (click)='setPassword()')\n                    i.fas.fa-key\n                    span(translate) Set password\n                button.btn.btn-danger.ms-4(*ngIf='hasSavedPassword', (click)='clearSavedPassword()')\n                    i.fas.fa-trash-alt\n                    span(translate) Forget\n\n            .mb-3(*ngIf='!profile.options.auth || profile.options.auth === \"publicKey\"')\n                label(translate) Private keys\n                .list-group.mb-2\n                    .list-group-item.d-flex.align-items-center.p-1.ps-3(*ngFor='let path of profile.options.privateKeys')\n                        i.fas.fa-key\n                        .no-wrap.me-auto {{path}}\n                        button.btn.btn-link((click)='removePrivateKey(path)')\n                            i.fas.fa-trash\n                button.btn.btn-secondary((click)='addPrivateKey()')\n                    i.fas.fa-folder-open\n                    span(translate) Add a private key\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Ports\n        ng-template(ngbNavContent)\n            ssh-port-forwarding-config(\n                *ngIf='profile.options.forwardedPorts',\n                [model]='profile.options.forwardedPorts',\n                (forwardAdded)='onForwardAdded($event)',\n                (forwardRemoved)='onForwardRemoved($event)'\n            )\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Advanced\n        ng-template(ngbNavContent)\n            .form-line(ng:if='hostApp.platform !== Platform.Web')\n                .header\n                    .title(translate) X11 forwarding\n                toggle([(ngModel)]='profile.options.x11')\n\n            .form-line(ng:if='hostApp.platform !== Platform.Web')\n                .header\n                    .title(translate) Agent forwarding\n                toggle([(ngModel)]='profile.options.agentForward')\n\n            .form-line\n                .header\n                    .title(translate) Skip MoTD/banner\n                    .description(translate) Will prevent the SSH greeting from showing up\n                toggle([(ngModel)]='profile.options.skipBanner')\n\n            .form-line\n                .header\n                    .title(translate) Reuse session for multiple tabs\n                    .description Multiplex multiple shells through the same connection\n                toggle([(ngModel)]='profile.options.reuseSession')\n\n            .form-line\n                .header\n                    .title(translate) Keep Alive Interval (Milliseconds)\n                input.form-control(\n                    type='number',\n                    placeholder='0',\n                    [(ngModel)]='profile.options.keepaliveInterval',\n                )\n\n            .form-line\n                .header\n                    .title(translate) Max Keep Alive Count\n                input.form-control(\n                    type='number',\n                    placeholder='3',\n                    [(ngModel)]='profile.options.keepaliveCountMax',\n                )\n\n            .form-line\n                .header\n                    .title(translate) Ready Timeout (Milliseconds)\n                input.form-control(\n                    type='number',\n                    placeholder='20000',\n                    [(ngModel)]='profile.options.readyTimeout',\n                )\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Ciphers\n        ng-template(ngbNavContent)\n            .form-line.align-items-start\n                .header\n                    .title(translate) Ciphers\n                .w-75\n                    div(*ngFor='let alg of supportedAlgorithms.cipher')\n                        checkbox([text]='alg', [(ngModel)]='algorithms.cipher[alg]')\n\n            .form-line.align-items-start\n                .header\n                    .title(translate) Key exchange\n                .w-75\n                    div(*ngFor='let alg of supportedAlgorithms.kex')\n                        checkbox([text]='alg', [(ngModel)]='algorithms.kex[alg]')\n\n            .form-line.align-items-start\n                .header\n                    .title HMAC\n                .w-75\n                    div(*ngFor='let alg of supportedAlgorithms.hmac')\n                        checkbox([text]='alg', [(ngModel)]='algorithms.hmac[alg]')\n\n            .form-line.align-items-start\n                .header\n                    .title(translate) Host key\n                .w-75\n                    div(*ngFor='let alg of supportedAlgorithms.serverHostKey')\n                        checkbox([text]='alg', [(ngModel)]='algorithms.serverHostKey[alg]')\n                        \n            .form-line.align-items-start\n                .header\n                    .title Compression\n                .w-75\n                    div(*ngFor='let alg of supportedAlgorithms.compression')\n                        checkbox([text]='alg', [(ngModel)]='algorithms.compression[alg]')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Colors\n        ng-template(ngbNavContent)\n            color-scheme-selector([(model)]='profile.terminalColorScheme')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Login scripts\n        ng-template(ngbNavContent)\n            login-scripts-settings([options]='profile.options', #loginScriptsSettings)\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Input\n        ng-template(ngbNavContent)\n            input-processing-settings([options]='profile.options.input')\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-ssh/src/components/sshProfileSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, ViewChild } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { firstBy } from 'thenby'\n\nimport { FileProvidersService, Platform, HostAppService, PromptModalComponent, PartialProfile, ProfilesService, ProfileSettingsComponent } from 'tabby-core'\nimport { LoginScriptsSettingsComponent } from 'tabby-terminal'\nimport { PasswordStorageService } from '../services/passwordStorage.service'\nimport { ForwardedPortConfig, SSHAlgorithmType, SSHProfile } from '../api'\nimport { supportedAlgorithms } from '../algorithms'\nimport { FullyDefined, ProxifiedConfig } from 'tabby-core/src/services/config.service'\nimport { SSHProfilesService } from '../profiles'\n\n/** @hidden */\n@Component({\n    templateUrl: './sshProfileSettings.component.pug',\n})\nexport class SSHProfileSettingsComponent implements ProfileSettingsComponent<SSHProfile, SSHProfilesService> {\n    Platform = Platform\n    profile: ProxifiedConfig<FullyDefined<SSHProfile>>\n    hasSavedPassword: boolean\n\n    connectionMode: 'direct'|'proxyCommand'|'jumpHost'|'socksProxy'|'httpProxy' = 'direct'\n\n    supportedAlgorithms = supportedAlgorithms\n    algorithms: Record<string, Record<string, boolean>> = {}\n    jumpHosts: PartialProfile<SSHProfile>[]\n    @ViewChild('loginScriptsSettings') loginScriptsSettings: LoginScriptsSettingsComponent|null\n\n    constructor (\n        public hostApp: HostAppService,\n        private profilesService: ProfilesService,\n        private passwordStorage: PasswordStorageService,\n        private ngbModal: NgbModal,\n        private fileProviders: FileProvidersService,\n    ) { }\n\n    async ngOnInit () {\n        this.jumpHosts = (await this.profilesService.getProfiles({ includeBuiltin: false })).filter(x => x.type === 'ssh' && x !== this.profile)\n        this.jumpHosts.sort(firstBy(x => this.getJumpHostLabel(x)))\n\n        for (const k of Object.values(SSHAlgorithmType)) {\n            this.algorithms[k] = {}\n            for (const alg of this.profile.options.algorithms[k]) {\n                this.algorithms[k][alg] = true\n            }\n        }\n\n        if (this.profile.options.proxyCommand) {\n            this.connectionMode = 'proxyCommand'\n        } else if (this.profile.options.jumpHost) {\n            this.connectionMode = 'jumpHost'\n        } else if (this.profile.options.socksProxyHost) {\n            this.connectionMode = 'socksProxy'\n        } else if (this.profile.options.httpProxyHost) {\n            this.connectionMode = 'httpProxy'\n        }\n\n        if (this.profile.options.user) {\n            try {\n                this.hasSavedPassword = !!await this.passwordStorage.loadPassword(this.profile)\n            } catch (e) {\n                console.error('Could not check for saved password', e)\n            }\n        }\n    }\n\n    getJumpHostLabel (p: PartialProfile<SSHProfile>) {\n        return p.group ? `${this.profilesService.resolveProfileGroupName(p.group)} / ${p.name}` : p.name\n    }\n\n    async setPassword () {\n        const modal = this.ngbModal.open(PromptModalComponent)\n        modal.componentInstance.prompt = `Password for ${this.profile.options.user}@${this.profile.options.host}`\n        modal.componentInstance.password = true\n        try {\n            const result = await modal.result.catch(() => null)\n            if (result?.value) {\n                this.passwordStorage.savePassword(this.profile, result.value)\n                this.hasSavedPassword = true\n            }\n        } catch { }\n    }\n\n    clearSavedPassword () {\n        this.hasSavedPassword = false\n        this.passwordStorage.deletePassword(this.profile)\n    }\n\n    async addPrivateKey () {\n        const ref = await this.fileProviders.selectAndStoreFile(`private key for ${this.profile.name}`).catch(() => null)\n        if (ref) {\n            this.profile.options.privateKeys = [\n                ...this.profile.options.privateKeys,\n                ref,\n            ]\n        }\n    }\n\n    removePrivateKey (path: string) {\n        this.profile.options.privateKeys = this.profile.options.privateKeys.filter(x => x !== path)\n    }\n\n    save () {\n        for (const k of Object.values(SSHAlgorithmType)) {\n            this.profile.options.algorithms[k] = Object.entries(this.algorithms[k])\n                .filter(([_, v]) => !!v)\n                .map(([key, _]) => key)\n            if(k !== SSHAlgorithmType.COMPRESSION) { this.profile.options.algorithms[k].sort() }\n        }\n\n        if (this.connectionMode !== 'jumpHost') {\n            this.profile.options.jumpHost = null\n        }\n        if (this.connectionMode !== 'proxyCommand') {\n            this.profile.options.proxyCommand = null\n        }\n        if (this.connectionMode !== 'socksProxy') {\n            this.profile.options.socksProxyHost = null\n            this.profile.options.socksProxyPort = null\n        }\n        if (this.connectionMode !== 'httpProxy') {\n            this.profile.options.httpProxyHost = null\n            this.profile.options.httpProxyPort = null\n        }\n\n        this.loginScriptsSettings?.save()\n    }\n\n    onForwardAdded (fw: ForwardedPortConfig) {\n        this.profile.options.forwardedPorts.push(fw)\n    }\n\n    onForwardRemoved (fw: ForwardedPortConfig) {\n        this.profile.options.forwardedPorts = this.profile.options.forwardedPorts.filter(x => x !== fw)\n    }\n\n    getConnectionDropdownTitle () {\n        return {\n            direct: 'Direct',\n            proxyCommand: 'Proxy command',\n            jumpHost: 'Jump host',\n            socksProxy: 'SOCKS proxy',\n            httpProxy: 'HTTP proxy',\n        }[this.connectionMode]\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshSettingsTab.component.pug",
    "content": "h3 SSH\n\n.form-line\n    .header\n        .title(translate) Warn when closing active connections\n    toggle(\n        [(ngModel)]='config.store.ssh.warnOnClose',\n        (ngModelChange)='config.save()',\n    )\n\n.form-line\n    .header\n        .title(translate) Verify host keys when connecting\n    toggle(\n        [(ngModel)]='config.store.ssh.verifyHostKeys',\n        (ngModelChange)='config.save()',\n    )\n\n.form-line(*ngIf='hostApp.platform === Platform.Windows')\n    .header\n        .title(translate) WinSCP path\n        .description(translate) When WinSCP is detected, you can launch an SCP session from the context menu.\n    input.form-control(\n        type='text',\n        placeholder='Auto-detect',\n        [(ngModel)]='config.store.ssh.winSCPPath',\n        (ngModelChange)='config.save()',\n    )\n\n.form-line(*ngIf='hostApp.platform === Platform.Windows')\n    .header\n        .title(translate) Agent type\n        .description(translate) Forces a specific SSH agent connection type.\n    select.form-control(\n        [(ngModel)]='config.store.ssh.agentType',\n        (ngModelChange)='config.save()',\n    )\n        option(value='auto', translate) Automatic\n        option(value='pageant') Pageant\n        option(value='pipe') Named pipe\n\n.form-line(*ngIf='config.store.ssh.agentType === \"pipe\"')\n    .header\n        .title(translate) Agent pipe path\n        .description(translate) Sets the SSH agent's named pipe path.\n    input.form-control(\n        type='text',\n        placeholder='Default: \\\\\\\\.\\\\pipe\\\\openssh-ssh-agent',\n        [(ngModel)]='config.store.ssh.agentPath',\n        (ngModelChange)='config.save()',\n    )\n\n.form-line\n    .header\n        .title(translate) Override X11 display\n        .description(translate) Path or address of the local X11 socket\n    input.form-control(\n        type='text',\n        [placeholder]='defaultX11Display',\n        [(ngModel)]='config.store.ssh.x11Display',\n        (ngModelChange)='config.save()'\n    )\n\n.alert.alert-info(translate) SSH connection management is now done through the \"Profiles & connections\" tab\n"
  },
  {
    "path": "tabby-ssh/src/components/sshSettingsTab.component.ts",
    "content": "import { Component, HostBinding } from '@angular/core'\nimport { X11Socket } from '../session/x11'\nimport { ConfigService, HostAppService, Platform } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './sshSettingsTab.component.pug',\n})\nexport class SSHSettingsTabComponent {\n    Platform = Platform\n    defaultX11Display: string\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n    ) {\n        const spec = X11Socket.resolveDisplaySpec()\n        if ('path' in spec) {\n            this.defaultX11Display = spec.path\n        } else {\n            this.defaultX11Display = `${spec.host}:${spec.port}`\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshTab.component.pug",
    "content": "terminal-toolbar([tab]='this')\n    i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open')\n    i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open')\n    strong.me-auto(\n        style='user-select: text; cursor: text;'\n        onclick='event.stopPropagation()'\n    ) {{profile.options.user}}@{{profile.options.host}}:{{profile.options.port}}\n\n    .me-2(\n        ngbDropdown,\n        container='body',\n        *ngIf='session && !session.supportsWorkingDirectory()',\n        placement='bottom-right bottom-left bottom'\n    )\n        button.btn.btn-sm.btn-link(ngbDropdownToggle)\n            i.far.fa-lightbulb.text-primary\n        .bg-dark(ngbDropdownMenu)\n            a.d-flex.align-items-center(ngbDropdownItem, (click)='platform.openExternal(\"https://tabby.sh/go/cwd-detection\")')\n                .me-auto\n                    strong(translate) Working directory detection\n                    div(translate) Learn how to allow Tabby to detect remote shell's working directory.\n                i.fas.fa-arrow-right.ms-4\n\n    button.btn.btn-sm.btn-link.me-2((click)='reconnect()')\n        i.fas.fa-redo\n        span(translate) Reconnect\n\n    button.btn.btn-sm.btn-link.me-2((click)='openSFTP()', *ngIf='session && session.open')\n        i.far.fa-folder-open\n        span SFTP\n\n    button.btn.btn-sm.btn-link(\n        *ngIf='session && session.open && hostApp.platform !== Platform.Web',\n        (click)='showPortForwarding()'\n    )\n        i.fas.fa-plug\n        span(translate) Ports\n\n\nsftp-panel.bg-dark(\n    @panelSlide,\n    [@.disabled]='!config.store.accessibility.animations',\n    [(path)]='sftpPath',\n    *ngIf='sftpPanelVisible && sshSession',\n    (click)='$event.stopPropagation()',\n    [session]='sshSession!',\n    [cwdDetectionAvailable]='session?.supportsWorkingDirectory() ?? false',\n    (closed)='sftpPanelVisible = false'\n)\n\nkeyboard-interactive-auth-panel.bg-dark(\n    *ngIf='activeKIPrompt',\n    [prompt]='activeKIPrompt',\n    [profile]='profile',\n    (click)='$event.stopPropagation()',\n    (done)='activeKIPrompt = null; frontend?.focus()'\n)\n"
  },
  {
    "path": "tabby-ssh/src/components/sshTab.component.scss",
    "content": "sftp-panel {\n    position: absolute;\n    height: 80%;\n    width: 100%;\n    bottom: 0;\n    z-index: 5;\n}\n"
  },
  {
    "path": "tabby-ssh/src/components/sshTab.component.ts",
    "content": "import * as russh from 'russh'\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport colors from 'ansi-colors'\nimport { Component, Injector, HostListener } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { Platform, ProfilesService } from 'tabby-core'\nimport { BaseTerminalTabComponent, ConnectableTerminalTabComponent } from 'tabby-terminal'\nimport { SSHService } from '../services/ssh.service'\nimport { KeyboardInteractivePrompt, SSHSession } from '../session/ssh'\nimport { SSHPortForwardingModalComponent } from './sshPortForwardingModal.component'\nimport { SSHProfile } from '../api'\nimport { SSHShellSession } from '../session/shell'\nimport { SSHMultiplexerService } from '../services/sshMultiplexer.service'\n\n/** @hidden */\n@Component({\n    selector: 'ssh-tab',\n    template: `${BaseTerminalTabComponent.template} ${require('./sshTab.component.pug')}`,\n    styles: [\n        ...BaseTerminalTabComponent.styles,\n        require('./sshTab.component.scss'),\n    ],\n    animations: BaseTerminalTabComponent.animations,\n})\nexport class SSHTabComponent extends ConnectableTerminalTabComponent<SSHProfile> {\n    Platform = Platform\n    sshSession: SSHSession|null = null\n    session: SSHShellSession|null = null\n    sftpPanelVisible = false\n    sftpPath = '/'\n    enableToolbar = true\n    activeKIPrompt: KeyboardInteractivePrompt|null = null\n\n    constructor (\n        injector: Injector,\n        public ssh: SSHService,\n        private ngbModal: NgbModal,\n        private profilesService: ProfilesService,\n        private sshMultiplexer: SSHMultiplexerService,\n    ) {\n        super(injector)\n        this.sessionChanged$.subscribe(() => {\n            this.activeKIPrompt = null\n        })\n    }\n\n    ngOnInit (): void {\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n            switch (hotkey) {\n                case 'home':\n                    this.sendInput('\\x1bOH' )\n                    break\n                case 'end':\n                    this.sendInput('\\x1bOF' )\n                    break\n                case 'restart-ssh-session':\n                    this.reconnect()\n                    break\n                case 'launch-winscp':\n                    if (this.sshSession) {\n                        this.ssh.launchWinSCP(this.sshSession)\n                    }\n                    break\n            }\n        })\n\n        super.ngOnInit()\n    }\n\n    async setupOneSession (injector: Injector, profile: SSHProfile, multiplex = true): Promise<SSHSession> {\n        let session = await this.sshMultiplexer.getSession(profile)\n        if (!multiplex || !session || !profile.options.reuseSession) {\n            session = new SSHSession(injector, profile)\n\n            if (profile.options.jumpHost) {\n                const jumpConnection = (await this.profilesService.getProfiles()).find(x => x.id === profile.options.jumpHost)\n\n                if (!jumpConnection) {\n                    throw new Error(`${profile.options.host}: jump host \"${profile.options.jumpHost}\" not found in your config`)\n                }\n\n                const jumpSession = await this.setupOneSession(\n                    this.injector,\n                    this.profilesService.getConfigProxyForProfile<SSHProfile>(jumpConnection),\n                )\n\n                jumpSession.ref()\n                session.willDestroy$.subscribe(() => jumpSession.unref())\n                jumpSession.willDestroy$.subscribe(() => {\n                    if (session?.open) {\n                        session.destroy()\n                    }\n                })\n\n                if (!(jumpSession.ssh instanceof russh.AuthenticatedSSHClient)) {\n                    throw new Error('Jump session is not authenticated yet somehow')\n                }\n\n                try {\n                    session.jumpChannel = await jumpSession.ssh.openTCPForwardChannel({\n                        addressToConnectTo: profile.options.host,\n                        portToConnectTo: profile.options.port ?? 22,\n                        originatorAddress: '127.0.0.1',\n                        originatorPort: 0,\n                    })\n                } catch (err) {\n                    jumpSession.emitServiceMessage(colors.bgRed.black(' X ') + ` Could not set up port forward on ${jumpConnection.name}`)\n                    throw err\n                }\n            }\n        }\n\n        this.attachSessionHandler(session.serviceMessage$, msg => {\n            msg = msg.replace(/\\n/g, '\\r\\n      ')\n            this.write(`\\r${colors.black.bgWhite(' SSH ')} ${msg}\\r\\n`)\n        })\n\n        this.attachSessionHandler(session.willDestroy$, () => {\n            this.activeKIPrompt = null\n        })\n\n        this.attachSessionHandler(session.keyboardInteractivePrompt$, prompt => {\n            this.activeKIPrompt = prompt\n            setTimeout(() => {\n                this.frontend?.scrollToBottom()\n            })\n        })\n\n        if (!session.open) {\n            this.write('\\r\\n' + colors.black.bgWhite(' SSH ') + ` Connecting to ${session.profile.name}\\r\\n`)\n\n            this.startSpinner(this.translate.instant(_('Connecting')))\n\n            try {\n                await session.start()\n            } finally {\n                this.stopSpinner()\n            }\n\n            this.sshMultiplexer.addSession(session)\n        }\n\n        return session\n    }\n\n    protected onSessionDestroyed (): void {\n        if (this.frontend) {\n            // Session was closed abruptly\n            this.write('\\r\\n' + colors.black.bgWhite(' SSH ') + ` ${this.sshSession?.profile.options.host}: session closed\\r\\n`)\n\n            super.onSessionDestroyed()\n        }\n    }\n\n    private async initializeSessionMaybeMultiplex (multiplex = true): Promise<void> {\n        this.sshSession = await this.setupOneSession(this.injector, this.profile, multiplex)\n        const session = new SSHShellSession(this.injector, this.sshSession, this.profile)\n\n        this.setSession(session)\n        this.attachSessionHandler(session.serviceMessage$, msg => {\n            msg = msg.replace(/\\n/g, '\\r\\n      ')\n            this.write(`\\r${colors.black.bgWhite(' SSH ')} ${msg}\\r\\n`)\n            session.resize(this.size.columns, this.size.rows)\n        })\n\n        await session.start()\n\n        this.session?.resize(this.size.columns, this.size.rows)\n    }\n\n    async initializeSession (): Promise<void> {\n        await super.initializeSession()\n        try {\n            await this.initializeSessionMaybeMultiplex(true)\n        } catch {\n            try {\n                await this.initializeSessionMaybeMultiplex(false)\n            } catch (e) {\n                console.error('SSH session initialization failed', e)\n                this.write(colors.black.bgRed(' X ') + ' ' + colors.red(e.message) + '\\r\\n')\n                return\n            }\n        }\n    }\n\n    showPortForwarding (): void {\n        const modal = this.ngbModal.open(SSHPortForwardingModalComponent).componentInstance as SSHPortForwardingModalComponent\n        modal.session = this.sshSession!\n    }\n\n    async canClose (): Promise<boolean> {\n        if (!this.session?.open) {\n            return true\n        }\n        if (!this.profile.options.warnOnClose) {\n            return true\n        }\n        return (await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant(_('Disconnect from {host}?'), this.profile.options),\n                buttons: [\n                    this.translate.instant(_('Disconnect')),\n                    this.translate.instant(_('Do not close')),\n                ],\n                defaultId: 0,\n                cancelId: 1,\n            },\n        )).response === 0\n    }\n\n    async openSFTP (): Promise<void> {\n        this.sftpPath = await this.session?.getWorkingDirectory() ?? this.sftpPath\n        setTimeout(() => {\n            this.sftpPanelVisible = true\n        }, 100)\n    }\n\n    @HostListener('click')\n    onClick (): void {\n        this.sftpPanelVisible = false\n    }\n\n    protected isSessionExplicitlyTerminated (): boolean {\n        return super.isSessionExplicitlyTerminated() ||\n        this.recentInputs.charCodeAt(this.recentInputs.length - 1) === 4 ||\n        this.recentInputs.endsWith('exit\\r')\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/config.ts",
    "content": "import { ConfigProvider } from 'tabby-core'\n\n/** @hidden */\nexport class SSHConfigProvider extends ConfigProvider {\n    defaults = {\n        ssh: {\n            warnOnClose: false,\n            winSCPPath: null,\n            agentType: 'auto',\n            agentPath: null,\n            x11Display: null,\n            knownHosts: [],\n            verifyHostKeys: true,\n        },\n        hotkeys: {\n            'restart-ssh-session': [],\n            'launch-winscp': [],\n        },\n    }\n\n    platformDefaults = { }\n}\n"
  },
  {
    "path": "tabby-ssh/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class SSHHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'restart-ssh-session',\n            name: this.translate.instant('Restart current SSH session'),\n        },\n        {\n            id: 'launch-winscp',\n            name: this.translate.instant('Launch WinSCP for current SSH session'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { ToastrModule } from 'ngx-toastr'\nimport { NgxFilesizeModule } from 'ngx-filesize'\nimport TabbyCoreModule, { ConfigProvider, TabRecoveryProvider, HotkeyProvider, TabContextMenuItemProvider, ProfileProvider } from 'tabby-core'\nimport { SettingsTabProvider } from 'tabby-settings'\nimport TabbyTerminalModule from 'tabby-terminal'\n\nimport { SSHProfileSettingsComponent } from './components/sshProfileSettings.component'\nimport { SSHPortForwardingModalComponent } from './components/sshPortForwardingModal.component'\nimport { SSHPortForwardingConfigComponent } from './components/sshPortForwardingConfig.component'\nimport { SSHSettingsTabComponent } from './components/sshSettingsTab.component'\nimport { SSHTabComponent } from './components/sshTab.component'\nimport { SFTPPanelComponent } from './components/sftpPanel.component'\nimport { SFTPDeleteModalComponent } from './components/sftpDeleteModal.component'\nimport { KeyboardInteractiveAuthComponent } from './components/keyboardInteractiveAuthPanel.component'\nimport { HostKeyPromptModalComponent } from './components/hostKeyPromptModal.component'\n\nimport { SSHConfigProvider } from './config'\nimport { SSHSettingsTabProvider } from './settings'\nimport { RecoveryProvider } from './recoveryProvider'\nimport { SSHHotkeyProvider } from './hotkeys'\nimport { SFTPContextMenu } from './tabContextMenu'\nimport { SSHProfilesService } from './profiles'\nimport { SFTPContextMenuItemProvider } from './api/contextMenu'\nimport { CommonSFTPContextMenu } from './sftpContextMenu'\nimport { SFTPCreateDirectoryModalComponent } from './components/sftpCreateDirectoryModal.component'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        NgbModule,\n        NgxFilesizeModule,\n        CommonModule,\n        FormsModule,\n        ToastrModule,\n        TabbyCoreModule,\n        TabbyTerminalModule,\n    ],\n    providers: [\n        { provide: ConfigProvider, useClass: SSHConfigProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: SSHSettingsTabProvider, multi: true },\n        { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true },\n        { provide: HotkeyProvider, useClass: SSHHotkeyProvider, multi: true },\n        { provide: TabContextMenuItemProvider, useClass: SFTPContextMenu, multi: true },\n        { provide: ProfileProvider, useExisting: SSHProfilesService, multi: true },\n        { provide: SFTPContextMenuItemProvider, useClass: CommonSFTPContextMenu, multi: true },\n    ],\n    declarations: [\n        SSHProfileSettingsComponent,\n        SFTPDeleteModalComponent,\n        SFTPCreateDirectoryModalComponent,\n        SSHPortForwardingModalComponent,\n        SSHPortForwardingConfigComponent,\n        SSHSettingsTabComponent,\n        SSHTabComponent,\n        SFTPPanelComponent,\n        KeyboardInteractiveAuthComponent,\n        HostKeyPromptModalComponent,\n    ],\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default class SSHModule { }\n\nexport * from './api'\nexport { SFTPFile, SFTPSession } from './session/sftp'\nexport { SFTPPanelComponent, SSHTabComponent }\nexport { PasswordStorageService } from './services/passwordStorage.service'\n"
  },
  {
    "path": "tabby-ssh/src/profiles.ts",
    "content": "import { Injectable, InjectFlags, Injector } from '@angular/core'\nimport { NewTabParameters, PartialProfile, TranslateService, QuickConnectProfileProvider } from 'tabby-core'\nimport { SSHProfileSettingsComponent } from './components/sshProfileSettings.component'\nimport { SSHTabComponent } from './components/sshTab.component'\nimport { PasswordStorageService } from './services/passwordStorage.service'\nimport { SSHAlgorithmType, SSHProfile } from './api'\nimport { SSHProfileImporter } from './api/importer'\nimport { defaultAlgorithms } from './algorithms'\n\n@Injectable({ providedIn: 'root' })\nexport class SSHProfilesService extends QuickConnectProfileProvider<SSHProfile> {\n    id = 'ssh'\n    name = 'SSH'\n    settingsComponent = SSHProfileSettingsComponent\n    configDefaults = {\n        options: {\n            host: '',\n            port: 22,\n            user: 'root',\n            auth: null,\n            password: null,\n            privateKeys: [],\n            keepaliveInterval: 5000,\n            keepaliveCountMax: 10,\n            readyTimeout: null,\n            x11: false,\n            skipBanner: false,\n            jumpHost: null,\n            agentForward: false,\n            warnOnClose: null,\n            algorithms: {\n                hmac: [] as string[],\n                kex: [] as string[],\n                cipher: [] as string[],\n                serverHostKey: [] as string[],\n                compression: [] as string[],\n            },\n            proxyCommand: null,\n            forwardedPorts: [],\n            scripts: [],\n            socksProxyHost: null,\n            socksProxyPort: null,\n            httpProxyHost: null,\n            httpProxyPort: null,\n            reuseSession: true,\n            input: { backspace: 'backspace' },\n        },\n        clearServiceMessagesOnConnect: true,\n    }\n\n    constructor (\n        private passwordStorage: PasswordStorageService,\n        private translate: TranslateService,\n        private injector: Injector,\n    ) {\n        super()\n        for (const k of Object.values(SSHAlgorithmType)) {\n            this.configDefaults.options.algorithms[k] = [...defaultAlgorithms[k]]\n            if (k !== SSHAlgorithmType.COMPRESSION) { this.configDefaults.options.algorithms[k].sort() }\n        }\n    }\n\n    async getBuiltinProfiles (): Promise<PartialProfile<SSHProfile>[]> {\n        const importers = this.injector.get<SSHProfileImporter[]>(SSHProfileImporter as any, [], InjectFlags.Optional)\n        let imported: PartialProfile<SSHProfile>[] = []\n        for (const importer of importers) {\n            try {\n                imported = imported.concat(await importer.getProfiles())\n            } catch (e) {\n                console.warn('Could not import SSH profiles:', e)\n            }\n        }\n        return [\n            {\n                id: `ssh:template`,\n                type: 'ssh',\n                name: this.translate.instant('SSH connection'),\n                icon: 'fas fa-desktop',\n                options: {\n                    host: '',\n                    port: 22,\n                    user: 'root',\n                },\n                isBuiltin: true,\n                isTemplate: true,\n                weight: -1,\n            },\n            ...imported.map(p => ({\n                ...p,\n                isBuiltin: true,\n            })),\n        ]\n    }\n\n    async getNewTabParameters (profile: SSHProfile): Promise<NewTabParameters<SSHTabComponent>> {\n        return {\n            type: SSHTabComponent,\n            inputs: { profile },\n        }\n    }\n\n    getSuggestedName (profile: SSHProfile): string {\n        return `${profile.options.user}@${profile.options.host}:${profile.options.port}`\n    }\n\n    getDescription (profile: PartialProfile<SSHProfile>): string {\n        return profile.options?.host ?? ''\n    }\n\n    deleteProfile (profile: SSHProfile): void {\n        this.passwordStorage.deletePassword(profile)\n    }\n\n    quickConnect (query: string): PartialProfile<SSHProfile> {\n        let user: string|undefined = undefined\n        let host = query\n        let port = 22\n        if (host.includes('@')) {\n            const parts = host.split(/@/g)\n            host = parts[parts.length - 1]\n            user = parts.slice(0, parts.length - 1).join('@')\n        }\n        if (host.includes('[')) {\n            port = parseInt(host.split(']')[1].substring(1))\n            host = host.split(']')[0].substring(1)\n        } else if (host.includes(':')) {\n            port = parseInt(host.split(/:/g)[1])\n            host = host.split(':')[0]\n        }\n\n        return {\n            name: query,\n            type: 'ssh',\n            options: {\n                host,\n                user,\n                port,\n            },\n        }\n    }\n\n    intoQuickConnectString (profile: SSHProfile): string|null {\n        let s = profile.options.host\n        if (profile.options.user !== 'root') {\n            s = `${profile.options.user}@${s}`\n        }\n        if (profile.options.port !== 22) {\n            s = `${s}:${profile.options.port}`\n        }\n        return s\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/recoveryProvider.ts",
    "content": "import { Injectable, Injector } from '@angular/core'\nimport { TabRecoveryProvider, NewTabParameters, RecoveryToken, ProfilesService } from 'tabby-core'\n\nimport { SSHTabComponent } from './components/sshTab.component'\n\n/** @hidden */\n@Injectable()\nexport class RecoveryProvider extends TabRecoveryProvider<SSHTabComponent> {\n    constructor (private injector: Injector) { super() }\n\n    async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {\n        return recoveryToken.type === 'app:ssh-tab'\n    }\n\n    async recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<SSHTabComponent>> {\n        return {\n            type: SSHTabComponent,\n            inputs: {\n                profile: this.injector.get(ProfilesService).getConfigProxyForProfile(recoveryToken.profile),\n                savedState: recoveryToken.savedState,\n            },\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/services/passwordStorage.service.ts",
    "content": "import * as keytar from 'keytar'\nimport { Injectable } from '@angular/core'\nimport { VaultService } from 'tabby-core'\nimport { SSHProfile } from '../api'\n\nexport const VAULT_SECRET_TYPE_PASSWORD = 'ssh:password'\nexport const VAULT_SECRET_TYPE_PASSPHRASE = 'ssh:key-passphrase'\n\n@Injectable({ providedIn: 'root' })\nexport class PasswordStorageService {\n    constructor (private vault: VaultService) { }\n\n    async savePassword (profile: SSHProfile, password: string, username?: string): Promise<void> {\n        const account = username ?? profile.options.user\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForConnection(profile, account)\n            this.vault.addSecret({ type: VAULT_SECRET_TYPE_PASSWORD, key, value: password })\n        } else {\n            if (!account) {\n                return\n            }\n            const key = this.getKeytarKeyForConnection(profile)\n            return keytar.setPassword(key, account, password)\n        }\n    }\n\n    async deletePassword (profile: SSHProfile, username?: string): Promise<void> {\n        const account = username ?? profile.options.user\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForConnection(profile, account)\n            this.vault.removeSecret(VAULT_SECRET_TYPE_PASSWORD, key)\n        } else {\n            if (!account) {\n                return\n            }\n            const key = this.getKeytarKeyForConnection(profile)\n            await keytar.deletePassword(key, account)\n        }\n    }\n\n    async loadPassword (profile: SSHProfile, username?: string): Promise<string|null> {\n        const account = username ?? profile.options.user\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForConnection(profile, account)\n            return (await this.vault.getSecret(VAULT_SECRET_TYPE_PASSWORD, key))?.value ?? null\n        } else {\n            if (!account) {\n                return null\n            }\n            const key = this.getKeytarKeyForConnection(profile)\n            return keytar.getPassword(key, account)\n        }\n    }\n\n    async savePrivateKeyPassword (id: string, password: string): Promise<void> {\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForPrivateKey(id)\n            this.vault.addSecret({ type: VAULT_SECRET_TYPE_PASSPHRASE, key, value: password })\n        } else {\n            const key = this.getKeytarKeyForPrivateKey(id)\n            return keytar.setPassword(key, 'user', password)\n        }\n    }\n\n    async deletePrivateKeyPassword (id: string): Promise<void> {\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForPrivateKey(id)\n            this.vault.removeSecret(VAULT_SECRET_TYPE_PASSPHRASE, key)\n        } else {\n            const key = this.getKeytarKeyForPrivateKey(id)\n            await keytar.deletePassword(key, 'user')\n        }\n    }\n\n    async loadPrivateKeyPassword (id: string): Promise<string|null> {\n        if (this.vault.isEnabled()) {\n            const key = this.getVaultKeyForPrivateKey(id)\n            return (await this.vault.getSecret(VAULT_SECRET_TYPE_PASSPHRASE, key))?.value ?? null\n        } else {\n            const key = this.getKeytarKeyForPrivateKey(id)\n            return keytar.getPassword(key, 'user')\n        }\n    }\n\n    private getKeytarKeyForConnection (profile: SSHProfile): string {\n        let key = `ssh@${profile.options.host}`\n        if (profile.options.port) {\n            key = `ssh@${profile.options.host}:${profile.options.port}`\n        }\n        return key\n    }\n\n    private getKeytarKeyForPrivateKey (id: string): string {\n        return `ssh-private-key:${id}`\n    }\n\n    private getVaultKeyForConnection (profile: SSHProfile, username?: string) {\n        return {\n            user: username ?? profile.options.user,\n            host: profile.options.host,\n            port: profile.options.port,\n        }\n    }\n\n    private getVaultKeyForPrivateKey (id: string) {\n        return { hash: id }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/services/ssh.service.ts",
    "content": "import * as fs from 'fs/promises'\nimport * as crypto from 'crypto'\nimport * as tmp from 'tmp-promise'\nimport { Injectable } from '@angular/core'\nimport { ConfigService, FileProvidersService, HostAppService, Platform, PlatformService } from 'tabby-core'\nimport { SSHSession } from '../session/ssh'\nimport { SSHProfile } from '../api'\nimport { PasswordStorageService } from './passwordStorage.service'\n\n@Injectable({ providedIn: 'root' })\nexport class SSHService {\n    private detectedWinSCPPath: string | null\n\n    private constructor (\n        private passwordStorage: PasswordStorageService,\n        private config: ConfigService,\n        hostApp: HostAppService,\n        private platform: PlatformService,\n        private fileProviders: FileProvidersService,\n    ) {\n        if (hostApp.platform === Platform.Windows) {\n            this.detectedWinSCPPath = platform.getWinSCPPath()\n        }\n    }\n\n    getWinSCPPath (): string|undefined {\n        return this.detectedWinSCPPath ?? this.config.store.ssh.winSCPPath\n    }\n\n    async generateWinSCPXTunnelURI (jumpHostProfile: SSHProfile|null): Promise<{ uri: string|null, privateKeyFile?: tmp.FileResult|null }> {\n        let uri = ''\n        let tmpFile: tmp.FileResult|null = null\n        if (jumpHostProfile) {\n            uri += ';x-tunnel=1'\n            const jumpHostname = jumpHostProfile.options.host\n            uri += `;x-tunnelhostname=${jumpHostname}`\n            const jumpPort = jumpHostProfile.options.port ?? 22\n            uri += `;x-tunnelportnumber=${jumpPort}`\n            const jumpUsername = jumpHostProfile.options.user\n            uri += `;x-tunnelusername=${jumpUsername}`\n            if (jumpHostProfile.options.auth === 'password') {\n                const jumpPassword = await this.passwordStorage.loadPassword(jumpHostProfile, jumpUsername)\n                if (jumpPassword) {\n                    uri += `;x-tunnelpasswordplain=${encodeURIComponent(jumpPassword)}`\n                }\n            }\n            if (jumpHostProfile.options.auth === 'publicKey' && jumpHostProfile.options.privateKeys.length > 0) {\n                const privateKeyPairs = await this.convertPrivateKeyFileToPuTTYFormat(jumpHostProfile)\n                tmpFile = privateKeyPairs.privateKeyFile\n                if (tmpFile) {\n                    uri += `;x-tunnelpublickeyfile=${encodeURIComponent(tmpFile.path)}`\n                }\n                if (privateKeyPairs.passphrase != null) {\n                    uri += `;x-tunnelpassphraseplain=${encodeURIComponent(privateKeyPairs.passphrase)}`\n                }\n            }\n        }\n        return { uri: uri, privateKeyFile: tmpFile?? null }\n    }\n\n    async getWinSCPURI (profile: SSHProfile, cwd?: string, username?: string): Promise<{ uri: string, privateKeyFile?: tmp.FileResult|null }> {\n        let uri = `scp://${username ?? profile.options.user}`\n        const password = await this.passwordStorage.loadPassword(profile, username)\n        if (password) {\n            uri += ':' + encodeURIComponent(password)\n        }\n        let tmpFile: tmp.FileResult|null = null\n        if (profile.options.jumpHost) {\n            const jumpHostProfile = this.config.store.profiles.find(x => x.id === profile.options.jumpHost) ?? null\n            const xTunnelParams = await this.generateWinSCPXTunnelURI(jumpHostProfile)\n            uri += xTunnelParams.uri ?? ''\n            tmpFile = xTunnelParams.privateKeyFile ?? null\n        }\n        if (profile.options.host.includes(':')) {\n            uri += `@[${profile.options.host}]:${profile.options.port}${cwd ?? '/'}`\n        }else {\n            uri += `@${profile.options.host}:${profile.options.port}${cwd ?? '/'}`\n        }\n        return { uri, privateKeyFile: tmpFile?? null }\n    }\n\n    async convertPrivateKeyFileToPuTTYFormat (profile: SSHProfile): Promise<{ passphrase: string|null, privateKeyFile: tmp.FileResult|null }> {\n        if (profile.options.privateKeys.length === 0) {\n            throw new Error('No private keys in profile')\n        }\n        const path = this.getWinSCPPath()\n        if (!path) {\n            throw new Error('WinSCP not found')\n        }\n        let tmpPrivateKeyFile: tmp.FileResult|null = null\n        let passphrase: string|null = null\n        const tmpFile: tmp.FileResult = await tmp.file()\n        for (const pk of profile.options.privateKeys) {\n            let privateKeyContent: string|null = null\n            const buffer = await this.fileProviders.retrieveFile(pk)\n            privateKeyContent = buffer.toString()\n            await fs.writeFile(tmpFile.path, privateKeyContent)\n            const keyHash = crypto.createHash('sha512').update(privateKeyContent).digest('hex')\n            // need to pass an default passphrase, otherwise it might get stuck at the passphrase input\n            const curPassphrase = await this.passwordStorage.loadPrivateKeyPassword(keyHash) ?? 'tabby'\n            const winSCPcom = path.slice(0, -3) + 'com'\n            try {\n                await this.platform.exec(winSCPcom, ['/keygen', tmpFile.path, '-o', tmpFile.path, '--old-passphrase', curPassphrase])\n            } catch (error) {\n                console.warn('Could not convert private key ', error)\n                continue\n            }\n            tmpPrivateKeyFile = tmpFile\n            passphrase = curPassphrase\n            break\n        }\n        return { passphrase, privateKeyFile: tmpPrivateKeyFile }\n    }\n\n    async launchWinSCP (session: SSHSession): Promise<void> {\n        const path = this.getWinSCPPath()\n        if (!path) {\n            return\n        }\n        const winscpParms = await this.getWinSCPURI(session.profile, undefined, session.authUsername ?? undefined)\n        const args = [winscpParms.uri]\n\n        let tmpFile: tmp.FileResult|null = null\n        try {\n            if (session.activePrivateKey && session.profile.options.privateKeys.length > 0) {\n                const profile = session.profile\n                const privateKeyPairs = await this.convertPrivateKeyFileToPuTTYFormat(profile)\n                tmpFile = privateKeyPairs.privateKeyFile\n                if (tmpFile) {\n                    args.push(`/privatekey=${tmpFile.path}`)\n                }\n                if (privateKeyPairs.passphrase != null) {\n                    args.push(`/passphrase=${privateKeyPairs.passphrase}`)\n                }\n            }\n            await this.platform.exec(path, args)\n        } finally {\n            tmpFile?.cleanup()\n            winscpParms.privateKeyFile?.cleanup()\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/services/sshKnownHosts.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ConfigService } from 'tabby-core'\n\nexport interface KnownHostSelector {\n    host: string\n    port: number\n    type: string\n}\n\nexport interface KnownHost extends KnownHostSelector {\n    digest: string\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SSHKnownHostsService {\n    constructor (\n        private config: ConfigService,\n    ) { }\n\n    getFor (selector: KnownHostSelector): KnownHost|null {\n        return this.config.store.ssh.knownHosts.find(x => x.host === selector.host && x.port === selector.port && x.type === selector.type) ?? null\n    }\n\n    async store (selector: KnownHostSelector, digest: string): Promise<void> {\n        const existing = this.getFor(selector)\n        if (existing) {\n            existing.digest = digest\n        } else {\n            this.config.store.ssh.knownHosts.push({ ...selector, digest })\n        }\n        this.config.save()\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/services/sshMultiplexer.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { SSHProfile } from '../api'\nimport { PartialProfile, ProfilesService } from 'tabby-core'\nimport { SSHSession } from '../session/ssh'\n\n@Injectable({ providedIn: 'root' })\nexport class SSHMultiplexerService {\n    private sessions = new Map<string, SSHSession>()\n\n    constructor (\n        private profilesService: ProfilesService,\n    ) { }\n\n    async addSession (session: SSHSession): Promise<void> {\n        const key = await this.getMultiplexerKey(session.profile)\n        this.sessions.set(key, session)\n        session.willDestroy$.subscribe(() => {\n            if (this.sessions.get(key) === session) {\n                this.sessions.delete(key)\n            }\n        })\n    }\n\n    async getSession (profile: PartialProfile<SSHProfile>): Promise<SSHSession|null> {\n        const fullProfile = this.profilesService.getConfigProxyForProfile(profile)\n        const key = await this.getMultiplexerKey(fullProfile)\n        return this.sessions.get(key) ?? null\n    }\n\n    private async getMultiplexerKey (profile: SSHProfile) {\n        let key = `${profile.options.host}:${profile.options.port}:${profile.options.user}:${profile.options.proxyCommand}:${profile.options.socksProxyHost}:${profile.options.socksProxyPort}:${profile.options.httpProxyHost}:${profile.options.httpProxyPort}`\n        if (profile.options.jumpHost) {\n            const jumpConnection = (await this.profilesService.getProfiles()).find(x => x.id === profile.options.jumpHost)\n            if (!jumpConnection) {\n                return key\n            }\n            const jumpProfile = this.profilesService.getConfigProxyForProfile<SSHProfile>(jumpConnection)\n            key += '$' + await this.getMultiplexerKey(jumpProfile)\n        }\n        return key\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/session/forwards.ts",
    "content": "import socksv5 from '@luminati-io/socksv5'\nimport { Server, Socket, createServer } from 'net'\n\nimport { ForwardedPortConfig, PortForwardType } from '../api'\n\nexport class ForwardedPort implements ForwardedPortConfig {\n    type: PortForwardType\n    host = '127.0.0.1'\n    port: number\n    targetAddress: string\n    targetPort: number\n    description: string\n\n    private listener: Server|null = null\n\n    async startLocalListener (callback: (accept: () => Socket, reject: () => void, sourceAddress: string|null, sourcePort: number|null, targetAddress: string, targetPort: number) => void): Promise<void> {\n        if (this.type === PortForwardType.Local) {\n            const listener = this.listener = createServer(s => callback(\n                () => s,\n                () => s.destroy(),\n                s.remoteAddress ?? null,\n                s.remotePort ?? null,\n                this.targetAddress,\n                this.targetPort,\n            ))\n            return new Promise((resolve, reject) => {\n                listener.listen(this.port, this.host)\n                listener.on('error', reject)\n                listener.on('listening', resolve)\n            })\n        } else if (this.type === PortForwardType.Dynamic) {\n            return new Promise((resolve, reject) => {\n                this.listener = socksv5.createServer((info, acceptConnection, rejectConnection) => {\n                    callback(\n                        () => acceptConnection(true),\n                        () => rejectConnection(),\n                        null,\n                        null,\n                        info.dstAddr,\n                        info.dstPort,\n                    )\n                }) as Server\n                this.listener.on('error', reject)\n                this.listener.listen(this.port, this.host, resolve)\n                this.listener['useAuth'](socksv5.auth.None())\n            })\n        } else {\n            throw new Error('Invalid forward type for a local listener')\n        }\n    }\n\n    stopLocalListener (): void {\n        this.listener?.close()\n    }\n\n    toString (): string {\n        if (this.type === PortForwardType.Local) {\n            return `(local) ${this.host}:${this.port} → (remote) ${this.targetAddress}:${this.targetPort}`\n        } if (this.type === PortForwardType.Remote) {\n            return `(remote) ${this.host}:${this.port} → (local) ${this.targetAddress}:${this.targetPort}`\n        } else {\n            return `(dynamic) ${this.host}:${this.port}`\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/session/sftp.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Subject, Observable } from 'rxjs'\nimport { posix as posixPath } from 'path'\nimport { Injector } from '@angular/core'\nimport { FileDownload, FileUpload, Logger, LogService } from 'tabby-core'\nimport * as russh from 'russh'\n\nexport interface SFTPFile {\n    name: string\n    fullPath: string\n    isDirectory: boolean\n    isSymlink: boolean\n    mode: number\n    size: number\n    modified: Date\n}\n\nexport class SFTPFileHandle {\n    position = 0\n\n    constructor (\n        private inner: russh.SFTPFile|null,\n    ) { }\n\n    async read (): Promise<Uint8Array> {\n        if (!this.inner) {\n            return Promise.resolve(new Uint8Array(0))\n        }\n        return this.inner.read(256 * 1024)\n    }\n\n    async write (chunk: Uint8Array): Promise<void> {\n        if (!this.inner) {\n            throw new Error('File handle is closed')\n        }\n        await this.inner.writeAll(chunk)\n    }\n\n    async close (): Promise<void> {\n        await this.inner?.shutdown()\n        this.inner = null\n    }\n}\n\nexport class SFTPSession {\n    get closed$ (): Observable<void> { return this.closed }\n    private closed = new Subject<void>()\n    private logger: Logger\n\n    constructor (private sftp: russh.SFTP, injector: Injector) {\n        this.logger = injector.get(LogService).create('sftp')\n        sftp.closed$.subscribe(() => {\n            this.closed.next()\n            this.closed.complete()\n        })\n    }\n\n    async readdir (p: string): Promise<SFTPFile[]> {\n        this.logger.debug('readdir', p)\n        const entries = await this.sftp.readDirectory(p)\n        return entries.map(entry => this._makeFile(\n            posixPath.join(p, entry.name), entry,\n        ))\n    }\n\n    readlink (p: string): Promise<string> {\n        this.logger.debug('readlink', p)\n        return this.sftp.readlink(p)\n    }\n\n    async stat (p: string): Promise<SFTPFile> {\n        this.logger.debug('stat', p)\n        const stats = await this.sftp.stat(p)\n        return {\n            name: posixPath.basename(p),\n            fullPath: p,\n            isDirectory: stats.type === russh.SFTPFileType.Directory,\n            isSymlink: stats.type === russh.SFTPFileType.Symlink,\n            mode: stats.permissions ?? 0,\n            size: stats.size,\n            modified: new Date((stats.mtime ?? 0) * 1000),\n        }\n    }\n\n    async open (p: string, mode: number): Promise<SFTPFileHandle> {\n        this.logger.debug('open', p, mode)\n        const handle = await this.sftp.open(p, mode)\n        return new SFTPFileHandle(handle)\n    }\n\n    async rmdir (p: string): Promise<void> {\n        await this.sftp.removeDirectory(p)\n    }\n\n    async mkdir (p: string): Promise<void> {\n        await this.sftp.createDirectory(p)\n    }\n\n    async rename (oldPath: string, newPath: string): Promise<void> {\n        this.logger.debug('rename', oldPath, newPath)\n        await this.sftp.rename(oldPath, newPath)\n    }\n\n    async unlink (p: string): Promise<void> {\n        await this.sftp.removeFile(p)\n    }\n\n    async chmod (p: string, mode: string|number): Promise<void> {\n        this.logger.debug('chmod', p, mode)\n        await this.sftp.chmod(p, mode)\n    }\n\n    async upload (path: string, transfer: FileUpload): Promise<void> {\n        this.logger.info('Uploading into', path)\n        const tempPath = path + '.tabby-upload'\n        try {\n            const handle = await this.open(tempPath, russh.OPEN_WRITE | russh.OPEN_CREATE)\n            while (true) {\n                const chunk = await transfer.read()\n                if (!chunk.length) {\n                    break\n                }\n                await handle.write(chunk)\n            }\n            await handle.close()\n            await this.unlink(path).catch(() => null)\n            await this.rename(tempPath, path)\n            transfer.close()\n        } catch (e) {\n            transfer.cancel()\n            this.unlink(tempPath).catch(() => null)\n            throw e\n        }\n    }\n\n    async download (path: string, transfer: FileDownload): Promise<void> {\n        this.logger.info('Downloading', path)\n        try {\n            const handle = await this.open(path, russh.OPEN_READ)\n            while (true) {\n                const chunk = await handle.read()\n                if (!chunk.length) {\n                    break\n                }\n                await transfer.write(chunk)\n            }\n            transfer.close()\n            handle.close()\n        } catch (e) {\n            transfer.cancel()\n            throw e\n        }\n    }\n\n    private _makeFile (p: string, entry: russh.SFTPDirectoryEntry): SFTPFile {\n        return {\n            fullPath: p,\n            name: posixPath.basename(p),\n            isDirectory: entry.metadata.type === russh.SFTPFileType.Directory,\n            isSymlink: entry.metadata.type === russh.SFTPFileType.Symlink,\n            mode: entry.metadata.permissions ?? 0,\n            size: entry.metadata.size,\n            modified: new Date((entry.metadata.mtime ?? 0) * 1000),\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/session/shell.ts",
    "content": "import { Observable, Subject } from 'rxjs'\nimport stripAnsi from 'strip-ansi'\nimport { Injector } from '@angular/core'\nimport { LogService } from 'tabby-core'\nimport { BaseSession, UTF8SplitterMiddleware, InputProcessor } from 'tabby-terminal'\nimport { SSHSession } from './ssh'\nimport { SSHProfile } from '../api'\nimport * as russh from 'russh'\n\n\nexport class SSHShellSession extends BaseSession {\n    shell?: russh.Channel\n    get serviceMessage$ (): Observable<string> { return this.serviceMessage }\n    private serviceMessage = new Subject<string>()\n    private ssh: SSHSession|null\n\n    constructor (\n        injector: Injector,\n        ssh: SSHSession,\n        private profile: SSHProfile,\n    ) {\n        super(injector.get(LogService).create(`ssh-shell-${profile.options.host}-${profile.options.port}`))\n        this.ssh = ssh\n        this.setLoginScriptsOptions(this.profile.options)\n        this.ssh.serviceMessage$.subscribe(m => this.serviceMessage.next(m))\n        this.middleware.push(new UTF8SplitterMiddleware())\n        this.middleware.push(new InputProcessor(profile.options.input))\n    }\n\n    async start (): Promise<void> {\n        if (!this.ssh) {\n            throw new Error('SSH session not set')\n        }\n\n        this.ssh.ref()\n        this.ssh.willDestroy$.subscribe(() => {\n            this.destroy()\n        })\n\n        this.logger.debug('Opening shell')\n\n        try {\n            this.shell = await this.ssh.openShellChannel({ x11: this.profile.options.x11 })\n        } catch (err) {\n            if (err.toString().includes('Unable to request X11')) {\n                this.emitServiceMessage('    Make sure `xauth` is installed on the remote side')\n            }\n            throw new Error(`Remote rejected opening a shell channel: ${err}`)\n        }\n\n        this.open = true\n        this.logger.debug('Shell open')\n\n        this.loginScriptProcessor?.executeUnconditionalScripts()\n\n        this.shell.data$.subscribe(data => {\n            this.emitOutput(Buffer.from(data))\n        })\n\n        this.shell.eof$.subscribe(() => {\n            this.logger.info('Shell session ended')\n            if (this.open) {\n                this.destroy()\n            }\n        })\n    }\n\n    emitServiceMessage (msg: string): void {\n        this.serviceMessage.next(msg)\n        this.logger.info(stripAnsi(msg))\n    }\n\n    resize (columns: number, rows: number): void {\n        this.shell?.resizePTY({\n            columns,\n            rows,\n            pixHeight: 0,\n            pixWidth: 0,\n        })\n    }\n\n    write (data: Buffer): void {\n        if (this.shell) {\n            this.shell.write(new Uint8Array(data))\n        }\n    }\n\n    kill (_signal?: string): void {\n        // this.shell?.signal(signal ?? 'TERM')\n    }\n\n    async destroy (): Promise<void> {\n        this.logger.debug('Closing shell')\n        this.serviceMessage.complete()\n        this.kill()\n        this.ssh?.unref()\n        this.ssh = null\n        await super.destroy()\n    }\n\n    async getChildProcesses (): Promise<any[]> {\n        return []\n    }\n\n    async gracefullyKillProcess (): Promise<void> {\n        this.kill('TERM')\n    }\n\n    supportsWorkingDirectory (): boolean {\n        return !!this.reportedCWD\n    }\n\n    async getWorkingDirectory (): Promise<string|null> {\n        return this.reportedCWD ?? null\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/session/ssh.ts",
    "content": "import * as fs from 'mz/fs'\nimport * as crypto from 'crypto'\nimport colors from 'ansi-colors'\nimport stripAnsi from 'strip-ansi'\nimport * as shellQuote from 'shell-quote'\nimport { Injector } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { ConfigService, FileProvidersService, NotificationsService, PromptModalComponent, LogService, Logger, TranslateService, Platform, HostAppService } from 'tabby-core'\nimport { Socket } from 'net'\nimport { Subject, Observable } from 'rxjs'\nimport { HostKeyPromptModalComponent } from '../components/hostKeyPromptModal.component'\nimport { PasswordStorageService } from '../services/passwordStorage.service'\nimport { SSHKnownHostsService } from '../services/sshKnownHosts.service'\nimport { SFTPSession } from './sftp'\nimport { SSHAlgorithmType, SSHProfile, AutoPrivateKeyLocator, PortForwardType } from '../api'\nimport { ForwardedPort } from './forwards'\nimport { X11Socket } from './x11'\nimport { supportedAlgorithms } from '../algorithms'\nimport * as russh from 'russh'\n\nconst WINDOWS_OPENSSH_AGENT_PIPE = '\\\\\\\\.\\\\pipe\\\\openssh-ssh-agent'\n\nexport interface Prompt {\n    prompt: string\n    echo?: boolean\n}\n\ntype AuthMethod = {\n    type: 'none'|'prompt-password'|'hostbased'\n} | {\n    type: 'keyboard-interactive',\n    savedPassword?: string\n} | {\n    type: 'saved-password',\n    password: string\n} | {\n    type: 'publickey'\n    name: string\n    contents: Buffer\n} | ({\n    type: 'agent',\n    publicKey?: russh.SshPublicKey\n} & ({\n    kind: 'unix-socket',\n    path: string\n} | {\n    kind: 'named-pipe',\n    path: string\n} | {\n    kind: 'pageant',\n}))\n\nfunction sshAuthTypeForMethod (m: AuthMethod): string {\n    switch (m.type) {\n        case 'none': return 'none'\n        case 'hostbased': return 'hostbased'\n        case 'prompt-password': return 'password'\n        case 'saved-password': return 'password'\n        case 'keyboard-interactive': return 'keyboard-interactive'\n        case 'publickey': return 'publickey'\n        case 'agent': return 'publickey'\n    }\n}\n\nexport class KeyboardInteractivePrompt {\n    readonly responses: string[] = []\n\n    private _resolve: (value: string[]) => void\n    private _reject: (reason: any) => void\n    readonly promise = new Promise<string[]>((resolve, reject) => {\n        this._resolve = resolve\n        this._reject = reject\n    })\n\n    constructor (\n        public name: string,\n        public instruction: string,\n        public prompts: Prompt[],\n    ) {\n        this.responses = new Array(this.prompts.length).fill('')\n    }\n\n    isAPasswordPrompt (index: number): boolean {\n        return this.prompts[index].prompt.toLowerCase().includes('password') && !this.prompts[index].echo\n    }\n\n    respond (): void {\n        this._resolve(this.responses)\n    }\n\n    reject (): void {\n        this._reject(new Error('Keyboard-interactive auth rejected'))\n    }\n}\n\nexport class SSHSession {\n    shell?: russh.Channel\n    ssh: russh.SSHClient|russh.AuthenticatedSSHClient\n    sftp?: russh.SFTP\n    forwardedPorts: ForwardedPort[] = []\n    jumpChannel: russh.NewChannel|null = null\n    savedPassword?: string\n    get serviceMessage$ (): Observable<string> { return this.serviceMessage }\n    get keyboardInteractivePrompt$ (): Observable<KeyboardInteractivePrompt> { return this.keyboardInteractivePrompt }\n    get willDestroy$ (): Observable<void> { return this.willDestroy }\n\n    activePrivateKey: russh.KeyPair|null = null\n    authUsername: string|null = null\n\n    open = false\n\n    private logger: Logger\n    private refCount = 0\n    private allAuthMethods: AuthMethod[] = []\n    private serviceMessage = new Subject<string>()\n    private keyboardInteractivePrompt = new Subject<KeyboardInteractivePrompt>()\n    private willDestroy = new Subject<void>()\n\n    private passwordStorage: PasswordStorageService\n    private ngbModal: NgbModal\n    private hostApp: HostAppService\n    private notifications: NotificationsService\n    private fileProviders: FileProvidersService\n    private config: ConfigService\n    private translate: TranslateService\n    private knownHosts: SSHKnownHostsService\n    private privateKeyImporters: AutoPrivateKeyLocator[]\n    private previouslyDisconnected = false\n\n    constructor (\n        private injector: Injector,\n        public profile: SSHProfile,\n    ) {\n        this.logger = injector.get(LogService).create(`ssh-${profile.options.host}-${profile.options.port}`)\n\n        this.passwordStorage = injector.get(PasswordStorageService)\n        this.ngbModal = injector.get(NgbModal)\n        this.hostApp = injector.get(HostAppService)\n        this.notifications = injector.get(NotificationsService)\n        this.fileProviders = injector.get(FileProvidersService)\n        this.config = injector.get(ConfigService)\n        this.translate = injector.get(TranslateService)\n        this.knownHosts = injector.get(SSHKnownHostsService)\n        this.privateKeyImporters = injector.get(AutoPrivateKeyLocator, [])\n\n        this.willDestroy$.subscribe(() => {\n            for (const port of this.forwardedPorts) {\n                port.stopLocalListener()\n            }\n        })\n    }\n\n    private addPublicKeyAuthMethod (name: string, contents: Buffer) {\n        this.allAuthMethods.push({\n            type: 'publickey',\n            name,\n            contents,\n        })\n    }\n\n    async init (): Promise<void> {\n        this.allAuthMethods = [{ type: 'none' }]\n        if (!this.profile.options.auth || this.profile.options.auth === 'publicKey') {\n            if (this.profile.options.privateKeys.length) {\n                for (let pk of this.profile.options.privateKeys) {\n                    // eslint-disable-next-line @typescript-eslint/init-declarations\n                    let contents: Buffer\n                    pk = pk.replace('%h', this.profile.options.host)\n                    pk = pk.replace('%r', this.profile.options.user)\n                    try {\n                        contents = await this.fileProviders.retrieveFile(pk)\n                    } catch (error) {\n                        this.emitServiceMessage(colors.bgYellow.yellow.black(' ! ') + ` Could not load private key ${pk}: ${error}`)\n                        continue\n                    }\n\n                    // If the file parses as a public key, it was likely a .pub file\n                    // mistakenly configured in the privateKeys list. In that case,\n                    // skip it here and warn the user instead of treating it as a\n                    // private key.\n                    try {\n                        russh.parsePublicKey(contents.toString('utf-8'))\n                        this.emitServiceMessage(\n                            colors.bgYellow.yellow.black(' ! ') +\n                            ` Expected a private key, but ${pk} appears to be a public key. Skipping it for private key authentication.`,\n                        )\n                        continue\n                    } catch {\n                        // Not a valid public key; treat the file contents as a private key below.\n                    }\n\n                    this.addPublicKeyAuthMethod(pk, contents)\n                }\n            } else {\n                for (const importer of this.privateKeyImporters) {\n                    for (const [name, contents] of await importer.getKeys()) {\n                        this.addPublicKeyAuthMethod(name, contents)\n                    }\n                }\n            }\n        }\n\n        if (!this.profile.options.auth || this.profile.options.auth === 'agent') {\n            const spec = await this.getAgentConnectionSpec()\n            if (!spec) {\n                this.emitServiceMessage(colors.bgYellow.yellow.black(' ! ') + ` Agent auth selected, but no running Agent process is found`)\n            } else {\n                // If user configured specific private keys, try to load their corresponding\n                // .pub files and use them first for agent-identity authentication\n                if (this.profile.options.privateKeys.length) {\n                    for (let pk of this.profile.options.privateKeys) {\n                        pk = pk.replace('%h', this.profile.options.host)\n                        pk = pk.replace('%r', this.profile.options.user)\n\n                        // Try to load as public key file\n                        let pubKeyPath = pk\n                        if (!pk.endsWith('.pub')) {\n                            pubKeyPath = pk + '.pub'\n                        }\n\n                        try {\n                            const pubKeyContent = await this.fileProviders.retrieveFile(pubKeyPath)\n                            const publicKey = russh.parsePublicKey(pubKeyContent.toString('utf-8'))\n                            this.allAuthMethods.push({\n                                type: 'agent',\n                                ...spec,\n                                publicKey,\n                            } as AuthMethod)\n                            this.emitServiceMessage(`Loaded public key for agent auth: ${pubKeyPath}`)\n                        } catch (error) {\n                            // Not a public key file or doesn't exist, skip\n                            this.emitServiceMessage(\n                                `Could not load public key for agent auth from ${pubKeyPath}: ${error}. ` +\n                                `Agent-identity authentication will not be attempted for this key.`,\n                            )\n                        }\n                    }\n                }\n\n                // Always add fallback agent auth that tries all keys\n                this.allAuthMethods.push({\n                    type: 'agent',\n                    ...spec,\n                })\n            }\n        }\n        if (!this.profile.options.auth || this.profile.options.auth === 'password') {\n            if (this.profile.options.password) {\n                this.allAuthMethods.push({ type: 'saved-password', password: this.profile.options.password })\n            }\n        }\n        if (!this.profile.options.auth || this.profile.options.auth === 'keyboardInteractive') {\n            if (this.profile.options.password) {\n                this.allAuthMethods.push({ type: 'keyboard-interactive', savedPassword: this.profile.options.password })\n            }\n            this.allAuthMethods.push({ type: 'keyboard-interactive' })\n        }\n        if (!this.profile.options.auth || this.profile.options.auth === 'password') {\n            this.allAuthMethods.push({ type: 'prompt-password' })\n        }\n        this.allAuthMethods.push({ type: 'hostbased' })\n    }\n\n    private async populateStoredPasswordsForResolvedUsername (): Promise<void> {\n        if (!this.authUsername) {\n            return\n        }\n\n        const storedPassword = await this.passwordStorage.loadPassword(this.profile, this.authUsername)\n        if (!storedPassword) {\n            return\n        }\n\n        if (!this.profile.options.auth || this.profile.options.auth === 'password') {\n            const hasSavedPassword = this.allAuthMethods.some(method => method.type === 'saved-password' && method.password === storedPassword)\n            if (!hasSavedPassword) {\n                const promptIndex = this.allAuthMethods.findIndex(method => method.type === 'prompt-password')\n                const insertIndex = promptIndex >= 0 ? promptIndex : this.allAuthMethods.length\n                this.allAuthMethods.splice(insertIndex, 0, { type: 'saved-password', password: storedPassword })\n            }\n        }\n\n        if (!this.profile.options.auth || this.profile.options.auth === 'keyboardInteractive') {\n            const existingSaved = this.allAuthMethods.find(method => method.type === 'keyboard-interactive' && method.savedPassword === storedPassword)\n            if (!existingSaved) {\n                const updatable = this.allAuthMethods.find(method => method.type === 'keyboard-interactive' && method.savedPassword === undefined)\n                if (updatable && updatable.type === 'keyboard-interactive') {\n                    updatable.savedPassword = storedPassword\n                } else {\n                    this.allAuthMethods.push({ type: 'keyboard-interactive', savedPassword: storedPassword })\n                }\n            }\n        }\n    }\n\n    private async getAgentConnectionSpec (): Promise<russh.AgentConnectionSpec|null> {\n        if (this.hostApp.platform === Platform.Windows) {\n            if (this.config.store.ssh.agentType === 'auto') {\n                let pipeExists = false\n                try {\n                    await fs.stat(WINDOWS_OPENSSH_AGENT_PIPE)\n                    pipeExists = true\n                } catch (e) {\n                    if (e.code === 'EBUSY') {\n                        pipeExists = true\n                    }\n                }\n\n                if (pipeExists) {\n                    return {\n                        kind: 'named-pipe',\n                        path: WINDOWS_OPENSSH_AGENT_PIPE,\n                    }\n                } else if (russh.isPageantRunning()) {\n                    return {\n                        kind: 'pageant',\n                    }\n                } else {\n                    this.emitServiceMessage(colors.bgYellow.yellow.black(' ! ') + ` Agent auth selected, but no running Agent process is found`)\n                }\n            } else if (this.config.store.ssh.agentType === 'pageant') {\n                return {\n                    kind: 'pageant',\n                }\n            } else {\n                return {\n                    kind: 'named-pipe',\n                    path: this.config.store.ssh.agentPath || WINDOWS_OPENSSH_AGENT_PIPE,\n                }\n            }\n        } else {\n            return {\n                kind: 'unix-socket',\n                path: process.env.SSH_AUTH_SOCK!,\n            }\n        }\n        return null\n    }\n\n    async openSFTP (): Promise<SFTPSession> {\n        if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n            throw new Error('Cannot open SFTP session before auth')\n        }\n        if (!this.sftp) {\n            this.sftp = await this.ssh.activateSFTP(await this.ssh.openSessionChannel())\n        }\n        return new SFTPSession(this.sftp, this.injector)\n    }\n\n    async start (): Promise<void> {\n        await this.init()\n\n        const algorithms = {}\n        for (const key of Object.values(SSHAlgorithmType)) {\n            algorithms[key] = this.profile.options.algorithms[key].filter(x => supportedAlgorithms[key].includes(x))\n        }\n\n        // eslint-disable-next-line @typescript-eslint/init-declarations\n        let transport: russh.SshTransport\n        if (this.profile.options.proxyCommand) {\n            this.emitServiceMessage(colors.bgBlue.black(' Proxy command ') + ` Using ${this.profile.options.proxyCommand}`)\n\n            const argv = shellQuote.parse(this.profile.options.proxyCommand)\n            transport = await russh.SshTransport.newCommand(argv[0], argv.slice(1))\n        } else if (this.jumpChannel) {\n            transport = await russh.SshTransport.newSshChannel(this.jumpChannel.take())\n            this.jumpChannel = null\n        } else if (this.profile.options.socksProxyHost) {\n            this.emitServiceMessage(colors.bgBlue.black(' Proxy ') + ` Using ${this.profile.options.socksProxyHost}:${this.profile.options.socksProxyPort}`)\n            transport = await russh.SshTransport.newSocksProxy(\n                this.profile.options.socksProxyHost,\n                this.profile.options.socksProxyPort ?? 1080,\n                this.profile.options.host,\n                this.profile.options.port ?? 22,\n            )\n        } else if (this.profile.options.httpProxyHost) {\n            this.emitServiceMessage(colors.bgBlue.black(' Proxy ') + ` Using ${this.profile.options.httpProxyHost}:${this.profile.options.httpProxyPort}`)\n            transport = await russh.SshTransport.newHttpProxy(\n                this.profile.options.httpProxyHost,\n                this.profile.options.httpProxyPort ?? 8080,\n                this.profile.options.host,\n                this.profile.options.port ?? 22,\n            )\n        } else {\n            transport = await russh.SshTransport.newSocket(`${this.profile.options.host.trim()}:${this.profile.options.port ?? 22}`)\n        }\n\n        this.ssh = await russh.SSHClient.connect(\n            transport,\n            async key => {\n                if (!await this.verifyHostKey(key)) {\n                    return false\n                }\n                this.logger.info('Host key verified')\n                return true\n            },\n            {\n                preferred: {\n                    ciphers: this.profile.options.algorithms[SSHAlgorithmType.CIPHER].filter(x => supportedAlgorithms[SSHAlgorithmType.CIPHER].includes(x)),\n                    kex: this.profile.options.algorithms[SSHAlgorithmType.KEX].filter(x => supportedAlgorithms[SSHAlgorithmType.KEX].includes(x)),\n                    mac: this.profile.options.algorithms[SSHAlgorithmType.HMAC].filter(x => supportedAlgorithms[SSHAlgorithmType.HMAC].includes(x)),\n                    key: this.profile.options.algorithms[SSHAlgorithmType.HOSTKEY].filter(x => supportedAlgorithms[SSHAlgorithmType.HOSTKEY].includes(x)),\n                    compression: this.profile.options.algorithms[SSHAlgorithmType.COMPRESSION].filter(x => supportedAlgorithms[SSHAlgorithmType.COMPRESSION].includes(x)),\n                },\n                keepaliveIntervalSeconds: Math.round(this.profile.options.keepaliveInterval / 1000),\n                keepaliveCountMax: this.profile.options.keepaliveCountMax,\n                connectionTimeoutSeconds: this.profile.options.readyTimeout ? Math.round(this.profile.options.readyTimeout / 1000) : undefined,\n            },\n        )\n\n        this.ssh.banner$.subscribe(banner => {\n            if (!this.profile.options.skipBanner) {\n                this.emitServiceMessage(banner)\n            }\n        })\n\n        this.previouslyDisconnected = false\n        this.ssh.disconnect$.subscribe(() => {\n            if (!this.previouslyDisconnected) {\n                this.previouslyDisconnected = true\n                // Let service messages drain\n                setTimeout(() => {\n                    this.destroy()\n                })\n            }\n        })\n\n        // Authentication\n\n        this.authUsername ??= this.profile.options.user\n        if (!this.authUsername) {\n            const modal = this.ngbModal.open(PromptModalComponent)\n            modal.componentInstance.prompt = `Username for ${this.profile.options.host}`\n            try {\n                const result = await modal.result.catch(() => null)\n                this.authUsername = result?.value ?? null\n            } catch {\n                this.authUsername = 'root'\n            }\n        }\n\n        if (this.authUsername?.startsWith('$')) {\n            try {\n                const result = process.env[this.authUsername.slice(1)]\n                this.authUsername = result ?? this.authUsername\n            } catch {\n                this.authUsername = 'root'\n            }\n        }\n\n        await this.populateStoredPasswordsForResolvedUsername()\n\n        const authenticatedClient = await this.handleAuth()\n        if (authenticatedClient) {\n            this.ssh = authenticatedClient\n        } else {\n            this.ssh.disconnect()\n            this.passwordStorage.deletePassword(this.profile, this.authUsername ?? undefined)\n            // eslint-disable-next-line @typescript-eslint/no-base-to-string\n            throw new Error('Authentication rejected')\n        }\n\n        // auth success\n\n        if (this.savedPassword) {\n            this.passwordStorage.savePassword(this.profile, this.savedPassword, this.authUsername ?? undefined)\n        }\n\n        for (const fw of this.profile.options.forwardedPorts) {\n            this.addPortForward(Object.assign(new ForwardedPort(), fw))\n        }\n\n        this.open = true\n\n        this.ssh.tcpChannelOpen$.subscribe(async event => {\n            this.logger.info(`Incoming forwarded connection: ${event.clientAddress}:${event.clientPort} -> ${event.targetAddress}:${event.targetPort}`)\n\n            if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                throw new Error('Cannot open agent channel before auth')\n            }\n\n            const channel = await this.ssh.activateChannel(event.channel)\n\n            const forward = this.forwardedPorts.find(x => x.port === event.targetPort && x.host === event.targetAddress)\n            if (!forward) {\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Rejected incoming forwarded connection for unrecognized port ${event.targetAddress}:${event.targetPort}`)\n                channel.close()\n                return\n            }\n\n            const socket = new Socket()\n            socket.connect(forward.targetPort, forward.targetAddress)\n            socket.on('error', e => {\n                // eslint-disable-next-line @typescript-eslint/no-base-to-string\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Could not forward the remote connection to ${forward.targetAddress}:${forward.targetPort}: ${e}`)\n                channel.close()\n            })\n\n            this.setupSocketChannelEvents(channel, socket, 'Remote forward')\n\n            socket.on('connect', () => {\n                this.logger.info('Connection forwarded')\n            })\n        })\n\n        this.ssh.x11ChannelOpen$.subscribe(async event => {\n            this.logger.info(`Incoming X11 connection from ${event.clientAddress}:${event.clientPort}`)\n            const displaySpec = (this.config.store.ssh.x11Display || process.env.DISPLAY) ?? 'localhost:0'\n            this.logger.debug(`Trying display ${displaySpec}`)\n\n            if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                throw new Error('Cannot open agent channel before auth')\n            }\n\n            const channel = await this.ssh.activateChannel(event.channel)\n\n            const socket = new X11Socket()\n            try {\n                const x11Stream = await socket.connect(displaySpec)\n                this.logger.info('Connection forwarded')\n                this.setupSocketChannelEvents(channel, x11Stream, 'X11 forward')\n            } catch (e) {\n                // eslint-disable-next-line @typescript-eslint/no-base-to-string\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Could not connect to the X server: ${e}`)\n                this.emitServiceMessage(`    Tabby tried to connect to ${JSON.stringify(X11Socket.resolveDisplaySpec(displaySpec))} based on the DISPLAY environment var (${displaySpec})`)\n                if (process.platform === 'win32') {\n                    this.emitServiceMessage('    To use X forwarding, you need a local X server, e.g.:')\n                    this.emitServiceMessage('    * VcXsrv: https://sourceforge.net/projects/vcxsrv/')\n                    this.emitServiceMessage('    * Xming: https://sourceforge.net/projects/xming/')\n                }\n                channel.close()\n            }\n        })\n\n        this.ssh.agentChannelOpen$.subscribe(async newChannel => {\n            if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                throw new Error('Cannot open agent channel before auth')\n            }\n\n            const channel = await this.ssh.activateChannel(newChannel)\n\n            const spec = await this.getAgentConnectionSpec()\n            if (!spec) {\n                await channel.close()\n                return\n            }\n\n            const agent = await russh.SSHAgentStream.connect(spec)\n            channel.data$.subscribe(data => agent.write(data))\n            agent.data$.subscribe(data => channel.write(data), undefined, () => channel.close())\n            channel.closed$.subscribe(() => agent.close())\n        })\n    }\n\n    private async verifyHostKey (key: russh.SshPublicKey): Promise<boolean> {\n        this.emitServiceMessage('Host key fingerprint:')\n        this.emitServiceMessage(colors.white.bgBlack(` ${key.algorithm()} `) + colors.bgBlackBright(' ' + key.fingerprint() + ' '))\n        if (!this.config.store.ssh.verifyHostKeys) {\n            return true\n        }\n        const selector = {\n            host: this.profile.options.host,\n            port: this.profile.options.port ?? 22,\n            type: key.algorithm(),\n        }\n\n        const keyDigest = crypto.createHash('sha256').update(key.bytes()).digest('base64')\n\n        const knownHost = this.profile.options.host ? this.knownHosts.getFor(selector) : null\n        if (!knownHost || knownHost.digest !== keyDigest) {\n            const modal = this.ngbModal.open(HostKeyPromptModalComponent)\n            modal.componentInstance.selector = selector\n            modal.componentInstance.digest = keyDigest\n            return modal.result.catch(() => false)\n        }\n        return true\n    }\n\n    emitServiceMessage (msg: string): void {\n        this.serviceMessage.next(msg)\n        this.logger.info(stripAnsi(msg))\n    }\n\n    emitKeyboardInteractivePrompt (prompt: KeyboardInteractivePrompt): void {\n        this.logger.info('Keyboard-interactive auth:', prompt.name, prompt.instruction)\n        this.emitServiceMessage(colors.bgBlackBright(' ') + ` Keyboard-interactive auth requested: ${prompt.name}`)\n        if (prompt.instruction) {\n            for (const line of prompt.instruction.split('\\n')) {\n                this.emitServiceMessage(line)\n            }\n        }\n        this.keyboardInteractivePrompt.next(prompt)\n    }\n\n    async handleAuth (): Promise<russh.AuthenticatedSSHClient|null> {\n        const subscription = this.ssh.disconnect$.subscribe(() => {\n            // Auto auth and >=3 keys found\n            if (!this.profile.options.auth && this.allAuthMethods.filter(x => x.type === 'publickey').length >= 3) {\n                this.emitServiceMessage('The server has disconnected during authentication.')\n                this.emitServiceMessage('This may happen if too many private key authentication attemps are made.')\n                this.emitServiceMessage('You can set the specific private key for authentication in the profile settings.')\n            }\n        })\n        try {\n            return await this._handleAuth()\n        } finally {\n            subscription.unsubscribe()\n        }\n    }\n\n    // eslint-disable-next-line max-statements\n    private async _handleAuth (): Promise<russh.AuthenticatedSSHClient|null> {\n        this.activePrivateKey = null\n\n        if (!(this.ssh instanceof russh.SSHClient)) {\n            throw new Error('Wrong state for auth handling')\n        }\n\n        if (!this.authUsername) {\n            throw new Error('No username')\n        }\n\n        const noneResult = await this.ssh.authenticateNone(this.authUsername)\n        if (noneResult instanceof russh.AuthenticatedSSHClient) {\n            return noneResult\n        }\n\n        let remainingMethods = [...this.allAuthMethods]\n        let methodsLeft = noneResult.remainingMethods\n\n        function maybeSetRemainingMethods (r: russh.AuthFailure) {\n            if (r.remainingMethods.length) {\n                methodsLeft = r.remainingMethods\n            }\n        }\n\n        while (true) {\n            const m = methodsLeft\n            const method = remainingMethods.find(x => m.length === 0 || m.includes(sshAuthTypeForMethod(x)))\n\n            if (this.previouslyDisconnected || !method) {\n                return null\n            }\n\n            remainingMethods = remainingMethods.filter(x => x !== method)\n\n            if (method.type === 'saved-password') {\n                this.emitServiceMessage(this.translate.instant('Using saved password'))\n                const result = await this.ssh.authenticateWithPassword(this.authUsername, method.password)\n                if (result instanceof russh.AuthenticatedSSHClient) {\n                    return result\n                }\n                maybeSetRemainingMethods(result)\n            }\n            if (method.type === 'prompt-password') {\n                const modal = this.ngbModal.open(PromptModalComponent)\n                modal.componentInstance.prompt = `Password for ${this.authUsername}@${this.profile.options.host}`\n                modal.componentInstance.password = true\n                modal.componentInstance.showRememberCheckbox = true\n\n                try {\n                    const promptResult = await modal.result.catch(() => null)\n                    if (promptResult) {\n                        if (promptResult.remember) {\n                            this.savedPassword = promptResult.value\n                        }\n                        const result = await this.ssh.authenticateWithPassword(this.authUsername, promptResult.value)\n                        if (result instanceof russh.AuthenticatedSSHClient) {\n                            return result\n                        }\n                        maybeSetRemainingMethods(result)\n                    } else {\n                        continue\n                    }\n                } catch {\n                    continue\n                }\n            }\n            if (method.type === 'publickey') {\n                try {\n                    const key = await this.loadPrivateKey(method.name, method.contents)\n                    this.emitServiceMessage(`Trying private key: ${method.name}`)\n                    const result = await this.ssh.authenticateWithKeyPair(this.authUsername, key, null)\n                    if (result instanceof russh.AuthenticatedSSHClient) {\n                        return result\n                    }\n                    maybeSetRemainingMethods(result)\n                } catch (e) {\n                    this.emitServiceMessage(colors.bgYellow.yellow.black(' ! ') + ` Failed to load private key ${method.name}: ${e}`)\n                    continue\n                }\n            }\n            if (method.type === 'keyboard-interactive') {\n                let state: russh.AuthenticatedSSHClient|russh.KeyboardInteractiveAuthenticationState = await this.ssh.startKeyboardInteractiveAuthentication(this.authUsername)\n\n                while (true) {\n                    if (state.state === 'failure') {\n                        maybeSetRemainingMethods(state)\n                        break\n                    }\n\n                    const prompts = state.prompts()\n\n                    let responses: string[] = []\n                    // OpenSSH can send a k-i request without prompts\n                    // just respond ok to it\n                    if (prompts.length > 0) {\n                        const prompt = new KeyboardInteractivePrompt(\n                            state.name,\n                            state.instructions,\n                            state.prompts(),\n                        )\n\n                        if (method.savedPassword) {\n                            // eslint-disable-next-line max-depth\n                            for (let i = 0; i < prompt.prompts.length; i++) {\n                                // eslint-disable-next-line max-depth\n                                if (prompt.isAPasswordPrompt(i)) {\n                                    prompt.responses[i] = method.savedPassword\n                                }\n                            }\n                        }\n\n                        this.emitKeyboardInteractivePrompt(prompt)\n\n                        try {\n                            // eslint-disable-next-line @typescript-eslint/await-thenable\n                            responses = await prompt.promise\n                        } catch {\n                            break // this loop\n                        }\n                    }\n\n                    state = await this.ssh.continueKeyboardInteractiveAuthentication(responses)\n\n                    if (state instanceof russh.AuthenticatedSSHClient) {\n                        return state\n                    }\n                }\n            }\n            if (method.type === 'agent') {\n                try {\n                    const result = method.publicKey ? await this.ssh.authenticateWithAgentIdentity(this.authUsername, method, method.publicKey) : await this.ssh.authenticateWithAgent(this.authUsername, method)\n                    if (result instanceof russh.AuthenticatedSSHClient) {\n                        return result\n                    }\n                    maybeSetRemainingMethods(result)\n                } catch (e) {\n                    const identitySuffix = method.publicKey ? ` with identity ${method.publicKey.fingerprint()}` : ''\n                    this.emitServiceMessage(colors.bgYellow.yellow.black(' ! ') + ` Failed to authenticate using agent${identitySuffix}: ${e}`)\n                    continue\n                }\n            }\n        }\n        return null\n    }\n\n    async addPortForward (fw: ForwardedPort): Promise<void> {\n        if (fw.type === PortForwardType.Local || fw.type === PortForwardType.Dynamic) {\n            await fw.startLocalListener(async (accept, reject, sourceAddress, sourcePort, targetAddress, targetPort) => {\n                this.logger.info(`New connection on ${fw}`)\n                if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                    this.logger.error(`Connection while unauthenticated on ${fw}`)\n                    reject()\n                    return\n                }\n                const channel = await this.ssh.activateChannel(await this.ssh.openTCPForwardChannel({\n                    addressToConnectTo: targetAddress,\n                    portToConnectTo: targetPort,\n                    originatorAddress: sourceAddress ?? '127.0.0.1',\n                    originatorPort: sourcePort ?? 0,\n                }).catch(err => {\n                    this.emitServiceMessage(colors.bgRed.black(' X ') + ` Remote has rejected the forwarded connection to ${targetAddress}:${targetPort} via ${fw}: ${err}`)\n                    reject()\n                    throw err\n                }))\n                const socket = accept()\n\n                this.setupSocketChannelEvents(channel, socket, 'Local forward')\n            }).then(() => {\n                this.emitServiceMessage(colors.bgGreen.black(' -> ') + ` Forwarded ${fw}`)\n                this.forwardedPorts.push(fw)\n            }).catch(e => {\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Failed to forward port ${fw}: ${e}`)\n                throw e\n            })\n        }\n        if (fw.type === PortForwardType.Remote) {\n            if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                throw new Error('Cannot add remote port forward before auth')\n            }\n            try {\n                await this.ssh.forwardTCPPort(fw.host, fw.port)\n            } catch (err) {\n                // eslint-disable-next-line @typescript-eslint/no-base-to-string\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Remote rejected port forwarding for ${fw}: ${err}`)\n                return\n            }\n            this.emitServiceMessage(colors.bgGreen.black(' <- ') + ` Forwarded ${fw}`)\n            this.forwardedPorts.push(fw)\n        }\n    }\n\n    async removePortForward (fw: ForwardedPort): Promise<void> {\n        if (fw.type === PortForwardType.Local || fw.type === PortForwardType.Dynamic) {\n            fw.stopLocalListener()\n            this.forwardedPorts = this.forwardedPorts.filter(x => x !== fw)\n        }\n        if (fw.type === PortForwardType.Remote) {\n            if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n                throw new Error('Cannot remove remote port forward before auth')\n            }\n            this.ssh.stopForwardingTCPPort(fw.host, fw.port)\n            this.forwardedPorts = this.forwardedPorts.filter(x => x !== fw)\n        }\n        this.emitServiceMessage(`Stopped forwarding ${fw}`)\n    }\n\n    async destroy (): Promise<void> {\n        this.logger.info('Destroying')\n        this.willDestroy.next()\n        this.willDestroy.complete()\n        this.serviceMessage.complete()\n        this.ssh.disconnect()\n    }\n\n    async openShellChannel (options: { x11: boolean }): Promise<russh.Channel> {\n        if (!(this.ssh instanceof russh.AuthenticatedSSHClient)) {\n            throw new Error('Cannot open shell channel before auth')\n        }\n        const ch = await this.ssh.activateChannel(await this.ssh.openSessionChannel())\n        await ch.requestPTY('xterm-256color', {\n            columns: 80,\n            rows: 24,\n            pixHeight: 0,\n            pixWidth: 0,\n        })\n        if (options.x11) {\n            await ch.requestX11Forwarding({\n                singleConnection: false,\n                authProtocol: 'MIT-MAGIC-COOKIE-1',\n                authCookie: crypto.randomBytes(16).toString('hex'),\n                screenNumber: 0,\n            })\n        }\n        if (this.profile.options.agentForward) {\n            await ch.requestAgentForwarding()\n        }\n        await ch.requestShell()\n        return ch\n    }\n\n    private setupSocketChannelEvents (channel: russh.Channel, socket: Socket, logPrefix: string): void {\n        // Channel → Socket data flow with error handling\n        channel.data$.subscribe({\n            next: data => socket.write(data),\n            error: err => {\n                this.logger.error(`${logPrefix}: channel data error: ${err}`)\n                socket.destroy()\n            },\n        })\n\n        // Socket → Channel data flow with proper conversion\n        socket.on('data', data => {\n            try {\n                channel.write(new Uint8Array(data.buffer, data.byteOffset, data.byteLength))\n            } catch (err) {\n                this.logger.error(`${logPrefix}: channel write error: ${err}`)\n                socket.destroy(new Error(`${logPrefix}failed to write to channel: ${err}`))\n            }\n        })\n\n        // Handle EOF from remote\n        channel.eof$.subscribe(() => {\n            this.logger.debug(`${logPrefix}: channel EOF received, ending socket`)\n            socket.end()\n        })\n\n        // Handle channel close\n        channel.closed$.subscribe(() => {\n            this.logger.debug(`${logPrefix}: channel closed, destroying socket`)\n            socket.destroy()\n        })\n\n        // Handle socket errors\n        socket.on('error', err => {\n            this.logger.error(`${logPrefix}: socket error: ${err}`)\n            channel.close()\n        })\n\n        // Handle socket close\n        socket.on('close', () => {\n            this.logger.debug(`${logPrefix}: socket closed, closing channel`)\n            channel.close()\n        })\n\n        // Handle EOF from local\n        socket.on('end', () => {\n            this.logger.debug(`${logPrefix}: socket end, sending EOF to channel`)\n            channel.eof()\n        })\n    }\n\n    async loadPrivateKey (name: string, privateKeyContents: Buffer): Promise<russh.KeyPair> {\n        this.activePrivateKey = await this.loadPrivateKeyWithPassphraseMaybe(privateKeyContents.toString())\n        return this.activePrivateKey\n    }\n\n    async loadPrivateKeyWithPassphraseMaybe (privateKey: string): Promise<russh.KeyPair> {\n        const keyHash = crypto.createHash('sha512').update(privateKey).digest('hex')\n\n        privateKey = privateKey.replaceAll('EC PRIVATE KEY', 'PRIVATE KEY')\n\n        let triedSavedPassphrase = false\n        let passphrase: string|null = null\n        while (true) {\n            try {\n                return await russh.KeyPair.parse(privateKey, passphrase ?? undefined)\n            } catch (e) {\n                if (!triedSavedPassphrase) {\n                    passphrase = await this.passwordStorage.loadPrivateKeyPassword(keyHash)\n                    triedSavedPassphrase = true\n                    continue\n                }\n                if ([\n                    'Error: Keys(KeyIsEncrypted)',\n                    'Error: Keys(SshKey(Ppk(Encrypted)))',\n                    'Error: Keys(SshKey(Ppk(IncorrectMac)))',\n                    'Error: Keys(SshKey(Crypto))',\n                ].includes(e.toString())) {\n                    await this.passwordStorage.deletePrivateKeyPassword(keyHash)\n\n                    const modal = this.ngbModal.open(PromptModalComponent)\n                    modal.componentInstance.prompt = 'Private key passphrase'\n                    modal.componentInstance.password = true\n                    modal.componentInstance.showRememberCheckbox = true\n\n                    const result = await modal.result.catch(() => {\n                        throw new Error('Passphrase prompt cancelled')\n                    })\n\n                    passphrase = result?.value\n                    if (passphrase && result.remember) {\n                        this.passwordStorage.savePrivateKeyPassword(keyHash, passphrase)\n                    }\n                } else {\n                    this.notifications.error('Could not read the private key', e.toString())\n                    throw e\n                }\n            }\n        }\n    }\n\n    ref (): void {\n        this.refCount++\n    }\n\n    unref (): void {\n        this.refCount--\n        if (this.refCount === 0) {\n            this.destroy()\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/session/x11.ts",
    "content": "import { Socket, SocketConnectOpts } from 'net'\nimport { Subject } from 'rxjs'\n\nexport class X11Socket {\n    error$ = new Subject<Error>()\n    private socket: Socket | null = null\n\n    static resolveDisplaySpec (spec?: string|null): SocketConnectOpts {\n        // eslint-disable-next-line prefer-const, @typescript-eslint/no-unused-vars\n        let [_, xHost, xDisplay] = /^(.+):(\\d+)(?:.(\\d+))$/.exec(spec ?? process.env.DISPLAY ?? 'localhost:0') ?? [undefined, undefined, undefined]\n        if (process.platform === 'win32') {\n            xHost ??= 'localhost'\n        } else {\n            xHost ??= 'unix'\n        }\n\n        if (spec?.startsWith('/')) {\n            xHost = spec\n        }\n\n        const display = parseInt(xDisplay ?? '0')\n        const port = display < 100 ? display + 6000 : display\n\n        if (xHost === 'unix') {\n            xHost = `/tmp/.X11-unix/X${display}`\n        }\n\n        if (xHost.startsWith('/')) {\n            return {\n                path: xHost,\n            }\n        } else {\n            return {\n                host: xHost,\n                port: port,\n            }\n        }\n    }\n\n    connect (spec: string): Promise<Socket> {\n        this.socket = new Socket()\n        return new Promise((resolve, reject) => {\n            this.socket!.on('connect', () => {\n                resolve(this.socket!)\n            })\n            this.socket!.on('error', e => {\n                this.error$.next(e)\n                reject(e)\n            })\n            this.socket!.connect(X11Socket.resolveDisplaySpec(spec))\n        })\n    }\n\n    destroy (): void {\n        this.socket?.destroy()\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/settings.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { SSHSettingsTabComponent } from './components/sshSettingsTab.component'\n\n/** @hidden */\n@Injectable()\nexport class SSHSettingsTabProvider extends SettingsTabProvider {\n    id = 'ssh'\n    icon = 'globe'\n    title = 'SSH'\n\n    getComponentType (): any {\n        return SSHSettingsTabComponent\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/sftpContextMenu.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { MenuItemOptions, PlatformService, TranslateService, HostAppService, Platform } from 'tabby-core'\nimport { SFTPSession, SFTPFile } from './session/sftp'\nimport { SFTPContextMenuItemProvider } from './api'\nimport { SFTPDeleteModalComponent } from './components/sftpDeleteModal.component'\nimport { SFTPPanelComponent } from './components/sftpPanel.component'\n\n\n/** @hidden */\n@Injectable()\nexport class CommonSFTPContextMenu extends SFTPContextMenuItemProvider {\n    weight = 10\n\n    constructor (\n        private platform: PlatformService,\n        private ngbModal: NgbModal,\n        private translate: TranslateService,\n        private hostApp: HostAppService,\n    ) {\n        super()\n    }\n\n    async getItems (item: SFTPFile, panel: SFTPPanelComponent): Promise<MenuItemOptions[]> {\n        const items: MenuItemOptions[] = [\n            {\n                click: async () => {\n                    await panel.openCreateDirectoryModal()\n                },\n                label: this.translate.instant('Create directory'),\n            },\n        ]\n\n        // Add download folder option for directories (only in electron)\n        if (item.isDirectory && this.hostApp.platform !== Platform.Web) {\n            items.push({\n                click: () => panel.downloadFolder(item),\n                label: this.translate.instant('Download directory'),\n            })\n        }\n\n        if (!item.isDirectory) {\n            items.push({\n                click: () => panel.downloadItem(item),\n                label: this.translate.instant('Download'),\n            })\n        }\n\n        items.push({\n            click: async () => {\n                if ((await this.platform.showMessageBox({\n                    type: 'warning',\n                    message: this.translate.instant('Delete {fullPath}?', item),\n                    defaultId: 0,\n                    cancelId: 1,\n                    buttons: [\n                        this.translate.instant('Delete'),\n                        this.translate.instant('Cancel'),\n                    ],\n                })).response === 0) {\n                    await this.deleteItem(item, panel.sftp)\n                    panel.navigate(panel.path)\n                }\n            },\n            label: this.translate.instant('Delete'),\n        })\n\n        return items\n    }\n\n    async deleteItem (item: SFTPFile, session: SFTPSession): Promise<void> {\n        const modal = this.ngbModal.open(SFTPDeleteModalComponent)\n        modal.componentInstance.item = item\n        modal.componentInstance.sftp = session\n        await modal.result.catch(() => null)\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/src/tabContextMenu.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { BaseTabComponent, TabContextMenuItemProvider, HostAppService, Platform, MenuItemOptions, TranslateService } from 'tabby-core'\nimport { SSHTabComponent } from './components/sshTab.component'\nimport { SSHService } from './services/ssh.service'\n\n\n/** @hidden */\n@Injectable()\nexport class SFTPContextMenu extends TabContextMenuItemProvider {\n    weight = 10\n\n    constructor (\n        private hostApp: HostAppService,\n        private ssh: SSHService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        if (!(tab instanceof SSHTabComponent)) {\n            return []\n        }\n        const items = [{\n            label: this.translate.instant('Open SFTP panel'),\n            click: () => {\n                tab.openSFTP()\n            },\n        }]\n        if (this.hostApp.platform === Platform.Windows && this.ssh.getWinSCPPath()) {\n            items.push({\n                label: this.translate.instant('Launch WinSCP'),\n                click: (): void => {\n                    this.ssh.launchWinSCP(tab.sshSession!)\n                },\n            })\n        }\n        return items\n    }\n}\n"
  },
  {
    "path": "tabby-ssh/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-ssh/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"include\": [\"src\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    },\n    \"types\": [\"node\"]\n  }\n}\n"
  },
  {
    "path": "tabby-ssh/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'ssh',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-telnet/package.json",
    "content": "{\n  \"name\": \"tabby-telnet\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Telnet/socket connections for Tabby\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"ansi-colors\": \"^4.1.1\",\n    \"@types/node\": \"14.14.31\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\",\n    \"tabby-terminal\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-telnet/src/components/telnetProfileSettings.component.pug",
    "content": "ul.nav-tabs(ngbNav, #nav='ngbNav')\n    li(ngbNavItem)\n        a(ngbNavLink, translate) General\n        ng-template(ngbNavContent)\n            .mb-3\n                label(translate) Host\n                input.form-control(\n                    type='text',\n                    [(ngModel)]='profile.options.host',\n                )\n\n            .mb-3\n                label(translate) Port\n                input.form-control(\n                    type='number',\n                    placeholder='22',\n                    [(ngModel)]='profile.options.port',\n                )\n\n            stream-processing-settings([options]='profile.options')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Login scripts\n        ng-template(ngbNavContent)\n            login-scripts-settings([options]='profile.options')\n\n    li(ngbNavItem)\n        a(ngbNavLink, translate) Input\n        ng-template(ngbNavContent)\n            input-processing-settings([options]='profile.options.input')\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-telnet/src/components/telnetProfileSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component } from '@angular/core'\n\nimport { FullyDefined, ProfileSettingsComponent } from 'tabby-core'\nimport { TelnetProfile } from '../session'\nimport { TelnetProfilesService } from '../profiles'\n\n/** @hidden */\n@Component({\n    templateUrl: './telnetProfileSettings.component.pug',\n})\nexport class TelnetProfileSettingsComponent implements ProfileSettingsComponent<TelnetProfile, TelnetProfilesService> {\n    profile: FullyDefined<TelnetProfile>\n}\n"
  },
  {
    "path": "tabby-telnet/src/components/telnetTab.component.pug",
    "content": "terminal-toolbar([tab]='this')\n    i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open')\n    i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open')\n    strong.me-auto {{profile.options.host}}:{{profile.options.port}}\n\n    button.btn.btn-sm.btn-link.me-2((click)='reconnect()')\n        i.fas.fa-redo\n        span(translate) Reconnect\n"
  },
  {
    "path": "tabby-telnet/src/components/telnetTab.component.scss",
    "content": "@import '../../../tabby-ssh/src/components/sshTab.component.scss';\n"
  },
  {
    "path": "tabby-telnet/src/components/telnetTab.component.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport colors from 'ansi-colors'\nimport { Component, Injector } from '@angular/core'\nimport { Platform } from 'tabby-core'\nimport { BaseTerminalTabComponent, ConnectableTerminalTabComponent } from 'tabby-terminal'\nimport { TelnetProfile, TelnetSession } from '../session'\n\n\n/** @hidden */\n@Component({\n    selector: 'telnet-tab',\n    template: `${BaseTerminalTabComponent.template} ${require('./telnetTab.component.pug')}`,\n    styleUrls: ['./telnetTab.component.scss', ...BaseTerminalTabComponent.styles],\n    animations: BaseTerminalTabComponent.animations,\n})\nexport class TelnetTabComponent extends ConnectableTerminalTabComponent<TelnetProfile> {\n    Platform = Platform\n    session: TelnetSession|null = null\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n    ) {\n        super(injector)\n        this.enableToolbar = true\n    }\n\n    ngOnInit (): void {\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (this.hasFocus && hotkey === 'restart-telnet-session') {\n                this.reconnect()\n            }\n        })\n\n        super.ngOnInit()\n    }\n\n    protected onSessionDestroyed (): void {\n        if (this.frontend) {\n            // Session was closed abruptly\n            this.write('\\r\\n' + colors.black.bgWhite(' TELNET ') + ` ${this.session?.profile.options.host}: session closed\\r\\n`)\n\n            super.onSessionDestroyed()\n        }\n    }\n\n    async initializeSession (): Promise<void> {\n        await super.initializeSession()\n\n        const session = new TelnetSession(this.injector, this.profile)\n        this.setSession(session)\n\n        try {\n            this.startSpinner(this.translate.instant(_('Connecting')))\n\n            this.attachSessionHandler(session.serviceMessage$, msg => {\n                this.write(`\\r${colors.black.bgWhite(' Telnet ')} ${msg}\\r\\n`)\n                session.resize(this.size.columns, this.size.rows)\n            })\n\n            try {\n                await session.start()\n                this.stopSpinner()\n            } catch (e) {\n                this.stopSpinner()\n                this.write(colors.black.bgRed(' X ') + ' ' + colors.red(e.message) + '\\r\\n')\n                return\n            }\n        } catch (e) {\n            this.write(colors.black.bgRed(' X ') + ' ' + colors.red(e.message) + '\\r\\n')\n        }\n    }\n\n    async canClose (): Promise<boolean> {\n        if (!this.session?.open) {\n            return true\n        }\n        return (await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant(_('Disconnect from {host}?'), this.profile.options),\n                buttons: [\n                    this.translate.instant(_('Disconnect')),\n                    this.translate.instant(_('Do not close')),\n                ],\n                defaultId: 0,\n                cancelId: 1,\n            },\n        )).response === 0\n    }\n\n    protected isSessionExplicitlyTerminated (): boolean {\n        return super.isSessionExplicitlyTerminated() ||\n        this.recentInputs.endsWith('close\\r') ||\n        this.recentInputs.endsWith('quit\\r')\n    }\n\n}\n"
  },
  {
    "path": "tabby-telnet/src/config.ts",
    "content": "import { ConfigProvider } from 'tabby-core'\n\n/** @hidden */\nexport class TelnetConfigProvider extends ConfigProvider {\n    defaults = {\n        hotkeys: {\n            'restart-telnet-session': [],\n        },\n    }\n\n    platformDefaults = { }\n}\n"
  },
  {
    "path": "tabby-telnet/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class TelnetHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'restart-telnet-session',\n            name: this.translate.instant('Restart current Telnet session'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n"
  },
  {
    "path": "tabby-telnet/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { ToastrModule } from 'ngx-toastr'\nimport { NgxFilesizeModule } from 'ngx-filesize'\nimport TabbyCoreModule, { ConfigProvider, TabRecoveryProvider, HotkeyProvider, ProfileProvider } from 'tabby-core'\nimport TabbyTerminalModule from 'tabby-terminal'\n\nimport { TelnetProfileSettingsComponent } from './components/telnetProfileSettings.component'\nimport { TelnetTabComponent } from './components/telnetTab.component'\n\nimport { TelnetConfigProvider } from './config'\nimport { RecoveryProvider } from './recoveryProvider'\nimport { TelnetHotkeyProvider } from './hotkeys'\nimport { TelnetProfilesService } from './profiles'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        NgbModule,\n        NgxFilesizeModule,\n        CommonModule,\n        FormsModule,\n        ToastrModule,\n        TabbyCoreModule,\n        TabbyTerminalModule,\n    ],\n    providers: [\n        { provide: ConfigProvider, useClass: TelnetConfigProvider, multi: true },\n        { provide: TabRecoveryProvider, useClass: RecoveryProvider, multi: true },\n        { provide: HotkeyProvider, useClass: TelnetHotkeyProvider, multi: true },\n        { provide: ProfileProvider, useExisting: TelnetProfilesService, multi: true },\n    ],\n    declarations: [\n        TelnetProfileSettingsComponent,\n        TelnetTabComponent,\n    ],\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default class TelnetModule { }\n"
  },
  {
    "path": "tabby-telnet/src/profiles.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { NewTabParameters, PartialProfile, TranslateService, QuickConnectProfileProvider } from 'tabby-core'\nimport { TelnetProfileSettingsComponent } from './components/telnetProfileSettings.component'\nimport { TelnetTabComponent } from './components/telnetTab.component'\nimport { TelnetProfile } from './session'\n\n@Injectable({ providedIn: 'root' })\nexport class TelnetProfilesService extends QuickConnectProfileProvider<TelnetProfile> {\n    id = 'telnet'\n    name = 'Telnet'\n    supportsQuickConnect = true\n    settingsComponent = TelnetProfileSettingsComponent\n    configDefaults = {\n        options: {\n            host: null,\n            port: 23,\n            inputMode: 'local-echo',\n            outputMode: null,\n            inputNewlines: null,\n            outputNewlines: 'crlf',\n            scripts: [],\n            input: { backspace: 'backspace' },\n        },\n        clearServiceMessagesOnConnect: false,\n    }\n\n    constructor (private translate: TranslateService) { super() }\n\n    async getBuiltinProfiles (): Promise<PartialProfile<TelnetProfile>[]> {\n        return [\n            {\n                id: `telnet:template`,\n                type: 'telnet',\n                name: this.translate.instant('Telnet session'),\n                icon: 'fas fa-network-wired',\n                options: {\n                    host: '',\n                    port: 23,\n                    inputMode: 'readline',\n                    outputMode: null,\n                    inputNewlines: null,\n                    outputNewlines: 'crlf',\n                },\n                isBuiltin: true,\n                isTemplate: true,\n            },\n            {\n                id: `socket:template`,\n                type: 'telnet',\n                name: this.translate.instant('Raw socket connection'),\n                icon: 'fas fa-network-wired',\n                options: {\n                    host: '',\n                    port: 1234,\n                },\n                isBuiltin: true,\n                isTemplate: true,\n            },\n        ]\n    }\n\n    async getNewTabParameters (profile: TelnetProfile): Promise<NewTabParameters<TelnetTabComponent>> {\n        return {\n            type: TelnetTabComponent,\n            inputs: { profile },\n        }\n    }\n\n    getSuggestedName (profile: TelnetProfile): string|null {\n        return this.getDescription(profile) || null\n    }\n\n    getDescription (profile: TelnetProfile): string {\n        return profile.options.host ? `${profile.options.host}:${profile.options.port}` : ''\n    }\n\n    quickConnect (query: string): PartialProfile<TelnetProfile> {\n        let host = query\n        let port = 23\n        if (host.includes('[')) {\n            port = parseInt(host.split(']')[1].substring(1))\n            host = host.split(']')[0].substring(1)\n        } else if (host.includes(':')) {\n            port = parseInt(host.split(/:/g)[1])\n            host = host.split(':')[0]\n        }\n\n        return {\n            name: query,\n            type: 'telnet',\n            options: {\n                host,\n                port,\n                inputMode: 'readline',\n                outputNewlines: 'crlf',\n            },\n        }\n    }\n\n    intoQuickConnectString (profile: TelnetProfile): string | null {\n        let s = profile.options.host\n        if (profile.options.port !== 23) {\n            s = `${s}:${profile.options.port}`\n        }\n        return s\n    }\n}\n"
  },
  {
    "path": "tabby-telnet/src/recoveryProvider.ts",
    "content": "import { Injectable, Injector } from '@angular/core'\nimport { TabRecoveryProvider, NewTabParameters, RecoveryToken, ProfilesService } from 'tabby-core'\n\nimport { TelnetTabComponent } from './components/telnetTab.component'\n\n/** @hidden */\n@Injectable()\nexport class RecoveryProvider extends TabRecoveryProvider<TelnetTabComponent> {\n    constructor (private injector: Injector) { super() }\n\n    async applicableTo (recoveryToken: RecoveryToken): Promise<boolean> {\n        return recoveryToken.type === 'app:telnet-tab'\n    }\n\n    async recover (recoveryToken: RecoveryToken): Promise<NewTabParameters<TelnetTabComponent>> {\n        return {\n            type: TelnetTabComponent,\n            inputs: {\n                profile: this.injector.get(ProfilesService).getConfigProxyForProfile(recoveryToken.profile),\n                savedState: recoveryToken.savedState,\n            },\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-telnet/src/session.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\nimport { Socket } from 'net'\nimport colors from 'ansi-colors'\nimport stripAnsi from 'strip-ansi'\nimport { Injector } from '@angular/core'\nimport { LogService } from 'tabby-core'\nimport { BaseSession, ConnectableTerminalProfile, InputProcessingOptions, InputProcessor, LoginScriptsOptions, SessionMiddleware, StreamProcessingOptions, TerminalStreamProcessor } from 'tabby-terminal'\nimport { Subject, Observable } from 'rxjs'\n\n\nexport interface TelnetProfile extends ConnectableTerminalProfile {\n    options: TelnetProfileOptions\n}\n\nexport interface TelnetProfileOptions extends StreamProcessingOptions, LoginScriptsOptions {\n    host: string\n    port: number | null\n    input: InputProcessingOptions,\n}\n\nenum TelnetCommands {\n    SUBOPTION_SEND = 1,\n    SUBOPTION_END = 240,\n    GA = 249,\n    SUBOPTION = 250,\n    WILL = 251,\n    WONT = 252,\n    DO = 253,\n    DONT = 254,\n    IAC = 255,\n}\n\nenum TelnetOptions {\n    ECHO = 0x1,\n    AUTH_OPTIONS = 0x25,\n    SUPPRESS_GO_AHEAD = 0x03,\n    TERMINAL_TYPE = 0x18,\n    NEGO_WINDOW_SIZE = 0x1f,\n    NEGO_TERMINAL_SPEED = 0x20,\n    STATUS = 0x05,\n    REMOTE_FLOW_CONTROL = 0x21,\n    X_DISPLAY_LOCATION = 0x23,\n    NEW_ENVIRON = 0x27,\n}\n\nclass UnescapeFFMiddleware extends SessionMiddleware {\n    feedFromSession (data: Buffer): void {\n        while (data.includes(0xff)) {\n            const pos = data.indexOf(0xff)\n\n            this.outputToTerminal.next(data.slice(0, pos))\n            this.outputToTerminal.next(Buffer.from([0xff, 0xff]))\n\n            data = data.slice(pos + 1)\n        }\n\n        this.outputToTerminal.next(data)\n    }\n}\n\nexport class TelnetSession extends BaseSession {\n    get serviceMessage$ (): Observable<string> { return this.serviceMessage }\n\n    private serviceMessage = new Subject<string>()\n    private socket: Socket\n    private streamProcessor: TerminalStreamProcessor\n    private telnetProtocol = false\n    private lastWidth = 0\n    private lastHeight = 0\n    private requestedOptions = new Set<number>()\n    private telnetRemoteEcho = false\n\n    constructor (\n        injector: Injector,\n        public profile: TelnetProfile,\n    ) {\n        super(injector.get(LogService).create(`telnet-${profile.options.host}-${profile.options.port}`))\n        this.streamProcessor = new TerminalStreamProcessor(profile.options)\n        this.middleware.push(this.streamProcessor)\n        this.middleware.push(new InputProcessor(profile.options.input))\n        this.setLoginScriptsOptions(profile.options)\n    }\n\n    async start (): Promise<void> {\n        this.socket = new Socket()\n        this.emitServiceMessage(`Connecting to ${this.profile.options.host}`)\n\n        return new Promise((resolve, reject) => {\n            this.socket.on('error', err => {\n                this.emitServiceMessage(colors.bgRed.black(' X ') + ` Socket error: ${err as any}`)\n                reject(err)\n                this.destroy()\n            })\n            this.socket.on('close', () => {\n                this.emitServiceMessage('Connection closed')\n                this.destroy()\n            })\n            this.socket.on('data', data => this.onData(data))\n            this.socket.connect(this.profile.options.port ?? 23, this.profile.options.host, () => {\n                this.emitServiceMessage('Connected')\n                this.open = true\n                setTimeout(() => this.streamProcessor.start())\n                this.loginScriptProcessor?.executeUnconditionalScripts()\n                resolve()\n            })\n        })\n    }\n\n    requestOption (cmd: TelnetCommands, option: TelnetOptions): void {\n        this.requestedOptions.add(option)\n        this.emitTelnet(cmd, option)\n    }\n\n    emitServiceMessage (msg: string): void {\n        this.serviceMessage.next(msg)\n        this.logger.info(stripAnsi(msg))\n    }\n\n    onData (data: Buffer): void {\n        if (!this.telnetProtocol && data[0] === TelnetCommands.IAC) {\n            this.telnetProtocol = true\n            this.middleware.push(new UnescapeFFMiddleware())\n            this.requestOption(TelnetCommands.DO, TelnetOptions.SUPPRESS_GO_AHEAD)\n            this.emitTelnet(TelnetCommands.WILL, TelnetOptions.TERMINAL_TYPE)\n            this.emitTelnet(TelnetCommands.WILL, TelnetOptions.NEGO_WINDOW_SIZE)\n        }\n        if (this.telnetProtocol) {\n            data = this.processTelnetProtocol(data)\n        }\n        this.emitOutput(data)\n    }\n\n    emitTelnet (command: TelnetCommands, option: TelnetOptions): void {\n        this.logger.debug('>', TelnetCommands[command], TelnetOptions[option] || option)\n        this.socket.write(Buffer.from([TelnetCommands.IAC, command, option]))\n    }\n\n    emitTelnetSuboption (option: TelnetOptions, value: Buffer): void {\n        this.logger.debug('>', 'SUBOPTION', TelnetOptions[option], value)\n        this.socket.write(Buffer.from([\n            TelnetCommands.IAC,\n            TelnetCommands.SUBOPTION,\n            option,\n            ...value,\n            TelnetCommands.IAC,\n            TelnetCommands.SUBOPTION_END,\n        ]))\n    }\n\n    processTelnetProtocol (data: Buffer): Buffer {\n        while (data.length) {\n            if (data[0] === TelnetCommands.IAC) {\n                const command = data[1]\n                const commandName = TelnetCommands[command]\n                const option = data[2]\n                const optionName = TelnetOptions[option]\n\n                if (command === TelnetCommands.IAC) {\n                    data = data.slice(1)\n                    break\n                }\n\n                data = data.slice(3)\n                this.logger.debug('<', commandName || command, optionName || option)\n\n                if (command === TelnetCommands.WILL || command === TelnetCommands.WONT || command === TelnetCommands.DONT) {\n                    if (this.requestedOptions.has(option)) {\n                        this.requestedOptions.delete(option)\n                        continue\n                    }\n                }\n\n                if (command === TelnetCommands.WILL) {\n                    if ([\n                        TelnetOptions.SUPPRESS_GO_AHEAD,\n                        TelnetOptions.ECHO,\n                    ].includes(option)) {\n                        this.emitTelnet(TelnetCommands.DO, option)\n                        if (option === TelnetOptions.ECHO && this.streamProcessor.forceEcho) {\n                            this.telnetRemoteEcho = true\n                            this.streamProcessor.forceEcho = false\n                            this.requestOption(TelnetCommands.WONT, option)\n                        }\n                    } else {\n                        this.logger.debug('(!) Unhandled option')\n                        this.emitTelnet(TelnetCommands.DONT, option)\n                    }\n                }\n                if (command === TelnetCommands.DO) {\n                    if (option === TelnetOptions.NEGO_WINDOW_SIZE) {\n                        this.emitTelnet(TelnetCommands.WILL, option)\n                        this.emitSize()\n                    } else if (option === TelnetOptions.ECHO) {\n                        if (this.telnetRemoteEcho) {\n                            this.streamProcessor.forceEcho = false\n                            this.emitTelnet(TelnetCommands.WONT, option)\n                        } else {\n                            this.streamProcessor.forceEcho = true\n                            this.emitTelnet(TelnetCommands.WILL, option)\n                        }\n                    } else if (option === TelnetOptions.TERMINAL_TYPE) {\n                        this.emitTelnet(TelnetCommands.WILL, option)\n                    } else {\n                        this.logger.debug('(!) Unhandled option')\n                        this.emitTelnet(TelnetCommands.WONT, option)\n                    }\n                }\n                if (command === TelnetCommands.DONT) {\n                    if (option === TelnetOptions.ECHO) {\n                        this.streamProcessor.forceEcho = false\n                        this.emitTelnet(TelnetCommands.WONT, option)\n                    } else {\n                        this.logger.debug('(!) Unhandled option')\n                        this.emitTelnet(TelnetCommands.WONT, option)\n                    }\n                }\n                if (command === TelnetCommands.WONT) {\n                    if (option === TelnetOptions.ECHO) {\n                        this.telnetRemoteEcho = false\n                        this.emitTelnet(TelnetCommands.DONT, option)\n                    } else {\n                        this.logger.debug('(!) Unhandled option')\n                        this.emitTelnet(TelnetCommands.DONT, option)\n                    }\n                }\n                if (command === TelnetCommands.SUBOPTION) {\n                    const endIndex = data.indexOf(TelnetCommands.IAC)\n                    const optionValue = data.slice(0, endIndex)\n                    this.logger.debug('<', commandName || command, optionName || option, optionValue)\n\n                    if (option === TelnetOptions.TERMINAL_TYPE && optionValue[0] === TelnetCommands.SUBOPTION_SEND) {\n                        this.emitTelnetSuboption(option, Buffer.from([0, ...Buffer.from('XTERM-256COLOR')]))\n                    }\n\n                    data = data.slice(endIndex + 2)\n                }\n            } else {\n                return data\n            }\n        }\n        return data\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    resize (w: number, h: number): void {\n        if (w && h) {\n            this.lastWidth = w\n            this.lastHeight = h\n        }\n        if (this.lastWidth && this.lastHeight && this.telnetProtocol) {\n            this.emitSize()\n        }\n    }\n\n    private emitSize () {\n        if (this.lastWidth && this.lastHeight) {\n            this.emitTelnetSuboption(TelnetOptions.NEGO_WINDOW_SIZE, Buffer.from([\n                this.lastWidth >> 8, this.lastWidth & 0xff,\n                this.lastHeight >> 8, this.lastHeight & 0xff,\n            ]))\n        } else {\n            this.emitTelnet(TelnetCommands.WONT, TelnetOptions.NEGO_WINDOW_SIZE)\n        }\n    }\n\n    write (data: Buffer): void {\n        this.socket.write(data)\n    }\n\n    kill (_signal?: string): void {\n        this.socket.destroy()\n    }\n\n    async destroy (): Promise<void> {\n        this.streamProcessor.close()\n        this.serviceMessage.complete()\n        this.kill()\n        await super.destroy()\n    }\n\n    async getChildProcesses (): Promise<any[]> {\n        return []\n    }\n\n    async gracefullyKillProcess (): Promise<void> {\n        this.kill()\n    }\n\n    supportsWorkingDirectory (): boolean {\n        return false\n    }\n\n    async getWorkingDirectory (): Promise<string|null> {\n        return null\n    }\n}\n"
  },
  {
    "path": "tabby-telnet/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-telnet/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"include\": [\"src\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-telnet/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'telnet',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-terminal/README.md",
    "content": "# Tabby Terminal Plugin\n\n* terminal tabs\n* terminal frontends\n* session management\n"
  },
  {
    "path": "tabby-terminal/package.json",
    "content": "{\n  \"name\": \"tabby-terminal\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Tabby's terminal emulation core\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color --display-modules\",\n    \"watch\": \"webpack --progress --color --watch\",\n    \"prepare\": \"patch-package\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@xterm/addon-canvas\": \"^0.7.0\",\n    \"@xterm/addon-clipboard\": \"^0.2.0\",\n    \"@xterm/addon-fit\": \"^0.11.0\",\n    \"@xterm/addon-image\": \"^0.9.0\",\n    \"@xterm/addon-ligatures\": \"^0.10.0\",\n    \"@xterm/addon-search\": \"^0.16.0\",\n    \"@xterm/addon-serialize\": \"^0.14.0\",\n    \"@xterm/addon-unicode11\": \"^0.9.0\",\n    \"@xterm/addon-webgl\": \"^0.19.0\",\n    \"@xterm/xterm\": \"^6.0.0\",\n    \"ansi-colors\": \"^4.1.1\",\n    \"binstring\": \"^0.2.1\",\n    \"buffer-replace\": \"^1.0.0\",\n    \"cli-spinner\": \"^0.2.10\",\n    \"dataurl\": \"0.1.0\",\n    \"hexer\": \"^1.5.0\",\n    \"ngx-colors\": \"^3.4.0\",\n    \"patch-package\": \"^6.5.0\",\n    \"runes\": \"^0.4.2\",\n    \"zmodem.js\": \"^0.1.9\"\n  },\n  \"peerDependencies\": {\n    \"@angular/animations\": \"^15\",\n    \"@angular/common\": \"^15\",\n    \"@angular/core\": \"^15\",\n    \"@angular/forms\": \"^15\",\n    \"@angular/platform-browser\": \"^15\",\n    \"@ng-bootstrap/ng-bootstrap\": \"^14\",\n    \"rxjs\": \"^7\",\n    \"tabby-core\": \"*\",\n    \"tabby-settings\": \"*\"\n  }\n}\n"
  },
  {
    "path": "tabby-terminal/patches/ansi-color+0.2.1.patch",
    "content": "diff --git a/node_modules/ansi-color/lib/ansi-color.js b/node_modules/ansi-color/lib/ansi-color.js\nindex 1062c87..4fc2847 100644\n--- a/node_modules/ansi-color/lib/ansi-color.js\n+++ b/node_modules/ansi-color/lib/ansi-color.js\n@@ -32,8 +32,8 @@ exports.set = function(str, color) {\n   var color_attrs = color.split(\"+\");\n   var ansi_str = \"\";\n   for(var i=0, attr; attr = color_attrs[i]; i++) {\n-    ansi_str += \"\\033[\" + ANSI_CODES[attr] + \"m\";\n+    ansi_str += \"\\x1b[\" + ANSI_CODES[attr] + \"m\";\n   }\n-  ansi_str += str + \"\\033[\" + ANSI_CODES[\"off\"] + \"m\";\n+  ansi_str += str + \"\\x1b[\" + ANSI_CODES[\"off\"] + \"m\";\n   return ansi_str;\n };\n"
  },
  {
    "path": "tabby-terminal/src/api/baseTerminalTab.component.ts",
    "content": "import { Observable, Subject, first, auditTime, debounce, interval } from 'rxjs'\nimport { Spinner } from 'cli-spinner'\nimport colors from 'ansi-colors'\nimport { NgZone, OnInit, OnDestroy, Injector, ViewChild, HostBinding, Input, ElementRef, InjectFlags, Component } from '@angular/core'\nimport { trigger, transition, style, animate, AnimationTriggerMetadata } from '@angular/animations'\nimport { AppService, ConfigService, BaseTabComponent, HostAppService, HotkeysService, NotificationsService, Platform, LogService, Logger, TabContextMenuItemProvider, SplitTabComponent, SubscriptionContainer, MenuItemOptions, PlatformService, HostWindowService, ResettableTimeout, TranslateService, ThemesService, FullyDefined } from 'tabby-core'\n\nimport { BaseSession } from '../session'\n\nimport { Frontend } from '../frontends/frontend'\nimport { XTermFrontend, XTermWebGLFrontend } from '../frontends/xtermFrontend'\nimport { ResizeEvent, BaseTerminalProfile } from './interfaces'\nimport { TerminalDecorator } from './decorator'\nimport { SearchPanelComponent } from '../components/searchPanel.component'\nimport { MultifocusService } from '../services/multifocus.service'\nimport { getTerminalBackgroundColor } from '../helpers'\n\n\nconst INACTIVE_TAB_UNLOAD_DELAY = 1000 * 30\nconst OSC_FOCUS_IN = Buffer.from('\\x1b[I')\nconst OSC_FOCUS_OUT = Buffer.from('\\x1b[O')\n\n/**\n * A class to base your custom terminal tabs on\n */\n@Component({ template: '' })\nexport class BaseTerminalTabComponent<P extends BaseTerminalProfile> extends BaseTabComponent implements OnInit, OnDestroy {\n    static template: string = require('../components/baseTerminalTab.component.pug')\n    static styles: string[] = [require('../components/baseTerminalTab.component.scss')]\n    static animations: AnimationTriggerMetadata[] = [\n        trigger('toolbarSlide', [\n            transition(':enter', [\n                style({\n                    transform: 'translateY(-25%)',\n                    opacity: '0',\n                }),\n                animate('100ms ease-out', style({\n                    transform: 'translateY(0%)',\n                    opacity: '1',\n                })),\n            ]),\n            transition(':leave', [\n                animate('100ms ease-out', style({\n                    transform: 'translateY(-25%)',\n                    opacity: '0',\n                })),\n            ]),\n        ]),\n        trigger('panelSlide', [\n            transition(':enter', [\n                style({\n                    transform: 'translateY(25%)',\n                    opacity: '0',\n                }),\n                animate('100ms ease-out', style({\n                    transform: 'translateY(0%)',\n                    opacity: '1',\n                })),\n            ]),\n            transition(':leave', [\n                animate('100ms ease-out', style({\n                    transform: 'translateY(25%)',\n                    opacity: '0',\n                })),\n            ]),\n        ]),\n    ]\n\n    session: BaseSession|null = null\n    savedState?: any\n    savedStateIsLive = false\n\n    @Input() zoom = 0\n\n    @Input() showSearchPanel = false\n\n    /** @hidden */\n    @ViewChild('content') content\n\n    /** @hidden */\n    @HostBinding('style.background-color') backgroundColor: string|null = null\n\n    /** @hidden */\n    @HostBinding('class.toolbar-enabled') enableToolbar = false\n\n    /** @hidden */\n    @HostBinding('class.toolbar-pinned') pinToolbar = false\n\n    /** @hidden */\n    @HostBinding('class.toolbar-revealed') revealToolbar = false\n\n    frontend?: Frontend\n\n    /** @hidden */\n    frontendIsReady = false\n\n    frontendReady = new Subject<void>()\n    size: ResizeEvent\n\n    profile: FullyDefined<P>\n\n    /**\n     * Enables normal passthrough from session output to terminal input\n     */\n    enablePassthrough = true\n\n    /**\n     * Disables display of dynamic window/tab title provided by the shell\n     */\n    disableDynamicTitle = false\n\n    alternateScreenActive = false\n\n    @ViewChild(SearchPanelComponent, { 'static': false }) searchPanel?: SearchPanelComponent\n\n    // Deps start\n    config: ConfigService\n    element: ElementRef\n    protected zone: NgZone\n    protected app: AppService\n    protected hostApp: HostAppService\n    protected hotkeys: HotkeysService\n    protected platform: PlatformService\n    protected notifications: NotificationsService\n    protected log: LogService\n    protected decorators: TerminalDecorator[] = []\n    protected contextMenuProviders: TabContextMenuItemProvider[]\n    protected hostWindow: HostWindowService\n    protected translate: TranslateService\n    protected multifocus: MultifocusService\n    protected themes: ThemesService\n    // Deps end\n\n    protected logger: Logger\n    protected output = new Subject<string>()\n    protected binaryOutput = new Subject<Buffer>()\n    protected sessionChanged = new Subject<BaseSession|null>()\n    protected recentInputs = ''\n    private bellPlayer: HTMLAudioElement\n    private termContainerSubscriptions = new SubscriptionContainer()\n    private sessionHandlers = new SubscriptionContainer()\n    private spinner = new Spinner({\n        stream: {\n            write: x => {\n                try {\n                    if (!this.frontend) {\n                        return\n                    }\n                    this.writeRaw(x)\n                } catch {\n                    this.spinner.stop()\n                }\n            },\n        },\n    })\n\n    private spinnerActive = false\n    private spinnerPaused = false\n    private toolbarRevealTimeout = new ResettableTimeout(() => {\n        this.revealToolbar = false\n    }, 1000)\n\n    private frontendWriteLock = Promise.resolve()\n\n    get input$ (): Observable<Buffer> {\n        if (!this.frontend) {\n            throw new Error('Frontend not ready')\n        }\n        return this.frontend.input$\n    }\n\n    get output$ (): Observable<string> { return this.output }\n    get binaryOutput$ (): Observable<Buffer> { return this.binaryOutput }\n\n    get resize$ (): Observable<ResizeEvent> {\n        if (!this.frontend) {\n            throw new Error('Frontend not ready')\n        }\n        return this.frontend.resize$\n    }\n\n    get alternateScreenActive$ (): Observable<boolean> {\n        if (!this.frontend) {\n            throw new Error('Frontend not ready')\n        }\n        return this.frontend.alternateScreenActive$\n    }\n\n    get frontendReady$ (): Observable<void> { return this.frontendReady }\n\n    get sessionChanged$ (): Observable<BaseSession|null> { return this.sessionChanged }\n\n    constructor (protected injector: Injector) {\n        super(injector)\n\n        this.config = injector.get(ConfigService)\n        this.element = injector.get(ElementRef)\n        this.zone = injector.get(NgZone)\n        this.app = injector.get(AppService)\n        this.hostApp = injector.get(HostAppService)\n        this.hotkeys = injector.get(HotkeysService)\n        this.platform = injector.get(PlatformService)\n        this.notifications = injector.get(NotificationsService)\n        this.log = injector.get(LogService)\n        this.decorators = injector.get<any>(TerminalDecorator, null, InjectFlags.Optional) as TerminalDecorator[]\n        this.contextMenuProviders = injector.get<any>(TabContextMenuItemProvider, null, InjectFlags.Optional) as TabContextMenuItemProvider[]\n        this.hostWindow = injector.get(HostWindowService)\n        this.translate = injector.get(TranslateService)\n        this.multifocus = injector.get(MultifocusService)\n        this.themes = injector.get(ThemesService)\n\n        this.logger = this.log.create('baseTerminalTab')\n        this.setTitle(this.translate.instant('Terminal'))\n\n        this.subscribeUntilDestroyed(this.hotkeys.unfilteredHotkey$, async hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n            if (hotkey === 'search') {\n                this.showSearchPanel = true\n                setImmediate(() => {\n                    const input = this.element.nativeElement.querySelector('.search-input')\n                    const selectedText = (this.frontend?.getSelection() ?? '').trim()\n                    if (input && selectedText.length) {\n                        input.value = selectedText\n                    }\n\n                    input?.focus()\n                    input?.select()\n                })\n            }\n        })\n\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, async hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n            switch (hotkey) {\n                case 'ctrl-c':\n                    if (this.frontend?.getSelection()) {\n                        this.frontend.copySelection()\n                        this.frontend.clearSelection()\n                        this.notifications.notice(this.translate.instant('Copied'))\n                    } else {\n                        this.forEachFocusedTerminalPane(tab => tab.sendInput('\\x03'))\n                    }\n                    break\n                case 'copy':\n                    this.frontend?.copySelection()\n                    this.frontend?.clearSelection()\n                    this.notifications.notice(this.translate.instant('Copied'))\n                    break\n                case 'paste':\n                    this.forEachFocusedTerminalPane(tab => tab.paste())\n                    break\n                case 'select-all':\n                    this.frontend?.selectAll()\n                    break\n                case 'clear':\n                    this.forEachFocusedTerminalPane(tab => tab.frontend?.clear())\n                    break\n                case 'zoom-in':\n                    this.forEachFocusedTerminalPane(tab => tab.zoomIn())\n                    break\n                case 'zoom-out':\n                    this.forEachFocusedTerminalPane(tab => tab.zoomOut())\n                    break\n                case 'reset-zoom':\n                    this.forEachFocusedTerminalPane(tab => tab.resetZoom())\n                    break\n                case 'previous-word':\n                    this.forEachFocusedTerminalPane(tab => {\n                        tab.sendInput({\n                            [Platform.Windows]: '\\x1b[1;5D',\n                            [Platform.macOS]: '\\x1bb',\n                            [Platform.Linux]: '\\x1bb',\n                        }[this.hostApp.platform])\n                    })\n                    break\n                case 'next-word':\n                    this.forEachFocusedTerminalPane(tab => {\n                        tab.sendInput({\n                            [Platform.Windows]: '\\x1b[1;5C',\n                            [Platform.macOS]: '\\x1bf',\n                            [Platform.Linux]: '\\x1bf',\n                        }[this.hostApp.platform])\n                    })\n                    break\n                case 'delete-line':\n                    this.forEachFocusedTerminalPane(tab => {\n                        tab.sendInput('\\x1bw')\n                    })\n                    break\n                case 'delete-previous-word':\n                    this.forEachFocusedTerminalPane(tab => {\n                        tab.sendInput('\\u0017')\n                    })\n                    break\n                case 'delete-next-word':\n                    this.forEachFocusedTerminalPane(tab => {\n                        tab.sendInput({\n                            [Platform.Windows]: '\\x1bd\\x1b[3;5~',\n                            [Platform.macOS]: '\\x1bd',\n                            [Platform.Linux]: '\\x1bd',\n                        }[this.hostApp.platform])\n                    })\n                    break\n                case 'copy-current-path':\n                    this.copyCurrentPath()\n                    break\n                case 'scroll-to-top':\n                    this.frontend?.scrollToTop()\n                    break\n                case 'scroll-page-up':\n                    this.frontend?.scrollPages(-1)\n                    break\n                case 'scroll-up':\n                    this.frontend?.scrollLines(-1)\n                    break\n                case 'scroll-down':\n                    this.frontend?.scrollLines(1)\n                    break\n                case 'scroll-page-down':\n                    this.frontend?.scrollPages(1)\n                    break\n                case 'scroll-to-bottom':\n                    this.frontend?.scrollToBottom()\n                    break\n            }\n        })\n\n        this.bellPlayer = document.createElement('audio')\n        this.bellPlayer.src = require('../bell.ogg')\n        this.bellPlayer.load()\n\n        this.contextMenuProviders.sort((a, b) => a.weight - b.weight)\n    }\n\n    /** @hidden */\n    ngOnInit (): void {\n        this.pinToolbar = this.enableToolbar && (window.localStorage.pinTerminalToolbar ?? 'true') === 'true'\n\n        this.focused$.subscribe(() => {\n            this.configure()\n            this.frontend?.focus()\n        })\n\n        this.subscribeUntilDestroyed(this.platform.themeChanged$, () => {\n            this.configure()\n        })\n\n        // Check if the the WebGL renderer is compatible with xterm.js:\n        // - https://github.com/Eugeny/tabby/issues/8884\n        // - https://github.com/microsoft/vscode/issues/190195\n        // - https://github.com/xtermjs/xterm.js/issues/4665\n        // - https://bugs.chromium.org/p/chromium/issues/detail?id=1476475\n        //\n        // Inspired by https://github.com/microsoft/vscode/pull/191795\n\n        let enable8884Workarround = false\n        const checkCanvas = document.createElement('canvas')\n        const checkGl = checkCanvas.getContext('webgl2')\n        const debugInfo = checkGl?.getExtension('WEBGL_debug_renderer_info')\n        if (checkGl && debugInfo) {\n            const renderer = checkGl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)\n            if (renderer.startsWith('ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero)')) {\n                enable8884Workarround = true\n            }\n        }\n\n        const cls: new (..._) => Frontend = enable8884Workarround ? XTermFrontend : {\n            xterm: XTermFrontend,\n            'xterm-webgl': XTermWebGLFrontend,\n        }[this.config.store.terminal.frontend] ?? XTermFrontend\n        this.frontend = new cls(this.injector)\n\n        this.frontendReady$.pipe(first()).subscribe(() => {\n            this.onFrontendReady()\n        })\n\n        this.frontend.resize$.pipe(first()).subscribe(async ({ columns, rows }) => {\n            this.size = { columns, rows }\n            this.frontendReady.next()\n            this.frontendReady.complete()\n\n            this.config.enabledServices(this.decorators).forEach(decorator => {\n                try {\n                    decorator.attach(this)\n                } catch (e) {\n                    this.logger.warn('Decorator attach() throws', e)\n                }\n            })\n\n            setTimeout(() => {\n                this.session?.resize(columns, rows)\n            }, 1000)\n\n            this.session?.releaseInitialDataBuffer()\n            this.sessionChanged$.subscribe(() => {\n                this.session?.releaseInitialDataBuffer()\n            })\n        })\n\n        this.alternateScreenActive$.subscribe(x => {\n            this.alternateScreenActive = x\n        })\n\n        setImmediate(async () => {\n            if (this.hasFocus) {\n                await this.frontend?.attach(this.content.nativeElement, this.profile)\n                this.frontend?.configure(this.profile)\n            } else {\n                this.focused$.pipe(first()).subscribe(async () => {\n                    await this.frontend?.attach(this.content.nativeElement, this.profile)\n                    this.frontend?.configure(this.profile)\n                })\n            }\n        })\n\n        this.attachTermContainerHandlers()\n\n        this.configure()\n\n        setTimeout(() => {\n            this.binaryOutput$.subscribe(() => {\n                this.displayActivity()\n            })\n        }, 1000)\n\n        this.frontend.bell$.subscribe(() => {\n            if (this.config.store.terminal.bell === 'visual') {\n                this.frontend?.visualBell()\n            }\n            if (this.config.store.terminal.bell === 'audible') {\n                this.bellPlayer.play()\n            }\n        })\n\n        this.frontend.focus()\n\n        this.blurred$.subscribe(() => {\n            this.multifocus.cancel()\n        })\n\n        this.visibility$\n            .pipe(debounce(visibility => interval(visibility ? 0 : INACTIVE_TAB_UNLOAD_DELAY)))\n            .subscribe(visibility => {\n                if (this.frontend instanceof XTermFrontend) {\n                    if (visibility) {\n                        this.frontend.xterm.refresh(0, this.frontend.xterm.rows - 1)\n                    } else {\n                        this.frontend.xterm.element?.querySelectorAll('canvas').forEach(c => {\n                            c.height = c.width = 0\n                            c.style.height = c.style.width = '0px'\n                        })\n                    }\n                }\n            })\n    }\n\n    protected onFrontendReady (): void {\n        this.frontendIsReady = true\n        if (this.savedState) {\n            this.frontend!.restoreState(this.savedState)\n            if (!this.savedStateIsLive) {\n                this.frontend!.write('\\r\\n\\r\\n')\n                this.frontend!.write(colors.bgWhite.black(' * ') + colors.bgBlackBright.white(' History restored '))\n                this.frontend!.write('\\r\\n\\r\\n')\n            }\n        }\n\n        this.input$.subscribe(data => {\n            this.recentInputs += data\n            this.recentInputs = this.recentInputs.substring(this.recentInputs.length - 32)\n        })\n    }\n\n    async buildContextMenu (): Promise<MenuItemOptions[]> {\n        let items: MenuItemOptions[] = []\n        for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this)))) {\n            items = items.concat(section)\n            items.push({ type: 'separator' })\n        }\n        items.splice(items.length - 1, 1)\n        return items\n    }\n\n    /**\n     * Feeds input into the active session\n     */\n    sendInput (data: string|Buffer): void {\n        if (!(data instanceof Buffer)) {\n            data = Buffer.from(data, 'utf-8')\n        }\n        this.session?.feedFromTerminal(data)\n        if (this.config.store.terminal.scrollOnInput && !data.equals(OSC_FOCUS_IN) && !data.equals(OSC_FOCUS_OUT)) {\n            this.frontend?.scrollToBottom()\n        }\n    }\n\n    /**\n     * Feeds input into the terminal frontend\n     */\n    async write (data: string): Promise<void> {\n        this.frontendWriteLock = this.frontendWriteLock.then(() =>\n            this.withSpinnerPaused(() => this.writeRaw(data)))\n        await this.frontendWriteLock\n    }\n\n    protected async writeRaw (data: string): Promise<void> {\n        if (!this.frontend) {\n            throw new Error('Frontend not ready')\n        }\n\n        if (this.config.store.terminal.detectProgress) {\n            const percentageMatch = /(^|[^\\d])(\\d+(\\.\\d+)?)%([^\\d]|$)/.exec(data)\n            if (!this.alternateScreenActive && percentageMatch) {\n                const percentage = percentageMatch[3] ? parseFloat(percentageMatch[2]) : parseInt(percentageMatch[2])\n                if (percentage > 0 && percentage <= 100) {\n                    this.setProgress(percentage)\n                }\n            } else {\n                this.setProgress(null)\n            }\n        }\n\n        await this.frontend.write(data)\n    }\n\n    async paste (): Promise<void> {\n        let data = this.platform.readClipboard()\n        if (this.hostApp.platform === Platform.Windows) {\n            data = data.replaceAll('\\r\\n', '\\r')\n        } else {\n            data = data.replaceAll('\\n', '\\r')\n        }\n\n        if (this.config.store.terminal.trimWhitespaceOnPaste && data.indexOf('\\n') === data.length - 1) {\n            // Ends with a newline and has no other line breaks\n            data = data.substring(0, data.length - 1)\n        }\n\n        if (!this.alternateScreenActive) {\n            if ((data.includes('\\r') || data.includes('\\n')) && this.config.store.terminal.warnOnMultilinePaste) {\n                const buttons = [\n                    this.translate.instant('Paste'),\n                    this.translate.instant('Cancel'),\n                ]\n                const result = (await this.platform.showMessageBox(\n                    {\n                        type: 'warning',\n                        detail: data.slice(0, 1000),\n                        message: this.translate.instant('Paste multiple lines?'),\n                        buttons,\n                        defaultId: 0,\n                        cancelId: 1,\n                    },\n                )).response\n                if (result === 1) {\n                    return\n                }\n            } else {\n                if (this.config.store.terminal.trimWhitespaceOnPaste) {\n                    data = data.trimEnd()\n                    if (!data.includes('\\r')) {\n                        data = data.trimStart()\n                    }\n                }\n            }\n        }\n\n        if (this.config.store.terminal.bracketedPaste && this.frontend?.supportsBracketedPaste()) {\n            data = `\\x1b[200~${data}\\x1b[201~`\n        }\n        this.sendInput(data)\n    }\n\n    /**\n     * Applies the user settings to the terminal\n     */\n    configure (): void {\n        this.frontend?.configure(this.profile)\n\n        this.backgroundColor = getTerminalBackgroundColor(this.config, this.themes, this.profile.terminalColorScheme)\n    }\n\n    zoomIn (): void {\n        this.zoom++\n        this.frontend?.setZoom(this.zoom)\n    }\n\n    zoomOut (): void {\n        this.zoom--\n        this.frontend?.setZoom(this.zoom)\n    }\n\n    resetZoom (): void {\n        this.zoom = 0\n        this.frontend?.setZoom(this.zoom)\n    }\n\n    async copyCurrentPath (): Promise<void> {\n        let cwd: string|null = null\n        if (this.session?.supportsWorkingDirectory()) {\n            cwd = await this.session.getWorkingDirectory()\n        }\n        if (cwd) {\n            this.platform.setClipboard({ text: cwd })\n            this.notifications.notice(this.translate.instant('Copied'))\n        } else {\n            this.notifications.error(this.translate.instant('Shell does not support current path detection'))\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy (): void {\n        super.ngOnDestroy()\n        this.stopSpinner()\n    }\n\n    async destroy (): Promise<void> {\n        this.frontend?.detach(this.content.nativeElement)\n        this.frontend?.destroy()\n        this.frontend = undefined\n        this.content.nativeElement.remove()\n        this.detachTermContainerHandlers()\n        this.config.enabledServices(this.decorators).forEach(decorator => {\n            try {\n                decorator.detach(this)\n            } catch (e) {\n                this.logger.warn('Decorator attach() throws', e)\n            }\n        })\n        this.output.complete()\n        this.binaryOutput.complete()\n        this.frontendReady.complete()\n\n        super.destroy()\n        if (this.session?.open) {\n            await this.session.destroy()\n        }\n    }\n\n    protected detachTermContainerHandlers (): void {\n        this.termContainerSubscriptions.cancelAll()\n    }\n\n    private rightMouseDownTime = 0\n\n    protected async handleRightMouseDown (event: MouseEvent): Promise<void> {\n        event.preventDefault()\n        event.stopPropagation()\n        this.rightMouseDownTime = Date.now()\n        if (this.config.store.terminal.rightClick === 'menu') {\n            this.platform.popupContextMenu(await this.buildContextMenu(), event)\n        }\n    }\n\n    protected async handleRightMouseUp (event: MouseEvent): Promise<void> {\n        event.preventDefault()\n        event.stopPropagation()\n        if (this.config.store.terminal.rightClick === 'paste'\n            || this.config.store.terminal.rightClick === 'clipboard') {\n            const duration = Date.now() - this.rightMouseDownTime\n            if (duration < 250) {\n                if (this.config.store.terminal.rightClick === 'paste') {\n                    this.paste()\n                } else if (this.config.store.terminal.rightClick === 'clipboard') {\n                    if (this.frontend?.getSelection()) {\n                        this.frontend.copySelection()\n                        this.frontend.clearSelection()\n                    } else {\n                        this.paste()\n                    }\n                }\n            } else {\n                this.platform.popupContextMenu(await this.buildContextMenu(), event)\n            }\n        }\n    }\n\n    protected attachTermContainerHandlers (): void {\n        this.detachTermContainerHandlers()\n\n        if (!this.frontend) {\n            throw new Error('Frontend not ready')\n        }\n\n        const maybeConfigure = () => {\n            if (this.hasFocus) {\n                setTimeout(() => this.configure(), 250)\n            }\n        }\n\n        this.termContainerSubscriptions.subscribe(this.frontend.title$, title => this.zone.run(() => {\n            if (!this.disableDynamicTitle) {\n                this.setTitle(title)\n            }\n        }))\n\n        this.termContainerSubscriptions.subscribe(this.focused$, () => this.frontend && (this.frontend.enableResizing = true))\n        this.termContainerSubscriptions.subscribe(this.blurred$, () => this.frontend && (this.frontend.enableResizing = false))\n\n        this.termContainerSubscriptions.subscribe(this.frontend.mouseEvent$, event => {\n            if (event.type === 'mousedown') {\n                if (event.which === 1) {\n                    this.multifocus.cancel()\n                }\n                if (event.which === 2) {\n                    if (this.config.store.terminal.pasteOnMiddleClick) {\n                        this.paste()\n                    }\n                    event.preventDefault()\n                    event.stopPropagation()\n                    return\n                }\n                if (event.which === 3 || event.which === 1 && event.ctrlKey) {\n                    this.handleRightMouseDown(event)\n                    return\n                }\n            }\n            if (event.type === 'mouseup') {\n                if (event.which === 3 || event.which === 1 && event.ctrlKey) {\n                    this.handleRightMouseUp(event)\n                    return\n                }\n            }\n            if (event.type === 'mousewheel') {\n                let wheelDeltaY = 0\n\n                if ('wheelDeltaY' in event) {\n                    wheelDeltaY = (event as unknown as WheelEvent)['wheelDeltaY']\n                } else {\n                    wheelDeltaY = (event as unknown as WheelEvent).deltaY\n                }\n\n                if (event.altKey) {\n                    event.preventDefault()\n                    const delta = Math.round(wheelDeltaY / 50)\n                    this.sendInput((delta > 0 ? '\\u001bOA' : '\\u001bOB').repeat(Math.abs(delta)))\n                }\n            }\n        })\n\n        this.termContainerSubscriptions.subscribe(this.frontend.input$, data => {\n            this.sendInput(data)\n        })\n\n        this.termContainerSubscriptions.subscribe(this.frontend.resize$.pipe(auditTime(100)), ({ columns, rows }) => {\n            this.logger.debug(`Resizing to ${columns}x${rows}`)\n            this.size = { columns, rows }\n            this.zone.run(() => {\n                if (this.session?.open) {\n                    this.session.resize(columns, rows)\n                }\n            })\n        })\n\n        this.termContainerSubscriptions.subscribe(this.platform.displayMetricsChanged$, maybeConfigure)\n        this.termContainerSubscriptions.subscribe(this.hostWindow.windowMoved$, maybeConfigure)\n    }\n\n    setSession (session: BaseSession|null, destroyOnSessionClose = false): void {\n        if (session) {\n            if (this.session) {\n                this.setSession(null)\n            }\n            this.detachSessionHandlers()\n            this.session = session\n            this.attachSessionHandlers(destroyOnSessionClose)\n        } else {\n            this.detachSessionHandlers()\n            this.session = null\n        }\n        this.sessionChanged.next(session)\n    }\n\n    showToolbar (): void {\n        this.revealToolbar = true\n        this.toolbarRevealTimeout.clear()\n    }\n\n    hideToolbar (): void {\n        this.toolbarRevealTimeout.set()\n    }\n\n    togglePinToolbar (): void {\n        this.pinToolbar = !this.pinToolbar\n        window.localStorage.pinTerminalToolbar = this.pinToolbar\n    }\n\n    @HostBinding('class.with-title-inset') get hasTitleInset (): boolean {\n        return this.hostApp.platform === Platform.macOS && this.config.store.appearance.tabsLocation !== 'top' && this.config.store.appearance.frame === 'thin'\n    }\n\n    protected attachSessionHandler <T> (observable: Observable<T>, handler: (v: T) => void): void {\n        this.sessionHandlers.subscribe(observable, handler)\n    }\n\n    protected attachSessionHandlers (destroyOnSessionClose = false): void {\n        if (!this.session) {\n            throw new Error('Session not set')\n        }\n\n        // this.session.output$.bufferTime(10).subscribe((datas) => {\n        this.attachSessionHandler(this.session.output$, data => {\n            if (this.enablePassthrough) {\n                this.output.next(data)\n                this.write(data)\n            }\n        })\n\n        this.attachSessionHandler(this.session.binaryOutput$, data => {\n            if (this.enablePassthrough) {\n                this.binaryOutput.next(data)\n            }\n        })\n\n        this.attachSessionHandler(this.session.closed$, () => {\n            this.onSessionClosed(destroyOnSessionClose)\n        })\n\n        this.attachSessionHandler(this.session.destroyed$, () => {\n            this.onSessionDestroyed()\n        })\n    }\n\n    /**\n     * Method called when session is closed.\n     */\n    protected onSessionClosed (destroyOnSessionClose = false): void {\n        if (destroyOnSessionClose || this.shouldTabBeDestroyedOnSessionClose()) {\n            this.destroy()\n        }\n    }\n\n    /**\n     * Return true if tab should be destroyed on session closed.\n     */\n    protected shouldTabBeDestroyedOnSessionClose (): boolean {\n        const behavior = this.profile.behaviorOnSessionEnd\n        return behavior === 'close' || behavior === 'auto' && this.isSessionExplicitlyTerminated()\n    }\n\n    /**\n     * Method called when session is destroyed. Set the session to null\n     */\n    protected onSessionDestroyed (): void {\n        this.setSession(null)\n    }\n\n    protected detachSessionHandlers (): void {\n        this.sessionHandlers.cancelAll()\n    }\n\n    protected startSpinner (text?: string): void {\n        if (this.spinnerActive || this.spinnerPaused) {\n            return\n        }\n        if (text) {\n            this.spinner.text = text\n        }\n        this.spinner.setSpinnerString(6)\n        this.spinnerActive = true\n        this.zone.runOutsideAngular(() => {\n            this.spinner.start()\n        })\n    }\n\n    protected stopSpinner (): void {\n        if (!this.spinnerActive) {\n            return\n        }\n        this.spinner.stop(true)\n        this.spinnerActive = false\n    }\n\n    protected async withSpinnerPaused (work: () => any): Promise<void> {\n        this.spinnerPaused = true\n        if (this.spinnerActive) {\n            this.spinner.stop(true)\n        }\n        try {\n            await work()\n        } finally {\n            this.spinnerPaused = false\n            if (this.spinnerActive) {\n                this.zone.runOutsideAngular(() => {\n                    this.spinner.start()\n                })\n            }\n        }\n    }\n\n    protected forEachFocusedTerminalPane (cb: (tab: BaseTerminalTabComponent<any>) => void): void {\n        if (this.parent && this.parent instanceof SplitTabComponent && this.parent._allFocusMode) {\n            for (const tab of this.parent.getAllTabs()) {\n                if (tab instanceof BaseTerminalTabComponent) {\n                    cb(tab)\n                }\n            }\n        } else {\n            cb(this)\n        }\n    }\n\n    /**\n     * Return true if the user explicitly exit the session\n     */\n    protected isSessionExplicitlyTerminated (): boolean {\n        return false\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/api/colorSchemeProvider.ts",
    "content": "import { TerminalColorScheme } from './interfaces'\n\n/**\n * Extend to add more terminal color schemes\n */\nexport abstract class TerminalColorSchemeProvider {\n    abstract getSchemes (): Promise<TerminalColorScheme[]>\n}\n"
  },
  {
    "path": "tabby-terminal/src/api/connectableTerminalTab.component.ts",
    "content": "import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\n\nimport { Injector, Component } from '@angular/core'\n\nimport { first } from 'rxjs'\n\nimport { ConnectableTerminalProfile } from './interfaces'\nimport { BaseTerminalTabComponent } from './baseTerminalTab.component'\nimport { GetRecoveryTokenOptions, RecoveryToken } from 'tabby-core'\n\n\n/**\n * A class to base your custom connectable terminal tabs on\n */\n@Component({ template: '' })\nexport abstract class ConnectableTerminalTabComponent<P extends ConnectableTerminalProfile> extends BaseTerminalTabComponent<P> {\n\n    protected reconnectOffered = false\n    protected isDisconnectedByHand = false\n\n    constructor (protected injector: Injector) {\n        super(injector)\n\n        this.subscribeUntilDestroyed(this.hotkeys.hotkey$, hotkey => {\n            if (!this.hasFocus) {\n                return\n            }\n\n            switch (hotkey) {\n                case 'reconnect-tab':\n                    this.reconnect()\n                    this.notifications.notice(this.translate.instant('Reconnect'))\n                    break\n                case 'disconnect-tab':\n                    this.disconnect()\n                    this.notifications.notice(this.translate.instant('Disconnect'))\n                    break\n            }\n        })\n    }\n\n    ngOnInit (): void {\n        this.logger = this.log.create(`${this.profile.type}Tab`)\n\n        super.ngOnInit()\n    }\n\n    protected onFrontendReady (): void {\n        this.initializeSession().then(() => {\n            this.clearServiceMessagesOnConnect()\n        })\n        super.onFrontendReady()\n    }\n\n    /**\n    * Initialize Connectable Session.\n    * Set reconnectOffered to false\n    */\n    async initializeSession (): Promise<void> {\n        this.reconnectOffered = false\n        this.isDisconnectedByHand = false\n    }\n\n    /**\n    * Method called when session is destroyed. Handle the tab behavior on session end for connectable tab\n    */\n    protected onSessionDestroyed (): void {\n        super.onSessionDestroyed()\n\n        if (this.frontend) {\n            if (this.profile.behaviorOnSessionEnd === 'reconnect' && !this.isDisconnectedByHand) {\n                this.reconnect()\n            } else if (this.profile.behaviorOnSessionEnd === 'keep' || !this.shouldTabBeDestroyedOnSessionClose()) {\n                this.offerReconnection()\n            }\n        }\n    }\n\n    /**\n    * Offering reconnection to the user if it hasn't been done yet.\n    * Set reconnectOffered to true\n    */\n    offerReconnection (): void {\n        if (!this.reconnectOffered) {\n            this.reconnectOffered = true\n            this.write(this.translate.instant(_('Press any key to reconnect')) + '\\r\\n')\n            this.input$.pipe(first()).subscribe(() => {\n                if (!this.session?.open && this.reconnectOffered) {\n                    this.reconnect()\n                }\n            })\n        }\n    }\n\n    /**\n     * Return true if tab should be destroyed on session closed.\n     */\n    protected shouldTabBeDestroyedOnSessionClose (): boolean {\n        if (this.isDisconnectedByHand) {\n            return false\n        }\n        return super.shouldTabBeDestroyedOnSessionClose()\n    }\n\n    async getRecoveryToken (options?: GetRecoveryTokenOptions): Promise<RecoveryToken> {\n        return {\n            type: `app:${this.profile.type}-tab`,\n            profile: this.profile,\n            savedState: options?.includeState && this.frontend?.saveState(),\n        }\n    }\n\n    async disconnect (): Promise<void> {\n        this.isDisconnectedByHand = true\n        await this.session?.destroy()\n    }\n\n    async reconnect (): Promise<void> {\n        this.session?.destroy()\n        await this.initializeSession()\n        this.clearServiceMessagesOnConnect()\n        this.session?.releaseInitialDataBuffer()\n    }\n\n    private clearServiceMessagesOnConnect (): void {\n        if (this.profile.clearServiceMessagesOnConnect && this.session?.open) {\n            this.frontend?.clear()\n        }\n    }\n\n}\n"
  },
  {
    "path": "tabby-terminal/src/api/contextMenuProvider.ts",
    "content": "import type { MenuItemOptions } from 'tabby-core'\nimport { BaseTerminalTabComponent } from './baseTerminalTab.component'\n\n/**\n * Extend to add more terminal context menu items\n * @deprecated\n */\nexport abstract class TerminalContextMenuItemProvider {\n    weight: number\n\n    abstract getItems (tab: BaseTerminalTabComponent<any>): Promise<MenuItemOptions[]>\n}\n"
  },
  {
    "path": "tabby-terminal/src/api/decorator.ts",
    "content": "import { Subscription } from 'rxjs'\nimport { BaseTerminalTabComponent } from './baseTerminalTab.component'\n\n/**\n * Extend to automatically run actions on new terminals\n */\nexport abstract class TerminalDecorator {\n    private smartSubscriptions = new Map<BaseTerminalTabComponent<any>, Subscription[]>()\n\n    /**\n     * Called when a new terminal tab starts\n     */\n    attach (terminal: BaseTerminalTabComponent<any>): void { } // eslint-disable-line\n\n    /**\n     * Called before a terminal tab is destroyed.\n     * Make sure to call super()\n     */\n    detach (terminal: BaseTerminalTabComponent<any>): void {\n        for (const s of this.smartSubscriptions.get(terminal) ?? []) {\n            s.unsubscribe()\n        }\n        this.smartSubscriptions.delete(terminal)\n    }\n\n    /**\n     * Automatically cancel @subscription once detached from @terminal\n     */\n    protected subscribeUntilDetached (terminal: BaseTerminalTabComponent<any>, subscription?: Subscription): void {\n        if (!subscription) {\n            return\n        }\n        if (!this.smartSubscriptions.has(terminal)) {\n            this.smartSubscriptions.set(terminal, [])\n        }\n        this.smartSubscriptions.get(terminal)?.push(subscription)\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/api/interfaces.ts",
    "content": "import { ConnectableProfile, Profile } from 'tabby-core'\n\nexport interface ResizeEvent {\n    columns: number\n    rows: number\n}\n\nexport interface TerminalColorScheme {\n    name: string\n    foreground: string\n    background: string\n    cursor: string\n    colors: string[]\n    selection?: string\n    selectionForeground?: string\n    cursorAccent?: string\n}\n\nexport interface BaseTerminalProfile extends Profile {\n    terminalColorScheme: TerminalColorScheme | null\n}\n\nexport interface ConnectableTerminalProfile extends BaseTerminalProfile, ConnectableProfile {}\n"
  },
  {
    "path": "tabby-terminal/src/api/middleware.ts",
    "content": "import { Subject, Observable } from 'rxjs'\nimport { SubscriptionContainer } from 'tabby-core'\n\nexport class SessionMiddleware {\n    get outputToSession$ (): Observable<Buffer> { return this.outputToSession }\n    get outputToTerminal$ (): Observable<Buffer> { return this.outputToTerminal }\n\n    protected outputToSession = new Subject<Buffer>()\n    protected outputToTerminal = new Subject<Buffer>()\n\n    feedFromSession (data: Buffer): void {\n        this.outputToTerminal.next(data)\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        this.outputToSession.next(data)\n    }\n\n    close (): void {\n        this.outputToSession.complete()\n        this.outputToTerminal.complete()\n    }\n}\n\nexport class SessionMiddlewareStack extends SessionMiddleware {\n    private stack: SessionMiddleware[] = []\n    private subs = new SubscriptionContainer()\n\n    constructor () {\n        super()\n        this.push(new SessionMiddleware())\n    }\n\n    push (middleware: SessionMiddleware): void {\n        this.stack.push(middleware)\n        this.relink()\n    }\n\n    unshift (middleware: SessionMiddleware): void {\n        this.stack.unshift(middleware)\n        this.relink()\n    }\n\n    remove (middleware: SessionMiddleware): void {\n        this.stack = this.stack.filter(m => m !== middleware)\n        this.relink()\n    }\n\n    replace (middleware: SessionMiddleware, newMiddleware: SessionMiddleware): void {\n        const index = this.stack.indexOf(middleware)\n        if (index >= 0) {\n            this.stack[index].close()\n            this.stack[index] = newMiddleware\n        } else {\n            this.stack.push(newMiddleware)\n        }\n        this.relink()\n    }\n\n    feedFromSession (data: Buffer): void {\n        this.stack[0].feedFromSession(data)\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        this.stack[this.stack.length - 1].feedFromTerminal(data)\n    }\n\n    close (): void {\n        for (const m of this.stack) {\n            m.close()\n        }\n        this.subs.cancelAll()\n        super.close()\n    }\n\n    private relink () {\n        this.subs.cancelAll()\n\n        for (let i = 0; i < this.stack.length - 1; i++) {\n            this.subs.subscribe(\n                this.stack[i].outputToTerminal$,\n                x => this.stack[i + 1].feedFromSession(x),\n            )\n        }\n        this.subs.subscribe(\n            this.stack[this.stack.length - 1].outputToTerminal$,\n            x => this.outputToTerminal.next(x),\n        )\n\n        for (let i = this.stack.length - 2; i >= 0; i--) {\n            this.subs.subscribe(\n                this.stack[i + 1].outputToSession$,\n                x => this.stack[i].feedFromTerminal(x),\n            )\n        }\n        this.subs.subscribe(\n            this.stack[0].outputToSession$,\n            x => this.outputToSession.next(x),\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/cli.ts",
    "content": "import shellQuote from 'shell-quote'\nimport { Injectable } from '@angular/core'\nimport { CLIHandler, CLIEvent, AppService, HostWindowService } from 'tabby-core'\nimport { BaseTerminalTabComponent } from './api/baseTerminalTab.component'\n\n@Injectable()\nexport class TerminalCLIHandler extends CLIHandler {\n    firstMatchOnly = true\n    priority = 0\n\n    constructor (\n        private app: AppService,\n        private hostWindow: HostWindowService,\n    ) {\n        super()\n    }\n\n    async handle (event: CLIEvent): Promise<boolean> {\n        const op = event.argv._[0]\n\n        if (op === 'paste') {\n            let text = event.argv.text!\n            if (event.argv.escape!) {\n                text = shellQuote.quote([text])\n            }\n            this.handlePaste(text)\n            return true\n        }\n\n        return false\n    }\n\n    private handlePaste (text: string) {\n        if (this.app.activeTab instanceof BaseTerminalTabComponent && this.app.activeTab.session) {\n            this.app.activeTab.sendInput(text)\n            this.hostWindow.bringToFront()\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/colorSchemes.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { TerminalColorScheme } from './api/interfaces'\nimport { TerminalColorSchemeProvider } from './api/colorSchemeProvider'\n\n@Injectable({ providedIn: 'root' })\nexport class DefaultColorSchemes extends TerminalColorSchemeProvider {\n    static defaultColorScheme: TerminalColorScheme = {\n        name: 'Tabby Default',\n        foreground: '#cacaca',\n        background: '#171717',\n        cursor: '#bbbbbb',\n        colors: [\n            '#000000',\n            '#ff615a',\n            '#b1e969',\n            '#ebd99c',\n            '#5da9f6',\n            '#e86aff',\n            '#82fff7',\n            '#dedacf',\n            '#313131',\n            '#f58c80',\n            '#ddf88f',\n            '#eee5b2',\n            '#a5c7ff',\n            '#ddaaff',\n            '#b7fff9',\n            '#ffffff',\n        ],\n        selection: undefined,\n        cursorAccent: undefined,\n    }\n\n    static defaultLightColorScheme: TerminalColorScheme = {\n        name: 'Tabby Default Light',\n        foreground: '#4d4d4c',\n        background: '#ffffff',\n        cursor: '#4d4d4c',\n        colors: [\n            '#000000',\n            '#c82829',\n            '#718c00',\n            '#eab700',\n            '#4271ae',\n            '#8959a8',\n            '#3e999f',\n            '#ffffff',\n            '#000000',\n            '#c82829',\n            '#718c00',\n            '#eab700',\n            '#4271ae',\n            '#8959a8',\n            '#3e999f',\n            '#ffffff',\n        ],\n        selection: undefined,\n        cursorAccent: undefined,\n    }\n\n    async getSchemes (): Promise<TerminalColorScheme[]> {\n        return [\n            DefaultColorSchemes.defaultColorScheme,\n            DefaultColorSchemes.defaultLightColorScheme,\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/appearanceSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Appearance\n.form-line\n    .header\n        .title(translate) Font\n\n    .input-group.w-75\n        input.form-control(\n            type='text',\n            [ngbTypeahead]='fontAutocomplete',\n            [(ngModel)]='config.store.terminal.font',\n            (ngModelChange)='config.save()',\n        )\n        input.form-control.font-size-input(\n            type='number',\n            max='48',\n            [(ngModel)]='config.store.terminal.fontSize',\n            (ngModelChange)='fixFontSize(); config.save()',\n        )\n\n.row\n    .col-12.col-md-6\n        .form-line\n            .header\n                .title(translate) Enable font ligatures\n            toggle(\n                [(ngModel)]='config.store.terminal.ligatures',\n                (ngModelChange)='config.save()',\n            )\n\n        .form-line\n            .header\n                .title(translate) Normal font weight\n            input.form-control(\n                type='number',\n                min='100',\n                max='900',\n                step='100',\n                [(ngModel)]='config.store.terminal.fontWeight',\n                (ngModelChange)='config.save()'\n            )\n\n        .form-line\n            .header\n                .title(translate) Bold font weight\n            input.form-control(\n                type='number',\n                min='100',\n                max='900',\n                step='100',\n                [(ngModel)]='config.store.terminal.fontWeightBold',\n                (ngModelChange)='config.save()'\n            )\n\n    .col-12.col-md-6\n        color-scheme-preview([scheme]='config.store.terminal.colorScheme', [fontPreview]='true')\n\n.content-box\n    .form-line(*ngIf='!themes.findCurrentTheme().followsColorScheme')\n        .header\n            .title(translate) Terminal background\n\n        .btn-group(role='group')\n            input.btn-check(\n                type='radio',\n                name='background',\n                [(ngModel)]='config.store.terminal.background',\n                (ngModelChange)='config.save()',\n                id='backgroundTheme',\n                [value]='\"theme\"'\n            )\n            label.btn.btn-secondary(\n                for='backgroundTheme'\n            )\n                span(translate) From theme\n            input.btn-check(\n                type='radio',\n                name='background',\n                [(ngModel)]='config.store.terminal.background',\n                (ngModelChange)='config.save()',\n                id='backgroundColorScheme',\n                [value]='\"colorScheme\"'\n            )\n            label.btn.btn-secondary(\n                for='backgroundColorScheme'\n            )\n                span(translate) From color scheme\n\n    .form-line\n        .header\n            .title(translate) Cursor shape\n\n        .btn-group(role='group')\n            input.btn-check(\n                type='radio',\n                name='cursor',\n                [(ngModel)]='config.store.terminal.cursor',\n                (ngModelChange)='config.save()',\n                id='cursorBlock',\n                [value]='\"block\"'\n            )\n            label.btn.btn-secondary(\n                for='cursorBlock'\n            )\n                | █\n            input.btn-check(\n                type='radio',\n                name='cursor',\n                [(ngModel)]='config.store.terminal.cursor',\n                (ngModelChange)='config.save()',\n                id='cursorBeam',\n                [value]='\"beam\"'\n            )\n            label.btn.btn-secondary(\n                for='cursorBeam'\n            )\n                | |\n            input.btn-check(\n                type='radio',\n                name='cursor',\n                [(ngModel)]='config.store.terminal.cursor',\n                (ngModelChange)='config.save()',\n                id='cursorUnderline',\n                [value]='\"underline\"'\n            )\n            label.btn.btn-secondary(\n                for='cursorUnderline'\n            )\n                | ▁\n\n    .form-line\n        .header\n            .title(translate) Blink cursor\n\n        toggle(\n            [(ngModel)]='config.store.terminal.cursorBlink',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Minimum contrast ratio\n        input.form-control(\n            type='number',\n            min='1',\n            max='21',\n            step='0.5',\n            [(ngModel)]='config.store.terminal.minimumContrastRatio',\n            (ngModelChange)='config.save()'\n        )\n\n    .form-line\n        .header\n            .title(translate) Fallback font\n            .description(translate) A second font family used to display characters missing in the main font\n\n        input.form-control(\n            type='text',\n            [ngbTypeahead]='fontAutocomplete',\n            [(ngModel)]='config.store.terminal.fallbackFont',\n            (ngModelChange)='config.save()'\n        )\n\n    .form-line\n        .header\n            .title(translate) Line padding\n            .description(translate) Additional space between lines\n        input.form-control(\n            type='number',\n            [(ngModel)]='config.store.terminal.linePadding',\n            (ngModelChange)='config.save()',\n        )\n\n\n    .form-line\n        .header\n            .title(translate) Custom CSS\n\n    textarea.form-control.mb-5(\n        [(ngModel)]='config.store.appearance.css',\n        (ngModelChange)='saveConfiguration()',\n    )\n"
  },
  {
    "path": "tabby-terminal/src/components/appearanceSettingsTab.component.scss",
    "content": "color-scheme-preview {\n    flex-shrink: 0;\n    margin-bottom: 20px;\n}\n\ntextarea {\n    font-family: 'Source Code Pro', monospace;\n    min-height: 120px;\n}\n\n.font-size-input {\n    width: 100px;\n    flex: none;\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/appearanceSettingsTab.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Observable, debounceTime, distinctUntilChanged, map } from 'rxjs'\nimport { debounce } from 'utils-decorators/dist/esm/debounce/debounce'\n\nimport { Component } from '@angular/core'\nimport { ConfigService, getCSSFontFamily, PlatformService, ThemesService } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './appearanceSettingsTab.component.pug',\n    styleUrls: ['./appearanceSettingsTab.component.scss'],\n})\nexport class AppearanceSettingsTabComponent {\n    fonts: string[] = []\n\n    constructor (\n        public config: ConfigService,\n        public themes: ThemesService,\n        private platform: PlatformService,\n    ) { }\n\n    async ngOnInit () {\n        this.fonts = await this.platform.listFonts()\n    }\n\n    fontAutocomplete = (text$: Observable<string>) => {\n        return text$.pipe(\n            debounceTime(200),\n            distinctUntilChanged(),\n            map(query => this.fonts.filter(v => new RegExp(query, 'gi').test(v))),\n            map(list => Array.from(new Set(list))),\n        )\n    }\n\n    getPreviewFontFamily () {\n        return getCSSFontFamily(this.config.store)\n    }\n\n    @debounce(500)\n    saveConfiguration (requireRestart?: boolean) {\n        this.config.save()\n        if (requireRestart) {\n            this.config.requestRestart()\n        }\n    }\n\n    fixFontSize () {\n        this.config.store.terminal.fontSize = Math.min(\n            50,\n            Math.max(\n                5,\n                this.config.store.terminal.fontSize,\n            ),\n        )\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/baseTerminalTab.component.pug",
    "content": ".terminal-toolbar-spacer\n.content(#content, [style.opacity]='frontendIsReady ? 1 : 0')\nsearch-panel(\n    *ngIf='showSearchPanel && hasFocus && frontend',\n    @toolbarSlide,\n    [@.disabled]='!config.store.accessibility.animations',\n    [frontend]='frontend',\n    (close)='showSearchPanel = false; frontend.cancelSearch()'\n)\n\nbutton.btn.btn-sm.btn-link.toolbar-pin-button(\n    *ngIf='enableToolbar && !pinToolbar',\n    (click)='togglePinToolbar()',\n    (mouseenter)='showToolbar()',\n    (mouseleave)='hideToolbar()'\n)\n    i.fas.fa-wrench\n"
  },
  {
    "path": "tabby-terminal/src/components/baseTerminalTab.component.scss",
    "content": ":host {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    // overflow: hidden;\n    position: relative;\n\n    &> .content {\n        flex: auto;\n        position: relative;\n        display: block;\n        overflow: hidden;\n        margin: calc(max(0px, 30px * var(--spaciness) - 15px));\n        transition: opacity ease-out 0.25s;\n        opacity: 0;\n\n        div[style]:last-child {\n            background: black !important;\n            color: white !important;\n        }\n    }\n\n    $toolbarHeight: 40px;\n\n    > terminal-toolbar {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        z-index: 4;\n\n        opacity: 0;\n        transition: 0.25s opacity;\n        will-change: transform;\n        transform: translate(0, -100px);\n        transition: 0.25s transform ease-out;\n        height: $toolbarHeight;\n    }\n\n    &.toolbar-revealed, &.toolbar-pinned {\n        > terminal-toolbar {\n            opacity: 1;\n            transform: translate(0, 0);\n        }\n    }\n\n    > .toolbar-pin-button {\n        position: absolute;\n        right: 34px;\n        top: 5px;\n        z-index: 4;\n        background: #00000047;\n    }\n\n    &.toolbar-pinned > .terminal-toolbar-spacer {\n        width: 100%;\n        height: $toolbarHeight;\n    }\n}\n\n:host-context(.with-title-inset) {\n    padding-top: 20px;\n\n    terminal-toolbar {\n        padding-left: 90px;\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorPicker.component.pug",
    "content": "div(\n    [style.background]='model',\n    ngx-colors-trigger,\n    [(ngModel)]='model',\n    (ngModelChange)='modelChange.emit($event)',\n    [ngbTooltip]='hint'\n) {{ title }}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorPicker.component.scss",
    "content": ":host {\n    display: inline-block;\n}\n\ndiv {\n    width: 32px;\n    height: 32px;\n    box-shadow: 0 1px 1px rgba(0,0,0,.5);\n    border: none;\n    margin: 5px 10px 5px 0;\n    border-radius: 2px;\n    text-align: center;\n    font-weight: bold;\n    font-size: 17px;\n    display: inline-block;\n    color: #fff;\n    line-height: 31px;\n    text-shadow: 0 1px 1px rgba(0,0,0,.5);\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorPicker.component.ts",
    "content": "import { Component, Input, Output, EventEmitter } from '@angular/core'\n\n/** @hidden */\n@Component({\n    selector: 'color-picker',\n    templateUrl: './colorPicker.component.pug',\n    styleUrls: ['./colorPicker.component.scss'],\n})\nexport class ColorPickerComponent {\n    @Input() model: string\n    @Input() title: string\n    @Input() hint: string\n    @Output() modelChange = new EventEmitter<string>()\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemePreview.component.pug",
    "content": ".preview(\n    [style.font-family]='getPreviewFontFamily()',\n    [style.font-size]='(fontPreview ? config.store.terminal.fontSize : 11) + \"px\"',\n    [style.font-weight]='config.store.terminal.fontWeight',\n    [style.background-color]='scheme.background',\n    [style.color]='scheme.foreground',\n    [style.font-feature-settings]='\\'\"liga\" \\' + config.store.terminal.ligatures ? 1 : 0',\n    [style.font-variant-ligatures]='config.store.terminal.ligatures ? \"initial\" : \"none\"',\n)\n    div\n        span([style.color]='scheme.colors[2]') john\n        span([style.color]='scheme.colors[6]') @\n        span([style.color]='scheme.colors[4]') doe-pc\n        strong(\n            [style.color]='scheme.colors[1]',\n            [style.font-weight]='config.store.terminal.fontWeightBold'\n        ) $\n        span  ls\n        span([style.background-color]='scheme.cursor') &nbsp;\n    div\n        span -rwxr-xr-x  1 root\n        strong(\n            [style.color]='scheme.colors[3]',\n            [style.font-weight]='config.store.terminal.fontWeightBold'\n        )  Documents\n    div\n        span -rwxr-xr-x  1 root&nbsp;\n        strong(\n            [style.color]='scheme.colors[0]',\n            [style.background]='scheme.colors[2]',\n            [style.font-weight]='config.store.terminal.fontWeightBold'\n        ) Downloads\n    div\n        span -rwxr-xr-x  1 root&nbsp;\n        strong(\n            [style.color]='scheme.colors[0]',\n            [style.background]='scheme.colors[8]',\n            [style.font-weight]='config.store.terminal.fontWeightBold'\n        ) Pictures\n    div\n        span -rwxr-xr-x  1 root\n        strong(\n            [style.color]='scheme.colors[12]',\n            [style.font-weight]='config.store.terminal.fontWeightBold'\n        )  Music\n    div(*ngIf='fontPreview')\n        span -rwxr-xr-x  1 root\n        span([style.color]='scheme.colors[2]')  実行可能ファイル\n    div(*ngIf='fontPreview')\n        span -rwxr-xr-x  1 root\n        span([style.color]='scheme.colors[6]')  sym\n        span  ->\n        span([style.color]='scheme.colors[1]')  link\n    div(*ngIf='fontPreview')\n        span\n            strong(\n                [style.font-weight]='config.store.terminal.fontWeightBold'\n            ) Icons:\n            span    \n        span\n            span  &nbsp;\n            span(\n                [style.background-color]='scheme.colors[1]',\n                [style.color]='scheme.colors[0]',\n            )  Powerline&nbsp;\n            span([style.color]='scheme.colors[1]') \n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemePreview.component.scss",
    "content": ":host {\n    display: block;\n}\n\n.preview {\n    margin-top: 10px;\n    margin-left: 10px;\n    padding: 5px 10px;\n    border-radius: 4px;\n    overflow: hidden;\n\n    span {\n        white-space: pre;\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemePreview.component.ts",
    "content": "import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'\nimport { BaseComponent, ConfigService, getCSSFontFamily } from 'tabby-core'\nimport { TerminalColorScheme } from '../api/interfaces'\n\n/** @hidden */\n@Component({\n    selector: 'color-scheme-preview',\n    templateUrl: './colorSchemePreview.component.pug',\n    styleUrls: ['./colorSchemePreview.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorSchemePreviewComponent extends BaseComponent {\n    @Input() scheme: TerminalColorScheme\n    @Input() fontPreview = false\n\n    constructor (\n        public config: ConfigService,\n        changeDetector: ChangeDetectorRef,\n    ) {\n        super()\n        this.subscribeUntilDestroyed(config.changed$, () => {\n            changeDetector.markForCheck()\n        })\n    }\n\n    getPreviewFontFamily (): string {\n        return getCSSFontFamily(this.config.store)\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSelector.component.pug",
    "content": ".head\n    .bg-dark.p-3.mb-4(*ngIf='model != undefined')\n        .d-flex.align-items-center\n            span {{model.name}}\n            .me-auto\n            a.btn-link((click)='selectScheme(undefined); $event.preventDefault()', href='#', translate) Clear\n\n        color-scheme-preview([scheme]='model')\n\n    .input-group.mb-3\n        .input-group-text\n            i.fas.fa-fw.fa-search\n        input.form-control(type='search', [placeholder]='\"Search color schemes\"|translate', [(ngModel)]='filter')\n\n.body\n    .list-group.list-group-light.mb-3\n        ng-container(*ngFor='let scheme of allColorSchemes')\n            .list-group-item.list-group-item-action(\n                [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())',\n                (click)='selectScheme(scheme)'\n            )\n                .d-flex.w-100.align-items-center\n                    i.fas.fa-fw([class.fa-check]='model?.name === scheme.name')\n\n                    .ms-2\n\n                    .me-auto {{scheme.name}}\n\n                color-scheme-preview([scheme]='scheme')\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSelector.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\n\nimport { Component, Inject, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostBinding, Output, EventEmitter } from '@angular/core'\nimport { ConfigService } from 'tabby-core'\nimport { TerminalColorSchemeProvider } from '../api/colorSchemeProvider'\nimport { TerminalColorScheme } from '../api/interfaces'\n\n_('Search color schemes')\n\n/** @hidden */\n@Component({\n    selector: 'color-scheme-selector',\n    templateUrl: './colorSchemeSelector.component.pug',\n    styles: [`\n        :host {\n            display: block;\n            max-height: 100vh;\n            overflow-y: auto;\n        }\n    `],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorSchemeSelectorComponent {\n    allColorSchemes: TerminalColorScheme[] = []\n    filter = ''\n\n    @Input() model?: TerminalColorScheme\n    @Output() modelChange = new EventEmitter<TerminalColorScheme|undefined>()\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        @Inject(TerminalColorSchemeProvider) private colorSchemeProviders: TerminalColorSchemeProvider[],\n        private changeDetector: ChangeDetectorRef,\n        public config: ConfigService,\n    ) { }\n\n    async ngOnInit () {\n        const stockColorSchemes = (await Promise.all(this.config.enabledServices(this.colorSchemeProviders).map(x => x.getSchemes()))).reduce((a, b) => a.concat(b))\n        stockColorSchemes.sort((a, b) => a.name.localeCompare(b.name))\n        const customColorSchemes = this.config.store.terminal.customColorSchemes\n\n        this.allColorSchemes = customColorSchemes.concat(stockColorSchemes)\n        this.changeDetector.markForCheck()\n    }\n\n    selectScheme (scheme: TerminalColorScheme|undefined) {\n        this.model = scheme\n        this.modelChange.emit(scheme)\n        this.changeDetector.markForCheck()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSettingsForMode.component.pug",
    "content": ".head\n    .d-flex.align-items-center(*ngIf='!editing')\n        strong.me-2(translate) Current color scheme\n        span {{getCurrentSchemeName()}}\n        .me-auto\n        .btn-toolbar\n            button.btn.btn-secondary((click)='editScheme()')\n                i.fas.fa-pen\n                span(translate) Edit\n            .me-1\n            button.btn.btn-danger(\n                (click)='deleteScheme(config.store.terminal[this.configKey])',\n                *ngIf='currentCustomScheme'\n            )\n                i.fas.fa-trash\n                span(translate) Delete\n\n    div(*ngIf='editing')\n        .mb-3\n            label(translate) Name\n            input.form-control(type='text', [(ngModel)]='config.store.terminal[this.configKey].name')\n\n        .mb-3\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].foreground',\n                (modelChange)='config.save()',\n                title='FG',\n                hint='Foreground'\n            )\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].background',\n                (modelChange)='config.save()',\n                title='BG',\n                hint='Background'\n            )\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].cursor',\n                (modelChange)='config.save()',\n                title='CU',\n                hint='Cursor color'\n            )\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].cursorAccent',\n                (modelChange)='config.save()',\n                title='CA',\n                hint='Block cursor foreground'\n            )\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].selection',\n                (modelChange)='config.save()',\n                title='SB',\n                hint='Selection background'\n            )\n            color-picker(\n                [(model)]='config.store.terminal[this.configKey].selectionForeground',\n                (modelChange)='config.save()',\n                title='SF',\n                hint='Selection foreground'\n            )\n            color-picker(\n                *ngFor='let _ of config.store.terminal[this.configKey].colors; let idx = index; trackBy: colorsTrackBy',\n                [(model)]='config.store.terminal[this.configKey].colors[idx]',\n                (modelChange)='config.save()',\n                [title]='idx.toString()',\n                hint='ANSI color {{idx}}'\n            )\n\n    color-scheme-preview([scheme]='config.store.terminal[this.configKey]')\n\n    .btn-toolbar.d-flex.mt-2(*ngIf='editing')\n        .me-auto\n        button.btn.btn-primary((click)='saveScheme()')\n            i.fas.fa-check\n            span(translate) Save\n        .me-1\n        button.btn.btn-secondary((click)='cancelEditing()')\n            i.fas.fa-times\n            span(translate) Cancel\n\n    hr.mt-3.mb-4\n\n    .input-group.mb-3\n        .input-group-text\n            i.fas.fa-fw.fa-search\n        input.form-control(type='search', [placeholder]='\"Search color schemes\"|translate', [(ngModel)]='filter')\n\n.body\n    .list-group.list-group-light.mb-3\n        ng-container(*ngFor='let scheme of allColorSchemes')\n            .list-group-item.list-group-item-action(\n                [hidden]='filter && !scheme.name.toLowerCase().includes(filter.toLowerCase())',\n                (click)='selectScheme(scheme)',\n                [class.active]='(currentCustomScheme || currentStockScheme) === scheme'\n            )\n                .d-flex.w-100.align-items-center\n                    i.fas.fa-fw([class.fa-check]='(currentCustomScheme || currentStockScheme) === scheme')\n\n                    .ms-2\n\n                    .me-auto\n                        span {{scheme.name}}\n                        .badge.text-bg-info.ms-2(*ngIf='customColorSchemes.includes(scheme)', translate) Custom\n\n                    div\n                        .d-flex\n                            .swatch(\n                                *ngFor='let index of colorIndexes.slice(0, 8)',\n                                [style.background-color]='scheme.colors[index]'\n                            )\n                        .d-flex\n                            .swatch(\n                                *ngFor='let index of colorIndexes.slice(8, 16)',\n                                [style.background-color]='scheme.colors[index]'\n                            )\n\n                color-scheme-preview([scheme]='scheme')\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSettingsForMode.component.scss",
    "content": ".head {\n    flex: none;\n}\n\n.body {\n    overflow: auto;\n    flex: auto;\n    min-height: 0;\n}\n\n.swatch {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    margin-right: 3px;\n    margin-bottom: 3px;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, .5);\n}\n\n.list-group-item color-scheme-preview {\n    margin-left: 14px;\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSettingsForMode.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport deepEqual from 'deep-equal'\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\n\nimport { Component, Inject, Input, ChangeDetectionStrategy, ChangeDetectorRef, HostBinding } from '@angular/core'\nimport { ConfigService, PlatformService, TranslateService } from 'tabby-core'\nimport { TerminalColorSchemeProvider } from '../api/colorSchemeProvider'\nimport { TerminalColorScheme } from '../api/interfaces'\n\n_('Search color schemes')\n\n/** @hidden */\n@Component({\n    selector: 'color-scheme-settings-for-mode',\n    templateUrl: './colorSchemeSettingsForMode.component.pug',\n    styleUrls: ['./colorSchemeSettingsForMode.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorSchemeSettingsForModeComponent {\n    @Input() configKey: 'colorScheme'|'lightColorScheme'\n\n    @Input() stockColorSchemes: TerminalColorScheme[] = []\n    @Input() customColorSchemes: TerminalColorScheme[] = []\n    @Input() allColorSchemes: TerminalColorScheme[] = []\n    @Input() filter = ''\n    @Input() editing = false\n    colorIndexes = [...new Array(16).keys()]\n\n    currentStockScheme: TerminalColorScheme|null = null\n    currentCustomScheme: TerminalColorScheme|null = null\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        @Inject(TerminalColorSchemeProvider) private colorSchemeProviders: TerminalColorSchemeProvider[],\n        private changeDetector: ChangeDetectorRef,\n        private platform: PlatformService,\n        private translate: TranslateService,\n        public config: ConfigService,\n    ) { }\n\n    async ngOnInit () {\n        this.stockColorSchemes = (await Promise.all(this.config.enabledServices(this.colorSchemeProviders).map(x => x.getSchemes()))).reduce((a, b) => a.concat(b))\n        this.stockColorSchemes.sort((a, b) => a.name.localeCompare(b.name))\n        this.customColorSchemes = this.config.store.terminal.customColorSchemes\n        this.changeDetector.markForCheck()\n\n        this.update()\n    }\n\n    ngOnChanges () {\n        this.update()\n    }\n\n    selectScheme (scheme: TerminalColorScheme) {\n        this.config.store.terminal[this.configKey] = { ...scheme }\n        this.config.save()\n        this.cancelEditing()\n        this.update()\n    }\n\n    update () {\n        this.currentCustomScheme = this.findMatchingScheme(this.config.store.terminal[this.configKey], this.customColorSchemes)\n        this.currentStockScheme = this.findMatchingScheme(this.config.store.terminal[this.configKey], this.stockColorSchemes)\n        this.allColorSchemes = this.customColorSchemes.concat(this.stockColorSchemes)\n        this.changeDetector.markForCheck()\n    }\n\n    editScheme () {\n        this.editing = true\n    }\n\n    saveScheme () {\n        this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== this.config.store.terminal[this.configKey].name)\n        this.customColorSchemes.push(this.config.store.terminal[this.configKey])\n        this.config.store.terminal.customColorSchemes = this.customColorSchemes\n        this.config.save()\n        this.cancelEditing()\n        this.update()\n    }\n\n    cancelEditing () {\n        this.editing = false\n    }\n\n    async deleteScheme (scheme: TerminalColorScheme) {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Delete \"{name}\"?', scheme),\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 1,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            this.customColorSchemes = this.customColorSchemes.filter(x => x.name !== scheme.name)\n            this.config.store.terminal.customColorSchemes = this.customColorSchemes\n            this.config.save()\n            this.update()\n        }\n    }\n\n    getCurrentSchemeName () {\n        return (this.currentCustomScheme ?? this.currentStockScheme)?.name ?? 'Custom'\n    }\n\n    findMatchingScheme (scheme: TerminalColorScheme, schemes: TerminalColorScheme[]) {\n        return schemes.find(x => deepEqual(x, scheme)) ?? null\n    }\n\n    colorsTrackBy (index) {\n        return index\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSettingsTab.component.pug",
    "content": "h3.mb-3(translate) Color schemes\n\n.form-line.mb-4\n    .header\n        .title(translate) Switch color scheme\n\n    .btn-group(role='group')\n        input.btn-check(\n            type='radio',\n            name='colorSchemeMode',\n            [(ngModel)]='config.store.appearance.colorSchemeMode',\n            (ngModelChange)='config.save()',\n            id='colorSchemeModeAuto',\n            [value]='\"auto\"'\n        )\n        label.btn.btn-secondary(\n            for='colorSchemeModeAuto'\n        )\n            span(translate) From system\n        input.btn-check(\n            type='radio',\n            name='colorSchemeMode',\n            [(ngModel)]='config.store.appearance.colorSchemeMode',\n            (ngModelChange)='config.save()',\n            id='colorSchemeModeDark',\n            [value]='\"dark\"'\n        )\n        label.btn.btn-secondary(\n            for='colorSchemeModeDark'\n        )\n            span(translate) Always dark\n        input.btn-check(\n            type='radio',\n            name='colorSchemeMode',\n            [(ngModel)]='config.store.appearance.colorSchemeMode',\n            (ngModelChange)='config.save()',\n            id='colorSchemeModeLight',\n            [value]='\"light\"'\n        )\n        label.btn.btn-secondary(\n            for='colorSchemeModeLight'\n        )\n            span(translate) Always light\n\nul.nav-tabs(ngbNav, #nav='ngbNav', [activeId]='defaultTab')\n    li(ngbNavItem='dark')\n        a(ngbNavLink, translate) Dark mode\n        ng-template(ngbNavContent)\n            color-scheme-settings-for-mode(configKey='colorScheme')\n\n    li(ngbNavItem='light')\n        a(ngbNavLink, translate) Light mode\n        ng-template(ngbNavContent)\n            color-scheme-settings-for-mode(configKey='lightColorScheme')\n\ndiv([ngbNavOutlet]='nav')\n"
  },
  {
    "path": "tabby-terminal/src/components/colorSchemeSettingsTab.component.ts",
    "content": "import { Component } from '@angular/core'\nimport { ConfigService, PlatformService } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './colorSchemeSettingsTab.component.pug',\n})\nexport class ColorSchemeSettingsTabComponent {\n    defaultTab = 'dark'\n\n    constructor (\n        platform: PlatformService,\n        public config: ConfigService,\n    ) {\n        this.defaultTab = platform.getTheme()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/inputProcessingSettings.component.pug",
    "content": ".form-line\n    .header\n        .title(translate) Backspace key mode\n\n    select.form-control([(ngModel)]='options.backspace')\n        option(\n            *ngFor='let mode of backspaceModes',\n            [value]='mode.key',\n        ) {{mode.name|translate}}\n"
  },
  {
    "path": "tabby-terminal/src/components/inputProcessingSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { Component, Input } from '@angular/core'\nimport { InputProcessingOptions } from '../middleware/inputProcessing'\n\n/** @hidden */\n@Component({\n    selector: 'input-processing-settings',\n    templateUrl: './inputProcessingSettings.component.pug',\n})\nexport class InputProcessingSettingsComponent {\n    @Input() options: InputProcessingOptions\n\n    backspaceModes = [\n        {\n            key: 'backspace',\n            name: _('Pass-through'),\n        },\n        {\n            key: 'ctrl-h',\n            name: 'Ctrl-H',\n        },\n        {\n            key: 'ctrl-?',\n            name: 'Ctrl-?',\n        },\n        {\n            key: 'delete',\n            name: 'Delete (CSI 3~)',\n        },\n    ]\n\n    getBackspaceModeName (key) {\n        return this.backspaceModes.find(x => x.key === key)?.name\n    }\n\n    setBackspaceMode (mode) {\n        this.options.backspace = mode\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/loginScriptsSettings.component.pug",
    "content": "div\n    //TODO ([sortablejs]='scripts')\n    .input-group.flex-grow-1(*ngFor='let script of scripts')\n        input.form-control(\n            type='text',\n            placeholder='Expect',\n            [(ngModel)]='script.expect'\n        )\n        input.form-control(\n            type='text',\n            placeholder='Send',\n            [(ngModel)]='script.send'\n        )\n        .input-group-text.p-0.border-0\n            .hover-reveal(ngbDropdown)\n                button.btn.btn-link.btn-sm(ngbDropdownToggle)\n                    i.fas.fa-fw.fa-cog\n                .dropdown-menu-right(ngbDropdownMenu)\n                    a.dropdown-item(\n                        href='#',\n                        (click)='script.isRegex = false',\n                        [class.active]='!script.isRegex',\n                    )\n                        i.fas.fa-fw([class.fa-check]='!script.isRegex')\n                        span(translate) Exact match\n                    a.dropdown-item(\n                        href='#',\n                        (click)='script.isRegex = true',\n                        [class.active]='script.isRegex',\n                    )\n                        i.fas.fa-fw([class.fa-check]='script.isRegex')\n                        span(translate) Regex\n                    a.dropdown-item(\n                        href='#',\n                        (click)='script.optional = !script.optional',\n                        [class.active]='script.optional',\n                    )\n                        i.fas.fa-fw([class.fa-check]='script.optional')\n                        span(translate) Optional\n            button.btn.btn-link.btn-sm.hover-reveal((click)='deleteScript(script)')\n                i.fas.fa-fw.fa-trash-alt\n\nbutton.btn.btn-secondary.mt-2((click)='addScript()')\n    i.fas.fa-plus\n    span(translate) New item\n"
  },
  {
    "path": "tabby-terminal/src/components/loginScriptsSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, Input } from '@angular/core'\n\nimport { PlatformService, TranslateService } from 'tabby-core'\nimport { LoginScript, LoginScriptsOptions } from '../middleware/loginScriptProcessing'\n\n/** @hidden */\n@Component({\n    selector: 'login-scripts-settings',\n    templateUrl: './loginScriptsSettings.component.pug',\n})\nexport class LoginScriptsSettingsComponent {\n    @Input() options: LoginScriptsOptions\n    scripts: LoginScript[]\n\n    constructor (\n        private platform: PlatformService,\n        private translate: TranslateService,\n    ) { }\n\n    ngOnInit () {\n        this.scripts = this.options.scripts\n    }\n\n    async deleteScript (script: LoginScript) {\n        if ((await this.platform.showMessageBox(\n            {\n                type: 'warning',\n                message: this.translate.instant('Delete this script?'),\n                detail: script.expect,\n                buttons: [\n                    this.translate.instant('Delete'),\n                    this.translate.instant('Keep'),\n                ],\n                defaultId: 0,\n                cancelId: 1,\n            },\n        )).response === 0) {\n            this.scripts = this.scripts.filter(x => x !== script)\n        }\n    }\n\n    addScript () {\n        this.scripts.push({ expect: '', send: '' })\n    }\n\n    save () {\n        this.options.scripts = this.scripts\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/searchPanel.component.pug",
    "content": ".input-group\n    input.search-input.form-control(\n        type='text',\n        [(ngModel)]='query',\n        (ngModelChange)='onQueryChange()',\n        [class.text-danger]='state.resultCount == 0',\n        (click)='$event.stopPropagation()',\n        (keyup.enter)='findPrevious()',\n        (keyup.up)='findPrevious()',\n        (keyup.down)='findNext()',\n        (keyup.esc)='close.emit()',\n        [placeholder]='\"Search\"|translate'\n    )\n    .input-group-text.result-counter(*ngIf='state.resultCount > 0') {{(state.resultIndex ?? 0) + 1}} / {{state.resultCount}}\n\nng-container(*ngIf='state.resultCount > 0')\n    button.btn.btn-link(\n        (click)='findPrevious()',\n        [ngbTooltip]='\"Search up\"|translate',\n        placement='bottom',\n        [fastHtmlBind]='icons.arrowUp'\n    )\n\n    button.btn.btn-link(\n        (click)='findNext()',\n        [ngbTooltip]='\"Search down\"|translate',\n        placement='bottom',\n        [fastHtmlBind]='icons.arrowDown'\n    )\n\n.me-2\n\nbutton.btn(\n    (click)='options.caseSensitive = !options.caseSensitive; saveSearchOptions()',\n    [class.btn-link]='!options.caseSensitive',\n    [class.btn-info]='options.caseSensitive',\n    [ngbTooltip]='\"Case sensitivity\"|translate',\n    placement='bottom',\n    [fastHtmlBind]='icons.case'\n)\n\nbutton.btn(\n    (click)='options.regex = !options.regex; saveSearchOptions()',\n    [class.btn-link]='!options.regex',\n    [class.btn-info]='options.regex',\n    [ngbTooltip]='\"Regular expression\"|translate',\n    placement='bottom',\n    [fastHtmlBind]='icons.regexp'\n)\n\nbutton.btn(\n    (click)='options.wholeWord = !options.wholeWord; saveSearchOptions()',\n    [class.btn-link]='!options.wholeWord',\n    [class.btn-info]='options.wholeWord',\n    [ngbTooltip]='\"Whole word\"|translate',\n    placement='bottom',\n    [fastHtmlBind]='icons.wholeWord'\n)\n\n.me-2\n\nbutton.btn.btn-link(\n    (click)='close.emit()',\n    [fastHtmlBind]='icons.close'\n)\n"
  },
  {
    "path": "tabby-terminal/src/components/searchPanel.component.scss",
    "content": ":host {\n    position: fixed;\n    width: 600px;\n    max-width: 80vw;\n    right: 40px;\n    height: 36px;\n    z-index: 5;\n    border-radius: 0 0 5px 5px;\n    background: rgba(0, 0, 0, .95);\n    border: 1px solid rgba(0, 0, 0, .5);\n    border-top: 0;\n    display: flex;\n\n    button {\n        padding: 0 6px;\n        margin: 4px 2px;\n        flex-shrink: 0;\n    }\n}\n\n.result-counter {\n    font-size: 0.7rem;\n    opacity: .5;\n}\n\n:host ::ng-deep svg {\n    height: 16px;\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/searchPanel.component.ts",
    "content": "import { Component, Input, Output, EventEmitter } from '@angular/core'\nimport { Subject, debounceTime } from 'rxjs'\nimport { Frontend, SearchOptions, SearchState } from '../frontends/frontend'\nimport { ConfigService, NotificationsService, TranslateService } from 'tabby-core'\n\n@Component({\n    selector: 'search-panel',\n    templateUrl: './searchPanel.component.pug',\n    styleUrls: ['./searchPanel.component.scss'],\n})\nexport class SearchPanelComponent {\n    @Input() query: string\n    @Input() frontend: Frontend\n    state: SearchState = { resultCount: 0 }\n    options: SearchOptions = {\n        incremental: true,\n        ...this.config.store.terminal.searchOptions,\n    }\n\n    @Output() close = new EventEmitter()\n\n    private queryChanged = new Subject<string>()\n\n    icons = {\n        'case': require('../icons/case.svg'),\n        regexp: require('../icons/regexp.svg'),\n        wholeWord: require('../icons/whole-word.svg'),\n        arrowUp: require('../icons/arrow-up.svg'),\n        arrowDown: require('../icons/arrow-down.svg'),\n        close: require('../icons/close.svg'),\n    }\n\n    constructor (\n        private notifications: NotificationsService,\n        private translate: TranslateService,\n        public config: ConfigService,\n    ) {\n        this.queryChanged.pipe(debounceTime(250)).subscribe(() => {\n            this.findPrevious(true)\n        })\n    }\n\n    onQueryChange (): void {\n        this.state = { resultCount: 0 }\n        this.queryChanged.next(this.query)\n    }\n\n    findNext (incremental = false): void {\n        if (!this.query) {\n            return\n        }\n        this.state = this.frontend.findNext(this.query, { ...this.options, incremental: incremental || undefined })\n        if (!this.state.resultCount) {\n            this.notifications.notice(this.translate.instant('Not found'))\n        }\n    }\n\n    findPrevious (incremental = false): void {\n        if (!this.query) {\n            return\n        }\n        this.state = this.frontend.findPrevious(this.query, { ...this.options, incremental: incremental || undefined })\n        if (!this.state.resultCount) {\n            this.notifications.notice(this.translate.instant('Not found'))\n        }\n    }\n\n    saveSearchOptions (): void {\n        this.config.store.terminal.searchOptions.regex = this.options.regex\n        this.config.store.terminal.searchOptions.caseSensitive = this.options.caseSensitive\n        this.config.store.terminal.searchOptions.wholeWord = this.options.wholeWord\n\n        this.config.save()\n    }\n\n    ngOnDestroy (): void {\n        this.queryChanged.complete()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/streamProcessingSettings.component.pug",
    "content": ".form-line\n    .header\n        .title(translate) Input mode\n\n    .d-flex(ngbDropdown)\n        button.btn.btn-secondary.btn-tab-bar(\n            ngbDropdownToggle,\n        ) {{getInputModeName(options.inputMode)}}\n\n        div(ngbDropdownMenu)\n            a.d-flex.flex-column(\n                *ngFor='let mode of inputModes',\n                (click)='setInputMode(mode.key)',\n                ngbDropdownItem\n            )\n                div {{mode.name|translate}}\n                .text-muted {{mode.description|translate}}\n\n.form-line\n    .header\n        .title(translate) Input newlines\n\n    select.form-control(\n        [(ngModel)]='options.inputNewlines',\n    )\n        option([ngValue]='mode.key', *ngFor='let mode of newlineModes') {{mode.name|translate}}\n\n.form-line\n    .header\n        .title(translate) Output mode\n\n    .d-flex(ngbDropdown)\n        button.btn.btn-secondary.btn-tab-bar(\n            ngbDropdownToggle,\n        ) {{getOutputModeName(options.outputMode)}}\n\n        div(ngbDropdownMenu)\n            a.d-flex.flex-column(\n                *ngFor='let mode of outputModes',\n                (click)='setOutputMode(mode.key)',\n                ngbDropdownItem\n            )\n                div {{mode.name|translate}}\n                .text-muted {{mode.description|translate}}\n\n.form-line\n    .header\n        .title(translate) Output newlines\n\n    select.form-control(\n        [(ngModel)]='options.outputNewlines',\n    )\n        option([ngValue]='mode.key', *ngFor='let mode of newlineModes') {{mode.name|translate}}\n"
  },
  {
    "path": "tabby-terminal/src/components/streamProcessingSettings.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'\nimport { Component, Input } from '@angular/core'\nimport { StreamProcessingOptions } from '../middleware/streamProcessing'\n\n/** @hidden */\n@Component({\n    selector: 'stream-processing-settings',\n    templateUrl: './streamProcessingSettings.component.pug',\n})\nexport class StreamProcessingSettingsComponent {\n    @Input() options: StreamProcessingOptions\n\n    inputModes = [\n        {\n            key: null,\n            name: _('Normal'),\n            description: _('Input is sent as you type'),\n        },\n        {\n            key: 'local-echo',\n            name: _('Local echo'),\n            description: _('Immediately echoes your input locally'),\n        },\n        {\n            key: 'readline',\n            name: _('Line by line'),\n            description: _('Line editor, input is sent after you press Enter'),\n        },\n        {\n            key: 'readline-hex',\n            name: _('Hexadecimal'),\n            description: _('Send bytes by typing in hex values'),\n        },\n    ]\n\n    outputModes = [\n        {\n            key: null,\n            name: _('Normal'),\n            description: _('Output is shown as it is received'),\n        },\n        {\n            key: 'hex',\n            name: _('Hexadecimal'),\n            description: _('Output is shown as a hexdump'),\n        },\n    ]\n\n    newlineModes = [\n        { key: null, name: _('Keep') },\n        { key: 'strip', name: _('Strip') },\n        { key: 'cr', name: _('Force CR') },\n        { key: 'lf', name: _('Force LF') },\n        { key: 'crlf', name: _('Force CRLF') },\n        { key: 'implicit_cr', name: _('Implicit CR in every LF') },\n        { key: 'implicit_lf', name: _('Implicit LF in every CR') },\n    ]\n\n    getInputModeName (key) {\n        return this.inputModes.find(x => x.key === key)?.name\n    }\n\n    getOutputModeName (key) {\n        return this.outputModes.find(x => x.key === key)?.name\n    }\n\n    setInputMode (mode) {\n        this.options.inputMode = mode\n    }\n\n    setOutputMode (mode) {\n        this.options.outputMode = mode\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/terminalSettingsTab.component.pug",
    "content": "div\n    h3.mb-3(translate) Rendering\n\n    .form-line(*ngIf='hostApp.platform !== Platform.Web')\n        .header\n            .title(translate) Frontend\n            .description(translate) Switches terminal frontend implementation (experimental)\n\n        select.form-control(\n            [(ngModel)]='config.store.terminal.frontend',\n            (ngModelChange)='config.save()',\n        )\n            option(value='xterm-webgl') xterm (WebGL)\n            option(value='xterm') xterm (canvas)\n\n    .form-line\n        .header\n            .title(translate) Scrollback\n            .description(translate) Number of lines kept in the buffer\n        input.form-control(\n            type='number',\n            [(ngModel)]='config.store.terminal.scrollbackLines',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Draw bold text in bright colors\n        toggle(\n            [(ngModel)]='config.store.terminal.drawBoldTextInBrightColors',\n            (ngModelChange)='config.save()'\n        )\n\n    .form-line\n        .header\n            .title(translate) Sixel graphics support (experimental)\n            .description(translate) Display images via Sixel escape sequences\n        toggle(\n            [(ngModel)]='config.store.terminal.sixel',\n            (ngModelChange)='config.save(); config.requestRestart()'\n        )\n\ndiv.mt-4\n    h3(translate) Keyboard\n\n    .form-line\n        .header\n            .title(\n                translate=\"Use {altKeyName} as the Meta key\",\n                [translateParams]='{altKeyName: altKeyName}'\n            )\n            .description(translate) Lets the shell handle Meta key instead of OS\n        toggle(\n            [(ngModel)]='config.store.terminal.altIsMeta',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Scroll on input\n            .description(translate) Scrolls the terminal to the bottom on user input\n        toggle(\n            [(ngModel)]='config.store.terminal.scrollOnInput',\n            (ngModelChange)='config.save()',\n        )\n\ndiv.mt-4\n    h3(translate) Mouse\n\n    .form-line\n        .header\n            .title(translate) Right click\n            .description(*ngIf='config.store.terminal.rightClick == \"paste\"', translate) Long-click for context menu\n\n        select.form-control(\n            [(ngModel)]='config.store.terminal.rightClick',\n            (ngModelChange)='config.save()'\n        )\n            option(ngValue='off', translate) Off\n            option(ngValue='menu', translate) Context menu\n            option(ngValue='paste', translate) Paste\n            option(ngValue='clipboard', translate) Paste if no selection, else copy\n\n    .form-line\n        .header\n            .title(translate) Paste on middle-click\n\n        toggle(\n            [(ngModel)]='config.store.terminal.pasteOnMiddleClick',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Word separators\n            .description(translate) Double-click selection will stop at these characters\n        input.form-control(\n            type='text',\n            placeholder=' ()[]{}\\'\"',\n            [(ngModel)]='config.store.terminal.wordSeparator',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line(*ngIf='config.store.clickableLinks')\n        .header\n            .title(translate) Require a key to click links\n            .description(translate) When enabled, links are only clickable while holding this key\n\n        select.form-control(\n            [(ngModel)]='config.store.clickableLinks.modifier',\n            (ngModelChange)='config.save()',\n        )\n            option([ngValue]='null', translate) No modifier\n            option(value='ctrlKey', *ngIf='hostApp.platform !== Platform.macOS') Ctrl\n            option(value='altKey') {{altKeyName}}\n            option(value='shiftKey') Shift\n            option(value='metaKey') {{metaKeyName}}\n\n.mt-4\n    h3(translate) Clipboard\n\n    .form-line\n        .header\n            .title(translate) Copy on select\n        toggle(\n            [(ngModel)]='config.store.terminal.copyOnSelect',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Copy with formatting\n        toggle(\n            [(ngModel)]='config.store.terminal.copyAsHTML',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Bracketed paste (requires shell support)\n            .description(translate) Prevents accidental execution of pasted commands\n        toggle(\n            [(ngModel)]='config.store.terminal.bracketedPaste',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Warn on multi-line paste\n            .description(translate) Show a confirmation box when pasting multiple lines\n        toggle(\n            [(ngModel)]='config.store.terminal.warnOnMultilinePaste',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Trim whitespace and newlines\n            .description(translate) Remove whitespace and newlines around the copied text\n        toggle(\n            [(ngModel)]='config.store.terminal.trimWhitespaceOnPaste',\n            (ngModelChange)='config.save()',\n        )\n\ndiv.mt-4\n    h3(translate) Sound\n\n    .form-line\n        .header\n            .title(translate) Terminal bell\n        .btn-group\n            input.btn-check(\n                type='radio',\n                name='bell',\n                [(ngModel)]='config.store.terminal.bell',\n                (ngModelChange)='config.save()',\n                id='bellOff',\n                [value]='\"off\"'\n            )\n            label.btn.btn-secondary(for='bellOff')\n                span(translate) Off\n            input.btn-check(\n                type='radio',\n                name='bell',\n                [(ngModel)]='config.store.terminal.bell',\n                (ngModelChange)='config.save()',\n                id='bellVisual',\n                [value]='\"visual\"'\n            )\n            label.btn.btn-secondary(for='bellVisual')\n                span(translate) Visual\n            input.btn-check(\n                type='radio',\n                name='bell',\n                [(ngModel)]='config.store.terminal.bell',\n                (ngModelChange)='config.save()',\n                id='bellAudible',\n                [value]='\"audible\"'\n            )\n            label.btn.btn-secondary(for='bellAudible')\n                span(translate) Audible\n\n    .alert.alert-info.d-flex.align-items-center(*ngIf='config.store.terminal.bell != \"audible\" && (config.store.terminal.profile || \"\").startsWith(\"wsl\")')\n        .me-auto(translate) WSL terminal bell can only be muted via Volume Mixer\n        button.btn.btn-secondary((click)='openWSLVolumeMixer()', translate) Show Mixer\n\n.mt-4\n    h3(translate) Startup\n\n    .form-line(*ngIf='hostApp.platform !== Platform.Web')\n        .header\n            .title(translate) Auto-open a terminal on app start\n\n        toggle(\n            [(ngModel)]='config.store.terminal.autoOpen',\n            (ngModelChange)='config.save()',\n        )\n\n    .form-line\n        .header\n            .title(translate) Restore terminal tabs on app start\n\n        toggle(\n            [(ngModel)]='config.store.recoverTabs',\n            (ngModelChange)='config.save()',\n        )\n\ndiv.mt-4(*ngIf='hostApp.platform === Platform.Windows')\n    h3(translate) Windows\n\n    .form-line\n        .header\n            .title(translate) Set Tabby as %COMSPEC%\n            .description(translate) Allows opening .bat files in tabs, but breaks some shells\n        toggle(\n            [(ngModel)]='config.store.terminal.setComSpec',\n            (ngModelChange)='config.save()',\n        )\n"
  },
  {
    "path": "tabby-terminal/src/components/terminalSettingsTab.component.ts",
    "content": "import { Component, HostBinding } from '@angular/core'\nimport { ConfigService, HostAppService, Platform, PlatformService, altKeyName, metaKeyName } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './terminalSettingsTab.component.pug',\n})\nexport class TerminalSettingsTabComponent {\n    Platform = Platform\n    altKeyName = altKeyName\n    metaKeyName = metaKeyName\n\n    @HostBinding('class.content-box') true\n\n    constructor (\n        public config: ConfigService,\n        public hostApp: HostAppService,\n        private platform: PlatformService,\n    ) { }\n\n    openWSLVolumeMixer (): void {\n        this.platform.openPath('sndvol.exe')\n        this.platform.exec('wsl.exe', ['tput', 'bel'])\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/terminalToolbar.component.pug",
    "content": ".content(\n    cdkDropList\n    cdkAutoDropGroup='app-tabs'\n)\n    i.fas.fa-grip-vertical.drag-handle(\n        *ngIf='shouldShowDragHandle',\n        cdkDrag,\n        [cdkDragData]='tab',\n        (cdkDragStarted)='onTabDragStart()',\n        (cdkDragEnded)='onTabDragEnd()'\n    )\n\n    ng-content\n\n    button.btn.btn-sm.btn-link(\n        *ngIf='tab.enableToolbar',\n        (click)='tab.togglePinToolbar()',\n        (mouseenter)='tab.showToolbar()',\n        (mouseleave)='tab.hideToolbar()'\n    )\n        i.fas.fa-thumbtack\n        span(*ngIf='tab.pinToolbar', translate) Unpin\n        span(*ngIf='!tab.pinToolbar', translate) Pin\n"
  },
  {
    "path": "tabby-terminal/src/components/terminalToolbar.component.scss",
    "content": ":host {\n    padding: 5px 15px 5px 15px;\n    display: flex;\n    z-index: 3;\n    overflow: hidden;\n\n    ::ng-deep .btn {\n        white-space: nowrap;\n        text-overflow: ellipsis;\n        overflow: hidden;\n    }\n}\n\n.content {\n    flex-grow: 1;\n    display: flex;\n    align-items: center;\n}\n\n.drag-handle {\n    margin: 0 10px 0 0;\n    cursor: move;\n    opacity: .3;\n}\n"
  },
  {
    "path": "tabby-terminal/src/components/terminalToolbar.component.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Component, HostListener, Input } from '@angular/core'\nimport { AppService, SplitTabComponent } from 'tabby-core'\nimport { BaseTerminalTabComponent } from '../api/baseTerminalTab.component'\n\n/** @hidden */\n@Component({\n    selector: 'terminal-toolbar',\n    templateUrl: './terminalToolbar.component.pug',\n    styleUrls: ['./terminalToolbar.component.scss'],\n})\nexport class TerminalToolbarComponent {\n    @Input() tab: BaseTerminalTabComponent<any>\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        private app: AppService,\n    ) { }\n\n    onTabDragStart (): void {\n        this.app.emitTabDragStarted(this.tab)\n    }\n\n    onTabDragEnd (): void {\n        setTimeout(() => {\n            this.app.emitTabDragEnded()\n            this.app.emitTabsChanged()\n        })\n    }\n\n    get shouldShowDragHandle (): boolean {\n        return this.tab.topmostParent instanceof SplitTabComponent && this.tab.topmostParent.getAllTabs().length > 1\n    }\n\n    @HostListener('mouseenter') onMouseEnter () {\n        this.tab.showToolbar()\n    }\n\n    @HostListener('mouseleave') onMouseLeave () {\n        this.tab.hideToolbar()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/config.ts",
    "content": "import { ConfigProvider, Platform } from 'tabby-core'\nimport { DefaultColorSchemes } from './colorSchemes'\n\n/** @hidden */\nexport class TerminalConfigProvider extends ConfigProvider {\n    defaults = {\n        hotkeys: {\n            'copy-current-path': [],\n        },\n        terminal: {\n            frontend: 'xterm-webgl',\n            fontSize: 14,\n            fontWeight: 400,\n            fontWeightBold: 700,\n            fallbackFont: null,\n            linePadding: 0,\n            bell: 'off',\n            bracketedPaste: true,\n            background: 'theme',\n            ligatures: false,\n            cursor: 'block',\n            cursorBlink: true,\n            hideTabIndex: false,\n            showTabProfileIcon: false,\n            hideCloseButton: false,\n            hideTabOptionsButton: false,\n            rightClick: 'menu',\n            pasteOnMiddleClick: true,\n            copyOnSelect: false,\n            copyAsHTML: true,\n            scrollOnInput: true,\n            altIsMeta: false,\n            wordSeparator: ' ()[]{}\\'\"',\n            colorScheme: {\n                __nonStructural: true,\n                ...DefaultColorSchemes.defaultColorScheme,\n            },\n            lightColorScheme: {\n                __nonStructural: true,\n                ...DefaultColorSchemes.defaultLightColorScheme,\n            },\n            customColorSchemes: [],\n            warnOnMultilinePaste: true,\n            searchRegexAlwaysEnabled: false,\n            searchOptions: {\n                regex: false,\n                wholeWord: false,\n                caseSensitive: false,\n            },\n            detectProgress: true,\n            scrollbackLines: 25000,\n            drawBoldTextInBrightColors: true,\n            sixel: true,\n            minimumContrastRatio: 4,\n            trimWhitespaceOnPaste: true,\n        },\n    }\n\n    platformDefaults = {\n        [Platform.macOS]: {\n            terminal: {\n                font: 'Menlo',\n            },\n            hotkeys: {\n                'ctrl-c': ['Ctrl-C'],\n                copy: [\n                    '⌘-C',\n                ],\n                paste: [\n                    '⌘-V',\n                ],\n                clear: [\n                    '⌘-K',\n                ],\n                'select-all': ['⌘-A'],\n                'zoom-in': [\n                    '⌘-=',\n                    '⌘-Shift-=',\n                ],\n                'zoom-out': [\n                    '⌘--',\n                    '⌘-Shift--',\n                ],\n                'reset-zoom': [\n                    '⌘-0',\n                ],\n                home: ['⌘-Left', 'Home'],\n                end: ['⌘-Right', 'End'],\n                'previous-word': ['⌥-Left'],\n                'next-word': ['⌥-Right'],\n                'delete-previous-word': ['⌥-Backspace'],\n                'delete-line': ['⌘-Backspace'],\n                'delete-next-word': ['⌥-Delete'],\n                search: [\n                    '⌘-F',\n                ],\n                'pane-focus-all': [\n                    '⌘-Shift-I',\n                ],\n                'focus-all-tabs': [\n                    '⌘-⌥-Shift-I',\n                ],\n                'scroll-to-top': ['Shift-PageUp'],\n                'scroll-page-up': ['⌥-PageUp'],\n                'scroll-up': ['Ctrl-Shift-Up'],\n                'scroll-down': ['Ctrl-Shift-Down'],\n                'scroll-page-down': ['⌥-PageDown'],\n                'scroll-to-bottom': ['Shift-PageDown'],\n            },\n        },\n        [Platform.Windows]: {\n            terminal: {\n                font: 'Consolas',\n                rightClick: 'clipboard',\n                pasteOnMiddleClick: false,\n                copyOnSelect: true,\n            },\n            hotkeys: {\n                'ctrl-c': ['Ctrl-C'],\n                copy: [\n                    'Ctrl-Shift-C',\n                ],\n                paste: [\n                    'Ctrl-Shift-V',\n                    'Shift-Insert',\n                ],\n                'select-all': ['Ctrl-Shift-A'],\n                clear: [],\n                'zoom-in': [\n                    'Ctrl-=',\n                    'Ctrl-Shift-=',\n                ],\n                'zoom-out': [\n                    'Ctrl--',\n                    'Ctrl-Shift--',\n                ],\n                'reset-zoom': [\n                    'Ctrl-0',\n                ],\n                home: ['Home'],\n                end: ['End'],\n                'previous-word': ['Ctrl-Left'],\n                'next-word': ['Ctrl-Right'],\n                'delete-previous-word': ['Ctrl-Backspace'],\n                'delete-line': ['Ctrl-Shift-Backspace'],\n                'delete-next-word': ['Ctrl-Delete'],\n                search: [\n                    'Ctrl-Shift-F',\n                ],\n                'pane-focus-all': [\n                    'Ctrl-Shift-I',\n                ],\n                'focus-all-tabs': [\n                    'Ctrl-Alt-Shift-I',\n                ],\n                'scroll-to-top': ['Ctrl-PageUp'],\n                'scroll-page-up': ['Alt-PageUp'],\n                'scroll-up': ['Ctrl-Shift-Up'],\n                'scroll-down': ['Ctrl-Shift-Down'],\n                'scroll-page-down': ['Alt-PageDown'],\n                'scroll-to-bottom': ['Ctrl-PageDown'],\n            },\n        },\n        [Platform.Linux]: {\n            terminal: {\n                font: 'Liberation Mono',\n                pasteOnMiddleClick: false, // handled by OS\n            },\n            hotkeys: {\n                'ctrl-c': ['Ctrl-C'],\n                copy: [\n                    'Ctrl-Shift-C',\n                ],\n                paste: [\n                    'Ctrl-Shift-V',\n                    'Shift-Insert',\n                ],\n                'select-all': ['Ctrl-Shift-A'],\n                clear: [],\n                'zoom-in': [\n                    'Ctrl-=',\n                    'Ctrl-Shift-=',\n                ],\n                'zoom-out': [\n                    'Ctrl--',\n                    'Ctrl-Shift--',\n                ],\n                'reset-zoom': [\n                    'Ctrl-0',\n                ],\n                home: ['Home'],\n                end: ['End'],\n                'previous-word': ['Ctrl-Left'],\n                'next-word': ['Ctrl-Right'],\n                'delete-previous-word': ['Ctrl-Backspace'],\n                'delete-line': ['Ctrl-Shift-Backspace'],\n                'delete-next-word': ['Ctrl-Delete'],\n                search: [\n                    'Ctrl-Shift-F',\n                ],\n                'pane-focus-all': [\n                    'Ctrl-Shift-I',\n                ],\n                'focus-all-tabs': [\n                    'Ctrl-Alt-Shift-I',\n                ],\n                'scroll-to-top': ['Ctrl-PageUp'],\n                'scroll-page-up': ['Alt-PageUp'],\n                'scroll-up': ['Ctrl-Shift-Up'],\n                'scroll-down': ['Ctrl-Shift-Down'],\n                'scroll-page-down': ['Alt-PageDown'],\n                'scroll-to-bottom': ['Ctrl-PageDown'],\n            },\n        },\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/features/debug.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { TerminalDecorator } from '../api/decorator'\nimport { BaseTerminalTabComponent } from '../api/baseTerminalTab.component'\nimport { PlatformService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class DebugDecorator extends TerminalDecorator {\n    constructor (\n        private platform: PlatformService,\n    ) {\n        super()\n    }\n\n    attach (terminal: BaseTerminalTabComponent<any>): void {\n        let sessionOutputBuffer = ''\n        const bufferLength = 8192\n\n        const handler = data => {\n            sessionOutputBuffer += data\n            if (sessionOutputBuffer.length > bufferLength) {\n                sessionOutputBuffer = sessionOutputBuffer.substring(sessionOutputBuffer.length - bufferLength)\n            }\n        }\n        this.subscribeUntilDetached(terminal, terminal.sessionChanged$.subscribe(session => {\n            this.subscribeUntilDetached(terminal, session?.output$.subscribe(handler))\n        }))\n\n        this.subscribeUntilDetached(terminal, terminal.session?.output$.subscribe(handler))\n\n        terminal.addEventListenerUntilDestroyed(terminal.content.nativeElement, 'keyup', (e: KeyboardEvent) => {\n            // Ctrl-Shift-Alt-1\n            if (e.which === 49 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doSaveState(terminal)\n            }\n            // Ctrl-Shift-Alt-2\n            if (e.which === 50 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doLoadState(terminal)\n            }\n            // Ctrl-Shift-Alt-3\n            if (e.which === 51 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doCopyState(terminal)\n            }\n            // Ctrl-Shift-Alt-4\n            if (e.which === 52 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doPasteState(terminal)\n            }\n            // Ctrl-Shift-Alt-5\n            if (e.which === 53 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doSaveOutput(sessionOutputBuffer)\n            }\n            // Ctrl-Shift-Alt-6\n            if (e.which === 54 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doLoadOutput(terminal)\n            }\n            // Ctrl-Shift-Alt-7\n            if (e.which === 55 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doCopyOutput(sessionOutputBuffer)\n            }\n            // Ctrl-Shift-Alt-8\n            if (e.which === 56 && e.ctrlKey && e.shiftKey && e.altKey) {\n                this.doPasteOutput(terminal)\n            }\n        })\n    }\n\n    private async loadFile (): Promise<string|null> {\n        const transfer = await this.platform.startUpload()\n        if (!transfer.length) {\n            return null\n        }\n        const data = await transfer[0].readAll()\n        transfer[0].close()\n        return data.toString()\n    }\n\n    private async saveFile (content: string, name: string) {\n        const data = Buffer.from(content)\n        const transfer = await this.platform.startDownload(name, 0o644, data.length)\n        if (transfer) {\n            transfer.write(data)\n            transfer.close()\n        }\n    }\n\n    private doSaveState (terminal: BaseTerminalTabComponent<any>) {\n        this.saveFile(terminal.frontend!.saveState(), 'state.txt')\n    }\n\n    private async doCopyState (terminal: BaseTerminalTabComponent<any>) {\n        const data = '```' + JSON.stringify(terminal.frontend!.saveState()) + '```'\n        this.platform.setClipboard({ text: data })\n    }\n\n    private async doLoadState (terminal: BaseTerminalTabComponent<any>) {\n        const data = await this.loadFile()\n        if (data) {\n            terminal.frontend!.restoreState(data)\n        }\n    }\n\n    private async doPasteState (terminal: BaseTerminalTabComponent<any>) {\n        let data = this.platform.readClipboard()\n        if (data) {\n            if (data.startsWith('`')) {\n                data = data.substring(3, data.length - 3)\n            }\n            terminal.frontend!.restoreState(JSON.parse(data))\n        }\n    }\n\n    private doSaveOutput (buffer: string) {\n        this.saveFile(buffer, 'output.txt')\n    }\n\n    private async doCopyOutput (buffer: string) {\n        const data = '```' + JSON.stringify(buffer) + '```'\n        this.platform.setClipboard({ text: data })\n    }\n\n    private async doLoadOutput (terminal: BaseTerminalTabComponent<any>) {\n        const data = await this.loadFile()\n        if (data) {\n            await terminal.frontend?.write(data)\n        }\n    }\n\n    private async doPasteOutput (terminal: BaseTerminalTabComponent<any>) {\n        let data = this.platform.readClipboard()\n        if (data) {\n            if (data.startsWith('`')) {\n                data = data.substring(3, data.length - 3)\n            }\n            await terminal.frontend?.write(JSON.parse(data))\n        }\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/features/zmodem.ts",
    "content": "import colors from 'ansi-colors'\nimport * as ZModem from 'zmodem.js'\nimport { Observable, filter, first } from 'rxjs'\nimport { Injectable } from '@angular/core'\nimport { TerminalDecorator } from '../api/decorator'\nimport { BaseTerminalTabComponent } from '../api/baseTerminalTab.component'\nimport { SessionMiddleware } from '../api/middleware'\nimport { LogService, Logger, HotkeysService, PlatformService, FileUpload } from 'tabby-core'\n\nconst SPACER = '            '\n\nclass ZModemMiddleware extends SessionMiddleware {\n    private sentry: ZModem.Sentry\n    private isActive = false\n    private logger: Logger\n    private activeSession: any = null\n    private cancelEvent: Observable<any>\n\n    constructor (\n        log: LogService,\n        hotkeys: HotkeysService,\n        private platform: PlatformService,\n    ) {\n        super()\n        this.cancelEvent = this.outputToSession$.pipe(filter(x => x.length === 1 && x[0] === 3))\n\n        this.logger = log.create('zmodem')\n        this.sentry = new ZModem.Sentry({\n            to_terminal: data => {\n                if (this.isActive && this.activeSession) {\n                    this.outputToTerminal.next(Buffer.from(data))\n                }\n            },\n            sender: data => this.outputToSession.next(Buffer.from(data)),\n            on_detect: async detection => {\n                try {\n                    this.isActive = true\n                    await this.process(detection)\n                } finally {\n                    this.isActive = false\n                }\n            },\n            on_retract: () => {\n                this.showMessage('transfer cancelled')\n                this.activeSession = null\n                this.isActive = false\n            },\n        })\n    }\n\n    feedFromSession (data: Buffer): void {\n        if (this.isActive || this.activeSession) {\n            try {\n                this.sentry.consume(data)\n            } catch (e) {\n                this.showMessage(colors.bgRed.black(' Error ') + ' ' + e)\n                this.logger.error('protocol error', e)\n                this.activeSession?.abort()\n                this.activeSession = null\n                this.isActive = false\n                // Don't forward the problematic data to terminal\n                return\n            }\n        } else {\n            try {\n                this.sentry.consume(data)\n            } catch (e) {\n                this.logger.error('zmodem detection error', e)\n            }\n\n            this.outputToTerminal.next(data)\n        }\n    }\n\n    private async process (detection): Promise<void> {\n        this.showMessage(colors.bgBlue.black(' ZMODEM ') + ' Session started')\n        this.showMessage('------------------------')\n\n        const zsession = detection.confirm()\n        this.activeSession = zsession\n        this.logger.info('new session', zsession)\n\n        try {\n            if (zsession.type === 'send') {\n                const transfers = await this.platform.startUpload({ multiple: true })\n                let filesRemaining = transfers.length\n                let sizeRemaining = transfers.reduce((a, b) => a + b.getSize(), 0)\n                for (const transfer of transfers) {\n                    await this.sendFile(zsession, transfer, filesRemaining, sizeRemaining)\n                    filesRemaining--\n                    sizeRemaining -= transfer.getSize()\n                }\n                await zsession.close()\n            } else {\n                zsession.on('offer', xfer => {\n                    this.receiveFile(xfer, zsession)\n                })\n\n                zsession.start()\n\n                await new Promise(resolve => zsession.on('session_end', resolve))\n            }\n\n            this.showMessage(colors.bgBlue.black(' ZMODEM ') + ' Complete')\n        } catch (error) {\n            this.logger.error('ZMODEM session error', error)\n            this.showMessage(colors.bgRed.black(' ZMODEM ') + ` Session failed: ${error.message}`)\n            try {\n                zsession.abort()\n            } catch { }\n        } finally {\n            this.activeSession = null\n        }\n    }\n\n    private async receiveFile (xfer, zsession) {\n        const details: {\n            name: string,\n            size: number,\n        } = xfer.get_details()\n        this.showMessage(colors.bgYellow.black(' Offered ') + ' ' + details.name, true)\n        this.logger.info('offered', xfer)\n\n        const transfer = await this.platform.startDownload(details.name, 0o644, details.size)\n        if (!transfer) {\n            this.showMessage(colors.bgRed.black(' Rejected ') + ' ' + details.name)\n            xfer.skip()\n            return\n        }\n\n        let canceled = false\n        const cancelSubscription = this.cancelEvent.subscribe(() => {\n            try {\n                zsession._skip()\n            } catch {}\n            canceled = true\n        })\n\n        try {\n            await Promise.race([\n                xfer.accept({\n                    on_input: chunk => {\n                        if (canceled) {\n                            return\n                        }\n                        transfer.write(Buffer.from(chunk))\n                        this.showMessage(colors.bgYellow.black(' ' + Math.round(100 * transfer.getCompletedBytes() / details.size).toString().padStart(3, ' ') + '% ') + ' ' + details.name, true)\n                    },\n                }),\n                this.cancelEvent.pipe(first()).toPromise(),\n            ])\n\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (canceled) {\n                transfer.cancel()\n                this.showMessage(colors.bgRed.black(' Canceled ') + ' ' + details.name)\n            } else {\n                transfer.close()\n                this.showMessage(colors.bgGreen.black(' Received ') + ' ' + details.name)\n            }\n        } catch {\n            this.showMessage(colors.bgRed.black(' Error ') + ' ' + details.name)\n        }\n\n        cancelSubscription.unsubscribe()\n    }\n\n    private async sendFile (zsession, transfer: FileUpload, filesRemaining, sizeRemaining) {\n        const offer = {\n            name: transfer.getName(),\n            size: transfer.getSize(),\n            mode: transfer.getMode(),\n            files_remaining: filesRemaining,\n            bytes_remaining: sizeRemaining,\n        }\n        this.logger.info('offering', offer)\n        this.showMessage(colors.bgYellow.black(' Offered ') + ' ' + offer.name, true)\n\n        const xfer = await zsession.send_offer(offer)\n        if (xfer) {\n            let canceled = false\n            const cancelSubscription = this.cancelEvent.subscribe(() => {\n                canceled = true\n            })\n\n            while (true) {\n                const chunk = await transfer.read()\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                if (canceled || !chunk.length) {\n                    break\n                }\n\n                await xfer.send(chunk)\n                this.showMessage(colors.bgYellow.black(' ' + Math.round(100 * transfer.getCompletedBytes() / offer.size).toString().padStart(3, ' ') + '% ') + offer.name, true)\n            }\n\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (canceled) {\n                transfer.cancel()\n            } else {\n                transfer.close()\n            }\n\n            await xfer.end()\n\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            if (canceled) {\n                this.showMessage(colors.bgRed.black(' Canceled ') + ' ' + offer.name)\n            } else {\n                this.showMessage(colors.bgGreen.black(' Sent ') + ' ' + offer.name)\n            }\n\n            cancelSubscription.unsubscribe()\n        } else {\n            transfer.cancel()\n            this.showMessage(colors.bgRed.black(' Rejected ') + ' ' + offer.name)\n            this.logger.warn('rejected by the other side')\n        }\n    }\n\n    private showMessage (msg: string, overwrite = false) {\n        this.outputToTerminal.next(Buffer.from(`\\r${msg}${SPACER}`))\n        if (!overwrite) {\n            this.outputToTerminal.next(Buffer.from('\\r\\n'))\n        }\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class ZModemDecorator extends TerminalDecorator {\n    constructor (\n        private log: LogService,\n        private hotkeys: HotkeysService,\n        private platform: PlatformService,\n    ) {\n        super()\n    }\n\n    attach (terminal: BaseTerminalTabComponent<any>): void {\n        setTimeout(() => {\n            this.attachToSession(terminal)\n            this.subscribeUntilDetached(terminal, terminal.sessionChanged$.subscribe(() => {\n                this.attachToSession(terminal)\n            }))\n        })\n    }\n\n    private attachToSession (terminal: BaseTerminalTabComponent<any>) {\n        if (!terminal.session) {\n            return\n        }\n        terminal.session.middleware.unshift(new ZModemMiddleware(this.log, this.hotkeys, this.platform))\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/frontends/frontend.ts",
    "content": "import { Injector } from '@angular/core'\nimport { Observable, Subject, AsyncSubject, ReplaySubject, BehaviorSubject } from 'rxjs'\nimport { BaseTerminalProfile, ResizeEvent } from '../api/interfaces'\n\nexport interface SearchOptions {\n    regex?: boolean\n    wholeWord?: boolean\n    caseSensitive?: boolean\n    incremental?: true\n}\n\nexport interface SearchState {\n    resultIndex?: number\n    resultCount: number\n}\n\n/**\n * Extend to add support for a different VT frontend implementation\n */\nexport abstract class Frontend {\n    enableResizing = true\n    protected ready = new AsyncSubject<void>()\n    protected title = new ReplaySubject<string>(1)\n    protected alternateScreenActive = new BehaviorSubject<boolean>(false)\n    protected mouseEvent = new Subject<MouseEvent>()\n    protected bell = new Subject<void>()\n    protected contentUpdated = new Subject<void>()\n    protected input = new Subject<Buffer>()\n    protected resize = new ReplaySubject<ResizeEvent>(1)\n    protected dragOver = new Subject<DragEvent>()\n    protected drop = new Subject<DragEvent>()\n    protected destroyed = new Subject<void>()\n\n    get ready$ (): Observable<void> { return this.ready }\n    get title$ (): Observable<string> { return this.title }\n    get alternateScreenActive$ (): Observable<boolean> { return this.alternateScreenActive }\n    get mouseEvent$ (): Observable<MouseEvent> { return this.mouseEvent }\n    get bell$ (): Observable<void> { return this.bell }\n    get contentUpdated$ (): Observable<void> { return this.contentUpdated }\n    get input$ (): Observable<Buffer> { return this.input }\n    get resize$ (): Observable<ResizeEvent> { return this.resize }\n    get dragOver$ (): Observable<DragEvent> { return this.dragOver }\n    get drop$ (): Observable<DragEvent> { return this.drop }\n    get destroyed$ (): Observable<void> { return this.destroyed }\n\n    constructor (protected injector: Injector) { }\n\n    destroy (): void {\n        this.destroyed.next()\n        for (const o of [\n            this.ready,\n            this.title,\n            this.alternateScreenActive,\n            this.mouseEvent,\n            this.bell,\n            this.contentUpdated,\n            this.input,\n            this.resize,\n            this.dragOver,\n            this.drop,\n            this.destroyed,\n        ]) {\n            o.complete()\n        }\n    }\n\n    abstract attach (host: HTMLElement, profile: BaseTerminalProfile): Promise<void>\n    detach (host: HTMLElement): void { } // eslint-disable-line\n\n    abstract getSelection (): string\n    abstract copySelection (): void\n    abstract selectAll (): void\n    abstract clearSelection (): void\n    abstract focus (): void\n    abstract write (data: string): Promise<void>\n    abstract clear (): void\n    abstract visualBell (): void\n\n    abstract scrollToTop (): void\n    abstract scrollLines (amount: number): void\n    abstract scrollPages (pages: number): void\n    abstract scrollToBottom (): void\n\n    abstract configure (profile: BaseTerminalProfile): void\n    abstract setZoom (zoom: number): void\n\n    abstract findNext (term: string, searchOptions?: SearchOptions): SearchState\n    abstract findPrevious (term: string, searchOptions?: SearchOptions): SearchState\n    abstract cancelSearch (): void\n\n    abstract saveState (): any\n    abstract restoreState (state: string): void\n\n    abstract supportsBracketedPaste (): boolean\n    abstract isAlternateScreenActive (): boolean\n}\n"
  },
  {
    "path": "tabby-terminal/src/frontends/xterm.css",
    "content": "@import url(\"../../node_modules/@xterm/xterm/css/xterm.css\");\n\n@font-face {\n    font-family: \"monospace-fallback\";\n    src: url(../fonts/SourceCodePro.ttf) format(\"truetype\");\n}\n\n.xterm-decoration-overview-ruler {\n    right: 1px;\n    pointer-events: none;\n}\n\n.xterm-viewport {\n    background: none !important;\n}\n"
  },
  {
    "path": "tabby-terminal/src/frontends/xtermFrontend.ts",
    "content": "import deepEqual from 'deep-equal'\nimport { BehaviorSubject, filter, firstValueFrom, takeUntil } from 'rxjs'\nimport { Injector } from '@angular/core'\nimport { ConfigService, getCSSFontFamily, getWindows10Build, HostAppService, HotkeysService, NotificationsService, Platform, PlatformService, ThemesService, TranslateService } from 'tabby-core'\nimport { Frontend, SearchOptions, SearchState } from './frontend'\nimport { Terminal, ITheme } from '@xterm/xterm'\nimport { FitAddon } from '@xterm/addon-fit'\nimport { ClipboardAddon } from '@xterm/addon-clipboard'\nimport { LigaturesAddon } from '@xterm/addon-ligatures'\nimport { ISearchOptions, SearchAddon } from '@xterm/addon-search'\nimport { WebglAddon } from '@xterm/addon-webgl'\nimport { Unicode11Addon } from '@xterm/addon-unicode11'\nimport { SerializeAddon } from '@xterm/addon-serialize'\nimport { ImageAddon } from '@xterm/addon-image'\nimport { CanvasAddon } from '@xterm/addon-canvas'\nimport { BaseTerminalProfile, TerminalColorScheme } from '../api/interfaces'\nimport { getTerminalBackgroundColor } from '../helpers'\nimport './xterm.css'\n\nconst COLOR_NAMES = [\n    'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white',\n    'brightBlack', 'brightRed', 'brightGreen', 'brightYellow', 'brightBlue', 'brightMagenta', 'brightCyan', 'brightWhite',\n]\n\nclass FlowControl {\n    private blocked = false\n    private blocked$ = new BehaviorSubject<boolean>(false)\n    private pendingCallbacks = 0\n    private lowWatermark = 5\n    private highWatermark = 10\n    private bytesWritten = 0\n    private bytesThreshold = 1024 * 128\n\n    constructor (private xterm: Terminal) { }\n\n    async write (data: string) {\n        if (this.blocked) {\n            await firstValueFrom(this.blocked$.pipe(filter(x => !x)))\n        }\n        this.bytesWritten += data.length\n        if (this.bytesWritten > this.bytesThreshold) {\n            this.pendingCallbacks++\n            this.bytesWritten = 0\n            if (!this.blocked && this.pendingCallbacks > this.highWatermark) {\n                this.blocked = true\n                this.blocked$.next(true)\n            }\n            this.xterm.write(data, () => {\n                this.pendingCallbacks--\n                if (this.blocked && this.pendingCallbacks < this.lowWatermark) {\n                    this.blocked = false\n                    this.blocked$.next(false)\n                }\n            })\n        } else {\n            this.xterm.write(data)\n        }\n    }\n}\n\n/** @hidden */\nexport class XTermFrontend extends Frontend {\n    enableResizing = true\n    xterm: Terminal\n    protected xtermCore: any\n    protected enableWebGL = false\n    private element?: HTMLElement\n    private configuredFontSize = 0\n    private configuredLinePadding = 0\n    private zoom = 0\n    private resizeHandler: () => void\n    private configuredTheme: ITheme = {}\n    private copyOnSelect = false\n    private preventNextOnSelectionChangeEvent = false\n    private search = new SearchAddon()\n    private searchState: SearchState = { resultCount: 0 }\n    private fitAddon = new FitAddon()\n    private serializeAddon = new SerializeAddon()\n    private ligaturesAddon?: LigaturesAddon\n    private webGLAddon?: WebglAddon\n    private canvasAddon?: CanvasAddon\n    private opened = false\n    private resizeObserver?: any\n    private flowControl: FlowControl\n\n    private configService: ConfigService\n    private hotkeysService: HotkeysService\n    private platformService: PlatformService\n    private hostApp: HostAppService\n    private themes: ThemesService\n    private notifications: NotificationsService\n    private translate: TranslateService\n\n    constructor (injector: Injector) {\n        super(injector)\n        this.configService = injector.get(ConfigService)\n        this.hotkeysService = injector.get(HotkeysService)\n        this.platformService = injector.get(PlatformService)\n        this.hostApp = injector.get(HostAppService)\n        this.themes = injector.get(ThemesService)\n        this.notifications = injector.get(NotificationsService)\n        this.translate = injector.get(TranslateService)\n\n        this.xterm = new Terminal({\n            allowTransparency: true,\n            allowProposedApi: true,\n            overviewRuler: {\n                width: 8,\n                showBottomBorder: false,\n                showTopBorder: false,\n            },\n            reflowCursorLine: true,\n            windowsPty: process.platform === 'win32' ? {\n                backend: this.configService.store.terminal.useConPTY ? 'conpty' : 'winpty',\n                buildNumber: getWindows10Build(),\n            } : undefined,\n        })\n        this.flowControl = new FlowControl(this.xterm)\n        this.xtermCore = this.xterm['_core']\n\n        this.xterm.onBinary(data => {\n            this.input.next(Buffer.from(data, 'binary'))\n        })\n        this.xterm.onData(data => {\n            this.input.next(Buffer.from(data, 'utf-8'))\n        })\n        this.xterm.onResize(({ cols, rows }) => {\n            this.resize.next({ rows, columns: cols })\n        })\n        this.xterm.onTitleChange(title => {\n            this.title.next(title)\n        })\n        this.xterm.onSelectionChange(() => {\n            if (this.getSelection()) {\n                if (this.copyOnSelect && !this.preventNextOnSelectionChangeEvent) {\n                    this.copySelection()\n                }\n                this.preventNextOnSelectionChangeEvent = false\n            }\n        })\n        this.xterm.onBell(() => {\n            this.bell.next()\n        })\n\n        this.xterm.loadAddon(this.fitAddon)\n        this.xterm.loadAddon(this.serializeAddon)\n        this.xterm.loadAddon(new Unicode11Addon())\n        this.xterm.loadAddon(new ClipboardAddon(undefined, {\n            readText: async () => {\n                return this.platformService.readClipboard()\n            },\n            writeText: async (_, text) => {\n                this.platformService.setClipboard({ text })\n                this.notifications.notice(this.translate.instant('Copied'))\n            },\n        }))\n        this.xterm.unicode.activeVersion = '11'\n\n        if (this.configService.store.terminal.sixel) {\n            this.xterm.loadAddon(new ImageAddon())\n        }\n\n        const keyboardEventHandler = (name: string, event: KeyboardEvent) => {\n            if (this.isAlternateScreenActive()) {\n                let modifiers = 0\n                modifiers += event.ctrlKey ? 1 : 0\n                modifiers += event.altKey ? 1 : 0\n                modifiers += event.shiftKey ? 1 : 0\n                modifiers += event.metaKey ? 1 : 0\n                if (event.key.startsWith('Arrow') && modifiers === 1) {\n                    return true\n                }\n            }\n\n            // Ctrl-/\n            if (event.type === 'keydown' && event.key === '/' && event.ctrlKey) {\n                this.input.next(Buffer.from('\\u001f', 'binary'))\n                return false\n            }\n\n            // Ctrl-@\n            if (event.type === 'keydown' && event.key === '@' && event.ctrlKey) {\n                this.input.next(Buffer.from('\\u0000', 'binary'))\n                return false\n            }\n\n            this.hotkeysService.pushKeyEvent(name, event)\n\n            let ret = true\n            if (this.hotkeysService.matchActiveHotkey(true) !== null) {\n                event.stopPropagation()\n                event.preventDefault()\n                ret = false\n            }\n            return ret\n        }\n\n        this.xterm.attachCustomKeyEventHandler((event: KeyboardEvent) => {\n            if (this.hostApp.platform !== Platform.Web) {\n                if (\n                    event.getModifierState('Meta') && event.key.toLowerCase() === 'v' ||\n                    event.key === 'Insert' && event.shiftKey\n                ) {\n                    event.preventDefault()\n                    return false\n                }\n            }\n            if (event.getModifierState('Meta') && event.key.startsWith('Arrow')) {\n                return false\n            }\n\n            return keyboardEventHandler('keydown', event)\n        })\n\n        this.xtermCore._scrollToBottom = this.xtermCore.scrollToBottom.bind(this.xtermCore)\n        this.xtermCore.scrollToBottom = () => null\n\n        this.resizeHandler = () => {\n            try {\n                if (this.xterm.element && getComputedStyle(this.xterm.element).getPropertyValue('height') !== 'auto') {\n                    this.fitAddon.fit()\n                    this.xterm.refresh(0, this.xterm.rows - 1)\n                }\n            } catch (e) {\n                // tends to throw when element wasn't shown yet\n                console.warn('Could not resize xterm', e)\n            }\n        }\n\n        const oldKeyUp = this.xtermCore._keyUp.bind(this.xtermCore)\n        this.xtermCore._keyUp = (e: KeyboardEvent) => {\n            this.xtermCore.updateCursorStyle(e)\n            if (keyboardEventHandler('keyup', e)) {\n                oldKeyUp(e)\n            }\n        }\n\n        this.xterm.buffer.onBufferChange(() => {\n            const altBufferActive = this.xterm.buffer.active.type === 'alternate'\n            this.alternateScreenActive.next(altBufferActive)\n        })\n\n    }\n\n    async attach (host: HTMLElement, profile: BaseTerminalProfile): Promise<void> {\n        this.element = host\n\n        this.xterm.open(host)\n        this.opened = true\n\n        // Work around font loading bugs\n        await new Promise(resolve => setTimeout(resolve, this.hostApp.platform === Platform.Web ? 1000 : 0))\n\n        // Just configure the colors to avoid a flash\n        this.configureColors(profile.terminalColorScheme)\n\n        if (this.enableWebGL) {\n            this.webGLAddon = new WebglAddon()\n            this.xterm.loadAddon(this.webGLAddon)\n            this.platformService.displayMetricsChanged$.pipe(\n                takeUntil(this.destroyed$),\n            ).subscribe(() => {\n                this.webGLAddon?.clearTextureAtlas()\n            })\n        } else {\n            this.canvasAddon = new CanvasAddon()\n            this.xterm.loadAddon(this.canvasAddon)\n            this.platformService.displayMetricsChanged$.pipe(\n                takeUntil(this.destroyed$),\n            ).subscribe(() => {\n                this.canvasAddon?.clearTextureAtlas()\n            })\n        }\n\n        // Allow an animation frame\n        await new Promise(r => setTimeout(r, 100))\n\n        this.ready.next()\n        this.ready.complete()\n\n        this.xterm.loadAddon(this.search)\n\n        this.search.onDidChangeResults(state => {\n            this.searchState = state\n        })\n\n        window.addEventListener('resize', this.resizeHandler)\n\n        this.resizeHandler()\n\n        // Allow an animation frame\n        await new Promise(r => setTimeout(r, 0))\n\n        host.addEventListener('dragOver', (event: any) => this.dragOver.next(event))\n        host.addEventListener('drop', event => this.drop.next(event))\n\n        host.addEventListener('mousedown', event => this.mouseEvent.next(event))\n        host.addEventListener('mouseup', event => this.mouseEvent.next(event))\n        host.addEventListener('mousewheel', event => this.mouseEvent.next(event as MouseEvent))\n        host.addEventListener('contextmenu', event => {\n            event.preventDefault()\n            event.stopPropagation()\n        })\n\n        this.resizeObserver = new window['ResizeObserver'](() => setTimeout(() => this.resizeHandler()))\n        this.resizeObserver.observe(host)\n    }\n\n    detach (_host: HTMLElement): void {\n        window.removeEventListener('resize', this.resizeHandler)\n        this.resizeObserver?.disconnect()\n        delete this.resizeObserver\n    }\n\n    destroy (): void {\n        super.destroy()\n        this.webGLAddon?.dispose()\n        this.canvasAddon?.dispose()\n        this.xterm.dispose()\n    }\n\n    getSelection (): string {\n        return this.xterm.getSelection()\n    }\n\n    copySelection (): void {\n        const text = this.getSelection()\n        if (!text.trim().length) {\n            return\n        }\n        if (text.length < 1024 * 32 && this.configService.store.terminal.copyAsHTML) {\n            this.platformService.setClipboard({\n                text: this.getSelection(),\n                html: this.getSelectionAsHTML(),\n            })\n        } else {\n            this.platformService.setClipboard({\n                text: this.getSelection(),\n            })\n        }\n    }\n\n    selectAll (): void {\n        this.xterm.selectAll()\n    }\n\n    clearSelection (): void {\n        this.xterm.clearSelection()\n    }\n\n    focus (): void {\n        setTimeout(() => this.xterm.focus())\n    }\n\n    async write (data: string): Promise<void> {\n        await this.flowControl.write(data)\n    }\n\n    clear (): void {\n        this.xterm.clear()\n    }\n\n    visualBell (): void {\n        if (this.element) {\n            this.element.style.animation = 'none'\n            setTimeout(() => {\n                this.element!.style.animation = 'terminalShakeFrames 0.3s ease'\n            })\n        }\n    }\n\n    scrollToTop (): void {\n        this.xterm.scrollToTop()\n    }\n\n    scrollPages (pages: number): void {\n        this.xterm.scrollPages(pages)\n    }\n\n    scrollLines (amount: number): void {\n        this.xterm.scrollLines(amount)\n    }\n\n    scrollToBottom (): void {\n        this.xtermCore._scrollToBottom()\n    }\n\n    private configureColors (scheme: TerminalColorScheme | null): void {\n        const appColorScheme = this.themes._getActiveColorScheme() as TerminalColorScheme\n\n        scheme = scheme ?? appColorScheme\n\n        const theme: ITheme = {\n            foreground: scheme.foreground,\n            selectionBackground: scheme.selection ?? '#88888888',\n            selectionForeground: scheme.selectionForeground ?? undefined,\n            background: getTerminalBackgroundColor(this.configService, this.themes, scheme) ?? '#00000000',\n            cursor: scheme.cursor,\n            cursorAccent: scheme.cursorAccent,\n            overviewRulerBorder: scheme.background,\n        }\n\n        for (let i = 0; i < COLOR_NAMES.length; i++) {\n            theme[COLOR_NAMES[i]] = scheme.colors[i]\n        }\n\n        theme.scrollbarSliderBackground = theme.brightBlack\n        theme.scrollbarSliderHoverBackground = theme.brightBlack\n        theme.scrollbarSliderHoverBackground = theme.brightBlack\n\n        if (!deepEqual(this.configuredTheme, theme)) {\n            this.xterm.options.theme = theme\n            this.configuredTheme = theme\n        }\n    }\n\n    configure (profile: BaseTerminalProfile): void {\n        const config = this.configService.store\n\n        setImmediate(() => {\n            if (this.xterm.cols && this.xterm.rows && this.xtermCore.charMeasure) {\n                if (this.xtermCore.charMeasure) {\n                    this.xtermCore.charMeasure.measure(this.xtermCore.options)\n                }\n                if (this.xtermCore.renderer) {\n                    this.xtermCore.renderer._updateDimensions()\n                }\n                this.resizeHandler()\n            }\n        })\n\n        this.xtermCore.browser = {\n            ...this.xtermCore.browser,\n            isWindows: this.hostApp.platform === Platform.Windows,\n            isLinux: this.hostApp.platform === Platform.Linux,\n            isMac: this.hostApp.platform === Platform.macOS,\n        }\n\n        this.xterm.options.fontFamily = getCSSFontFamily(config)\n        this.xterm.options.cursorStyle = {\n            beam: 'bar',\n        }[config.terminal.cursor] || config.terminal.cursor\n        this.xterm.options.cursorBlink = config.terminal.cursorBlink\n        this.xterm.options.macOptionIsMeta = config.terminal.altIsMeta\n        this.xterm.options.scrollback = config.terminal.scrollbackLines\n        this.xterm.options.wordSeparator = config.terminal.wordSeparator\n        this.xterm.options.drawBoldTextInBrightColors = config.terminal.drawBoldTextInBrightColors\n        this.xterm.options.fontWeight = config.terminal.fontWeight\n        this.xterm.options.fontWeightBold = config.terminal.fontWeightBold\n        this.xterm.options.minimumContrastRatio = config.terminal.minimumContrastRatio\n        this.configuredFontSize = config.terminal.fontSize\n        this.configuredLinePadding = config.terminal.linePadding\n        this.setFontSize()\n\n        this.copyOnSelect = config.terminal.copyOnSelect\n\n        this.configureColors(profile.terminalColorScheme)\n\n        if (this.opened && config.terminal.ligatures && !this.ligaturesAddon && this.hostApp.platform !== Platform.Web) {\n            this.ligaturesAddon = new LigaturesAddon()\n            this.xterm.loadAddon(this.ligaturesAddon)\n        }\n    }\n\n    setZoom (zoom: number): void {\n        this.zoom = zoom\n        this.setFontSize()\n        this.resizeHandler()\n    }\n\n    private getSearchOptions (searchOptions?: SearchOptions): ISearchOptions {\n        return {\n            ...searchOptions,\n            decorations: {\n                matchOverviewRuler: '#888888',\n                activeMatchColorOverviewRuler: '#ffff00',\n                matchBackground: '#888888',\n                activeMatchBackground: '#ffff00',\n            },\n        }\n    }\n\n    private wrapSearchResult (result: boolean): SearchState {\n        if (!result) {\n            return { resultCount: 0 }\n        }\n        return this.searchState\n    }\n\n    findNext (term: string, searchOptions?: SearchOptions): SearchState {\n        if (this.copyOnSelect) {\n            this.preventNextOnSelectionChangeEvent = true\n        }\n        return this.wrapSearchResult(\n            this.search.findNext(term, this.getSearchOptions(searchOptions)),\n        )\n    }\n\n    findPrevious (term: string, searchOptions?: SearchOptions): SearchState {\n        if (this.copyOnSelect) {\n            this.preventNextOnSelectionChangeEvent = true\n        }\n        return this.wrapSearchResult(\n            this.search.findPrevious(term, this.getSearchOptions(searchOptions)),\n        )\n    }\n\n    cancelSearch (): void {\n        this.search.clearDecorations()\n        this.focus()\n    }\n\n    saveState (): any {\n        return this.serializeAddon.serialize({\n            excludeAltBuffer: true,\n            excludeModes: true,\n            scrollback: 1000,\n        })\n    }\n\n    restoreState (state: string): void {\n        this.xterm.write(state)\n    }\n\n    supportsBracketedPaste (): boolean {\n        return this.xterm.modes.bracketedPasteMode\n    }\n\n    isAlternateScreenActive (): boolean {\n        return this.xterm.buffer.active.type === 'alternate'\n    }\n\n    private setFontSize () {\n        const scale = Math.pow(1.1, this.zoom)\n        this.xterm.options.fontSize = this.configuredFontSize * scale\n        // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n        this.xterm.options.lineHeight = Math.max(1, (this.configuredFontSize + this.configuredLinePadding * 2) / this.configuredFontSize)\n        this.resizeHandler()\n    }\n\n    private getSelectionAsHTML (): string {\n        return this.serializeAddon.serializeAsHTML({ includeGlobalBackground: true, onlySelection: true  })\n    }\n}\n\n/** @hidden */\nexport class XTermWebGLFrontend extends XTermFrontend {\n    protected enableWebGL = true\n}\n"
  },
  {
    "path": "tabby-terminal/src/helpers.ts",
    "content": "import { TerminalColorScheme } from './api/interfaces'\nimport { ConfigService, ThemesService } from 'tabby-core'\n\nexport function getTerminalBackgroundColor (\n    config: ConfigService,\n    themes: ThemesService,\n    scheme: TerminalColorScheme | null,\n): string|null {\n    const appTheme = themes.findCurrentTheme()\n    const appColorScheme = themes._getActiveColorScheme() as TerminalColorScheme\n\n    // Use non transparent background when:\n    // - legacy theme and user choses colorScheme based BG\n    // - or new theme but profile-specific scheme is used\n    const shouldUseCSBackground =\n        !appTheme.followsColorScheme && config.store.terminal.background === 'colorScheme'\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        || appTheme.followsColorScheme && scheme?.name !== appColorScheme.name\n\n    return shouldUseCSBackground && scheme ? scheme.background : null\n}\n"
  },
  {
    "path": "tabby-terminal/src/hotkeys.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { HotkeyDescription, HotkeyProvider, TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class TerminalHotkeyProvider extends HotkeyProvider {\n    hotkeys: HotkeyDescription[] = [\n        {\n            id: 'copy',\n            name: this.translate.instant('Copy to clipboard'),\n        },\n        {\n            id: 'paste',\n            name: this.translate.instant('Paste from clipboard'),\n        },\n        {\n            id: 'select-all',\n            name: this.translate.instant('Select all'),\n        },\n        {\n            id: 'home',\n            name: this.translate.instant('Beginning of the line'),\n        },\n        {\n            id: 'end',\n            name: this.translate.instant('End of the line'),\n        },\n        {\n            id: 'previous-word',\n            name: this.translate.instant('Jump to previous word'),\n        },\n        {\n            id: 'next-word',\n            name: this.translate.instant('Jump to next word'),\n        },\n        {\n            id: 'delete-previous-word',\n            name: this.translate.instant('Delete previous word'),\n        },\n        {\n            id: 'delete-line',\n            name: this.translate.instant('Delete entire line'),\n        },\n        {\n            id: 'delete-next-word',\n            name: this.translate.instant('Delete next word'),\n        },\n        {\n            id: 'clear',\n            name: this.translate.instant('Clear terminal'),\n        },\n        {\n            id: 'zoom-in',\n            name: this.translate.instant('Zoom in'),\n        },\n        {\n            id: 'zoom-out',\n            name: this.translate.instant('Zoom out'),\n        },\n        {\n            id: 'reset-zoom',\n            name: this.translate.instant('Reset zoom'),\n        },\n        {\n            id: 'ctrl-c',\n            name: this.translate.instant('Intelligent Ctrl-C (copy/abort)'),\n        },\n        {\n            id: 'copy-current-path',\n            name: this.translate.instant('Copy current path'),\n        },\n        {\n            id: 'search',\n            name: this.translate.instant('Search'),\n        },\n        {\n            id: 'pane-focus-all',\n            name: this.translate.instant('Focus all panes at once (broadcast)'),\n        },\n        {\n            id: 'focus-all-tabs',\n            name: this.translate.instant('Focus all tabs at once (broadcast)'),\n        },\n        {\n            id: 'scroll-to-top',\n            name: this.translate.instant('Scroll terminal to top'),\n        },\n        {\n            id: 'scroll-page-up',\n            name: this.translate.instant('Scroll terminal one page up'),\n        },\n        {\n            id: 'scroll-up',\n            name: this.translate.instant('Scroll terminal one line up'),\n        },\n        {\n            id: 'scroll-down',\n            name: this.translate.instant('Scroll terminal one line down'),\n        },\n        {\n            id: 'scroll-page-down',\n            name: this.translate.instant('Scroll terminal one page down'),\n        },\n        {\n            id: 'scroll-to-bottom',\n            name: this.translate.instant('Scroll terminal to bottom'),\n        },\n        {\n            id: 'reconnect-tab',\n            name: this.translate.instant('Reconnect current tab (Serial/Telnet/SSH)'),\n        },\n        {\n            id: 'disconnect-tab',\n            name: this.translate.instant('Disconnect current tab (Serial/Telnet/SSH)'),\n        },\n    ]\n\n    constructor (private translate: TranslateService) { super() }\n\n    async provide (): Promise<HotkeyDescription[]> {\n        return this.hotkeys\n    }\n}\n\n"
  },
  {
    "path": "tabby-terminal/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\nimport { ToastrModule } from 'ngx-toastr'\nimport { NgxColorsModule } from 'ngx-colors'\n\nimport TabbyCorePlugin, { ConfigProvider, HotkeyProvider, TabContextMenuItemProvider, CLIHandler } from 'tabby-core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { AppearanceSettingsTabComponent } from './components/appearanceSettingsTab.component'\nimport { ColorSchemeSettingsTabComponent } from './components/colorSchemeSettingsTab.component'\nimport { TerminalSettingsTabComponent } from './components/terminalSettingsTab.component'\nimport { ColorPickerComponent } from './components/colorPicker.component'\nimport { ColorSchemePreviewComponent } from './components/colorSchemePreview.component'\nimport { SearchPanelComponent } from './components/searchPanel.component'\nimport { StreamProcessingSettingsComponent } from './components/streamProcessingSettings.component'\nimport { LoginScriptsSettingsComponent } from './components/loginScriptsSettings.component'\nimport { TerminalToolbarComponent } from './components/terminalToolbar.component'\nimport { ColorSchemeSelectorComponent } from './components/colorSchemeSelector.component'\nimport { InputProcessingSettingsComponent } from './components/inputProcessingSettings.component'\nimport { ColorSchemeSettingsForModeComponent } from './components/colorSchemeSettingsForMode.component'\n\nimport { TerminalDecorator } from './api/decorator'\nimport { TerminalContextMenuItemProvider } from './api/contextMenuProvider'\nimport { TerminalColorSchemeProvider } from './api/colorSchemeProvider'\nimport { TerminalSettingsTabProvider, AppearanceSettingsTabProvider, ColorSchemeSettingsTabProvider } from './settings'\nimport { DebugDecorator } from './features/debug'\nimport { ZModemDecorator } from './features/zmodem'\nimport { TerminalConfigProvider } from './config'\nimport { TerminalHotkeyProvider } from './hotkeys'\nimport { CopyPasteContextMenu, MiscContextMenu, LegacyContextMenu, ReconnectContextMenu, SaveAsProfileContextMenu } from './tabContextMenu'\n\nimport { Frontend } from './frontends/frontend'\nimport { XTermFrontend, XTermWebGLFrontend } from './frontends/xtermFrontend'\nimport { TerminalCLIHandler } from './cli'\nimport { DefaultColorSchemes } from './colorSchemes'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        NgbModule,\n        ToastrModule,\n        TabbyCorePlugin,\n        NgxColorsModule,\n    ],\n    providers: [\n        { provide: SettingsTabProvider, useClass: AppearanceSettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: ColorSchemeSettingsTabProvider, multi: true },\n        { provide: SettingsTabProvider, useClass: TerminalSettingsTabProvider, multi: true },\n\n        { provide: ConfigProvider, useClass: TerminalConfigProvider, multi: true },\n        { provide: HotkeyProvider, useClass: TerminalHotkeyProvider, multi: true },\n        { provide: TerminalDecorator, useClass: ZModemDecorator, multi: true },\n        { provide: TerminalDecorator, useClass: DebugDecorator, multi: true },\n\n        { provide: TabContextMenuItemProvider, useClass: CopyPasteContextMenu, multi: true },\n        { provide: TabContextMenuItemProvider, useClass: MiscContextMenu, multi: true },\n        { provide: TabContextMenuItemProvider, useClass: LegacyContextMenu, multi: true },\n        { provide: TabContextMenuItemProvider, useClass: ReconnectContextMenu, multi: true },\n        { provide: TabContextMenuItemProvider, useClass: SaveAsProfileContextMenu, multi: true },\n\n        { provide: CLIHandler, useClass: TerminalCLIHandler, multi: true },\n        { provide: TerminalColorSchemeProvider, useClass: DefaultColorSchemes, multi: true },\n    ],\n    declarations: [\n        ColorPickerComponent,\n        ColorSchemePreviewComponent,\n        ColorSchemeSelectorComponent,\n        AppearanceSettingsTabComponent,\n        ColorSchemeSettingsTabComponent,\n        TerminalSettingsTabComponent,\n        SearchPanelComponent,\n        StreamProcessingSettingsComponent,\n        LoginScriptsSettingsComponent,\n        TerminalToolbarComponent,\n        InputProcessingSettingsComponent,\n        ColorSchemeSettingsForModeComponent,\n    ],\n    exports: [\n        ColorPickerComponent,\n        ColorSchemeSelectorComponent,\n        SearchPanelComponent,\n        StreamProcessingSettingsComponent,\n        LoginScriptsSettingsComponent,\n        TerminalToolbarComponent,\n        InputProcessingSettingsComponent,\n    ],\n})\nexport default class TerminalModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class\n\nexport { TerminalDecorator, TerminalContextMenuItemProvider, TerminalColorSchemeProvider }\nexport { Frontend, XTermFrontend, XTermWebGLFrontend }\nexport { BaseTerminalTabComponent } from './api/baseTerminalTab.component'\nexport { ConnectableTerminalTabComponent } from './api/connectableTerminalTab.component'\nexport * from './api/interfaces'\nexport * from './middleware/streamProcessing'\nexport * from './middleware/loginScriptProcessing'\nexport * from './middleware/oscProcessing'\nexport * from './middleware/utf8Splitter'\nexport * from './middleware/inputProcessing'\nexport * from './api/middleware'\nexport * from './session'\nexport { LoginScriptsSettingsComponent, StreamProcessingSettingsComponent }\nexport { MultifocusService } from './services/multifocus.service'\n"
  },
  {
    "path": "tabby-terminal/src/middleware/inputProcessing.ts",
    "content": "import { SessionMiddleware } from '../api/middleware'\n\nexport interface InputProcessingOptions {\n    backspace: 'ctrl-h'|'ctrl-?'|'delete'|'backspace'\n}\n\nexport class InputProcessor extends SessionMiddleware {\n    constructor (\n        private options: InputProcessingOptions,\n    ) {\n        super()\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        if (data.length === 1 && data[0] === 0x7f) {\n            if (this.options.backspace === 'ctrl-h') {\n                data = Buffer.from('\\x08')\n            } else if (this.options.backspace === 'ctrl-?') {\n                data = Buffer.from('\\x7f')\n            } else if (this.options.backspace === 'delete') {\n                data = Buffer.from('\\x1b[3~')\n            } else {\n                data = Buffer.from('\\x7f')\n            }\n        }\n        this.outputToSession.next(data)\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/middleware/loginScriptProcessing.ts",
    "content": "import deepClone from 'clone-deep'\nimport { Logger } from 'tabby-core'\nimport { SessionMiddleware } from '../api/middleware'\n\nexport interface LoginScript {\n    expect: string\n    send: string\n    isRegex?: boolean\n    optional?: boolean\n}\n\nexport interface LoginScriptsOptions {\n    scripts: LoginScript[]\n}\n\nexport class LoginScriptProcessor extends SessionMiddleware {\n    private remainingScripts: LoginScript[] = []\n\n    private escapeSeqMap = {\n        a: '\\x07',\n        b: '\\x08',\n        e: '\\x1b',\n        f: '\\x0c',\n        n: '\\x0a',\n        r: '\\x0d',\n        t: '\\x09',\n        v: '\\x0b',\n    }\n\n    constructor (\n        private logger: Logger,\n        options: LoginScriptsOptions,\n    ) {\n        super()\n        this.remainingScripts = deepClone(options.scripts)\n        for (const script of this.remainingScripts) {\n            if (!script.isRegex) {\n                script.expect = this.unescape(script.expect)\n            }\n            script.send = this.unescape(script.send)\n        }\n    }\n\n    feedFromSession (data: Buffer): void {\n        const dataString = data.toString()\n\n        for (const script of this.remainingScripts) {\n            if (!script.expect) {\n                continue\n            }\n            let match = false\n            if (script.isRegex) {\n                const re = new RegExp(script.expect, 'g')\n                match = re.test(dataString)\n            } else {\n                match = dataString.includes(script.expect)\n            }\n\n            if (match) {\n                this.logger.info('Executing script:', script)\n                this.outputToSession.next(Buffer.from(script.send + '\\n'))\n                this.remainingScripts = this.remainingScripts.filter(x => x !== script)\n            } else {\n                if (script.optional) {\n                    this.logger.debug('Skip optional script: ' + script.expect)\n                    this.remainingScripts = this.remainingScripts.filter(x => x !== script)\n                } else {\n                    break\n                }\n            }\n        }\n\n        super.feedFromSession(data)\n    }\n\n    executeUnconditionalScripts (): void {\n        for (const script of this.remainingScripts) {\n            if (!script.expect) {\n                this.logger.info('Executing script:', script.send)\n                this.outputToSession.next(Buffer.from(script.send + '\\n'))\n                this.remainingScripts = this.remainingScripts.filter(x => x !== script)\n            } else {\n                break\n            }\n        }\n    }\n\n    unescape (line: string): string {\n        line = line.replace(/\\\\((x\\d{2})|(u\\d{4}))/g, (match, g) => {\n            return String.fromCharCode(parseInt(g.substr(1), 16))\n        })\n        return line.replace(/\\\\(.)/g, (match, g) => {\n            return this.escapeSeqMap[g] || g\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/middleware/oscProcessing.ts",
    "content": "import * as os from 'os'\nimport { Subject, Observable } from 'rxjs'\nimport { SessionMiddleware } from '../api/middleware'\n\nconst OSCPrefix = Buffer.from('\\x1b]')\nconst OSCSuffixes = [Buffer.from('\\x07'), Buffer.from('\\x1b\\\\')]\n\nexport class OSCProcessor extends SessionMiddleware {\n    get cwdReported$ (): Observable<string> { return this.cwdReported }\n\n    private cwdReported = new Subject<string>()\n\n    feedFromSession (data: Buffer): void {\n        let startIndex = 0\n        while (data.includes(OSCPrefix, startIndex)) {\n            const si = startIndex\n            if (!OSCSuffixes.some(s => data.includes(s, si))) {\n                break\n            }\n\n            const params = data.subarray(data.indexOf(OSCPrefix, startIndex) + OSCPrefix.length)\n\n            const [closesSuffix, closestSuffixIndex] = OSCSuffixes\n                .map((suffix): [Buffer, number] => [suffix, params.indexOf(suffix)])\n                .filter(([_, index]) => index !== -1)\n                .sort(([_, a], [__, b]) => a - b)[0]\n\n            const oscString = params.subarray(0, closestSuffixIndex).toString()\n\n            startIndex = data.indexOf(closesSuffix, startIndex) + closesSuffix.length\n\n            const [oscCodeString, ...oscParams] = oscString.split(';')\n            const oscCode = parseInt(oscCodeString)\n\n            if (oscCode === 1337) {\n                const paramString = oscParams.join(';')\n                if (paramString.startsWith('CurrentDir=')) {\n                    let reportedCWD = paramString.split('=')[1]\n                    if (reportedCWD.startsWith('~')) {\n                        reportedCWD = os.homedir() + reportedCWD.substring(1)\n                    }\n                    this.cwdReported.next(reportedCWD)\n                } else {\n                    console.debug('Unsupported OSC 1337 parameter:', paramString)\n                }\n            } else {\n                continue\n            }\n        }\n        super.feedFromSession(data)\n    }\n\n    close (): void {\n        this.cwdReported.complete()\n        super.close()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/middleware/streamProcessing.ts",
    "content": "import hexdump from 'hexer'\nimport bufferReplace from 'buffer-replace'\nimport colors from 'ansi-colors'\nimport binstring from 'binstring'\nimport { interval, debounce } from 'rxjs'\nimport { PassThrough, Readable, Writable } from 'stream'\nimport { ReadLine, createInterface as createReadline, clearLine } from 'readline'\nimport { SessionMiddleware } from '../api/middleware'\n\nexport type InputMode = null | 'local-echo' | 'readline' | 'readline-hex'\nexport type OutputMode = null | 'hex'\nexport type NewlineMode = null | 'cr' | 'lf' | 'crlf' | 'implicit_cr' | 'implicit_lf'\n\nexport interface StreamProcessingOptions {\n    inputMode: InputMode\n    inputNewlines: NewlineMode\n    outputMode: OutputMode\n    outputNewlines: NewlineMode\n}\n\nexport class TerminalStreamProcessor extends SessionMiddleware {\n    forceEcho = false\n    private inputReadline: ReadLine|null = null\n    private inputPromptVisible = false\n    private inputReadlineInStream: Readable & Writable\n    private inputReadlineOutStream: Readable & Writable\n    private started = false\n\n    constructor (private options: StreamProcessingOptions) {\n        super()\n        this.inputReadlineInStream = new PassThrough()\n        this.inputReadlineOutStream = new PassThrough()\n        this.inputReadlineOutStream.on('data', data => {\n            this.outputToTerminal.next(Buffer.from(data))\n        })\n        this.outputToTerminal$.pipe(debounce(() => interval(500))).subscribe(() => {\n            if (this.started) {\n                this.onOutputSettled()\n            }\n        })\n    }\n\n    start (): void {\n        this.inputReadline = createReadline({\n            input: this.inputReadlineInStream,\n            output: this.inputReadlineOutStream,\n            terminal: true,\n            prompt: this.options.inputMode === 'readline-hex' ? 'hex> ' : '> ',\n        })\n        this.inputReadline.on('line', line => {\n            this.onTerminalInput(Buffer.from(line + '\\n'))\n            this.resetInputPrompt()\n        })\n        this.started = true\n    }\n\n    feedFromSession (data: Buffer): void {\n        if (this.options.inputMode?.startsWith('readline')) {\n            if (this.inputPromptVisible) {\n                clearLine(this.inputReadlineOutStream, 0)\n                this.outputToTerminal.next(Buffer.from('\\r'))\n                this.inputPromptVisible = false\n            }\n        }\n\n        data = this.replaceNewlines(data, this.options.outputNewlines)\n\n        if (this.options.outputMode === 'hex') {\n            this.outputToTerminal.next(Buffer.concat([\n                Buffer.from('\\r\\n'),\n                Buffer.from(hexdump(data, {\n                    group: 1,\n                    gutter: 4,\n                    divide: colors.gray(' ｜ '),\n                    emptyHuman: colors.gray('╳'),\n                }).replaceAll('\\n', '\\r\\n')),\n                Buffer.from('\\r\\n\\n'),\n            ]))\n        } else {\n            this.outputToTerminal.next(data)\n        }\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        if (this.options.inputMode === 'local-echo' || this.forceEcho) {\n            this.outputToTerminal.next(this.replaceNewlines(data, 'crlf'))\n        }\n        if (this.options.inputMode?.startsWith('readline')) {\n            this.inputReadlineInStream.write(data)\n        } else {\n            this.onTerminalInput(data)\n        }\n    }\n\n    resize (): void {\n        if (this.options.inputMode?.startsWith('readline')) {\n            this.inputReadlineOutStream.emit('resize')\n        }\n    }\n\n    close (): void {\n        this.inputReadline?.close()\n        super.close()\n    }\n\n    private onTerminalInput (data: Buffer) {\n        if (this.options.inputMode === 'readline-hex') {\n            const tokens = data.toString().split(/\\s/g)\n            data = Buffer.concat(tokens.filter(t => !!t).map(t => {\n                if (t.startsWith('0x')) {\n                    t = t.substring(2)\n                }\n                return binstring(t, { 'in': 'hex' })\n            }))\n        }\n\n        data = this.replaceNewlines(data, this.options.inputNewlines)\n        this.outputToSession.next(data)\n    }\n\n    private onOutputSettled () {\n        if (this.options.inputMode?.startsWith('readline') && !this.inputPromptVisible) {\n            this.resetInputPrompt()\n        }\n    }\n\n    private resetInputPrompt () {\n        this.outputToTerminal.next(Buffer.from('\\r\\n'))\n        this.inputReadline?.prompt(true)\n        this.inputPromptVisible = true\n    }\n\n    private replaceNewlines (data: Buffer, mode?: NewlineMode): Buffer {\n        if (!mode) {\n            return data\n        } else if (mode === 'implicit_cr') {\n            return bufferReplace(data, '\\n', '\\r\\n')\n        } else if (mode === 'implicit_lf') {\n            return bufferReplace(data, '\\r', '\\r\\n')\n        }\n\n        data = bufferReplace(data, '\\r\\n', '\\n')\n        data = bufferReplace(data, '\\r', '\\n')\n        const replacement = {\n            strip: '',\n            cr: '\\r',\n            lf: '\\n',\n            crlf: '\\r\\n',\n        }[mode]\n        return bufferReplace(data, '\\n', replacement)\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/middleware/utf8Splitter.ts",
    "content": "import { UTF8Splitter } from 'tabby-core'\n\nimport { SessionMiddleware } from '../api/middleware'\n\n/**\n * Ensures that the session output is chunked at UTF8 character boundaries.\n */\nexport class UTF8SplitterMiddleware extends SessionMiddleware {\n    private decoder = new UTF8Splitter()\n\n    feedFromSession (data: Buffer): void {\n        super.feedFromSession(this.decoder.write(data))\n    }\n\n    close (): void {\n        const remainder = this.decoder.flush()\n        if (remainder.length) {\n            super.feedFromSession(remainder)\n        }\n        super.close()\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/services/multifocus.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { BaseTerminalTabComponent } from '../api/baseTerminalTab.component'\nimport { Subscription } from 'rxjs'\nimport { SplitTabComponent, TranslateService, AppService, HotkeysService } from 'tabby-core'\n\n@Injectable({ providedIn: 'root' })\nexport class MultifocusService {\n    private inputSubscription: Subscription|null = null\n    private currentTab: BaseTerminalTabComponent<any>|null = null\n    private warningElement: HTMLElement\n\n    constructor (\n        private app: AppService,\n        hotkeys: HotkeysService,\n        translate: TranslateService,\n    ) {\n        this.warningElement = document.createElement('div')\n        this.warningElement.className = 'broadcast-status-warning'\n        this.warningElement.innerText = translate.instant('Broadcast mode. Click anywhere to cancel.')\n        this.warningElement.style.display = 'none'\n        document.body.appendChild(this.warningElement)\n\n        hotkeys.hotkey$.subscribe(hotkey => {\n            switch (hotkey) {\n                case 'focus-all-tabs':\n                    this.focusAllTabs()\n                    break\n                case 'pane-focus-all':\n                    this.focusAllPanes()\n                    break\n            }\n        })\n    }\n\n    start (currentTab: BaseTerminalTabComponent<any>, tabs: BaseTerminalTabComponent<any>[]): void {\n        if (this.inputSubscription) {\n            return\n        }\n\n        if (currentTab.parent instanceof SplitTabComponent) {\n            const parent = currentTab.parent\n            parent._allFocusMode = true\n            parent.layout()\n        }\n\n        this.currentTab = currentTab\n        this.inputSubscription = currentTab.frontend?.input$.subscribe(data => {\n            for (const tab of tabs) {\n                if (tab !== currentTab) {\n                    tab.sendInput(data)\n                }\n            }\n        }) ?? null\n    }\n\n    cancel (): void {\n        this.warningElement.style.display = 'none'\n        document.querySelector('app-root')!['style'].border = 'none'\n\n        if (!this.inputSubscription) {\n            return\n        }\n        this.inputSubscription.unsubscribe()\n        this.inputSubscription = null\n        if (this.currentTab?.parent instanceof SplitTabComponent) {\n            this.currentTab.parent._allFocusMode = false\n            this.currentTab.parent.layout()\n        }\n        this.currentTab = null\n    }\n\n    focusAllTabs (): void {\n        let currentTab = this.app.activeTab\n        if (currentTab && currentTab instanceof SplitTabComponent) {\n            currentTab = currentTab.getFocusedTab()\n        }\n        if (!currentTab || !(currentTab instanceof BaseTerminalTabComponent)) {\n            return\n        }\n        const tabs = this.app.tabs\n            .map((t => {\n                if (t instanceof BaseTerminalTabComponent) {\n                    return [t]\n                } else if (t instanceof SplitTabComponent) {\n                    return t.getAllTabs()\n                        .filter(x => x instanceof BaseTerminalTabComponent)\n                } else {\n                    return []\n                }\n            }) as (_) => BaseTerminalTabComponent<any>[])\n            .flat()\n        this.start(currentTab, tabs)\n\n        this.warningElement.style.display = 'block'\n        document.querySelector('app-root')!['style'].border = '5px solid red'\n    }\n\n    focusAllPanes (): void {\n        const currentTab = this.app.activeTab\n        if (!currentTab || !(currentTab instanceof SplitTabComponent)) {\n            return\n        }\n\n        const pane = currentTab.getFocusedTab()\n        if (!pane || !(pane instanceof BaseTerminalTabComponent)) {\n            return\n        }\n        const tabs = currentTab.getAllTabs().filter(t => t instanceof BaseTerminalTabComponent)\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n        this.start(pane, tabs as any)\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/session.ts",
    "content": "import { Observable, Subject } from 'rxjs'\nimport { Logger } from 'tabby-core'\nimport { LoginScriptProcessor, LoginScriptsOptions } from './middleware/loginScriptProcessing'\nimport { OSCProcessor } from './middleware/oscProcessing'\nimport { SessionMiddlewareStack } from './api/middleware'\n\n/**\n * A session object for a [[BaseTerminalTabComponent]]\n * Extend this to implement custom I/O and process management for your terminal tab\n */\nexport abstract class BaseSession {\n    open: boolean\n    readonly oscProcessor = new OSCProcessor()\n    readonly middleware = new SessionMiddlewareStack()\n    protected output = new Subject<string>()\n    protected binaryOutput = new Subject<Buffer>()\n    protected closed = new Subject<void>()\n    protected destroyed = new Subject<void>()\n    protected loginScriptProcessor: LoginScriptProcessor | null = null\n    protected reportedCWD?: string\n    private initialDataBuffer = Buffer.from('')\n    private initialDataBufferReleased = false\n\n    get output$ (): Observable<string> { return this.output }\n    get binaryOutput$ (): Observable<Buffer> { return this.binaryOutput }\n    get closed$ (): Observable<void> { return this.closed }\n    get destroyed$ (): Observable<void> { return this.destroyed }\n\n    constructor (protected logger: Logger) {\n        this.middleware.push(this.oscProcessor)\n        this.oscProcessor.cwdReported$.subscribe(cwd => {\n            this.reportedCWD = cwd\n        })\n\n        this.middleware.outputToTerminal$.subscribe(data => {\n            if (!this.initialDataBufferReleased) {\n                this.initialDataBuffer = Buffer.concat([this.initialDataBuffer, data])\n            } else {\n                this.output.next(data.toString())\n                this.binaryOutput.next(data)\n            }\n        })\n\n        this.middleware.outputToSession$.subscribe(data => this.write(data))\n    }\n\n    feedFromTerminal (data: Buffer): void {\n        this.middleware.feedFromTerminal(data)\n    }\n\n    protected emitOutput (data: Buffer): void {\n        this.middleware.feedFromSession(data)\n    }\n\n    releaseInitialDataBuffer (): void {\n        this.initialDataBufferReleased = true\n        this.output.next(this.initialDataBuffer.toString())\n        this.binaryOutput.next(this.initialDataBuffer)\n        this.initialDataBuffer = Buffer.from('')\n    }\n\n    setLoginScriptsOptions (options: LoginScriptsOptions): void {\n        const newProcessor = new LoginScriptProcessor(this.logger, options)\n        if (this.loginScriptProcessor) {\n            this.middleware.replace(this.loginScriptProcessor, newProcessor)\n        } else {\n            this.middleware.push(newProcessor)\n        }\n        this.loginScriptProcessor = newProcessor\n    }\n\n    async destroy (): Promise<void> {\n        if (this.open) {\n            this.logger.info('Destroying')\n            this.open = false\n            this.closed.next()\n            this.destroyed.next()\n            await this.gracefullyKillProcess()\n        }\n        this.middleware.close()\n        this.closed.complete()\n        this.destroyed.complete()\n        this.output.complete()\n        this.binaryOutput.complete()\n    }\n\n    abstract start (options: unknown): Promise<void>\n    abstract resize (columns: number, rows: number): void\n    abstract write (data: Buffer): void\n    abstract kill (signal?: string): void\n    abstract gracefullyKillProcess (): Promise<void>\n    abstract supportsWorkingDirectory (): boolean\n    abstract getWorkingDirectory (): Promise<string|null>\n}\n"
  },
  {
    "path": "tabby-terminal/src/settings.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { SettingsTabProvider } from 'tabby-settings'\n\nimport { AppearanceSettingsTabComponent } from './components/appearanceSettingsTab.component'\nimport { TerminalSettingsTabComponent } from './components/terminalSettingsTab.component'\nimport { ColorSchemeSettingsTabComponent } from './components/colorSchemeSettingsTab.component'\nimport { TranslateService } from 'tabby-core'\n\n/** @hidden */\n@Injectable()\nexport class AppearanceSettingsTabProvider extends SettingsTabProvider {\n    id = 'terminal-appearance'\n    icon = 'swatchbook'\n    title = this.translate.instant('Appearance')\n    prioritized = true\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return AppearanceSettingsTabComponent\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class ColorSchemeSettingsTabProvider extends SettingsTabProvider {\n    id = 'terminal-color-scheme'\n    icon = 'palette'\n    title = this.translate.instant('Color scheme')\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return ColorSchemeSettingsTabComponent\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class TerminalSettingsTabProvider extends SettingsTabProvider {\n    id = 'terminal'\n    icon = 'terminal'\n    title = this.translate.instant('Terminal')\n    prioritized = true\n\n    constructor (private translate: TranslateService) { super() }\n\n    getComponentType (): any {\n        return TerminalSettingsTabComponent\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/src/tabContextMenu.ts",
    "content": "import { Injectable, Optional, Inject } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseTabComponent, TabContextMenuItemProvider, NotificationsService, MenuItemOptions, TranslateService, SplitTabComponent, PromptModalComponent, ConfigService, PartialProfile, Profile } from 'tabby-core'\nimport { BaseTerminalTabComponent } from './api/baseTerminalTab.component'\nimport { TerminalContextMenuItemProvider } from './api/contextMenuProvider'\nimport { MultifocusService } from './services/multifocus.service'\nimport { ConnectableTerminalTabComponent } from './api/connectableTerminalTab.component'\nimport { v4 as uuidv4 } from 'uuid'\nimport slugify from 'slugify'\n\n/** @hidden */\n@Injectable()\nexport class CopyPasteContextMenu extends TabContextMenuItemProvider {\n    weight = -10\n\n    constructor (\n        private notifications: NotificationsService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]> {\n        if (tabHeader) {\n            return []\n        }\n        if (tab instanceof BaseTerminalTabComponent) {\n            return [\n                {\n                    label: this.translate.instant('Copy'),\n                    click: (): void => {\n                        setTimeout(() => {\n                            tab.frontend?.copySelection()\n                            this.notifications.notice(this.translate.instant('Copied'))\n                        })\n                    },\n                },\n                {\n                    label: this.translate.instant('Paste'),\n                    click: () => tab.paste(),\n                },\n            ]\n        }\n        return []\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class MiscContextMenu extends TabContextMenuItemProvider {\n    weight = 1\n\n    constructor (\n        private translate: TranslateService,\n        private multifocus: MultifocusService,\n    ) { super() }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        const items: MenuItemOptions[] = []\n        if (tab instanceof BaseTerminalTabComponent && tab.enableToolbar && !tab.pinToolbar) {\n            items.push({\n                label: this.translate.instant('Show toolbar'),\n                click: () => {\n                    tab.pinToolbar = true\n                },\n            })\n        }\n        if (tab instanceof BaseTerminalTabComponent && tab.session?.supportsWorkingDirectory()) {\n            items.push({\n                label: this.translate.instant('Copy current path'),\n                click: () => tab.copyCurrentPath(),\n            })\n        }\n        items.push({\n            label: this.translate.instant('Focus all tabs'),\n            click: () => {\n                this.multifocus.focusAllTabs()\n            },\n        })\n        if (tab.parent instanceof SplitTabComponent && tab.parent.getAllTabs().length > 1) {\n            items.push({\n                label: this.translate.instant('Focus all panes'),\n                click: () => {\n                    this.multifocus.focusAllPanes()\n                },\n            })\n        }\n        return items\n    }\n}\n\n/** @hidden */\n@Injectable()\nexport class ReconnectContextMenu extends TabContextMenuItemProvider {\n    weight = 1\n\n    constructor (\n        private translate: TranslateService,\n        private notifications: NotificationsService,\n    ) { super() }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        if (tab instanceof ConnectableTerminalTabComponent) {\n            return [\n                {\n                    label: this.translate.instant('Disconnect'),\n                    click: (): void => {\n                        setTimeout(() => {\n                            tab.disconnect()\n                            this.notifications.notice(this.translate.instant('Disconnect'))\n                        })\n                    },\n                },\n                {\n                    label: this.translate.instant('Reconnect'),\n                    click: (): void => {\n                        setTimeout(() => {\n                            tab.reconnect()\n                            this.notifications.notice(this.translate.instant('Reconnect'))\n                        })\n                    },\n                },\n            ]\n        }\n        return []\n    }\n\n}\n\n/** @hidden */\n@Injectable()\nexport class LegacyContextMenu extends TabContextMenuItemProvider {\n    weight = 1\n\n    constructor (\n        @Optional() @Inject(TerminalContextMenuItemProvider) protected contextMenuProviders: TerminalContextMenuItemProvider[]|null,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        if (!this.contextMenuProviders) {\n            return []\n        }\n        if (tab instanceof BaseTerminalTabComponent) {\n            let items: MenuItemOptions[] = []\n            for (const p of this.contextMenuProviders) {\n                items = items.concat(await p.getItems(tab))\n            }\n            return items\n        }\n        return []\n    }\n\n}\n\n/** @hidden */\n@Injectable()\nexport class SaveAsProfileContextMenu extends TabContextMenuItemProvider {\n    constructor (\n        private config: ConfigService,\n        private ngbModal: NgbModal,\n        private notifications: NotificationsService,\n        private translate: TranslateService,\n    ) {\n        super()\n    }\n\n    async getItems (tab: BaseTabComponent): Promise<MenuItemOptions[]> {\n        if (tab instanceof BaseTerminalTabComponent) {\n            return [\n                {\n                    label: this.translate.instant('Save as profile'),\n                    click: async () => {\n                        const modal = this.ngbModal.open(PromptModalComponent)\n                        modal.componentInstance.prompt = this.translate.instant('New profile name')\n                        modal.componentInstance.value = tab.profile.name\n                        const name = (await modal.result.catch(() => null))?.value\n                        if (!name) {\n                            return\n                        }\n\n                        const options = JSON.parse(JSON.stringify(tab.profile.options))\n\n                        const cwd = await tab.session?.getWorkingDirectory() ?? tab.profile.options.cwd\n                        if (cwd) {\n                            options.cwd = cwd\n                        }\n\n                        const profile: PartialProfile<Profile> = {\n                            type: tab.profile.type,\n                            name,\n                            options,\n                        }\n\n                        profile.id = `${profile.type}:custom:${slugify(name)}:${uuidv4()}`\n                        profile.group = tab.profile.group\n                        profile.icon = tab.profile.icon\n                        profile.color = tab.profile.color\n                        profile.disableDynamicTitle = tab.profile.disableDynamicTitle\n                        profile.behaviorOnSessionEnd = tab.profile.behaviorOnSessionEnd\n\n                        this.config.store.profiles = [\n                            ...this.config.store.profiles,\n                            profile,\n                        ]\n                        this.config.save()\n                        this.notifications.info(this.translate.instant('Saved'))\n                    },\n                },\n            ]\n        }\n\n        return []\n    }\n}\n"
  },
  {
    "path": "tabby-terminal/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-terminal/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\n        \"../../app/node_modules/*\",\n        \"../node_modules/xterm/src/*\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-terminal/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => {\n    const cfg = config({\n        name: 'terminal',\n        dirname: __dirname,\n        externals: [\n            'opentype.js',\n        ],\n        rules: [\n            {\n                test: /lib[\\\\/]xterm-addon-image-worker.js$/i,\n                type: 'asset/source',\n            },\n        ],\n    })\n    return cfg\n}\n"
  },
  {
    "path": "tabby-uac/.gitignore",
    "content": "Debug\n*.ipch\n*.suo\nv15"
  },
  {
    "path": "tabby-uac/UAC/UAC.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <VCProjectVersion>15.0</VCProjectVersion>\n    <ProjectGuid>{DCE3B955-DB20-4334-B11B-F6C040825A59}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>UAC</RootNamespace>\n    <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>Application</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <PlatformToolset>v141</PlatformToolset>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>Unicode</CharacterSet>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"Shared\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>Use</PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <SDLCheck>true</SDLCheck>\n      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <ConformanceMode>true</ConformanceMode>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"stdafx.h\" />\n    <ClInclude Include=\"targetver.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"stdafx.cpp\">\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">Create</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">Create</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">Create</PrecompiledHeader>\n      <PrecompiledHeader Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">Create</PrecompiledHeader>\n    </ClCompile>\n    <ClCompile Include=\"UAC.cpp\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>"
  },
  {
    "path": "tabby-uac/UAC/UAC.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"stdafx.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"targetver.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"stdafx.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"UAC.cpp\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "tabby-uac/UAC/UAC.vcxproj.user",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LocalDebuggerCommandArguments>cmd.exe</LocalDebuggerCommandArguments>\n    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "tabby-uac/UAC/app.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \n<asmv1:assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" \n    xmlns:asmv1=\"urn:schemas-microsoft-com:asm.v1\" \n    xmlns:asmv2=\"urn:schemas-microsoft-com:asm.v2\" \n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n    <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication\" />\n    <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n        <security>\n            <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n                <requestedExecutionLevel level=\"requireAdministrator\" \n        uiAccess=\"true\" />\n            </requestedPrivileges>\n        </security>\n    </trustInfo>\n</asmv1:assembly> "
  },
  {
    "path": "tabby-uac/UAC.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27703.2042\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"UAC\", \"UAC\\UAC.vcxproj\", \"{DCE3B955-DB20-4334-B11B-F6C040825A59}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Debug|x64.Build.0 = Debug|x64\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Debug|x86.ActiveCfg = Debug|Win32\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Debug|x86.Build.0 = Debug|Win32\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Release|x64.ActiveCfg = Release|x64\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Release|x64.Build.0 = Release|x64\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Release|x86.ActiveCfg = Release|Win32\n\t\t{DCE3B955-DB20-4334-B11B-F6C040825A59}.Release|x86.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {77F43A07-B912-4CCD-9928-5C12F6D0112B}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "tabby-web/package.json",
    "content": "{\n  \"name\": \"tabby-web\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"description\": \"Web-specific bindings\",\n  \"keywords\": [\n    \"tabby-builtin-plugin\"\n  ],\n  \"main\": \"dist/index.js\",\n  \"typings\": \"typings/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"dist\",\n    \"typings\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"peerDependencies\": {\n    \"@angular/core\": \"^15\"\n  },\n  \"devDependencies\": {\n    \"@vaadin/vaadin-context-menu\": \"^5.0.0\",\n    \"bootstrap\": \"^4.1.3\",\n    \"bowser\": \"^2.11.0\",\n    \"copy-text-to-clipboard\": \"^3.0.1\"\n  }\n}\n"
  },
  {
    "path": "tabby-web/src/components/messageBoxModal.component.pug",
    "content": ".modal-body\n    div {{options.message}}\n    small {{options.detail}}\n\n.modal-footer\n    .ms-auto\n    button.btn(\n        *ngFor='let button of options.buttons; index as i',\n        [autofocus]='i === options.defaultId',\n        [class.btn-primary]='i === options.defaultId',\n        [class.btn-secondary]='i !== options.defaultId',\n        (click)='onButton(i)',\n    ) {{button}}\n"
  },
  {
    "path": "tabby-web/src/components/messageBoxModal.component.ts",
    "content": "import { Component, Input, ElementRef } from '@angular/core'\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'\nimport { BaseComponent, HotkeysService, MessageBoxOptions } from 'tabby-core'\n\n/** @hidden */\n@Component({\n    templateUrl: './messageBoxModal.component.pug',\n})\nexport class MessageBoxModalComponent extends BaseComponent {\n    @Input() options: MessageBoxOptions\n\n    constructor (\n        hotkeys: HotkeysService,\n        private element: ElementRef,\n        private modalInstance: NgbActiveModal,\n    ) {\n        super()\n        this.subscribeUntilDestroyed(hotkeys.key, (event: KeyboardEvent) => {\n            if (event.type === 'keydown') {\n                if (event.key === 'Enter' && this.options.defaultId !== undefined) {\n                    this.modalInstance.close(this.options.defaultId)\n                }\n            }\n        })\n    }\n\n    ngAfterViewInit (): void {\n        this.element.nativeElement.querySelector('button[autofocus]').focus()\n    }\n\n    onButton (index: number): void {\n        this.modalInstance.close(index)\n    }\n}\n"
  },
  {
    "path": "tabby-web/src/config.ts",
    "content": "import { ConfigProvider } from 'tabby-core'\n\n/** @hidden */\nexport class WebConfigProvider extends ConfigProvider {\n    defaults = {\n        web: {\n            preventAccidentalTabClosure: false,\n        },\n    }\n}\n"
  },
  {
    "path": "tabby-web/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ConfigProvider, HostAppService, HostWindowService, LogService, PlatformService, UpdaterService } from 'tabby-core'\n\nimport { WebPlatformService } from './platform'\nimport { ConsoleLogService } from './services/log.service'\nimport { NullUpdaterService } from './services/updater.service'\nimport { WebHostWindow } from './services/hostWindow.service'\nimport { WebHostApp } from './services/hostApp.service'\nimport { MessageBoxModalComponent } from './components/messageBoxModal.component'\nimport { WebConfigProvider } from './config'\n\nimport './styles.scss'\n\n@NgModule({\n    imports: [\n        CommonModule,\n    ],\n    providers: [\n        { provide: PlatformService, useClass: WebPlatformService },\n        { provide: LogService, useClass: ConsoleLogService },\n        { provide: UpdaterService, useClass: NullUpdaterService },\n        { provide: HostWindowService, useClass: WebHostWindow },\n        { provide: HostAppService, useClass: WebHostApp },\n        { provide: ConfigProvider, useClass: WebConfigProvider, multi: true },\n    ],\n    declarations: [\n        MessageBoxModalComponent,\n    ],\n})\nexport default class WebModule { } // eslint-disable-line @typescript-eslint/no-extraneous-class\n"
  },
  {
    "path": "tabby-web/src/platform.ts",
    "content": "import '@vaadin/vaadin-context-menu'\nimport copyToClipboard from 'copy-text-to-clipboard'\nimport { Injectable, Inject } from '@angular/core'\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap'\nimport { PlatformService, ClipboardContent, MenuItemOptions, MessageBoxOptions, MessageBoxResult, FileUpload, FileUploadOptions, FileDownload, DirectoryDownload, HTMLFileUpload, DirectoryUpload } from 'tabby-core'\n\n// eslint-disable-next-line no-duplicate-imports\nimport type { ContextMenuElement, ContextMenuItem } from '@vaadin/vaadin-context-menu'\n\nimport { MessageBoxModalComponent } from './components/messageBoxModal.component'\nimport './styles.scss'\n\n\n@Injectable()\nexport class WebPlatformService extends PlatformService {\n    private menu: ContextMenuElement\n    private contextMenuHandlers = new Map<ContextMenuItem, () => void>()\n    private fileSelector: HTMLInputElement\n\n    constructor (\n        // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n        @Inject('WEB_CONNECTOR') private connector: any,\n        private ngbModal: NgbModal,\n    ) {\n        super()\n        this.menu = window.document.createElement('vaadin-context-menu')\n        this.menu.addEventListener('item-selected', e => {\n            this.contextMenuHandlers.get(e.detail.value)?.()\n        })\n        document.body.appendChild(this.menu)\n\n        this.fileSelector = document.createElement('input')\n        this.fileSelector.type = 'file'\n        this.fileSelector.style.visibility = 'hidden'\n        document.body.appendChild(this.fileSelector)\n    }\n\n    readClipboard (): string {\n        return ''\n    }\n\n    setClipboard (content: ClipboardContent): void {\n        copyToClipboard(content.text)\n    }\n\n    async loadConfig (): Promise<string> {\n        return this.connector.loadConfig()\n    }\n\n    async saveConfig (content: string): Promise<void> {\n        await this.connector.saveConfig(content)\n    }\n\n    getOSRelease (): string {\n        return '1.0'\n    }\n\n    openExternal (url: string): void {\n        window.open(url)\n    }\n\n    getAppVersion (): string {\n        return this.connector.getAppVersion()\n    }\n\n    async listFonts (): Promise<string[]> {\n        return []\n    }\n\n    popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void {\n        this.contextMenuHandlers.clear()\n        this.menu.items = menu\n            .filter(x => x.type !== 'separator')\n            .map(x => this.remapMenuItem(x))\n        setTimeout(() => {\n            this.menu.open(event)\n        }, 10)\n    }\n\n    private remapMenuItem (item: MenuItemOptions): ContextMenuItem {\n        const cmi = {\n            text: item.label,\n            disabled: !(item.enabled ?? true),\n            checked: item.checked,\n            children: item.submenu?.map(i => this.remapMenuItem(i)),\n        }\n        if (item.click) {\n            this.contextMenuHandlers.set(cmi, item.click)\n        }\n        return cmi\n    }\n\n    async showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult> {\n        const modal = this.ngbModal.open(MessageBoxModalComponent, {\n            backdrop: 'static',\n        })\n        const instance: MessageBoxModalComponent = modal.componentInstance\n        instance.options = options\n        try {\n            const response = await modal.result\n            return { response }\n        } catch {\n            return { response: options.cancelId ?? 1 }\n        }\n    }\n\n    quit (): void {\n        window.close()\n    }\n\n    async startDownload (name: string, mode: number, size: number): Promise<FileDownload|null> {\n        const transfer = new HTMLFileDownload(name, mode, size)\n        this.fileTransferStarted.next(transfer)\n        return transfer\n    }\n\n    async startDownloadDirectory (_name: string, _estimatedSize?: number): Promise<DirectoryDownload|null> {\n        throw new Error('Unsupported')\n    }\n\n    startUpload (options?: FileUploadOptions): Promise<FileUpload[]> {\n        return new Promise(resolve => {\n            this.fileSelector.onchange = () => {\n                const transfers: FileUpload[] = []\n                const fileList = this.fileSelector.files!\n                // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n                for (let i = 0; i < (fileList.length ?? 0); i++) {\n                    const file = fileList[i]\n                    const transfer = new HTMLFileUpload(file)\n                    this.fileTransferStarted.next(transfer)\n                    transfers.push(transfer)\n                    if (!options?.multiple) {\n                        break\n                    }\n                }\n                resolve(transfers)\n            }\n            this.fileSelector.click()\n        })\n    }\n\n    async startUploadDirectory (_paths?: string[]): Promise<DirectoryUpload> {\n        return new DirectoryUpload()\n    }\n\n    setErrorHandler (handler: (_: any) => void): void {\n        window.addEventListener('error', handler)\n    }\n\n    async pickDirectory (): Promise<string> {\n        throw new Error('Unsupported')\n    }\n}\n\nclass HTMLFileDownload extends FileDownload {\n    private buffers: Uint8Array[] = []\n\n    constructor (\n        private name: string,\n        private mode: number,\n        private size: number,\n    ) {\n        super()\n    }\n\n    getName (): string {\n        return this.name\n    }\n\n    getMode (): number {\n        return this.mode\n    }\n\n    getSize (): number {\n        return this.size\n    }\n\n    async write (buffer: Uint8Array): Promise<void> {\n        this.buffers.push(Uint8Array.from(buffer))\n        this.increaseProgress(buffer.length)\n        if (this.isComplete()) {\n            this.finish()\n        }\n    }\n\n    finish () {\n        const blob = new Blob(this.buffers, { type: 'application/octet-stream' })\n        const element = window.document.createElement('a')\n        element.href = window.URL.createObjectURL(blob)\n        element.download = this.name\n        document.body.appendChild(element)\n        element.click()\n        document.body.removeChild(element)\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    close (): void { }\n}\n"
  },
  {
    "path": "tabby-web/src/services/hostApp.service.ts",
    "content": "import Bowser from 'bowser'\nimport { Injectable, Injector } from '@angular/core'\nimport { HostAppService, Platform } from 'tabby-core'\n\n@Injectable()\nexport class WebHostApp extends HostAppService {\n    get platform (): Platform {\n        return Platform.Web\n    }\n\n    get configPlatform (): Platform {\n        const os = Bowser.parse(window.navigator.userAgent).os\n        return Platform[os.name ?? 'Windows'] ?? Platform.Windows\n    }\n\n    // Needed for injector metadata\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n    ) {\n        super(injector)\n    }\n\n    newWindow (): void {\n        throw new Error('Not implemented')\n    }\n\n    relaunch (): void {\n        location.reload()\n    }\n\n    quit (): void {\n        window.close()\n    }\n}\n"
  },
  {
    "path": "tabby-web/src/services/hostWindow.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ConfigService, HostWindowService, TranslateService } from 'tabby-core'\n\n@Injectable({ providedIn: 'root' })\nexport class WebHostWindow extends HostWindowService {\n    get isFullscreen (): boolean { return !!document.fullscreenElement }\n\n    constructor (\n        config: ConfigService,\n        translate: TranslateService,\n    ) {\n        super()\n        this.windowShown.next()\n        this.windowFocused.next()\n\n        const unloadHandler = (event) => {\n            if (config.store.web.preventAccidentalTabClosure) {\n                event.preventDefault()\n                event.returnValue = translate.instant('Are you sure you want to close Tabby? You can disable this prompt in Settings -> Window.')\n            } else {\n                window.removeEventListener('beforeunload', unloadHandler)\n            }\n        }\n        window.addEventListener('beforeunload', unloadHandler)\n    }\n\n    reload (): void {\n        location.reload()\n    }\n\n    setTitle (title?: string): void {\n        document.title = title ?? 'Tabby'\n    }\n\n    toggleFullscreen (): void {\n        if (this.isFullscreen) {\n            document.exitFullscreen()\n        } else {\n            document.body.requestFullscreen({ navigationUI: 'hide' })\n        }\n    }\n\n    minimize (): void {\n        throw new Error('Unavailable')\n    }\n\n    isMaximized (): boolean {\n        return true\n    }\n\n    toggleMaximize (): void {\n        throw new Error('Unavailable')\n    }\n\n    close (): void {\n        window.close()\n    }\n}\n"
  },
  {
    "path": "tabby-web/src/services/log.service.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ConsoleLogger, Logger } from 'tabby-core'\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleLogService {\n    create (name: string): Logger {\n        return new ConsoleLogger(name)\n    }\n}\n"
  },
  {
    "path": "tabby-web/src/services/updater.service.ts",
    "content": "import { UpdaterService } from 'tabby-core'\n\nexport class NullUpdaterService extends UpdaterService {\n    async check (): Promise<boolean> {\n        return false\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    async update (): Promise<void> { }\n}\n"
  },
  {
    "path": "tabby-web/src/styles.scss",
    "content": "@import \"../../tabby-core/src/theme.vars.scss\";\n\nhtml.tabby {\n    --lumo-primary-text-color: #{$body-color};\n    --lumo-base-color: #{$body-bg};\n    --lumo-body-text-color: #{$body-color};\n    --lumo-tint-5pct: #{$body-bg};\n    --lumo-font-family: #{$font-family-sans-serif};\n    --lumo-font-size-m: #{$font-size-base};\n    --lumo-box-shadow-m: #{$dropdown-box-shadow};\n}\n"
  },
  {
    "path": "tabby-web/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-web/tsconfig.typings.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\",\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"declarationDir\": \"./typings\",\n    \"paths\": {\n      \"tabby-*\": [\"../../tabby-*\"],\n      \"*\": [\"../../app/node_modules/*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "tabby-web/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'web',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tabby-web-demo/data/v86_all.js",
    "content": ";(function(){'use strict';var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};\n$jscomp.getGlobal=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"Cannot find global object\");};$jscomp.global=$jscomp.getGlobal(this);$jscomp.IS_SYMBOL_NATIVE=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol(\"x\");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};\n$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX=\"$jscp$\";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};$jscomp.polyfill=function(a,b,c,d){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,d):$jscomp.polyfillUnisolated(a,b,c,d))};\n$jscomp.polyfillUnisolated=function(a,b,c,d){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))return;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};\n$jscomp.polyfillIsolated=function(a,b,c,d){var e=a.split(\".\");a=1===e.length;d=e[0];d=!a&&d in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<e.length-1;f++){var k=e[f];if(!(k in d))return;d=d[k]}e=e[e.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&\"es6\"===c?d[e]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,e,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[e]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(e):$jscomp.POLYFILL_PREFIX+e,e=\n$jscomp.propertyToPolyfillSymbol[e],$jscomp.defineProperty(d,e,{configurable:!0,writable:!0,value:b})))};$jscomp.polyfill(\"String.prototype.trimRight\",function(a){function b(){return this.replace(/[\\s\\xa0]+$/,\"\")}return a||b},\"es_2019\",\"es3\");\nvar LOG_ALL=-1,LOG_NONE=0,LOG_OTHER=1,LOG_CPU=2,LOG_FPU=4,LOG_MEM=8,LOG_DMA=16,LOG_IO=32,LOG_PS2=64,LOG_PIC=128,LOG_VGA=256,LOG_PIT=512,LOG_MOUSE=1024,LOG_PCI=2048,LOG_BIOS=4096,LOG_FLOPPY=8192,LOG_SERIAL=16384,LOG_DISK=32768,LOG_RTC=65536,LOG_HPET=131072,LOG_ACPI=262144,LOG_APIC=524288,LOG_NET=1048576,LOG_VIRTIO=2097152,LOG_9P=4194304,LOG_SB16=8388608,LOG_NAMES=[[1,\"\"],[LOG_CPU,\"CPU\"],[LOG_DISK,\"DISK\"],[LOG_FPU,\"FPU\"],[LOG_MEM,\"MEM\"],[LOG_DMA,\"DMA\"],[LOG_IO,\"IO\"],[LOG_PS2,\"PS2\"],[LOG_PIC,\"PIC\"],\n[LOG_VGA,\"VGA\"],[LOG_PIT,\"PIT\"],[LOG_MOUSE,\"MOUS\"],[LOG_PCI,\"PCI\"],[LOG_BIOS,\"BIOS\"],[LOG_FLOPPY,\"FLOP\"],[LOG_SERIAL,\"SERI\"],[LOG_RTC,\"RTC\"],[LOG_HPET,\"HPET\"],[LOG_ACPI,\"ACPI\"],[LOG_APIC,\"APIC\"],[LOG_NET,\"NET\"],[LOG_VIRTIO,\"VIO\"],[LOG_9P,\"9P\"],[LOG_SB16,\"SB16\"]],flag_carry=1,flag_parity=4,flag_adjust=16,flag_zero=64,flag_sign=128,flag_trap=256,flag_interrupt=512,flag_direction=1024,flag_overflow=2048,flag_iopl=12288,flag_nt=16384,flag_rf=65536,flag_vm=131072,flag_ac=262144,flag_vif=524288,flag_vip=\n1048576,flag_id=2097152,flags_default=2,reg_eax=0,reg_ecx=1,reg_edx=2,reg_ebx=3,reg_esp=4,reg_ebp=5,reg_esi=6,reg_edi=7,reg_es=0,reg_cs=1,reg_ss=2,reg_ds=3,reg_fs=4,reg_gs=5,reg_tr=6,reg_ldtr=7,MMAP_BLOCK_BITS=17,MMAP_BLOCK_SIZE=1<<MMAP_BLOCK_BITS,REPEAT_STRING_PREFIX_NONE=0,REPEAT_STRING_PREFIX_NZ=1,REPEAT_STRING_PREFIX_Z=2,CR0_PE=1,CR0_MP=2,CR0_EM=4,CR0_TS=8,CR0_ET=16,CR0_WP=65536,CR0_AM=262144,CR0_NW=536870912,CR0_CD=1073741824,CR0_PG=-2147483648,CR4_VME=1,CR4_PVI=2,CR4_TSD=4,CR4_PSE=16,CR4_DE=\n8,CR4_PAE=32,CR4_PGE=128,CR4_OSFXSR=512,CR4_OSXMMEXCPT=1024,SEG_PREFIX_NONE=-1,SEG_PREFIX_ZERO=7,IA32_SYSENTER_CS=372,IA32_SYSENTER_ESP=373,IA32_SYSENTER_EIP=374,IA32_TIME_STAMP_COUNTER=16,IA32_PLATFORM_ID=23,MSR_EBC_FREQUENCY_ID=44,IA32_APIC_BASE_MSR=27,IA32_BIOS_SIGN_ID=139,IA32_MISC_ENABLE=416,IA32_RTIT_CTL=1392,MSR_SMI_COUNT=52,IA32_MCG_CAP=377,IA32_KERNEL_GS_BASE=-1073741567,MSR_PKG_C2_RESIDENCY=1549,IA32_APIC_BASE_BSP=256,IA32_APIC_BASE_EXTD=1024,IA32_APIC_BASE_EN=2048,TSR_BACKLINK=0,TSR_CR3=\n28,TSR_EIP=32,TSR_EFLAGS=36,TSR_EAX=40,TSR_ECX=44,TSR_EDX=48,TSR_EBX=52,TSR_ESP=56,TSR_EBP=60,TSR_ESI=64,TSR_EDI=68,TSR_ES=72,TSR_CS=76,TSR_SS=80,TSR_DS=84,TSR_FS=88,TSR_GS=92,TSR_LDT=96,FW_CFG_SIGNATURE=0,FW_CFG_ID=1,FW_CFG_RAM_SIZE=3,FW_CFG_NB_CPUS=5,FW_CFG_MAX_CPUS=15,FW_CFG_NUMA=13,FW_CFG_FILE_DIR=25,FW_CFG_CUSTOM_START=32768,FW_CFG_FILE_START=49152,FW_CFG_SIGNATURE_QEMU=1431127377,MXCSR_MASK=65471,WASM_TABLE_SIZE=900,WASM_TABLE_OFFSET=1024,MIXER_CHANNEL_LEFT=0,MIXER_CHANNEL_RIGHT=1,MIXER_CHANNEL_BOTH=\n2,MIXER_SRC_MASTER=0,MIXER_SRC_PCSPEAKER=1,MIXER_SRC_DAC=2;function ScreenAdapter(a,b){function c(w){w=w.toString(16);return\"#\"+Array(7-w.length).join(\"0\")+w}function d(w,y,C,D){w.style.width=\"\";w.style.height=\"\";D&&(w.style.transform=\"\");var F=w.getBoundingClientRect();D?w.style.transform=(1===y?\"\":\" scaleX(\"+y+\")\")+(1===C?\"\":\" scaleY(\"+C+\")\"):(0===y%1&&0===C%1?(e.style.imageRendering=\"crisp-edges\",e.style.imageRendering=\"pixelated\",e.style[\"-ms-interpolation-mode\"]=\"nearest-neighbor\"):(e.style.imageRendering=\"\",e.style[\"-ms-interpolation-mode\"]=\"\"),D=window.devicePixelRatio||\n1,0!==D%1&&(y/=D,C/=D));1!==y&&(w.style.width=F.width*y+\"px\");1!==C&&(w.style.height=F.height*C+\"px\")}console.assert(a,\"1st argument must be a DOM container\");var e=a.getElementsByTagName(\"canvas\")[0],f=e.getContext(\"2d\",{alpha:!1}),k=a.getElementsByTagName(\"div\")[0],g=document.createElement(\"div\"),l,m,n,r,v=1,q=1,p=1,u,t,x=!1,z,A,E,B=!1,I=this;a=new Uint16Array([199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,402,225,237,\n243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]);for(var J=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,\n9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),G=[],M,H=0;256>H;H++)M=127<H?a[H-128]:32>H?J[H]:H,G[H]=String.fromCharCode(M);f.imageSmoothingEnabled=!1;g.style.position=\"absolute\";g.style.backgroundColor=\"#ccc\";g.style.width=\"7px\";g.style.display=\"inline-block\";k.style.display=\"block\";e.style.display=\"none\";this.bus=b;b.register(\"screen-set-mode\",function(w){this.set_mode(w)},this);b.register(\"screen-fill-buffer-end\",function(w){this.update_buffer(w)},\nthis);b.register(\"screen-put-char\",function(w){this.put_char(w[0],w[1],w[2],w[3],w[4])},this);b.register(\"screen-update-cursor\",function(w){this.update_cursor(w[0],w[1])},this);b.register(\"screen-update-cursor-scanline\",function(w){this.update_cursor_scanline(w[0],w[1])},this);b.register(\"screen-clear\",function(){this.clear_screen()},this);b.register(\"screen-set-size-text\",function(w){this.set_size_text(w[0],w[1])},this);b.register(\"screen-set-size-graphical\",function(w){this.set_size_graphical(w[0],\nw[1],w[2],w[3])},this);this.init=function(){this.set_size_text(80,25);this.timer()};this.make_screenshot=function(){try{const w=new Image;w.src=e.toDataURL(\"image/png\");window.open(\"\").document.write(w.outerHTML)}catch(w){}};this.put_char=function(w,y,C,D,F){w<E&&y<A&&(y=3*(w*A+y),z[y]=C,z[y+1]=D,z[y+2]=F,t[w]=1)};this.timer=function(){B||requestAnimationFrame(x?P:Q)};var Q=function(){for(var w=0;w<E;w++)t[w]&&(I.text_update_row(w),t[w]=0);this.timer()}.bind(this),P=function(){this.bus.send(\"screen-fill-buffer\");\nthis.timer()}.bind(this);this.destroy=function(){B=!0};this.set_mode=function(w){(x=w)?(k.style.display=\"none\",e.style.display=\"block\"):(k.style.display=\"block\",e.style.display=\"none\")};this.clear_screen=function(){f.fillStyle=\"#000\";f.fillRect(0,0,e.width,e.height)};this.set_size_text=function(w,y){if(w!==A||y!==E){t=new Int8Array(y);z=new Int32Array(w*y*3);A=w;for(E=y;k.childNodes.length>y;)k.removeChild(k.firstChild);for(;k.childNodes.length<y;)k.appendChild(document.createElement(\"div\"));for(w=\n0;w<y;w++)this.text_update_row(w);d(k,v,q,!0)}};this.set_size_graphical=function(w,y,C,D){DEBUG_SCREEN_LAYERS&&(w=C,y=D);e.style.display=\"block\";e.width=w;e.height=y;l=f.createImageData(C,D);new Uint8Array(l.data.buffer);m=new Int32Array(l.data.buffer);u=w;p=640>=u?2:1;this.bus.send(\"screen-tell-buffer\",[m],[m.buffer]);d(e,v*p,q*p,!1)};this.set_scale=function(w,y){v=w;q=y;d(k,v,q,!0);d(e,v*p,q*p,!1)};this.set_scale(v,q);this.update_cursor_scanline=function(w,y){w&32?g.style.display=\"none\":(g.style.display=\n\"inline\",g.style.height=Math.min(15,y-w)+\"px\",g.style.marginTop=Math.min(15,w)+\"px\")};this.update_cursor=function(w,y){if(w!==n||y!==r)t[w]=1,t[n]=1,n=w,r=y};this.text_update_row=function(w){var y=3*w*A,C;var D=k.childNodes[w];var F=document.createElement(\"div\");for(var K=0;K<A;){var L=document.createElement(\"span\");var N=z[y+1];var O=z[y+2];L.style.backgroundColor=c(N);L.style.color=c(O);for(C=\"\";K<A&&z[y+1]===N&&z[y+2]===O;)if(C+=G[z[y]],K++,y+=3,w===n)if(K===r)break;else if(K===r+1){F.appendChild(g);\nbreak}L.textContent=C;F.appendChild(L)}D.parentNode.replaceChild(F,D)};this.update_buffer=function(w){DEBUG_SCREEN_LAYERS?(f.putImageData(l,0,0),f.strokeStyle=\"#0F0\",f.lineWidth=4,w.forEach(y=>{f.strokeRect(y.buffer_x,y.buffer_y,y.buffer_width,y.buffer_height)}),f.lineWidth=1):w.forEach(y=>{f.putImageData(l,y.screen_x-y.buffer_x,y.screen_y-y.buffer_y,y.buffer_x,y.buffer_y,y.buffer_width,y.buffer_height)})};this.init()};const VIRTIO_9P_F_MOUNT_TAG=0,VIRTIO_9P_MAX_TAGLEN=254;\nvar EPERM=1,ENOENT=2,EEXIST=17,EINVAL=22,EOPNOTSUPP=95,ENOTEMPTY=39,EPROTO=71,P9_SETATTR_MODE=1,P9_SETATTR_UID=2,P9_SETATTR_GID=4,P9_SETATTR_SIZE=8,P9_SETATTR_ATIME=16,P9_SETATTR_MTIME=32,P9_SETATTR_CTIME=64,P9_SETATTR_ATIME_SET=128,P9_SETATTR_MTIME_SET=256,P9_STAT_MODE_DIR=2147483648,P9_STAT_MODE_APPEND=1073741824,P9_STAT_MODE_EXCL=536870912,P9_STAT_MODE_MOUNT=268435456,P9_STAT_MODE_AUTH=134217728,P9_STAT_MODE_TMP=67108864,P9_STAT_MODE_SYMLINK=33554432,P9_STAT_MODE_LINK=16777216,P9_STAT_MODE_DEVICE=\n8388608,P9_STAT_MODE_NAMED_PIPE=2097152,P9_STAT_MODE_SOCKET=1048576,P9_STAT_MODE_SETUID=524288,P9_STAT_MODE_SETGID=262144,P9_STAT_MODE_SETVTX=65536;const P9_LOCK_TYPE_RDLCK=0,P9_LOCK_TYPE_WRLCK=1,P9_LOCK_TYPE_UNLCK=2,P9_LOCK_TYPES=Object.freeze([\"shared\",\"exclusive\",\"unlock\"]),P9_LOCK_FLAGS_BLOCK=1,P9_LOCK_FLAGS_RECLAIM=2,P9_LOCK_SUCCESS=0,P9_LOCK_BLOCKED=1,P9_LOCK_ERROR=2,P9_LOCK_GRACE=3;var FID_NONE=-1,FID_INODE=1,FID_XATTR=2;\nfunction Virtio9p(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.VERSION=\"9P2000.L\";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[];this.virtio=new VirtIO(b,{name:\"virtio-9p\",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[VIRTIO_9P_F_MOUNT_TAG,VIRTIO_F_VERSION_1,\nVIRTIO_F_RING_EVENT_IDX,VIRTIO_F_RING_INDIRECT_DESC],on_driver_ok:()=>{}},notification:{initial_port:43264,single_handler:!1,handlers:[d=>{if(0!==d)dbg_assert(!1,\"Virtio9P Notified for non-existent queue: \"+d+\" (expected queue_id of 0)\");else{for(;this.virtqueue.has_request();)d=this.virtqueue.pop_request(),this.ReceiveRequest(d);this.virtqueue.notify_me_after(0)}}]},isr_status:{initial_port:42752},device_specific:{initial_port:42496,struct:[{bytes:2,name:\"mount tag length\",read:()=>this.configspace_taglen,\nwrite:d=>{}}].concat(v86util.range(VIRTIO_9P_MAX_TAGLEN).map(d=>({bytes:1,name:\"mount tag name \"+d,read:()=>this.configspace_tagname[d]||0,write:e=>{}})))}});this.virtqueue=this.virtio.queues[0]}\nVirtio9p.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};\nVirtio9p.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};Virtio9p.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};\nVirtio9p.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};Virtio9p.prototype.Reset=function(){this.fids=[]};Virtio9p.prototype.BuildReply=function(a,b,c){dbg_assert(0<=c,\"9P: Negative payload size\");marshall.Marshall([\"w\",\"b\",\"h\"],[c+7,a+1,b],this.replybuffer,0);c+7>=this.replybuffer.length&&message.Debug(\"Error in 9p: payloadsize exceeds maximum length\");this.replybuffersize=c+7};\nVirtio9p.prototype.SendError=function(a,b,c){b=marshall.Marshall([\"w\"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};Virtio9p.prototype.SendReply=function(a){dbg_assert(0<=this.replybuffersize,\"9P: Negative replybuffersize\");a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};\nVirtio9p.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);var c={offset:0},d=marshall.Unmarshall([\"w\",\"b\",\"h\"],b,c),e=d[0],f=d[1],k=d[2];switch(f){case 8:e=this.fs.GetTotalSize();b=this.fs.GetSpace();d=[16914839];d[1]=this.BLOCKSIZE;d[2]=Math.floor(b/d[1]);d[3]=d[2]-Math.floor(e/d[1]);d[4]=d[2]-Math.floor(e/d[1]);d[5]=this.fs.CountUsedInodes();d[6]=this.fs.CountFreeInodes();d[7]=0;d[8]=256;e=marshall.Marshall(\"wwddddddw\".split(\"\"),d,this.replybuffer,\n7);this.BuildReply(f,k,e);this.SendReply(a);break;case 112:case 12:d=marshall.Unmarshall([\"w\",\"w\"],b,c);var g=d[0];c=d[1];message.Debug(\"[open] fid=\"+g+\", mode=\"+c);b=this.fids[g].inodeid;var l=this.fs.GetInode(b);message.Debug(\"file open \"+this.fids[g].dbg_name);d=this.fs.OpenInode(b,c);this.fs.AddEvent(this.fids[g].inodeid,function(){message.Debug(\"file opened \"+this.fids[g].dbg_name+\" tag:\"+k);var v=[];v[0]=l.qid;v[1]=this.msize-24;marshall.Marshall([\"Q\",\"w\"],v,this.replybuffer,7);this.BuildReply(f,\nk,17);this.SendReply(a)}.bind(this));break;case 70:d=marshall.Unmarshall([\"w\",\"w\",\"s\"],b,c);b=d[0];g=d[1];e=d[2];message.Debug(\"[link] dfid=\"+b+\", name=\"+e);d=this.fs.Link(this.fids[b].inodeid,this.fids[g].inodeid,e);if(0>d){e=\"\";d===-EPERM?e=\"Operation not permitted\":(e=\"Unknown error: \"+-d,dbg_assert(!1,\"[link]: Unexpected error code: \"+-d));this.SendError(k,e,-d);this.SendReply(a);break}this.BuildReply(f,k,0);this.SendReply(a);break;case 16:d=marshall.Unmarshall([\"w\",\"s\",\"s\",\"w\"],b,c);g=d[0];e=\nd[1];b=d[2];d=d[3];message.Debug(\"[symlink] fid=\"+g+\", name=\"+e+\", symgt=\"+b+\", gid=\"+d);b=this.fs.CreateSymlink(e,this.fids[g].inodeid,b);l=this.fs.GetInode(b);l.uid=this.fids[g].uid;l.gid=d;marshall.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(f,k,13);this.SendReply(a);break;case 18:d=marshall.Unmarshall(\"wswwww\".split(\"\"),b,c);g=d[0];e=d[1];c=d[2];b=d[3];var m=d[4];d=d[5];message.Debug(\"[mknod] fid=\"+g+\", name=\"+e+\", major=\"+b+\", minor=\"+m);b=this.fs.CreateNode(e,this.fids[g].inodeid,\nb,m);l=this.fs.GetInode(b);l.mode=c;l.uid=this.fids[g].uid;l.gid=d;marshall.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(f,k,13);this.SendReply(a);break;case 22:d=marshall.Unmarshall([\"w\"],b,c);g=d[0];l=this.fs.GetInode(this.fids[g].inodeid);message.Debug(\"[readlink] fid=\"+g+\" name=\"+this.fids[g].dbg_name+\" target=\"+l.symlink);e=marshall.Marshall([\"s\"],[l.symlink],this.replybuffer,7);this.BuildReply(f,k,e);this.SendReply(a);break;case 72:d=marshall.Unmarshall([\"w\",\"s\",\"w\",\"w\"],b,c);\ng=d[0];e=d[1];c=d[2];d=d[3];message.Debug(\"[mkdir] fid=\"+g+\", name=\"+e+\", mode=\"+c+\", gid=\"+d);b=this.fs.CreateDirectory(e,this.fids[g].inodeid);l=this.fs.GetInode(b);l.mode=c|S_IFDIR;l.uid=this.fids[g].uid;l.gid=d;marshall.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(f,k,13);this.SendReply(a);break;case 14:d=marshall.Unmarshall([\"w\",\"s\",\"w\",\"w\",\"w\"],b,c);g=d[0];e=d[1];b=d[2];c=d[3];d=d[4];this.bus.send(\"9p-create\",[e,this.fids[g].inodeid]);message.Debug(\"[create] fid=\"+g+\", name=\"+\ne+\", flags=\"+b+\", mode=\"+c+\", gid=\"+d);b=this.fs.CreateFile(e,this.fids[g].inodeid);this.fids[g].inodeid=b;this.fids[g].type=FID_INODE;this.fids[g].dbg_name=e;l=this.fs.GetInode(b);l.uid=this.fids[g].uid;l.gid=d;l.mode=c;marshall.Marshall([\"Q\",\"w\"],[l.qid,this.msize-24],this.replybuffer,7);this.BuildReply(f,k,17);this.SendReply(a);break;case 52:d=marshall.Unmarshall(\"wbwddws\".split(\"\"),b,c);g=d[0];b=d[2];e=0===d[4]?Infinity:d[4];e=this.fs.DescribeLock(d[1],d[3],e,d[5],d[6]);message.Debug(\"[lock] fid=\"+\ng+\", type=\"+P9_LOCK_TYPES[e.type]+\", start=\"+e.start+\", length=\"+e.length+\", proc_id=\"+e.proc_id);d=this.fs.Lock(this.fids[g].inodeid,e,b);marshall.Marshall([\"b\"],[d],this.replybuffer,7);this.BuildReply(f,k,1);this.SendReply(a);break;case 54:d=marshall.Unmarshall(\"wbddws\".split(\"\"),b,c);g=d[0];e=0===d[3]?Infinity:d[3];e=this.fs.DescribeLock(d[1],d[2],e,d[4],d[5]);message.Debug(\"[getlock] fid=\"+g+\", type=\"+P9_LOCK_TYPES[e.type]+\", start=\"+e.start+\", length=\"+e.length+\", proc_id=\"+e.proc_id);d=this.fs.GetLock(this.fids[g].inodeid,\ne);d||(d=e,d.type=P9_LOCK_TYPE_UNLCK);e=marshall.Marshall([\"b\",\"d\",\"d\",\"w\",\"s\"],[d.type,d.start,Infinity===d.length?0:d.length,d.proc_id,d.client_id],this.replybuffer,7);this.BuildReply(f,k,e);this.SendReply(a);break;case 24:d=marshall.Unmarshall([\"w\",\"d\"],b,c);g=d[0];l=this.fs.GetInode(this.fids[g].inodeid);message.Debug(\"[getattr]: fid=\"+g+\" name=\"+this.fids[g].dbg_name+\" request mask=\"+d[1]);if(!l||l.status===STATUS_UNLINKED){message.Debug(\"getattr: unlinked\");this.SendError(k,\"No such file or directory\",\nENOENT);this.SendReply(a);break}d[0]|=4096;d[0]=d[1];d[1]=l.qid;d[2]=l.mode;d[3]=l.uid;d[4]=l.gid;d[5]=l.nlinks;d[6]=l.major<<8|l.minor;d[7]=l.size;d[8]=this.BLOCKSIZE;d[9]=Math.floor(l.size/512+1);d[10]=l.atime;d[11]=0;d[12]=l.mtime;d[13]=0;d[14]=l.ctime;d[15]=0;d[16]=0;d[17]=0;d[18]=0;d[19]=0;marshall.Marshall(\"dQwwwddddddddddddddd\".split(\"\"),d,this.replybuffer,7);this.BuildReply(f,k,153);this.SendReply(a);break;case 26:d=marshall.Unmarshall(\"wwwwwddddd\".split(\"\"),b,c);g=d[0];l=this.fs.GetInode(this.fids[g].inodeid);\nmessage.Debug(\"[setattr]: fid=\"+g+\" request mask=\"+d[1]+\" name=\"+this.fids[g].dbg_name);d[1]&P9_SETATTR_MODE&&(l.mode=d[2]);d[1]&P9_SETATTR_UID&&(l.uid=d[3]);d[1]&P9_SETATTR_GID&&(l.gid=d[4]);d[1]&P9_SETATTR_ATIME&&(l.atime=Math.floor((new Date).getTime()/1E3));d[1]&P9_SETATTR_MTIME&&(l.mtime=Math.floor((new Date).getTime()/1E3));d[1]&P9_SETATTR_CTIME&&(l.ctime=Math.floor((new Date).getTime()/1E3));d[1]&P9_SETATTR_ATIME_SET&&(l.atime=d[6]);d[1]&P9_SETATTR_MTIME_SET&&(l.mtime=d[8]);d[1]&P9_SETATTR_SIZE&&\nawait this.fs.ChangeSize(this.fids[g].inodeid,d[5]);this.BuildReply(f,k,0);this.SendReply(a);break;case 50:d=marshall.Unmarshall([\"w\",\"d\"],b,c);g=d[0];this.BuildReply(f,k,0);this.SendReply(a);break;case 40:case 116:d=marshall.Unmarshall([\"w\",\"d\",\"w\"],b,c);g=d[0];e=d[1];m=d[2];l=this.fs.GetInode(this.fids[g].inodeid);40==f&&message.Debug(\"[treaddir]: fid=\"+g+\" offset=\"+e+\" count=\"+m);116==f&&message.Debug(\"[read]: fid=\"+g+\" (\"+this.fids[g].dbg_name+\") offset=\"+e+\" count=\"+m+\" fidtype=\"+this.fids[g].type);\nif(!l||l.status===STATUS_UNLINKED){message.Debug(\"read/treaddir: unlinked\");this.SendError(k,\"No such file or directory\",ENOENT);this.SendReply(a);break}if(this.fids[g].type==FID_XATTR)for(l.caps.length<e+m&&(m=l.caps.length-e),d=0;d<m;d++)this.replybuffer[11+d]=l.caps[e+d];else this.fs.OpenInode(this.fids[g].inodeid,void 0),d=this.fids[g].inodeid,l.size<e+m?m=l.size-e:40==f&&(m=this.fs.RoundToDirentry(d,e+m)-e),e>l.size&&(m=0),this.bus.send(\"9p-read-start\",[this.fids[g].dbg_name]),d=await this.fs.Read(d,\ne,m),this.bus.send(\"9p-read-end\",[this.fids[g].dbg_name,m]),d&&this.replybuffer.set(d,11);marshall.Marshall([\"w\"],[m],this.replybuffer,7);this.BuildReply(f,k,4+m);this.SendReply(a);break;case 118:d=marshall.Unmarshall([\"w\",\"d\",\"w\"],b,c);g=d[0];e=d[1];m=d[2];d=this.fids[g].dbg_name;message.Debug(\"[write]: fid=\"+g+\" (\"+d+\") offset=\"+e+\" count=\"+m+\" fidtype=\"+this.fids[g].type);if(this.fids[g].type===FID_XATTR){this.SendError(k,\"Setxattr not supported\",EOPNOTSUPP);this.SendReply(a);break}else await this.fs.Write(this.fids[g].inodeid,\ne,m,b.subarray(c.offset));this.bus.send(\"9p-write-end\",[d,m]);marshall.Marshall([\"w\"],[m],this.replybuffer,7);this.BuildReply(f,k,4);this.SendReply(a);break;case 74:d=marshall.Unmarshall([\"w\",\"s\",\"w\",\"s\"],b,c);c=d[0];m=d[1];e=d[2];b=d[3];message.Debug(\"[renameat]: oldname=\"+m+\" newname=\"+b);d=await this.fs.Rename(this.fids[c].inodeid,m,this.fids[e].inodeid,b);if(0>d){e=\"\";d===-ENOENT?e=\"No such file or directory\":d===-EPERM?e=\"Operation not permitted\":d===-ENOTEMPTY?e=\"Directory not empty\":(e=\"Unknown error: \"+\n-d,dbg_assert(!1,\"[renameat]: Unexpected error code: \"+-d));this.SendError(k,e,-d);this.SendReply(a);break}TRACK_FILENAMES&&(d=this.fs.Search(this.fids[e].inodeid,b),this.update_dbg_name(d,b));this.BuildReply(f,k,0);this.SendReply(a);break;case 76:d=marshall.Unmarshall([\"w\",\"s\",\"w\"],b,c);c=d[0];e=d[1];b=d[2];message.Debug(\"[unlink]: dirfd=\"+c+\" name=\"+e+\" flags=\"+b);g=this.fs.Search(this.fids[c].inodeid,e);if(-1==g){this.SendError(k,\"No such file or directory\",ENOENT);this.SendReply(a);break}d=this.fs.Unlink(this.fids[c].inodeid,\ne);if(0>d){e=\"\";d===-ENOTEMPTY?e=\"Directory not empty\":d===-EPERM?e=\"Operation not permitted\":(e=\"Unknown error: \"+-d,dbg_assert(!1,\"[unlink]: Unexpected error code: \"+-d));this.SendError(k,e,-d);this.SendReply(a);break}this.BuildReply(f,k,0);this.SendReply(a);break;case 100:d=marshall.Unmarshall([\"w\",\"s\"],b,c);message.Debug(\"[version]: msize=\"+d[0]+\" version=\"+d[1]);this.msize=d[0];e=marshall.Marshall([\"w\",\"s\"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(f,k,e);this.SendReply(a);\nbreak;case 104:d=marshall.Unmarshall([\"w\",\"w\",\"s\",\"s\",\"w\"],b,c);g=d[0];e=d[4];message.Debug(\"[attach]: fid=\"+g+\" afid=\"+hex8(d[1])+\" uname=\"+d[2]+\" aname=\"+d[3]);this.fids[g]=this.Createfid(0,FID_INODE,e,\"\");l=this.fs.GetInode(this.fids[g].inodeid);marshall.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(f,k,13);this.SendReply(a);break;case 108:d=marshall.Unmarshall([\"h\"],b,c);message.Debug(\"[flush] \"+k);this.BuildReply(f,k,0);this.SendReply(a);break;case 110:d=marshall.Unmarshall([\"w\",\n\"w\",\"h\"],b,c);g=d[0];m=d[1];var n=d[2];message.Debug(\"[walk]: fid=\"+d[0]+\" nwfid=\"+d[1]+\" nwname=\"+n);if(0==n){this.fids[m]=this.Createfid(this.fids[g].inodeid,FID_INODE,this.fids[g].uid,this.fids[g].dbg_name);marshall.Marshall([\"h\"],[0],this.replybuffer,7);this.BuildReply(f,k,2);this.SendReply(a);break}e=[];for(d=0;d<n;d++)e.push(\"s\");c=marshall.Unmarshall(e,b,c);b=this.fids[g].inodeid;e=9;var r=0;message.Debug(\"walk in dir \"+this.fids[g].dbg_name+\" to: \"+c.toString());for(d=0;d<n;d++){b=this.fs.Search(b,\nc[d]);if(-1==b){message.Debug(\"Could not find: \"+c[d]);break}e+=marshall.Marshall([\"Q\"],[this.fs.GetInode(b).qid],this.replybuffer,e);r++;this.fids[m]=this.Createfid(b,FID_INODE,this.fids[g].uid,c[d])}marshall.Marshall([\"h\"],[r],this.replybuffer,7);this.BuildReply(f,k,e-7);this.SendReply(a);break;case 120:d=marshall.Unmarshall([\"w\"],b,c);message.Debug(\"[clunk]: fid=\"+d[0]);this.fids[d[0]]&&0<=this.fids[d[0]].inodeid&&(await this.fs.CloseInode(this.fids[d[0]].inodeid),this.fids[d[0]].inodeid=-1,this.fids[d[0]].type=\nFID_NONE);this.BuildReply(f,k,0);this.SendReply(a);break;case 32:d=marshall.Unmarshall([\"w\",\"s\",\"d\",\"w\"],b,c);g=d[0];e=d[1];c=d[2];b=d[3];message.Debug(\"[txattrcreate]: fid=\"+g+\" name=\"+e+\" attr_size=\"+c+\" flags=\"+b);this.fids[g].type=FID_XATTR;this.BuildReply(f,k,0);this.SendReply(a);break;case 30:d=marshall.Unmarshall([\"w\",\"w\",\"s\"],b,c);g=d[0];e=d[2];message.Debug(\"[xattrwalk]: fid=\"+d[0]+\" newfid=\"+d[1]+\" name=\"+d[2]);this.SendError(k,\"Setxattr not supported\",EOPNOTSUPP);this.SendReply(a);break;\ndefault:message.Debug(\"Error in Virtio9p: Unknown id \"+f+\" received\"),message.Abort()}};var DEBUG=!1,LOG_TO_FILE=!1,LOG_ALL_IO=!1,DUMP_GENERATED_WASM=!1,DUMP_UNCOMPILED_ASSEMBLY=!1,TRACK_FILENAMES=!1,LOG_LEVEL=LOG_ALL&~LOG_PS2&~LOG_PIT&~LOG_VIRTIO&~LOG_9P&~LOG_PIC&~LOG_DMA&~LOG_SERIAL&~LOG_NET&~LOG_FLOPPY&~LOG_DISK&~LOG_VGA,DEBUG_SCREEN_LAYERS=DEBUG&&!1,ENABLE_HPET=DEBUG&&!1,TIME_PER_FRAME=1,TSC_RATE=1E6,APIC_TIMER_FREQ=TSC_RATE,VMWARE_HYPERVISOR_PORT=!0;function IO(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<MMAP_BLOCK_BITS<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=void 0;this.mmap_register(c,4294967296-c,function(d){dbg_log(\"Read from unmapped memory space, addr=\"+h(d>>>0,8),LOG_IO);return 255},function(d,e){dbg_log(\"Write to unmapped memory space, addr=\"+h(d>>>0,8)+\" value=\"+h(e,2),LOG_IO)},function(d){dbg_log(\"Read from unmapped memory space, addr=\"+\nh(d>>>0,8),LOG_IO);return-1},function(d,e){dbg_log(\"Write to unmapped memory space, addr=\"+h(d>>>0,8)+\" value=\"+h(e>>>0,8),LOG_IO)})}IO.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};IO.prototype.empty_port_read8=function(){return 255};IO.prototype.empty_port_read16=function(){return 65535};\nIO.prototype.empty_port_read32=function(){return-1};IO.prototype.empty_port_write=function(a){};\nIO.prototype.register_read=function(a,b,c,d,e){dbg_assert(\"number\"===typeof a);dbg_assert(\"object\"===typeof b);dbg_assert(!c||\"function\"===typeof c);dbg_assert(!d||\"function\"===typeof d);dbg_assert(!e||\"function\"===typeof e);dbg_assert(c||d||e);if(DEBUG){var f=function(k){dbg_assert(!1,\"Overlapped read\"+k+\" \"+h(a,4)+\" (\"+b.name+\")\");return-1>>>32-k|0};c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32))}c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=\ne);this.ports[a].device=b};\nIO.prototype.register_write=function(a,b,c,d,e){dbg_assert(\"number\"===typeof a);dbg_assert(\"object\"===typeof b);dbg_assert(!c||\"function\"===typeof c);dbg_assert(!d||\"function\"===typeof d);dbg_assert(!e||\"function\"===typeof e);dbg_assert(c||d||e);if(DEBUG){var f=function(k){dbg_assert(!1,\"Overlapped write\"+k+\" \"+h(a)+\" (\"+b.name+\")\")};c||(c=f.bind(this,8));d||(d=f.bind(this,16));e||(e=f.bind(this,32))}c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=\nb};IO.prototype.register_read_consecutive=function(a,b,c,d,e,f){function k(){return c.call(this)|d.call(this)<<8}function g(){return e.call(this)|f.call(this)<<8}function l(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|f.call(this)<<24}dbg_assert(4===arguments.length||6===arguments.length);e&&f?(this.register_read(a,b,c,k,l),this.register_read(a+1,b,d),this.register_read(a+2,b,e,g),this.register_read(a+3,b,f)):(this.register_read(a,b,c,k),this.register_read(a+1,b,d))};\nIO.prototype.register_write_consecutive=function(a,b,c,d,e,f){function k(m){c.call(this,m&255);d.call(this,m>>8&255)}function g(m){e.call(this,m&255);f.call(this,m>>8&255)}function l(m){c.call(this,m&255);d.call(this,m>>8&255);e.call(this,m>>16&255);f.call(this,m>>>24)}dbg_assert(4===arguments.length||6===arguments.length);e&&f?(this.register_write(a,b,c,k,l),this.register_write(a+1,b,d),this.register_write(a+2,b,e,g),this.register_write(a+3,b,f)):(this.register_write(a,b,c,k),this.register_write(a+\n1,b,d))};IO.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>MMAP_BLOCK_BITS];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};IO.prototype.mmap_write32_shim=function(a,b){var c=this.cpu.memory_map_write8[a>>>MMAP_BLOCK_BITS];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};\nIO.prototype.mmap_register=function(a,b,c,d,e,f){dbg_log(\"mmap_register addr=\"+h(a>>>0,8)+\" size=\"+h(b,8),LOG_IO);dbg_assert(0===(a&MMAP_BLOCK_SIZE-1));dbg_assert(b&&0===(b&MMAP_BLOCK_SIZE-1));e||(e=this.mmap_read32_shim.bind(this));f||(f=this.mmap_write32_shim.bind(this));for(a>>>=MMAP_BLOCK_BITS;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=f,b-=MMAP_BLOCK_SIZE};\nIO.prototype.port_write8=function(a,b){var c=this.ports[a];(c.write8===this.empty_port_write||LOG_ALL_IO)&&dbg_log(\"write8 port #\"+h(a,4)+\" <- \"+h(b,2)+this.get_port_description(a),LOG_IO);return c.write8.call(c.device,b)};IO.prototype.port_write16=function(a,b){var c=this.ports[a];(c.write16===this.empty_port_write||LOG_ALL_IO)&&dbg_log(\"write16 port #\"+h(a,4)+\" <- \"+h(b,4)+this.get_port_description(a),LOG_IO);return c.write16.call(c.device,b)};\nIO.prototype.port_write32=function(a,b){var c=this.ports[a];(c.write32===this.empty_port_write||LOG_ALL_IO)&&dbg_log(\"write32 port #\"+h(a,4)+\" <- \"+h(b>>>0,8)+this.get_port_description(a),LOG_IO);return c.write32.call(c.device,b)};IO.prototype.port_read8=function(a){var b=this.ports[a];(b.read8===this.empty_port_read8||LOG_ALL_IO)&&dbg_log(\"read8 port  #\"+h(a,4)+this.get_port_description(a),LOG_IO);b=b.read8.call(b.device);dbg_assert(256>b,\"8 bit port returned large value: \"+h(a));return b};\nIO.prototype.port_read16=function(a){var b=this.ports[a];(b.read16===this.empty_port_read16||LOG_ALL_IO)&&dbg_log(\"read16 port  #\"+h(a,4)+this.get_port_description(a),LOG_IO);b=b.read16.call(b.device);dbg_assert(65536>b&&0<=b,\"16 bit port returned large value: \"+h(a));return b};\nIO.prototype.port_read32=function(a){var b=this.ports[a];(b.read32===this.empty_port_read32||LOG_ALL_IO)&&dbg_log(\"read32 port  #\"+h(a,4)+this.get_port_description(a),LOG_IO);a=b.read32.call(b.device);dbg_assert((a|0)===a);return a};\nvar debug_port_list={4:\"PORT_DMA_ADDR_2\",5:\"PORT_DMA_CNT_2\",10:\"PORT_DMA1_MASK_REG\",11:\"PORT_DMA1_MODE_REG\",12:\"PORT_DMA1_CLEAR_FF_REG\",13:\"PORT_DMA1_MASTER_CLEAR\",32:\"PORT_PIC1_CMD\",33:\"PORT_PIC1_DATA\",64:\"PORT_PIT_COUNTER0\",65:\"PORT_PIT_COUNTER1\",66:\"PORT_PIT_COUNTER2\",67:\"PORT_PIT_MODE\",96:\"PORT_PS2_DATA\",97:\"PORT_PS2_CTRLB\",100:\"PORT_PS2_STATUS\",112:\"PORT_CMOS_INDEX\",113:\"PORT_CMOS_DATA\",128:\"PORT_DIAG\",129:\"PORT_DMA_PAGE_2\",146:\"PORT_A20\",160:\"PORT_PIC2_CMD\",161:\"PORT_PIC2_DATA\",178:\"PORT_SMI_CMD\",\n179:\"PORT_SMI_STATUS\",212:\"PORT_DMA2_MASK_REG\",214:\"PORT_DMA2_MODE_REG\",218:\"PORT_DMA2_MASTER_CLEAR\",240:\"PORT_MATH_CLEAR\",368:\"PORT_ATA2_CMD_BASE\",496:\"PORT_ATA1_CMD_BASE\",632:\"PORT_LPT2\",744:\"PORT_SERIAL4\",760:\"PORT_SERIAL2\",884:\"PORT_ATA2_CTRL_BASE\",888:\"PORT_LPT1\",1E3:\"PORT_SERIAL3\",1008:\"PORT_FD_BASE\",1010:\"PORT_FD_DOR\",1012:\"PORT_FD_STATUS\",1013:\"PORT_FD_DATA\",1014:\"PORT_HD_DATA\",1015:\"PORT_FD_DIR\",1016:\"PORT_SERIAL1\",3320:\"PORT_PCI_CMD\",3321:\"PORT_PCI_REBOOT\",3324:\"PORT_PCI_DATA\",1026:\"PORT_BIOS_DEBUG\",\n1296:\"PORT_QEMU_CFG_CTL\",1297:\"PORT_QEMU_CFG_DATA\",45056:\"PORT_ACPI_PM_BASE\",45312:\"PORT_SMB_BASE\",35072:\"PORT_BIOS_APM\"};IO.prototype.get_port_description=function(a){return debug_port_list[a]?\"  (\"+debug_port_list[a]+\")\":\"\"};function v86(a,b){this.stopped=this.running=!1;this.cpu=new CPU(a,b);this.bus=a;a.register(\"cpu-init\",this.init,this);a.register(\"cpu-run\",this.run,this);a.register(\"cpu-stop\",this.stop,this);a.register(\"cpu-restart\",this.restart,this);this.register_tick()}v86.prototype.run=function(){this.stopped=!1;this.running||(this.bus.send(\"emulator-started\"),this.fast_next_tick())};\nv86.prototype.do_tick=function(){if(this.stopped)this.stopped=this.running=!1,this.bus.send(\"emulator-stopped\");else{this.running=!0;var a=this.cpu.main_run();0>=a?this.fast_next_tick():this.next_tick(a)}};v86.prototype.stop=function(){this.running&&(this.stopped=!0)};v86.prototype.destroy=function(){this.unregister_tick()};v86.prototype.restart=function(){this.cpu.reset();this.cpu.load_bios()};v86.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send(\"emulator-ready\")};\nif(\"undefined\"!==typeof setImmediate)var fast_next_tick=function(){setImmediate(()=>{this.do_tick()})},register_tick=function(){},unregister_tick=function(){};else if(\"undefined\"!==typeof window&&\"undefined\"!==typeof postMessage){fast_next_tick=function(){window.postMessage(43605,\"*\")};let a;register_tick=function(){a=b=>{b.source===window&&43605===b.data&&this.do_tick()};window.addEventListener(\"message\",a,!1)};unregister_tick=function(){window.removeEventListener(\"message\",a);a=null}}else fast_next_tick=\nfunction(){setTimeout(()=>{this.do_tick()},0)},register_tick=function(){},unregister_tick=function(){};v86.prototype.fast_next_tick=fast_next_tick;v86.prototype.register_tick=register_tick;v86.prototype.unregister_tick=unregister_tick;var next_tick=\"undefined\"!==typeof document&&\"boolean\"===typeof document.hidden?function(a){4>a||document.hidden?this.fast_next_tick():setTimeout(()=>{this.do_tick()},a)}:function(a){setTimeout(()=>{this.do_tick()},a)};v86.prototype.next_tick=next_tick;\nv86.prototype.save_state=function(){return this.cpu.save_state()};v86.prototype.restore_state=function(a){return this.cpu.restore_state(a)};if(\"object\"===typeof performance&&performance.now)v86.microtick=performance.now.bind(performance);else if(\"function\"===typeof require){const {performance:a}=require(\"perf_hooks\");v86.microtick=a.now.bind(a)}else v86.microtick=\"object\"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;var goog=goog||{};goog.exportSymbol=function(){};goog.exportProperty=function(){};var v86util=v86util||{};v86util.pads=function(a,b){return(a||0===a?a+\"\":\"\").padEnd(b,\" \")};v86util.pad0=function(a,b){return(a||0===a?a+\"\":\"\").padStart(b,\"0\")};v86util.zeros=function(a){return Array(a).fill(0)};v86util.range=function(a){return Array.from(Array(a).keys())};\nv86util.view=function(a,b,c,d){return new Proxy({},{get:function(e,f,k){e=new a(b.buffer,c,d);k=e[f];if(\"function\"===typeof k)return k.bind(e);dbg_assert(/^\\d+$/.test(f)||\"buffer\"===f||\"length\"===f||\"BYTES_PER_ELEMENT\"===f||\"byteOffset\"===f);return k},set:function(e,f,k,g){dbg_assert(/^\\d+$/.test(f));(new a(b.buffer,c,d))[f]=k;return!0}})};function h(a,b){a=a?a.toString(16):\"\";return\"0x\"+v86util.pad0(a.toUpperCase(),b||1)}\nif(\"undefined\"!==typeof crypto&&crypto.getRandomValues){let a=new Int32Array(1);v86util.get_rand_int=function(){crypto.getRandomValues(a);return a[0]}}else if(\"undefined\"!==typeof require){const a=require(\"crypto\");v86util.get_rand_int=function(){return a.randomBytes(4).readInt32LE(0)}}else dbg_assert(!1,\"Unsupported platform: No cryptographic random values\");function SyncBuffer(a){dbg_assert(a instanceof ArrayBuffer);this.buffer=a;this.byteLength=a.byteLength;this.onprogress=this.onload=void 0}\nSyncBuffer.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};SyncBuffer.prototype.get=function(a,b,c){dbg_assert(a+b<=this.byteLength);c(new Uint8Array(this.buffer,a,b))};SyncBuffer.prototype.set=function(a,b,c){dbg_assert(a+b.byteLength<=this.byteLength);(new Uint8Array(this.buffer,a,b.byteLength)).set(b);c()};SyncBuffer.prototype.get_buffer=function(a){a(this.buffer)};\nSyncBuffer.prototype.get_state=function(){const a=[];a[0]=this.byteLength;a[1]=new Uint8Array(this.buffer);return a};SyncBuffer.prototype.set_state=function(a){this.byteLength=a[0];this.buffer=a[1].slice().buffer};\n(function(){if(\"function\"===typeof Math.clz32)v86util.int_log2_byte=function(d){dbg_assert(0<d);dbg_assert(256>d);return 31-Math.clz32(d)},v86util.int_log2=function(d){dbg_assert(0<d);return 31-Math.clz32(d)};else{for(var a=new Int8Array(256),b=0,c=-2;256>b;b++)b&b-1||c++,a[b]=c;v86util.int_log2_byte=function(d){dbg_assert(0<d);dbg_assert(256>d);return a[d]};v86util.int_log2=function(d){d>>>=0;dbg_assert(0<d);var e=d>>>16;if(e){var f=e>>>8;return f?24+a[f]:16+a[e]}return(f=d>>>8)?8+a[f]:a[d]}}})();\nfunction ByteQueue(a){var b=new Uint8Array(a),c,d;dbg_assert(0===(a&a-1));this.length=0;this.push=function(e){this.length!==a&&this.length++;b[d]=e;d=d+1&a-1};this.shift=function(){if(this.length){var e=b[c];c=c+1&a-1;this.length--;return e}return-1};this.peek=function(){return this.length?b[c]:-1};this.clear=function(){this.length=d=c=0};this.clear()}function FloatQueue(a){this.size=a;this.data=new Float32Array(a);this.length=this.end=this.start=0;dbg_assert(0===(a&a-1))}\nFloatQueue.prototype.push=function(a){this.length===this.size?this.start=this.start+1&this.size-1:this.length++;this.data[this.end]=a;this.end=this.end+1&this.size-1};FloatQueue.prototype.shift=function(){if(this.length){var a=this.data[this.start];this.start=this.start+1&this.size-1;this.length--;return a}};\nFloatQueue.prototype.shift_block=function(a){var b=new Float32Array(a);a>this.length&&(a=this.length);var c=this.start+a,d=this.data.subarray(this.start,c);b.set(d);c>=this.size&&(c-=this.size,b.set(this.data.subarray(0,c),d.length));this.start=c;this.length-=a;return b};FloatQueue.prototype.peek=function(){if(this.length)return this.data[this.start]};FloatQueue.prototype.clear=function(){this.length=this.end=this.start=0};function CircularQueue(a){this.data=[];this.index=0;this.size=a}\nCircularQueue.prototype.add=function(a){this.data[this.index]=a;this.index=(this.index+1)%this.size};CircularQueue.prototype.toArray=function(){return[].slice.call(this.data,this.index).concat([].slice.call(this.data,0,this.index))};CircularQueue.prototype.clear=function(){this.data=[];this.index=0};CircularQueue.prototype.set=function(a){this.data=a;this.index=0};function dump_file(a,b){a instanceof Array||(a=[a]);a=new Blob(a);download(a,b)}\nfunction download(a,b){var c=document.createElement(\"a\");c.download=b;c.href=window.URL.createObjectURL(a);c.dataset.downloadurl=[\"application/octet-stream\",c.download,c.href].join(\":\");document.createEvent?(a=document.createEvent(\"MouseEvent\"),a.initMouseEvent(\"click\",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),c.dispatchEvent(a)):c.click();window.URL.revokeObjectURL(c.href)}\nv86util.Bitmap=function(a){\"number\"===typeof a?this.view=new Uint8Array(a+7>>3):a instanceof ArrayBuffer?this.view=new Uint8Array(a):console.assert(!1)};v86util.Bitmap.prototype.set=function(a,b){const c=a>>3;a=1<<(a&7);this.view[c]=b?this.view[c]|a:this.view[c]&~a};v86util.Bitmap.prototype.get=function(a){return this.view[a>>3]>>(a&7)&1};v86util.Bitmap.prototype.get_buffer=function(){return this.view.buffer};function hex_dump(a,b){var c=[];b=b||a.byteLength;for(var d,e,f=0;f<b>>4;f++){d=h(f<<4,5)+\"   \";for(var k=0;16>k;k++)e=a[(f<<4)+k],d+=h(e,2)+\" \";d+=\"  \";for(k=0;16>k;k++)e=a[(f<<4)+k],d+=33>e||126<e?\".\":String.fromCharCode(e);c.push(d)}return\"\\n\"+c.join(\"\\n\")}var CDROM_SECTOR_SIZE=2048,HD_SECTOR_SIZE=512;\nfunction IDEDevice(a,b,c,d,e,f){this.master=new IDEInterface(this,a,b,d,e,0,f);this.slave=new IDEInterface(this,a,c,!1,e,1,f);this.current_interface=this.master;this.cpu=a;0===e?(this.ata_port=496,this.irq=14,this.pci_id=240):1===e?(this.ata_port=368,this.irq=15,this.pci_id=248):dbg_assert(!1,\"IDE device with nr \"+e+\" ignored\",LOG_DISK);this.ata_port_high=this.ata_port|516;this.master_port=46080;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,this.master_port&\n255|1,this.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}];this.name=\"ide\"+e;this.device_control=2;a.io.register_read(this.ata_port|7,this,function(){dbg_log(\"lower irq\",LOG_DISK);this.cpu.device_lower_irq(this.irq);\nreturn this.read_status()});a.io.register_read(this.ata_port_high|2,this,this.read_status);a.io.register_write(this.ata_port_high|2,this,this.write_control);a.io.register_read(this.ata_port|0,this,function(){return this.current_interface.read_data(1)},function(){return this.current_interface.read_data(2)},function(){return this.current_interface.read_data(4)});a.io.register_read(this.ata_port|1,this,function(){dbg_log(\"Read error: \"+h(this.current_interface.error&255)+\" slave=\"+(this.current_interface===\nthis.slave),LOG_DISK);return this.current_interface.error&255});a.io.register_read(this.ata_port|2,this,function(){dbg_log(\"Read bytecount: \"+h(this.current_interface.bytecount&255),LOG_DISK);return this.current_interface.bytecount&255});a.io.register_read(this.ata_port|3,this,function(){dbg_log(\"Read sector: \"+h(this.current_interface.sector&255),LOG_DISK);return this.current_interface.sector&255});a.io.register_read(this.ata_port|4,this,function(){dbg_log(\"Read 1F4: \"+h(this.current_interface.cylinder_low&\n255),LOG_DISK);return this.current_interface.cylinder_low&255});a.io.register_read(this.ata_port|5,this,function(){dbg_log(\"Read 1F5: \"+h(this.current_interface.cylinder_high&255),LOG_DISK);return this.current_interface.cylinder_high&255});a.io.register_read(this.ata_port|6,this,function(){dbg_log(\"Read 1F6\",LOG_DISK);return this.current_interface.drive_head&255});a.io.register_write(this.ata_port|0,this,function(k){this.current_interface.write_data_port8(k)},function(k){this.current_interface.write_data_port16(k)},\nfunction(k){this.current_interface.write_data_port32(k)});a.io.register_write(this.ata_port|1,this,function(k){dbg_log(\"1F1/lba_count: \"+h(k),LOG_DISK);this.master.lba_count=(this.master.lba_count<<8|k)&65535;this.slave.lba_count=(this.slave.lba_count<<8|k)&65535});a.io.register_write(this.ata_port|2,this,function(k){dbg_log(\"1F2/bytecount: \"+h(k),LOG_DISK);this.master.bytecount=(this.master.bytecount<<8|k)&65535;this.slave.bytecount=(this.slave.bytecount<<8|k)&65535});a.io.register_write(this.ata_port|\n3,this,function(k){dbg_log(\"1F3/sector: \"+h(k),LOG_DISK);this.master.sector=(this.master.sector<<8|k)&65535;this.slave.sector=(this.slave.sector<<8|k)&65535});a.io.register_write(this.ata_port|4,this,function(k){dbg_log(\"1F4/sector low: \"+h(k),LOG_DISK);this.master.cylinder_low=(this.master.cylinder_low<<8|k)&65535;this.slave.cylinder_low=(this.slave.cylinder_low<<8|k)&65535});a.io.register_write(this.ata_port|5,this,function(k){dbg_log(\"1F5/sector high: \"+h(k),LOG_DISK);this.master.cylinder_high=\n(this.master.cylinder_high<<8|k)&65535;this.slave.cylinder_high=(this.slave.cylinder_high<<8|k)&65535});a.io.register_write(this.ata_port|6,this,function(k){var g=k&16;dbg_log(\"1F6/drive: \"+h(k,2),LOG_DISK);g?(dbg_log(\"Slave\",LOG_DISK),this.current_interface=this.slave):this.current_interface=this.master;this.master.drive_head=k;this.slave.drive_head=k;this.master.is_lba=this.slave.is_lba=k>>6&1;this.master.head=this.slave.head=k&15});this.dma_command=this.dma_status=this.prdt_addr=0;a.io.register_write(this.ata_port|\n7,this,function(k){dbg_log(\"lower irq\",LOG_DISK);this.cpu.device_lower_irq(this.irq);this.current_interface.ata_command(k)});a.io.register_read(this.master_port|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(this.master_port|4,this,void 0,void 0,this.dma_set_addr);a.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command);a.io.register_write(this.master_port,this,this.dma_write_command8,void 0,this.dma_write_command);a.io.register_read(this.master_port|\n2,this,this.dma_read_status);a.io.register_write(this.master_port|2,this,this.dma_write_status);a.io.register_read(this.master_port|8,this,function(){dbg_log(\"DMA read 0x8\",LOG_DISK);return 0});a.io.register_read(this.master_port|10,this,function(){dbg_log(\"DMA read 0xA\",LOG_DISK);return 0});a.devices.pci.register_device(this);DEBUG&&Object.seal(this)}\nIDEDevice.prototype.read_status=function(){if(this.current_interface.buffer){var a=this.current_interface.status;dbg_log(\"ATA read status: \"+h(a,2),LOG_DISK);return a}return 0};IDEDevice.prototype.write_control=function(a){dbg_log(\"set device control: \"+h(a,2)+\" interrupts \"+(a&2?\"disabled\":\"enabled\"),LOG_DISK);a&4&&(dbg_log(\"Reset via control port\",LOG_DISK),this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control=a};\nIDEDevice.prototype.dma_read_addr=function(){dbg_log(\"dma get address: \"+h(this.prdt_addr,8),LOG_DISK);return this.prdt_addr};IDEDevice.prototype.dma_set_addr=function(a){dbg_log(\"dma set address: \"+h(a,8),LOG_DISK);this.prdt_addr=a};IDEDevice.prototype.dma_read_status=function(){dbg_log(\"DMA read status: \"+h(this.dma_status),LOG_DISK);return this.dma_status};IDEDevice.prototype.dma_write_status=function(a){dbg_log(\"DMA set status: \"+h(a),LOG_DISK);this.dma_status&=~(a&6)};\nIDEDevice.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};IDEDevice.prototype.dma_read_command8=function(){dbg_log(\"DMA read command: \"+h(this.dma_command),LOG_DISK);return this.dma_command};IDEDevice.prototype.dma_write_command=function(a){dbg_log(\"DMA write command: \"+h(a),LOG_DISK);this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};\nIDEDevice.prototype.dma_write_command8=function(a){dbg_log(\"DMA write command8: \"+h(a),LOG_DISK);let b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();break;default:dbg_log(\"Spurious dma command write, current command: \"+\nh(this.current_interface.current_command),LOG_DISK),dbg_assert(!1)}};IDEDevice.prototype.push_irq=function(){0===(this.device_control&2)&&(dbg_log(\"push irq\",LOG_DISK),this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};\nIDEDevice.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.ata_port;a[3]=this.irq;a[4]=this.pci_id;a[5]=this.ata_port_high;a[6]=this.master_port;a[7]=this.name;a[8]=this.device_control;a[9]=this.prdt_addr;a[10]=this.dma_status;a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};\nIDEDevice.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.ata_port=a[2];this.irq=a[3];this.pci_id=a[4];this.ata_port_high=a[5];this.master_port=a[6];this.name=a[7];this.device_control=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=a[12]};\nfunction IDEInterface(a,b,c,d,e,f,k){this.device=a;this.bus=k;this.nr=e;this.cpu=b;this.buffer=c;this.sector_size=d?CDROM_SECTOR_SIZE:HD_SECTOR_SIZE;this.is_atapi=d;this.cylinder_count=this.sectors_per_track=this.head_count=this.sector_count=0;this.buffer&&(this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(this.sector_count|0)&&(dbg_log(\"Warning: Disk size not aligned with sector size\",LOG_DISK),this.sector_count=Math.ceil(this.sector_count)),d?(this.head_count=1,this.sectors_per_track=\n0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/this.head_count/this.sectors_per_track,this.cylinder_count!==(this.cylinder_count|0)&&(dbg_log(\"Warning: Rounding up cylinder count. Choose different head number\",LOG_DISK),this.cylinder_count=Math.floor(this.cylinder_count)),a=b.devices.rtc,a.cmos_write(CMOS_BIOS_DISKTRANSFLAG,a.cmos_read(CMOS_BIOS_DISKTRANSFLAG)|1<<4*this.nr),a.cmos_write(CMOS_DISK_DATA,a.cmos_read(CMOS_DISK_DATA)&15|240),b=CMOS_DISK_DRIVE1_CYL,\na.cmos_write(b+0,this.cylinder_count&255),a.cmos_write(b+1,this.cylinder_count>>8&255),a.cmos_write(b+2,this.head_count&255),a.cmos_write(b+3,255),a.cmos_write(b+4,255),a.cmos_write(b+5,200),a.cmos_write(b+6,this.cylinder_count&255),a.cmos_write(b+7,this.cylinder_count>>8&255),a.cmos_write(b+8,this.sectors_per_track&255));this.stats={sectors_read:0,sectors_written:0,bytes_read:0,bytes_written:0,loading:!1};this.buffer=c;this.drive_head=this.head=this.cylinder_high=this.cylinder_low=this.lba_count=\nthis.sector=this.bytecount=this.is_lba=0;this.status=80;this.sectors_per_drq=128;this.data_pointer=this.error=0;this.data=new Uint8Array(65536);this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.data_end=this.data_length=0;this.current_atapi_command=this.current_command=-1;this.last_io_id=this.write_dest=0;this.in_progress_io_ids=new Set;this.cancelled_io_ids=new Set;Object.seal(this)}\nIDEInterface.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.sector=this.error=this.bytecount=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.sector=this.error=this.bytecount=1,this.cylinder_high=this.cylinder_low=0);this.cancel_io_operations()};IDEInterface.prototype.push_irq=function(){this.device.push_irq()};\nIDEInterface.prototype.ata_command=function(a){dbg_log(\"ATA Command: \"+h(a)+\" slave=\"+(this.drive_head>>4&1),LOG_DISK);if(this.buffer)switch(this.current_command=a,this.error=0,a){case 8:dbg_log(\"ATA device reset\",LOG_DISK);this.data_length=this.data_end=this.data_pointer=0;this.device_reset();this.push_irq();break;case 16:this.status=80;this.cylinder_low=0;this.push_irq();break;case 248:this.status=80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;\nthis.drive_head=this.drive_head&240|a>>24&15;this.push_irq();break;case 39:this.status=80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.sector|=a>>24<<8&65280;this.push_irq();break;case 32:case 36:case 41:case 196:this.ata_read_sectors(a);break;case 48:case 52:case 57:case 197:this.ata_write_sectors(a);break;case 144:this.push_irq();this.error=257;this.status=80;break;case 145:this.status=80;this.push_irq();break;case 160:this.is_atapi&&(this.status=\n88,this.data_allocate(12),this.data_end=12,this.bytecount=1,this.push_irq());break;case 161:dbg_log(\"ATA identify packet device\",LOG_DISK);this.is_atapi?(this.create_identify_packet(),this.status=88,this.cylinder_low=20,this.cylinder_high=235):this.status=65;this.push_irq();break;case 198:dbg_log(\"Logical sectors per DRQ Block: \"+h(this.bytecount&255),LOG_DISK);this.sectors_per_drq=this.bytecount&255;this.status=80;this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(a);break;case 53:case 202:this.ata_write_sectors_dma(a);\nbreak;case 64:dbg_log(\"read verify sectors\",LOG_DISK);this.status=80;this.push_irq();break;case 218:dbg_log(\"Unimplemented: get media status\",LOG_DISK);this.status=65;this.error=4;this.push_irq();break;case 224:dbg_log(\"ATA standby immediate\",LOG_DISK);this.status=80;this.push_irq();break;case 225:dbg_log(\"ATA idle immediate\",LOG_DISK);this.status=80;this.push_irq();break;case 231:dbg_log(\"ATA flush cache\",LOG_DISK);this.status=80;this.push_irq();break;case 236:dbg_log(\"ATA identify device\",LOG_DISK);\nif(this.is_atapi){this.status=65;this.error=4;this.push_irq();break}this.create_identify_packet();this.status=88;this.push_irq();break;case 234:dbg_log(\"flush cache ext\",LOG_DISK);this.status=80;this.push_irq();break;case 239:dbg_log(\"set features: \"+h(this.bytecount&255),LOG_DISK);this.status=80;this.push_irq();break;case 222:this.status=80;this.push_irq();break;case 245:dbg_log(\"security freeze lock\",LOG_DISK);this.status=80;this.push_irq();break;case 249:dbg_log(\"Unimplemented: set max address\",\nLOG_DISK);this.status=65;this.error=4;break;default:dbg_assert(!1,\"New ATA cmd on 1F7: \"+h(a),LOG_DISK),this.status=65,this.error=4}else dbg_log(\"abort: No buffer\",LOG_DISK),this.error=4,this.status=65,this.push_irq()};\nIDEInterface.prototype.atapi_handle=function(){dbg_log(\"ATAPI Command: \"+h(this.data[0])+\" slave=\"+(this.drive_head>>4&1),LOG_DISK);this.data_pointer=0;this.current_atapi_command=this.data[0];switch(this.current_atapi_command){case 0:dbg_log(\"test unit ready\",LOG_DISK);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 3:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;this.data[0]=240;this.data[2]=5;this.data[7]=8;break;case 18:var a=this.data[4];\nthis.status=88;dbg_log(\"inquiry: \"+h(this.data[1],2)+\" length=\"+a,LOG_DISK);this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]);this.data_end=this.data_length=Math.min(36,a);break;case 26:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;break;case 30:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 37:a=this.sector_count-1;this.data_set(new Uint8Array([a>>24&255,a>>16&255,\na>>8&255,a&255,0,0,this.sector_size>>8&255,this.sector_size&255]));this.data_end=this.data_length;this.status=88;break;case 40:this.lba_count&1?this.atapi_read_dma(this.data):this.atapi_read(this.data);break;case 66:a=this.data[8];this.data_allocate(Math.min(8,a));this.data_end=this.data_length;dbg_log(\"read q subcode: length=\"+a,LOG_DISK);this.status=88;break;case 67:a=this.data[8]|this.data[7]<<8;var b=this.data[9]>>6;this.data_allocate(a);this.data_end=this.data_length;dbg_log(\"read toc: \"+h(b,\n2)+\" length=\"+a+\" \"+(this.data[1]&2)+\" \"+h(this.data[6]),LOG_DISK);0===b?(a=this.sector_count,this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,a>>24,a>>16&255,a>>8&255,a&255]))):1===b?this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0])):dbg_assert(!1,\"Unimplemented format: \"+b);this.status=88;break;case 70:a=this.data[8]|this.data[7]<<8;a=Math.min(a,32);this.data_allocate(a);this.data_end=this.data_length;this.data[0]=a-4>>24&255;this.data[1]=a-4>>16&255;this.data[2]=a-4>>8&\n255;this.data[3]=a-4&255;this.data[6]=8;this.data[10]=3;this.status=88;break;case 81:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 82:dbg_log(\"Unimplemented ATAPI command: \"+h(this.data[0]),LOG_DISK);this.status=81;this.data_length=0;this.error=80;break;case 90:a=this.data[8]|this.data[7]<<8;b=this.data[2];dbg_log(\"mode sense: \"+h(b)+\" length=\"+a,LOG_DISK);42===b&&this.data_allocate(Math.min(30,a));this.data_end=this.data_length;this.status=88;break;case 189:this.data_allocate(this.data[9]|\nthis.data[8]<<8);this.data_end=this.data_length;this.data[5]=1;this.status=88;break;case 74:this.status=81;this.data_length=0;this.error=80;dbg_log(\"Unimplemented ATAPI command: \"+h(this.data[0]),LOG_DISK);break;default:this.status=81,this.data_length=0,this.error=80,dbg_log(\"Unimplemented ATAPI command: \"+h(this.data[0]),LOG_DISK),dbg_assert(!1)}this.bytecount=this.bytecount&-8|2;0===(this.status&128)&&this.push_irq();0===(this.status&128)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)};\nIDEInterface.prototype.do_write=function(){this.status=80;dbg_assert(this.data_length<=this.data.length);var a=this.data.subarray(0,this.data_length);dbg_assert(0===this.data_length%512);this.ata_advance(this.current_command,this.data_length/512);this.push_irq();this.buffer.set(this.write_dest,a,function(){});this.report_write(this.data_length)};\nIDEInterface.prototype.atapi_read=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;dbg_log(\"CD read lba=\"+h(b)+\" lbacount=\"+h(c)+\" bytecount=\"+h(d)+\" flags=\"+h(a),LOG_DISK);this.data_length=0;var f=this.cylinder_high<<8&65280|this.cylinder_low&255;dbg_log(h(this.cylinder_high,2)+\" \"+h(this.cylinder_low,2),LOG_DISK);this.cylinder_low=this.cylinder_high=0;65535===f&&f--;f>d&&(f=d);e>=this.buffer.byteLength?(dbg_assert(!1,\"CD read: Outside of disk  end=\"+\nh(e+d)+\" size=\"+h(this.buffer.byteLength),LOG_DISK),this.status=255,this.push_irq()):0===d?(this.status=80,this.data_pointer=0):(d=Math.min(d,this.buffer.byteLength-e),this.status=208,this.report_read_start(),this.read_buffer(e,d,k=>{dbg_log(\"cd read: data arrived\",LOG_DISK);this.data_set(k);this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();this.data_end=f&=-4;this.data_end>this.data_length&&(this.data_end=this.data_length);this.cylinder_low=this.data_end&255;this.cylinder_high=this.data_end>>\n8&255;this.report_read_end(d)}))};\nIDEInterface.prototype.atapi_read_dma=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;dbg_log(\"CD read DMA lba=\"+h(b)+\" lbacount=\"+h(c)+\" bytecount=\"+h(d)+\" flags=\"+h(a),LOG_DISK);e>=this.buffer.byteLength?(dbg_assert(!1,\"CD read: Outside of disk  end=\"+h(e+d)+\" size=\"+h(this.buffer.byteLength),LOG_DISK),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(e,d,f=>{dbg_log(\"atapi_read_dma: Data arrived\");\nthis.report_read_end(d);this.status=88;this.bytecount=this.bytecount&-8|2;this.data_set(f);this.do_atapi_dma()}))};\nIDEInterface.prototype.do_atapi_dma=function(){if(0===(this.device.dma_status&1))dbg_log(\"do_atapi_dma: Status not set\",LOG_DISK);else if(0===(this.status&8))dbg_log(\"do_atapi_dma: DRQ not set\",LOG_DISK);else{dbg_log(\"atapi dma transfer len=\"+this.data_length,LOG_DISK);var a=this.device.prdt_addr,b=0,c=this.data;do{var d=this.cpu.read32s(a),e=this.cpu.read16(a+4),f=this.cpu.read8(a+7)&128;e||(e=65536);dbg_log(\"dma read dest=\"+h(d)+\" count=\"+h(e)+\" datalen=\"+h(this.data_length),LOG_DISK);this.cpu.write_blob(c.subarray(b,\nMath.min(b+e,this.data_length)),d);b+=e;a+=8;if(b>=this.data_length&&!f){dbg_log(\"leave early end=\"+ +f+\" offset=\"+h(b)+\" data_length=\"+h(this.data_length)+\" cmd=\"+h(this.current_command),LOG_DISK);break}}while(!f);dbg_log(\"end offset=\"+b,LOG_DISK);this.status=80;this.device.dma_status&=-2;this.bytecount=this.bytecount&-8|3;this.push_irq()}};\nIDEInterface.prototype.read_data=function(a){if(this.data_pointer<this.data_end){dbg_assert(this.data_pointer+a-1<this.data_end);dbg_assert(0===this.data_pointer%a,h(this.data_pointer)+\" \"+a);var b=1===a?this.data[this.data_pointer]:2===a?this.data16[this.data_pointer>>>1]:this.data32[this.data_pointer>>>2];this.data_pointer+=a;0===(this.data_pointer&(0===(this.data_end&4095)?4095:255))&&dbg_log(\"Read 1F0: \"+h(this.data[this.data_pointer],2)+\" cur=\"+h(this.data_pointer)+\" cnt=\"+h(this.data_length),\nLOG_DISK);this.data_pointer>=this.data_end&&this.read_end();return b}dbg_log(\"Read 1F0: empty\",LOG_DISK);this.data_pointer+=a;return 0};\nIDEInterface.prototype.read_end=function(){dbg_log(\"read_end cmd=\"+h(this.current_command)+\" data_pointer=\"+h(this.data_pointer)+\" end=\"+h(this.data_end)+\" length=\"+h(this.data_length),LOG_DISK);if(160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=this.bytecount&-8|3,this.push_irq();else{this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();var a=this.cylinder_high<<8&65280|this.cylinder_low&255;this.data_end+a>this.data_length?(this.cylinder_low=\nthis.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>8&255,this.data_end=this.data_length):this.data_end+=a;dbg_log(\"data_end=\"+h(this.data_end),LOG_DISK)}else this.error=0,this.data_pointer>=this.data_length?this.status=80:(196===this.current_command||41===this.current_command?(a=Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512),dbg_assert(0===a%1)):(dbg_assert(32===this.current_command||36===this.current_command),a=1),this.ata_advance(this.current_command,\na),this.data_end+=512*a,this.status=88),this.push_irq()};\nIDEInterface.prototype.write_data_port=function(a,b){dbg_assert(0===this.data_pointer%b);this.data_pointer>=this.data_end?dbg_log(\"Redundant write to data port: \"+h(a)+\" count=\"+h(this.data_end)+\" cur=\"+h(this.data_pointer),LOG_DISK):((0===(this.data_pointer+b&(0===(this.data_end&4095)?4095:255))||20>this.data_end)&&dbg_log(\"Data port: \"+h(a>>>0)+\" count=\"+h(this.data_end)+\" cur=\"+h(this.data_pointer),LOG_DISK),1===b?this.data[this.data_pointer++]=a:2===b?(this.data16[this.data_pointer>>>1]=a,this.data_pointer+=\n2):(this.data32[this.data_pointer>>>2]=a,this.data_pointer+=4),dbg_assert(this.data_pointer<=this.data_end),this.data_pointer===this.data_end&&this.write_end())};IDEInterface.prototype.write_data_port8=function(a){this.write_data_port(a,1)};IDEInterface.prototype.write_data_port16=function(a){this.write_data_port(a,2)};IDEInterface.prototype.write_data_port32=function(a){this.write_data_port(a,4)};\nIDEInterface.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(dbg_log(\"write_end data_pointer=\"+h(this.data_pointer)+\" data_length=\"+h(this.data_length),LOG_DISK),this.data_pointer>=this.data_length?this.do_write():(dbg_assert(48===this.current_command||52===this.current_command||197===this.current_command,\"Unexpected command: \"+h(this.current_command)),this.status=88,this.data_end+=512,this.push_irq()))};\nIDEInterface.prototype.ata_advance=function(a,b){dbg_log(\"Advance sectors=\"+b+\" old_bytecount=\"+this.bytecount,LOG_DISK);this.bytecount-=b;36===a||41===a||52===a||57===a||37===a||53===a?(a=b+this.get_lba48(),this.sector=a&255|a>>16&65280,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255):this.is_lba?(a=b+this.get_lba28(),this.sector=a&255,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255,this.head=this.head&-16|a&15):(a=b+this.get_chs(),b=a/(this.head_count*this.sectors_per_track)|0,this.cylinder_low=\nb&255,this.cylinder_high=b>>8&255,this.head=(a/this.sectors_per_track|0)%this.head_count&15,this.sector=a%this.sectors_per_track+1&255,dbg_assert(a===this.get_chs()))};\nIDEInterface.prototype.ata_read_sectors=function(a){var b=36===a||41===a,c=this.get_count(b);b=this.get_lba(b);var d=32===a||36===a,e=c*this.sector_size,f=b*this.sector_size;dbg_log(\"ATA read cmd=\"+h(a)+\" mode=\"+(this.is_lba?\"lba\":\"chs\")+\" lba=\"+h(b)+\" lbacount=\"+h(c)+\" bytecount=\"+h(e),LOG_DISK);f+e>this.buffer.byteLength?(dbg_assert(!1,\"ATA read: Outside of disk\",LOG_DISK),this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(f,e,k=>{dbg_log(\"ata_read: Data arrived\",\nLOG_DISK);this.data_set(k);this.status=88;this.data_end=d?512:Math.min(e,512*this.sectors_per_drq);this.ata_advance(a,d?1:Math.min(c,this.sectors_per_track));this.push_irq();this.report_read_end(e)}))};\nIDEInterface.prototype.ata_read_sectors_dma=function(a){var b=37===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;dbg_log(\"ATA DMA read lba=\"+h(b)+\" lbacount=\"+h(a)+\" bytecount=\"+h(c),LOG_DISK);d+c>this.buffer.byteLength?(dbg_assert(!1,\"ATA read: Outside of disk\",LOG_DISK),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};\nIDEInterface.prototype.do_ata_read_sectors_dma=function(){var a=37===this.current_command,b=this.get_count(a);a=this.get_lba(a);var c=b*this.sector_size,d=a*this.sector_size;dbg_assert(a<this.buffer.byteLength);this.report_read_start();var e=this.device.prdt_addr;this.read_buffer(d,c,f=>{dbg_log(\"do_ata_read_sectors_dma: Data arrived\",LOG_DISK);var k=this.device.prdt_addr,g=0;dbg_assert(e===k);do{var l=this.cpu.read32s(k),m=this.cpu.read16(k+4),n=this.cpu.read8(k+7)&128;m||(m=65536,dbg_log(\"dma: prd count was 0\",\nLOG_DISK));dbg_log(\"dma read transfer dest=\"+h(l)+\" prd_count=\"+h(m),LOG_DISK);this.cpu.write_blob(f.subarray(g,g+m),l);g+=m;k+=8}while(!n);dbg_assert(g===c);this.ata_advance(this.current_command,b);this.status=80;this.device.dma_status&=-2;this.current_command=-1;this.push_irq();this.report_read_end(c)})};\nIDEInterface.prototype.ata_write_sectors=function(a){var b=52===a||57===a,c=this.get_count(b);b=this.get_lba(b);a=48===a||52===a;var d=c*this.sector_size,e=b*this.sector_size;dbg_log(\"ATA write lba=\"+h(b)+\" mode=\"+(this.is_lba?\"lba\":\"chs\")+\" lbacount=\"+h(c)+\" bytecount=\"+h(d),LOG_DISK);e+d>this.buffer.byteLength?(dbg_assert(!1,\"ATA write: Outside of disk\",LOG_DISK),this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(d),this.data_end=a?512:Math.min(d,512*this.sectors_per_drq),\nthis.write_dest=e)};IDEInterface.prototype.ata_write_sectors_dma=function(a){var b=53===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;dbg_log(\"ATA DMA write lba=\"+h(b)+\" lbacount=\"+h(a)+\" bytecount=\"+h(c),LOG_DISK);d+c>this.buffer.byteLength?(dbg_assert(!1,\"ATA DMA write: Outside of disk\",LOG_DISK),this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};\nIDEInterface.prototype.do_ata_write_sectors_dma=function(){var a=53===this.current_command,b=this.get_count(a),c=this.get_lba(a);a=b*this.sector_size;c*=this.sector_size;var d=this.device.prdt_addr,e=0;dbg_log(\"prdt addr: \"+h(d,8),LOG_DISK);const f=new Uint8Array(a);do{var k=this.cpu.read32s(d),g=this.cpu.read16(d+4),l=this.cpu.read8(d+7)&128;g||(g=65536,dbg_log(\"dma: prd count was 0\",LOG_DISK));dbg_log(\"dma write transfer dest=\"+h(k)+\" prd_count=\"+h(g),LOG_DISK);k=this.cpu.mem8.subarray(k,k+g);dbg_assert(k.length===\ng);f.set(k,e);e+=g;d+=8}while(!l);dbg_assert(e===f.length);this.buffer.set(c,f,()=>{dbg_log(\"dma write completed\",LOG_DISK);this.ata_advance(this.current_command,b);this.status=80;this.push_irq();this.device.dma_status&=-2;this.current_command=-1});this.report_write(a)};\nIDEInterface.prototype.get_chs=function(){var a=this.cylinder_low&255|this.cylinder_high<<8&65280,b=this.head,c=this.sector&255;dbg_log(\"get_chs: c=\"+a+\" h=\"+b+\" s=\"+c,LOG_DISK);return(a*this.head_count+b)*this.sectors_per_track+c-1};IDEInterface.prototype.get_lba28=function(){return this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(this.head&15)<<24};\nIDEInterface.prototype.get_lba48=function(){return(this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0};IDEInterface.prototype.get_lba=function(a){return a?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()};IDEInterface.prototype.get_count=function(a){a?(a=this.bytecount,0===a&&(a=65536)):(a=this.bytecount&255,0===a&&(a=256));return a};\nIDEInterface.prototype.create_identify_packet=function(){if(this.drive_head&16)this.data_allocate(0);else{for(var a=0;512>a;a++)this.data[a]=0;a=Math.min(16383,this.cylinder_count);this.data_set([64,this.is_atapi?133:0,a,a>>8,0,0,this.head_count,this.head_count>>8,this.sectors_per_track/512,this.sectors_per_track/512>>8,0,2,this.sectors_per_track,this.sectors_per_track>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,4,0,0,0,0,0,0,0,0,0,56,118,32,54,68,72,32,32,32,32,32,32,32,32,32,\n32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,128,0,1,0,0,2,0,0,0,2,0,2,7,0,a,a>>8,this.head_count,this.head_count>>8,this.sectors_per_track,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,160===this.current_command?0:7,160===this.current_command?0:4,0,0,30,0,30,0,30,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,126,0,0,0,0,0,0,116,0,64,0,64,0,116,0,64,0,0,0,0,0,0,0,0,0,0,1,96,0,0,0,0,0,0,0,0,0,0,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255]);this.data_end=this.data_length=512}};IDEInterface.prototype.data_allocate=function(a){this.data_allocate_noclear(a);for(var b=0;b<a+3>>2;b++)this.data32[b]=0};\nIDEInterface.prototype.data_allocate_noclear=function(a){this.data.length<a&&(this.data=new Uint8Array(a+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer));this.data_length=a;this.data_pointer=0};IDEInterface.prototype.data_set=function(a){this.data_allocate_noclear(a.length);this.data.set(a)};IDEInterface.prototype.report_read_start=function(){this.stats.loading=!0;this.bus.send(\"ide-read-start\")};\nIDEInterface.prototype.report_read_end=function(a){this.stats.loading=!1;var b=a/this.sector_size|0;this.stats.sectors_read+=b;this.stats.bytes_read+=a;this.bus.send(\"ide-read-end\",[this.nr,a,b])};IDEInterface.prototype.report_write=function(a){var b=a/this.sector_size|0;this.stats.sectors_written+=b;this.stats.bytes_written+=a;this.bus.send(\"ide-write-end\",[this.nr,a,b])};\nIDEInterface.prototype.read_buffer=function(a,b,c){const d=this.last_io_id++;this.in_progress_io_ids.add(d);this.buffer.get(a,b,e=>{if(this.cancelled_io_ids.delete(d))dbg_assert(!this.in_progress_io_ids.has(d));else{var f=this.in_progress_io_ids.delete(d);dbg_assert(f);c(e)}})};IDEInterface.prototype.cancel_io_operations=function(){for(const a of this.in_progress_io_ids)this.cancelled_io_ids.add(a);this.in_progress_io_ids.clear()};\nIDEInterface.prototype.get_state=function(){var a=[];a[0]=this.bytecount;a[1]=this.cylinder_count;a[2]=this.cylinder_high;a[3]=this.cylinder_low;a[4]=this.data_pointer;a[5]=0;a[6]=0;a[7]=0;a[8]=0;a[9]=this.drive_head;a[10]=this.error;a[11]=this.head;a[12]=this.head_count;a[13]=this.is_atapi;a[14]=this.is_lba;a[15]=this.lba_count;a[16]=this.data;a[17]=this.data_length;a[18]=this.sector;a[19]=this.sector_count;a[20]=this.sector_size;a[21]=this.sectors_per_drq;a[22]=this.sectors_per_track;a[23]=this.status;\na[24]=this.write_dest;a[25]=this.current_command;a[26]=this.data_end;a[27]=this.current_atapi_command;a[28]=this.buffer;return a};\nIDEInterface.prototype.set_state=function(a){this.bytecount=a[0];this.cylinder_count=a[1];this.cylinder_high=a[2];this.cylinder_low=a[3];this.data_pointer=a[4];this.drive_head=a[9];this.error=a[10];this.head=a[11];this.head_count=a[12];this.is_atapi=a[13];this.is_lba=a[14];this.lba_count=a[15];this.data=a[16];this.data_length=a[17];this.sector=a[18];this.sector_count=a[19];this.sector_size=a[20];this.sectors_per_drq=a[21];this.sectors_per_track=a[22];this.status=a[23];this.write_dest=a[24];this.current_command=\na[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28])};var PCI_CONFIG_ADDRESS=3320,PCI_CONFIG_DATA=3324;\nfunction PCI(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=new Uint8Array(4);this.pci_addr32=new Int32Array(this.pci_addr.buffer);this.pci_value32=new Int32Array(this.pci_value.buffer);this.pci_response32=new Int32Array(this.pci_response.buffer);this.pci_status32=new Int32Array(this.pci_status.buffer);this.device_spaces=[];this.devices=[];this.cpu=a;for(var b=0;256>b;b++)this.device_spaces[b]=void 0,this.devices[b]=void 0;this.io=\na.io;a.io.register_write(PCI_CONFIG_DATA,this,function(c){this.pci_write8(this.pci_addr32[0],c)},function(c){this.pci_write16(this.pci_addr32[0],c)},function(c){this.pci_write32(this.pci_addr32[0],c)});a.io.register_write(PCI_CONFIG_DATA+1,this,function(c){this.pci_write8(this.pci_addr32[0]+1|0,c)});a.io.register_write(PCI_CONFIG_DATA+2,this,function(c){this.pci_write8(this.pci_addr32[0]+2|0,c)},function(c){this.pci_write16(this.pci_addr32[0]+2|0,c)});a.io.register_write(PCI_CONFIG_DATA+3,this,function(c){this.pci_write8(this.pci_addr32[0]+\n3|0,c)});a.io.register_read_consecutive(PCI_CONFIG_DATA,this,function(){return this.pci_response[0]},function(){return this.pci_response[1]},function(){return this.pci_response[2]},function(){return this.pci_response[3]});a.io.register_read_consecutive(PCI_CONFIG_ADDRESS,this,function(){return this.pci_status[0]},function(){return this.pci_status[1]},function(){return this.pci_status[2]},function(){return this.pci_status[3]});a.io.register_write_consecutive(PCI_CONFIG_ADDRESS,this,function(c){this.pci_addr[0]=\nc&252},function(c){2===(this.pci_addr[1]&6)&&6===(c&6)?(dbg_log(\"CPU reboot via PCI\"),a.reboot_internal()):this.pci_addr[1]=c},function(c){this.pci_addr[2]=c},function(c){this.pci_addr[3]=c;this.pci_query()});this.register_device({pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:\"82441FX PMC\"});this.isa_bridge={pci_id:8,\npci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:\"82371SB PIIX3 ISA\"};this.isa_bridge_space=this.register_device(this.isa_bridge);this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}PCI.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};\nPCI.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var f=d[4+e];if(f&1){var k=c.pci_bars[e];this.set_io_bars(k,k.original_bar&65534,f&65534)}}this.device_spaces[b].set(d)}else c&&dbg_log(\"Warning: While restoring PCI device: Device exists in current configuration but not in snapshot (\"+c.name+\")\"),d&&dbg_log(\"Warning: While restoring PCI device: Device doesn't exist in current configuration but does in snapshot (device \"+\nh(b,2)+\")\")}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};\nPCI.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&252,c=a>>3&31;var d=\"query enabled=\"+(this.pci_addr[3]>>7)+(\" bdf=\"+h(a,4));d+=\" dev=\"+h(c,2);d+=\" addr=\"+h(b,2);c=this.device_spaces[a];void 0!==c?(this.pci_status32[0]=-2147483648,this.pci_response32[0]=b<c.byteLength?c[b>>2]:0,d+=\" \"+h(this.pci_addr32[0]>>>0,8)+\" -> \"+h(this.pci_response32[0]>>>0,8),b>=c.byteLength&&(d+=\" (undef)\"),d+=\" (\"+this.devices[a].name+\")\",dbg_log(d,LOG_PCI)):(this.pci_response32[0]=\n-1,this.pci_status32[0]=0)};PCI.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=new Uint8Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(dbg_assert(!(16<=a&&44>a||48<=a&&52>a),\"PCI: Expected 32-bit write, got 8-bit (addr: \"+h(a)+\")\"),dbg_log(\"PCI write8 dev=\"+h(c>>3,2)+\" (\"+e.name+\") addr=\"+h(a,4)+\" value=\"+h(b,2),LOG_PCI),d[a]=b)};\nPCI.prototype.pci_write16=function(a,b){dbg_assert(0===(a&1));var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer),e=this.devices[c];d&&(16<=a&&44>a?dbg_log(\"Warning: PCI: Expected 32-bit write, got 16-bit (addr: \"+h(a)+\")\"):(dbg_assert(!(48<=a&&52>a),\"PCI: Expected 32-bit write, got 16-bit (addr: \"+h(a)+\")\"),dbg_log(\"PCI writ16 dev=\"+h(c>>3,2)+\" (\"+e.name+\") addr=\"+h(a,4)+\" value=\"+h(b,4),LOG_PCI),d[a>>>1]=b))};\nPCI.prototype.pci_write32=function(a,b){dbg_assert(0===(a&3));var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){var f=a-16>>2,k=e.pci_bars[f];dbg_log(\"BAR\"+f+\" exists=\"+(k?\"y\":\"n\")+\" changed to \"+h(b>>>0)+\" dev=\"+h(c>>3,2)+\" (\"+e.name+\") \",LOG_PCI);k?(dbg_assert(!(k.size&k.size-1),\"bar size should be power of 2\"),c=a>>2,e=d[c]&1,-1===(b|3|k.size-1)?(b=~(k.size-1)|e,0===e&&(d[c]=b)):0===e&&(f=k.original_bar,(b&-16)!==(f&-16)&&dbg_log(\"Warning: Changing memory bar not supported, ignored\",\nLOG_PCI),d[c]=f),1===e&&(dbg_assert(1===e),e=d[c]&65534,f=b&65534,dbg_log(\"io bar changed from \"+h(e>>>0,8)+\" to \"+h(f>>>0,8)+\" size=\"+k.size,LOG_PCI),this.set_io_bars(k,e,f),d[c]=b|1)):d[a>>2]=0;dbg_log(\"BAR effective value: \"+h(d[a>>2]>>>0),LOG_PCI)}else 48===a?(dbg_log(\"PCI write rom address dev=\"+h(c>>3,2)+\" (\"+e.name+\") value=\"+h(b>>>0,8),LOG_PCI),d[a>>2]=e.pci_rom_size?-1===(b|2047)?-e.pci_rom_size|0:e.pci_rom_address|0:0):4===a?dbg_log(\"PCI write dev=\"+h(c>>3,2)+\" (\"+e.name+\") addr=\"+h(a,4)+\n\" value=\"+h(b>>>0,8),LOG_PCI):(dbg_log(\"PCI write dev=\"+h(c>>3,2)+\" (\"+e.name+\") addr=\"+h(a,4)+\" value=\"+h(b>>>0,8),LOG_PCI),d[a>>>2]=b)};\nPCI.prototype.register_device=function(a){dbg_assert(void 0!==a.pci_id);dbg_assert(void 0!==a.pci_space);dbg_assert(void 0!==a.pci_bars);var b=a.pci_id;dbg_log(\"PCI register bdf=\"+h(b)+\" (\"+a.name+\")\",LOG_PCI);dbg_assert(!this.devices[b]);dbg_assert(64<=a.pci_space.length);dbg_assert(b<this.devices.length);var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];\nif(e){var f=b[d],k=f&1;e.original_bar=f;e.entries=[];if(0!==k)for(dbg_assert(1===k),f&=-2,k=0;k<e.size;k++)e.entries[k]=this.io.ports[f+k]}}return c};\nPCI.prototype.set_io_bars=function(a,b,c){var d=a.size;dbg_log(\"Move io bars: from=\"+h(b)+\" to=\"+h(c)+\" count=\"+d,LOG_PCI);for(var e=this.io.ports,f=0;f<d;f++){var k=e[b+f];e[b+f]=this.io.create_empty_entry();k.read8===this.io.empty_port_read8&&k.read16===this.io.empty_port_read16&&k.read32===this.io.empty_port_read32&&k.write8===this.io.empty_port_write&&k.write16===this.io.empty_port_write&&k.write32===this.io.empty_port_write&&dbg_log(\"Warning: Bad IO bar: Source not mapped, port=\"+h(b+f,4),LOG_PCI);\nk=a.entries[f];var g=e[c+f];dbg_assert(k&&g);e[c+f]=k;g.read8!==this.io.empty_port_read8&&g.read16!==this.io.empty_port_read16&&g.read32!==this.io.empty_port_read32&&g.write8!==this.io.empty_port_write&&g.write16!==this.io.empty_port_write&&g.write32!==this.io.empty_port_write||dbg_log(\"Warning: Bad IO bar: Target already mapped, port=\"+h(c+f,4),LOG_PCI)}};\nPCI.prototype.raise_irq=function(a){var b=this.device_spaces[a];dbg_assert(b);this.cpu.device_raise_irq(this.isa_bridge_space8[96+((b[15]>>8&255)-1+((a>>3)-1&255)&3)])};PCI.prototype.lower_irq=function(a){var b=this.device_spaces[a];dbg_assert(b);this.cpu.device_lower_irq(this.isa_bridge_space8[96+((b[15]>>8&255)+(a>>3&255)-2&3)])};function FloppyController(a,b,c){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.bytes_expecting=0;this.receiving_command=new Uint8Array(10);this.receiving_index=0;this.next_command=null;this.response_data=new Uint8Array(10);this.floppy_size=this.response_length=this.response_index=0;this.fda_image=b;this.fdb_image=c;this.last_head=this.last_cylinder=this.drive=this.status_reg2=this.status_reg1=this.status_reg0=0;this.last_sector=1;this.dor=0;if(b){this.floppy_size=b.byteLength;if((c={160:{type:1,\ntracks:40,sectors:8,heads:1},180:{type:1,tracks:40,sectors:9,heads:1},200:{type:1,tracks:40,sectors:10,heads:1},320:{type:1,tracks:40,sectors:8,heads:2},360:{type:1,tracks:40,sectors:9,heads:2},400:{type:1,tracks:40,sectors:10,heads:2},720:{type:3,tracks:80,sectors:9,heads:2},1200:{type:2,tracks:80,sectors:15,heads:2},1440:{type:4,tracks:80,sectors:18,heads:2},1722:{type:5,tracks:82,sectors:21,heads:2},2880:{type:5,tracks:80,sectors:36,heads:2}}[this.floppy_size>>10])&&0===(this.floppy_size&1023))a.devices.rtc.cmos_write(CMOS_FLOPPY_DRIVE_TYPE,\nc.type<<4),a=c.sectors,b=c.heads,c=c.tracks;else throw\"Unknown floppy size: \"+h(b.byteLength);this.sectors_per_track=a;this.number_of_heads=b;this.number_of_cylinders=c}else a.devices.rtc.cmos_write(CMOS_FLOPPY_DRIVE_TYPE,64),this.floppy_size=this.number_of_cylinders=this.number_of_heads=this.sectors_per_track=0;this.io.register_read(1008,this,this.port3F0_read);this.io.register_read(1010,this,this.port3F2_read);this.io.register_read(1012,this,this.port3F4_read);this.io.register_read(1013,this,this.port3F5_read);\nthis.io.register_read(1015,this,this.port3F7_read);this.io.register_write(1010,this,this.port3F2_write);this.io.register_write(1013,this,this.port3F5_write)}\nFloppyController.prototype.get_state=function(){var a=[];a[0]=this.bytes_expecting;a[1]=this.receiving_command;a[2]=this.receiving_index;a[4]=this.response_data;a[5]=this.response_index;a[6]=this.response_length;a[7]=this.floppy_size;a[8]=this.status_reg0;a[9]=this.status_reg1;a[10]=this.status_reg2;a[11]=this.drive;a[12]=this.last_cylinder;a[13]=this.last_head;a[14]=this.last_sector;a[15]=this.dor;a[16]=this.sectors_per_track;a[17]=this.number_of_heads;a[18]=this.number_of_cylinders;return a};\nFloppyController.prototype.set_state=function(a){this.bytes_expecting=a[0];this.receiving_command=a[1];this.receiving_index=a[2];this.next_command=a[3];this.response_data=a[4];this.response_index=a[5];this.response_length=a[6];this.floppy_size=a[7];this.status_reg0=a[8];this.status_reg1=a[9];this.status_reg2=a[10];this.drive=a[11];this.last_cylinder=a[12];this.last_head=a[13];this.last_sector=a[14];this.dor=a[15];this.sectors_per_track=a[16];this.number_of_heads=a[17];this.number_of_cylinders=a[18]};\nFloppyController.prototype.port3F0_read=function(){dbg_log(\"3F0 read\",LOG_FLOPPY);return 0};FloppyController.prototype.port3F4_read=function(){dbg_log(\"3F4 read\",LOG_FLOPPY);var a=128;this.response_index<this.response_length&&(a|=80);0===(this.dor&8)&&(a|=32);return a};FloppyController.prototype.port3F7_read=function(){dbg_log(\"3F7 read\",LOG_FLOPPY);return 0};\nFloppyController.prototype.port3F5_read=function(){if(this.response_index<this.response_length)return dbg_log(\"3F5 read: \"+this.response_data[this.response_index],LOG_FLOPPY),this.cpu.device_lower_irq(6),this.response_data[this.response_index++];dbg_log(\"3F5 read, empty\",LOG_FLOPPY);return 255};\nFloppyController.prototype.port3F5_write=function(a){if(this.fda_image)if(dbg_log(\"3F5 write \"+h(a),LOG_FLOPPY),0<this.bytes_expecting){if(this.receiving_command[this.receiving_index++]=a,this.bytes_expecting--,0===this.bytes_expecting){if(DEBUG){a=\"3F5 command received: \";for(var b=0;b<this.receiving_index;b++)a+=h(this.receiving_command[b])+\" \";dbg_log(a,LOG_FLOPPY)}this.next_command.call(this,this.receiving_command)}}else{switch(a){case 3:this.next_command=this.fix_drive_data;this.bytes_expecting=\n2;break;case 4:this.next_command=this.check_drive_status;this.bytes_expecting=1;break;case 5:case 197:this.next_command=function(c){this.do_sector(!0,c)};this.bytes_expecting=8;break;case 230:this.next_command=function(c){this.do_sector(!1,c)};this.bytes_expecting=8;break;case 7:this.next_command=this.calibrate;this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id;this.bytes_expecting=1;break;case 15:this.bytes_expecting=2;this.next_command=\nthis.seek;break;case 14:dbg_log(\"dump registers\",LOG_FLOPPY);this.response_data[0]=128;this.response_index=0;this.response_length=1;this.bytes_expecting=0;break;default:dbg_assert(!1,\"Unimplemented floppy command call \"+h(a))}this.receiving_index=0}};FloppyController.prototype.port3F2_read=function(){dbg_log(\"read 3F2: DOR\",LOG_FLOPPY);return this.dor};\nFloppyController.prototype.port3F2_write=function(a){4===(a&4)&&0===(this.dor&4)&&this.cpu.device_raise_irq(6);dbg_log(\"start motors: \"+h(a>>4),LOG_FLOPPY);dbg_log(\"enable dma: \"+!!(a&8),LOG_FLOPPY);dbg_log(\"reset fdc: \"+!!(a&4),LOG_FLOPPY);dbg_log(\"drive select: \"+(a&3),LOG_FLOPPY);dbg_log(\"DOR = \"+h(a),LOG_FLOPPY);this.dor=a};FloppyController.prototype.check_drive_status=function(a){dbg_log(\"check drive status\",LOG_FLOPPY);this.response_index=0;this.response_length=1;this.response_data[0]=32};\nFloppyController.prototype.seek=function(a){dbg_log(\"seek\",LOG_FLOPPY);dbg_assert(0===(a[0]&3),\"Unhandled seek drive\");this.last_cylinder=a[1];this.last_head=a[0]>>2&1;this.raise_irq()};FloppyController.prototype.calibrate=function(a){dbg_log(\"floppy calibrate\",LOG_FLOPPY);this.raise_irq()};FloppyController.prototype.check_interrupt_status=function(){dbg_log(\"floppy check interrupt status\",LOG_FLOPPY);this.response_index=0;this.response_length=2;this.response_data[0]=32;this.response_data[1]=this.last_cylinder};\nFloppyController.prototype.do_sector=function(a,b){var c=b[2],d=b[1],e=b[3],f=128<<b[4],k=b[5]-b[3]+1,g=((c+this.number_of_heads*d)*this.sectors_per_track+e-1)*f;dbg_log(\"Floppy \"+(a?\"Write\":\"Read\"),LOG_FLOPPY);dbg_log(\"from \"+h(g)+\" length \"+h(k*f),LOG_FLOPPY);dbg_log(d+\" / \"+c+\" / \"+e,LOG_FLOPPY);b[4]||dbg_log(\"FDC: sector count is zero, use data length instead\",LOG_FLOPPY);this.fda_image&&(a?this.dma.do_write(this.fda_image,g,k*f,2,this.done.bind(this,b,d,c,e)):this.dma.do_read(this.fda_image,\ng,k*f,2,this.done.bind(this,b,d,c,e)))};FloppyController.prototype.done=function(a,b,c,d,e){e||(d++,d>this.sectors_per_track&&(d=1,c++,c>=this.number_of_heads&&(c=0,b++)),this.last_cylinder=b,this.last_head=c,this.last_sector=d,this.response_index=0,this.response_length=7,this.response_data[0]=c<<2|32,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=b,this.response_data[4]=c,this.response_data[5]=d,this.response_data[6]=a[4],this.raise_irq())};\nFloppyController.prototype.fix_drive_data=function(a){dbg_log(\"floppy fix drive data \"+a,LOG_FLOPPY)};FloppyController.prototype.read_sector_id=function(a){dbg_log(\"floppy read sector id \"+a,LOG_FLOPPY);this.response_index=0;this.response_length=7;this.response_data[0]=0;this.response_data[1]=0;this.response_data[2]=0;this.response_data[3]=0;this.response_data[4]=0;this.response_data[5]=0;this.response_data[6]=0;this.raise_irq()};FloppyController.prototype.raise_irq=function(){this.dor&8&&this.cpu.device_raise_irq(6)};CPU.prototype.mmap_read8=function(a){return this.memory_map_read8[a>>>MMAP_BLOCK_BITS](a)};CPU.prototype.mmap_write8=function(a,b){this.memory_map_write8[a>>>MMAP_BLOCK_BITS](a,b)};CPU.prototype.mmap_read16=function(a){var b=this.memory_map_read8[a>>>MMAP_BLOCK_BITS];return b(a)|b(a+1|0)<<8};CPU.prototype.mmap_write16=function(a,b){var c=this.memory_map_write8[a>>>MMAP_BLOCK_BITS];c(a,b&255);c(a+1|0,b>>8&255)};CPU.prototype.mmap_read32=function(a){return this.memory_map_read32[a>>>MMAP_BLOCK_BITS](a)};\nCPU.prototype.mmap_write32=function(a,b){this.memory_map_write32[a>>>MMAP_BLOCK_BITS](a,b)};CPU.prototype.mmap_write64=function(a,b,c){var d=a>>>MMAP_BLOCK_BITS;dbg_assert(d===a+7>>>MMAP_BLOCK_BITS);d=this.memory_map_write32[d];d(a,b);d(a+4,c)};CPU.prototype.mmap_write128=function(a,b,c,d,e){var f=a>>>MMAP_BLOCK_BITS;dbg_assert(f===a+12>>>MMAP_BLOCK_BITS);f=this.memory_map_write32[f];f(a,b);f(a+4,c);f(a+8,d);f(a+12,e)};\nCPU.prototype.write_blob=function(a,b){dbg_assert(a&&0<=a.length);a.length&&(dbg_assert(!this.in_mapped_range(b)),dbg_assert(!this.in_mapped_range(b+a.length-1)),this.jit_dirty_cache(b,b+a.length),this.mem8.set(a,b))};CPU.prototype.read_blob=function(a,b){b&&(dbg_assert(!this.in_mapped_range(a)),dbg_assert(!this.in_mapped_range(a+b-1)));return this.mem8.subarray(a,a+b)};function DMA(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,\n1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,0));a.register_write(3,this,this.port_count_write.bind(this,1));a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,3));a.register_read(0,this,this.port_addr_read.bind(this,0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,\n2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,1));a.register_read(5,this,this.port_count_read.bind(this,2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,4));a.register_write(196,this,this.port_addr_write.bind(this,5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,\nthis.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,this,this.port_count_write.bind(this,6));a.register_write(206,this,this.port_count_write.bind(this,7));a.register_read(192,this,this.port_addr_read.bind(this,4));a.register_read(196,this,this.port_addr_read.bind(this,5));a.register_read(200,this,this.port_addr_read.bind(this,6));a.register_read(204,this,this.port_addr_read.bind(this,\n7));a.register_read(194,this,this.port_count_read.bind(this,4));a.register_read(198,this,this.port_count_read.bind(this,5));a.register_read(202,this,this.port_count_read.bind(this,6));a.register_read(206,this,this.port_count_read.bind(this,7));a.register_write(135,this,this.port_page_write.bind(this,0));a.register_write(131,this,this.port_page_write.bind(this,1));a.register_write(129,this,this.port_page_write.bind(this,2));a.register_write(130,this,this.port_page_write.bind(this,3));a.register_write(143,\nthis,this.port_page_write.bind(this,4));a.register_write(139,this,this.port_page_write.bind(this,5));a.register_write(137,this,this.port_page_write.bind(this,6));a.register_write(138,this,this.port_page_write.bind(this,7));a.register_read(135,this,this.port_page_read.bind(this,0));a.register_read(131,this,this.port_page_read.bind(this,1));a.register_read(129,this,this.port_page_read.bind(this,2));a.register_read(130,this,this.port_page_read.bind(this,3));a.register_read(143,this,this.port_page_read.bind(this,\n4));a.register_read(139,this,this.port_page_read.bind(this,5));a.register_read(137,this,this.port_page_read.bind(this,6));a.register_read(138,this,this.port_page_read.bind(this,7));a.register_write(1159,this,this.port_pagehi_write.bind(this,0));a.register_write(1155,this,this.port_pagehi_write.bind(this,1));a.register_write(1153,this,this.port_pagehi_write.bind(this,2));a.register_write(1154,this,this.port_pagehi_write.bind(this,3));a.register_write(1163,this,this.port_pagehi_write.bind(this,5));\na.register_write(1161,this,this.port_pagehi_write.bind(this,6));a.register_write(1162,this,this.port_pagehi_write.bind(this,7));a.register_read(1159,this,this.port_pagehi_read.bind(this,0));a.register_read(1155,this,this.port_pagehi_read.bind(this,1));a.register_read(1153,this,this.port_pagehi_read.bind(this,2));a.register_read(1154,this,this.port_pagehi_read.bind(this,3));a.register_read(1163,this,this.port_pagehi_read.bind(this,5));a.register_read(1161,this,this.port_pagehi_read.bind(this,6));a.register_read(1162,\nthis,this.port_pagehi_read.bind(this,7));a.register_write(10,this,this.port_singlemask_write.bind(this,0));a.register_write(212,this,this.port_singlemask_write.bind(this,4));a.register_write(15,this,this.port_multimask_write.bind(this,0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,\nthis,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}DMA.prototype.get_state=function(){return[this.channel_page,this.channel_pagehi,this.channel_addr,this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};\nDMA.prototype.set_state=function(a){this.channel_page=a[0];this.channel_pagehi=a[1];this.channel_addr=a[2];this.channel_addr_init=a[3];this.channel_count=a[4];this.channel_count_init=a[5];this.channel_mask=a[6];this.channel_mode=a[7];this.lsb_msb_flipflop=a[8]};DMA.prototype.port_count_write=function(a,b){dbg_log(\"count write [\"+a+\"] = \"+h(b),LOG_DMA);this.channel_count[a]=this.flipflop_get(this.channel_count[a],b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};\nDMA.prototype.port_count_read=function(a){dbg_log(\"count read [\"+a+\"] -> \"+h(this.channel_count[a]),LOG_DMA);return this.flipflop_read(this.channel_count[a])};DMA.prototype.port_addr_write=function(a,b){dbg_log(\"addr write [\"+a+\"] = \"+h(b),LOG_DMA);this.channel_addr[a]=this.flipflop_get(this.channel_addr[a],b,!1);this.channel_addr_init[a]=this.flipflop_get(this.channel_addr_init[a],b,!0)};DMA.prototype.port_addr_read=function(a){dbg_log(\"addr read [\"+a+\"] -> \"+h(this.channel_addr[a]),LOG_DMA);return this.flipflop_read(this.channel_addr[a])};\nDMA.prototype.port_pagehi_write=function(a,b){dbg_log(\"pagehi write [\"+a+\"] = \"+h(b),LOG_DMA);this.channel_pagehi[a]=b};DMA.prototype.port_pagehi_read=function(a){dbg_log(\"pagehi read [\"+a+\"]\",LOG_DMA);return this.channel_pagehi[a]};DMA.prototype.port_page_write=function(a,b){dbg_log(\"page write [\"+a+\"] = \"+h(b),LOG_DMA);this.channel_page[a]=b};DMA.prototype.port_page_read=function(a){dbg_log(\"page read [\"+a+\"]\",LOG_DMA);return this.channel_page[a]};\nDMA.prototype.port_singlemask_write=function(a,b){a=(b&3)+a;b=b&4?1:0;dbg_log(\"singlechannel mask write [\"+a+\"] = \"+b,LOG_DMA);this.update_mask(a,b)};DMA.prototype.port_multimask_write=function(a,b){dbg_log(\"multichannel mask write: \"+h(b),LOG_DMA);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};\nDMA.prototype.port_multimask_read=function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;dbg_log(\"multichannel mask read: \"+h(b),LOG_DMA);return b};DMA.prototype.port_mode_write=function(a,b){a=(b&3)+a;dbg_log(\"mode write [\"+a+\"] = \"+h(b),LOG_DMA);this.channel_mode[a]=b};DMA.prototype.portC_write=function(a){dbg_log(\"flipflop reset\",LOG_DMA);this.lsb_msb_flipflop=0};\nDMA.prototype.on_unmask=function(a,b){this.unmask_listeners.push({fn:a,this_value:b})};DMA.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(dbg_log(\"firing on_unmask(\"+a+\")\",LOG_DMA),b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,a)};\nDMA.prototype.do_read=function(a,b,c,d,e){var f=this.count_get_8bit(d),k=this.address_get_8bit(d);dbg_log(\"DMA write channel \"+d,LOG_DMA);dbg_log(\"to \"+h(k)+\" len \"+h(f),LOG_DMA);c<f&&dbg_log(\"DMA should read more than provided: \"+h(c)+\" \"+h(f),LOG_DMA);if(b+f>a.byteLength)dbg_log(\"DMA read outside of buffer\",LOG_DMA),e(!0);else{var g=this.cpu;this.channel_addr[d]+=f;a.get(b,f,function(l){g.write_blob(l,k);e(!1)})}};\nDMA.prototype.do_write=function(a,b,c,d,e){var f=this.channel_count[d]+1&65535,k=5<=d?2:1,g=f*k,l=this.address_get_8bit(d),m=!1,n=!1,r=this.channel_mode[d]&16;dbg_log(\"DMA write channel \"+d,LOG_DMA);dbg_log(\"to \"+h(l)+\" len \"+h(g),LOG_DMA);c<g?(dbg_log(\"DMA should read more than provided\",LOG_DMA),f=Math.floor(c/k),g=f*k,m=!0):c>g&&(dbg_log(\"DMA attempted to read more than provided\",LOG_DMA),n=!0);b+g>a.byteLength?(dbg_log(\"DMA write outside of buffer\",LOG_DMA),e(!0)):(this.channel_addr[d]+=f,this.channel_count[d]-=\nf,!m&&r&&(dbg_log(\"DMA autoinit\",LOG_DMA),this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(l,l+g),()=>{n&&r?(dbg_log(\"DMA continuing from start\",LOG_DMA),this.do_write(a,b+g,c-g,d,e)):e(!1)}))};DMA.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<24};\nDMA.prototype.count_get_8bit=function(a){var b=this.channel_count[a]+1;5<=a&&(b*=2);return b};DMA.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};DMA.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};var OSCILLATOR_FREQ=1193.1816666;\nfunction PIT(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=v86.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,\nc);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send(\"pcspeaker-enable\"):this.bus.send(\"pcspeaker-disable\")});a.io.register_read(64,this,function(){return this.counter_read(0)});a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,\nfunction(c){this.counter_write(2,c)});a.io.register_write(67,this,this.port43_write)}PIT.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};\nPIT.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};\nPIT.prototype.timer=function(a,b){b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=this.get_counter_value(0,a),this.counter_start_time[0]=a,dbg_log(\"pit interrupt. new value: \"+this.counter_start_value[0],LOG_PIT),this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0));return 0};\nPIT.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;var c=b-this.counter_start_time[a],d=Math.floor(c*OSCILLATOR_FREQ);b=this.counter_start_value[a]-d;dbg_log(\"diff=\"+c+\" dticks=\"+d+\" value=\"+b+\" reload=\"+this.counter_reload[a],LOG_PIT);c=this.counter_reload[a];b>=c?(dbg_log(\"Warning: Counter\"+a+\" value \"+b+\" is larger than reload \"+c,LOG_PIT),b%=c):0>b&&(b=b%c+c);return b};\nPIT.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?(dbg_log(\"Warning: PIT timer difference is negative, resetting\"),!0):this.counter_start_value[a]<Math.floor(b*OSCILLATOR_FREQ)};\nPIT.prototype.counter_read=function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,v86.microtick());return b?a&255:a>>8};\nPIT.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||(this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=v86.microtick(),dbg_log(\"counter\"+a+\" reload=\"+h(this.counter_reload[a])+\" tick=\"+(this.counter_reload[a]||65536)/OSCILLATOR_FREQ+\"ms\",\nLOG_PIT));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1);this.bus.send(\"pcspeaker-update\",[this.counter_mode[2],this.counter_reload[2]])};\nPIT.prototype.port43_write=function(a){var b=a>>1&7,c=a&1,d=a>>6&3;a=a>>4&3;1===d&&dbg_log(\"Unimplemented timer1\",LOG_PIT);3===d?dbg_log(\"Unimplemented read back\",LOG_PIT):0===a?(this.counter_latch[d]=2,b=this.get_counter_value(d,v86.microtick()),dbg_log(\"latch: \"+b,LOG_PIT),this.counter_latch_value[d]=b?b-1:0):(6<=b&&(b&=-5),dbg_log(\"Control: mode=\"+b+\" ctr=\"+d+\" read_mode=\"+a+\" bcd=\"+c,LOG_PIT),this.counter_next_low[d]=1===a?0:1,0===d&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&dbg_log(\"Unimplemented counter mode: \"+\nh(b),LOG_PIT),this.counter_mode[d]=b,this.counter_read_mode[d]=a,this.bus.send(\"pcspeaker-update\",[this.counter_mode[2],this.counter_reload[2]]))};PIT.prototype.dump=function(){const a=this.counter_reload[0];dbg_log(\"counter0 ticks every \"+(a||65536)/OSCILLATOR_FREQ+\"ms (reload=\"+a+\")\")};var VGA_BANK_SIZE=65536,MAX_XRES=2560,MAX_YRES=1600,MAX_BPP=32,VGA_LFB_ADDRESS=3758096384,VGA_PIXEL_BUFFER_START=4*VGA_BANK_SIZE,VGA_PIXEL_BUFFER_SIZE=8*VGA_BANK_SIZE,VGA_MIN_MEMORY_SIZE=VGA_PIXEL_BUFFER_START+VGA_PIXEL_BUFFER_SIZE,VGA_HOST_MEMORY_SPACE_START=Uint32Array.from([655360,655360,720896,753664]),VGA_HOST_MEMORY_SPACE_SIZE=Uint32Array.from([131072,65536,32768,32768]);\nfunction VGAScreen(a,b,c){this.bus=b;this.vga_memory_size=c;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=80;this.max_rows=25;this.virtual_height=this.virtual_width=this.screen_height=this.screen_width=0;this.layers=[];this.start_address_latched=this.start_address=0;this.crtc=new Uint8Array(25);this.line_compare=this.offset_register=this.preset_row_scan=this.underline_location_register=this.vertical_blank_start=this.vertical_display_enable_end=this.horizontal_blank_start=\nthis.horizontal_display_enable_end=this.crtc_mode=0;this.graphical_mode_is_linear=!0;this.graphical_mode=!1;setTimeout(()=>{b.send(\"screen-set-mode\",this.graphical_mode)},0);this.vga256_palette=new Int32Array(256);this.svga_height=this.svga_width=this.latch_dword=0;this.svga_enabled=!1;this.svga_bpp=32;this.svga_offset=this.svga_bank_offset=0;this.pci_space=[52,18,17,17,3,1,0,0,2,0,0,3,0,0,0,0,8,VGA_LFB_ADDRESS>>>8,VGA_LFB_ADDRESS>>>16,VGA_LFB_ADDRESS>>>24,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_id=144;this.pci_bars=[{size:c}];this.pci_rom_size=65536;this.pci_rom_address=4272947200;this.name=\"vga\";this.stats={is_graphical:!1,res_x:0,res_y:0,bpp:0};this.dac_state=this.dac_color_index_read=this.dac_color_index_write=this.index_crtc=0;this.dac_map=new Uint8Array(16);this.attribute_controller_index=-1;this.palette_source=32;this.color_select=this.horizontal_panning=this.color_plane_enable=this.attribute_mode=0;this.sequencer_index=\n-1;this.plane_write_bm=15;this.clocking_mode=this.sequencer_memory_mode=0;this.graphics_index=-1;this.planar_rotate_reg=this.planar_mode=this.plane_read=0;this.planar_bitmap=255;this.max_scan_line=this.color_dont_care=this.color_compare=this.miscellaneous_graphics_register=this.planar_setreset_enable=this.planar_setreset=0;this.port_3DA_value=this.miscellaneous_output_register=255;c=a.io;c.register_write(960,this,this.port3C0_write);c.register_read(960,this,this.port3C0_read,this.port3C0_read16);\nc.register_read(961,this,this.port3C1_read);c.register_write(962,this,this.port3C2_write);c.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write);c.register_read(964,this,this.port3C4_read);c.register_read(965,this,this.port3C5_read);c.register_write_consecutive(974,this,this.port3CE_write,this.port3CF_write);c.register_read(974,this,this.port3CE_read);c.register_read(975,this,this.port3CF_read);c.register_write(967,this,this.port3C7_write);c.register_read(967,this,this.port3C7_read);\nc.register_write(968,this,this.port3C8_write);c.register_read(968,this,this.port3C8_read);c.register_write(969,this,this.port3C9_write);c.register_read(969,this,this.port3C9_read);c.register_read(972,this,this.port3CC_read);c.register_write_consecutive(980,this,this.port3D4_write,this.port3D5_write);c.register_read(980,this,this.port3D4_read);c.register_read(981,this,this.port3D5_read,()=>{dbg_log(\"Warning: 16-bit read from 3D5\",LOG_VGA);return this.port3D5_read()});c.register_read(970,this,function(){dbg_log(\"3CA read\",\nLOG_VGA);return 0});c.register_read(986,this,this.port3DA_read);c.register_read(954,this,this.port3DA_read);this.dispi_index=-1;this.dispi_enable_value=0;c.register_write(462,this,void 0,this.port1CE_write);c.register_write(463,this,void 0,this.port1CF_write);c.register_read(463,this,void 0,this.port1CF_read);void 0===this.vga_memory_size||this.vga_memory_size<VGA_MIN_MEMORY_SIZE?(this.vga_memory_size=VGA_MIN_MEMORY_SIZE,dbg_log(\"vga memory size rounded up to \"+this.vga_memory_size,LOG_VGA)):this.vga_memory_size&\nVGA_BANK_SIZE-1&&(this.vga_memory_size|=VGA_BANK_SIZE-1,this.vga_memory_size++);this.svga_memory=new Uint8Array(this.vga_memory_size);this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0;this.dest_buffer=void 0;b.register(\"screen-tell-buffer\",function(e){this.dest_buffer&&e[0]&&e[0].set(this.dest_buffer.subarray(0,e[0].length));this.dest_buffer=e[0]},this);b.register(\"screen-fill-buffer\",function(){this.screen_fill_buffer()},this);\nthis.svga_memory16=new Uint16Array(this.svga_memory.buffer);this.svga_memory32=new Int32Array(this.svga_memory.buffer);this.vga_memory=new Uint8Array(this.svga_memory.buffer,0,4*VGA_BANK_SIZE);this.plane0=new Uint8Array(this.svga_memory.buffer,0*VGA_BANK_SIZE,VGA_BANK_SIZE);this.plane1=new Uint8Array(this.svga_memory.buffer,1*VGA_BANK_SIZE,VGA_BANK_SIZE);this.plane2=new Uint8Array(this.svga_memory.buffer,2*VGA_BANK_SIZE,VGA_BANK_SIZE);this.plane3=new Uint8Array(this.svga_memory.buffer,3*VGA_BANK_SIZE,\nVGA_BANK_SIZE);this.pixel_buffer=new Uint8Array(this.svga_memory.buffer,VGA_PIXEL_BUFFER_START,VGA_PIXEL_BUFFER_SIZE);var d=this;c.mmap_register(655360,131072,function(e){return d.vga_memory_read(e)},function(e,f){d.vga_memory_write(e,f)});c.mmap_register(VGA_LFB_ADDRESS,this.vga_memory_size,function(e){return d.svga_memory_read8(e)},function(e,f){d.svga_memory_write8(e,f)},function(e){return d.svga_memory_read32(e)},function(e,f){d.svga_memory_write32(e,f)});a.devices.pci.register_device(this)}\nVGAScreen.prototype.get_state=function(){var a=[];a[0]=this.vga_memory_size;a[1]=this.cursor_address;a[2]=this.cursor_scanline_start;a[3]=this.cursor_scanline_end;a[4]=this.max_cols;a[5]=this.max_rows;a[6]=this.layers.map(b=>[b.screen_x,b.screen_y,b.buffer_x,b.buffer_y,b.buffer_width,b.buffer_height]);a[7]=this.dac_state;a[8]=this.start_address;a[9]=this.graphical_mode;a[10]=this.vga256_palette;a[11]=this.latch_dword;a[12]=this.color_compare;a[13]=this.color_dont_care;a[14]=this.miscellaneous_graphics_register;\na[15]=this.svga_width;a[16]=this.svga_height;a[17]=this.crtc_mode;a[18]=this.svga_enabled;a[19]=this.svga_bpp;a[20]=this.svga_bank_offset;a[21]=this.svga_offset;a[22]=this.index_crtc;a[23]=this.dac_color_index_write;a[24]=this.dac_color_index_read;a[25]=this.dac_map;a[26]=this.sequencer_index;a[27]=this.plane_write_bm;a[28]=this.sequencer_memory_mode;a[29]=this.graphics_index;a[30]=this.plane_read;a[31]=this.planar_mode;a[32]=this.planar_rotate_reg;a[33]=this.planar_bitmap;a[34]=this.max_scan_line;\na[35]=this.miscellaneous_output_register;a[36]=this.port_3DA_value;a[37]=this.dispi_index;a[38]=this.dispi_enable_value;a[39]=this.svga_memory;a[40]=this.graphical_mode_is_linear;a[41]=this.attribute_controller_index;a[42]=this.offset_register;a[43]=this.planar_setreset;a[44]=this.planar_setreset_enable;a[45]=this.start_address_latched;a[46]=this.crtc;a[47]=this.horizontal_display_enable_end;a[48]=this.horizontal_blank_start;a[49]=this.vertical_display_enable_end;a[50]=this.vertical_blank_start;a[51]=\nthis.underline_location_register;a[52]=this.preset_row_scan;a[53]=this.offset_register;a[54]=this.palette_source;a[55]=this.attribute_mode;a[56]=this.color_plane_enable;a[57]=this.horizontal_panning;a[58]=this.color_select;a[59]=this.clocking_mode;a[60]=this.line_compare;return a};\nVGAScreen.prototype.set_state=function(a){this.vga_memory_size=a[0];this.cursor_address=a[1];this.cursor_scanline_start=a[2];this.cursor_scanline_end=a[3];this.max_cols=a[4];this.max_rows=a[5];this.layers=a[6].map(b=>({screen_x:b[0],screen_y:b[1],buffer_x:b[2],buffer_y:b[3],buffer_width:b[4],buffer_height:b[5]}));this.dac_state=a[7];this.start_address=a[8];this.graphical_mode=a[9];this.vga256_palette=a[10];this.latch_dword=a[11];this.color_compare=a[12];this.color_dont_care=a[13];this.miscellaneous_graphics_register=\na[14];this.svga_width=a[15];this.svga_height=a[16];this.crtc_mode=a[17];this.svga_enabled=a[18];this.svga_bpp=a[19];this.svga_bank_offset=a[20];this.svga_offset=a[21];this.index_crtc=a[22];this.dac_color_index_write=a[23];this.dac_color_index_read=a[24];this.dac_map=a[25];this.sequencer_index=a[26];this.plane_write_bm=a[27];this.sequencer_memory_mode=a[28];this.graphics_index=a[29];this.plane_read=a[30];this.planar_mode=a[31];this.planar_rotate_reg=a[32];this.planar_bitmap=a[33];this.max_scan_line=\na[34];this.miscellaneous_output_register=a[35];this.port_3DA_value=a[36];this.dispi_index=a[37];this.dispi_enable_value=a[38];this.svga_memory.set(a[39]);this.graphical_mode_is_linear=a[40];this.attribute_controller_index=a[41];this.offset_register=a[42];this.planar_setreset=a[43];this.planar_setreset_enable=a[44];this.start_address_latched=a[45];this.crtc.set(a[46]);this.horizontal_display_enable_end=a[47];this.horizontal_blank_start=a[48];this.vertical_display_enable_end=a[49];this.vertical_blank_start=\na[50];this.underline_location_register=a[51];this.preset_row_scan=a[52];this.offset_register=a[53];this.palette_source=a[54];this.attribute_mode=a[55];this.color_plane_enable=a[56];this.horizontal_panning=a[57];this.color_select=a[58];this.clocking_mode=a[59];this.line_compare=a[60];this.bus.send(\"screen-set-mode\",this.graphical_mode);this.graphical_mode?(this.screen_height=this.screen_width=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,\nthis.svga_height),this.update_layers()):(this.update_vga_size(),this.complete_replot())):(this.set_size_text(this.max_cols,this.max_rows),this.update_cursor_scanline(),this.update_cursor());this.complete_redraw()};\nVGAScreen.prototype.vga_memory_read=function(a){if(this.svga_enabled&&this.graphical_mode_is_linear)return a=a-655360|this.svga_bank_offset,this.svga_memory[a];var b=this.miscellaneous_graphics_register>>2&3;a-=VGA_HOST_MEMORY_SPACE_START[b];if(0>a||a>=VGA_HOST_MEMORY_SPACE_SIZE[b])return dbg_log(\"vga read outside memory space: addr:\"+h(a),LOG_VGA),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;if(this.planar_mode&\n8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^~(this.color_compare&2?255:0)),this.color_dont_care&4&&(b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b=0;return this.vga_memory[b<<16|a]};\nVGAScreen.prototype.vga_memory_write=function(a,b){if(this.svga_enabled&&this.graphical_mode&&this.graphical_mode_is_linear)this.vga_memory_write_graphical_linear(a-655360,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=VGA_HOST_MEMORY_SPACE_START[c];0>a||a>=VGA_HOST_MEMORY_SPACE_SIZE[c]?dbg_log(\"vga write outside memory space: addr:\"+h(a)+\", value:\"+h(b),LOG_VGA):this.graphical_mode?this.vga_memory_write_graphical(a,b):this.plane_write_bm&3&&this.vga_memory_write_text_mode(a,b)}};\nVGAScreen.prototype.vga_memory_write_graphical_linear=function(a,b){a|=this.svga_bank_offset;this.diff_addr_min=a<this.diff_addr_min?a:this.diff_addr_min;this.diff_addr_max=a>this.diff_addr_max?a:this.diff_addr_max;this.svga_memory[a]=b};\nVGAScreen.prototype.vga_memory_write_graphical=function(a,b){var c=this.planar_mode&3,d=this.apply_feed(this.planar_bitmap),e=this.apply_expand(this.planar_setreset),f=this.apply_expand(this.planar_setreset_enable);switch(c){case 0:b=this.apply_rotate(b);var k=this.apply_feed(b);k=this.apply_setreset(k,f);k=this.apply_logical(k,this.latch_dword);k=this.apply_bitmask(k,d);break;case 1:k=this.latch_dword;break;case 2:k=this.apply_expand(b);k=this.apply_logical(k,this.latch_dword);k=this.apply_bitmask(k,\nd);break;case 3:b=this.apply_rotate(b),d&=this.apply_feed(b),k=this.apply_bitmask(e,d)}b=15;switch(this.sequencer_memory_mode&12){case 0:b=5<<(a&1);a&=-2;break;case 8:case 12:b=1<<(a&3),a&=-4}b&=this.plane_write_bm;b&1&&(this.plane0[a]=k>>0&255);b&2&&(this.plane1[a]=k>>8&255);b&4&&(this.plane2[a]=k>>16&255);b&8&&(this.plane3[a]=k>>24&255);a=this.vga_addr_to_pixel(a);this.partial_replot(a,a+7)};VGAScreen.prototype.apply_feed=function(a){return a|a<<8|a<<16|a<<24};\nVGAScreen.prototype.apply_expand=function(a){return(a&1?255:0)|(a&2?255:0)<<8|(a&4?255:0)<<16|(a&8?255:0)<<24};VGAScreen.prototype.apply_rotate=function(a){return(a|a<<8)>>>(this.planar_rotate_reg&7)&255};VGAScreen.prototype.apply_setreset=function(a,b){var c=this.apply_expand(this.planar_setreset);return(a|b&c)&(~b|c)};VGAScreen.prototype.apply_logical=function(a,b){switch(this.planar_rotate_reg&24){case 8:return a&b;case 16:return a|b;case 24:return a^b}return a};\nVGAScreen.prototype.apply_bitmask=function(a,b){return b&a|~b&this.latch_dword};VGAScreen.prototype.text_mode_redraw=function(){for(var a=this.start_address<<1,b,c,d=0;d<this.max_rows;d++)for(var e=0;e<this.max_cols;e++)b=this.vga_memory[a],c=this.vga_memory[a|1],this.bus.send(\"screen-put-char\",[d,e,b,this.vga256_palette[c>>4&15],this.vga256_palette[c&15]]),a+=2};\nVGAScreen.prototype.vga_memory_write_text_mode=function(a,b){var c=(a>>1)-this.start_address,d=c/this.max_cols|0;c%=this.max_cols;if(a&1){var e=b;var f=this.vga_memory[a&-2]}else f=b,e=this.vga_memory[a|1];this.bus.send(\"screen-put-char\",[d,c,f,this.vga256_palette[e>>4&15],this.vga256_palette[e&15]]);this.vga_memory[a]=b};\nVGAScreen.prototype.update_cursor=function(){var a=(this.cursor_address-this.start_address)/this.max_cols|0,b=(this.cursor_address-this.start_address)%this.max_cols;a=Math.min(this.max_rows-1,a);this.bus.send(\"screen-update-cursor\",[a,b])};VGAScreen.prototype.svga_memory_read8=function(a){return this.svga_memory[a&268435455]};\nVGAScreen.prototype.svga_memory_read32=function(a){a&=268435455;return a&3?this.svga_memory[a]|this.svga_memory[a+1]<<8|this.svga_memory[a+2]<<16|this.svga_memory[a+3]<<24:this.svga_memory32[a>>2]};VGAScreen.prototype.svga_memory_write8=function(a,b){a&=268435455;this.svga_memory[a]=b;this.diff_addr_min=a<this.diff_addr_min?a:this.diff_addr_min;this.diff_addr_max=a>this.diff_addr_max?a:this.diff_addr_max};\nVGAScreen.prototype.svga_memory_write32=function(a,b){a&=268435455;this.diff_addr_min=a<this.diff_addr_min?a:this.diff_addr_min;this.diff_addr_max=a+3>this.diff_addr_max?a+3:this.diff_addr_max;this.svga_memory[a]=b;this.svga_memory[a+1]=b>>8;this.svga_memory[a+2]=b>>16;this.svga_memory[a+3]=b>>24};\nVGAScreen.prototype.complete_redraw=function(){dbg_log(\"complete redraw\",LOG_VGA);this.graphical_mode?(this.diff_addr_min=0,this.diff_addr_max=this.svga_enabled?this.vga_memory_size:VGA_PIXEL_BUFFER_SIZE):this.text_mode_redraw()};VGAScreen.prototype.complete_replot=function(){dbg_log(\"complete replot\",LOG_VGA);this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=VGA_PIXEL_BUFFER_SIZE,this.complete_redraw())};\nVGAScreen.prototype.partial_redraw=function(a,b){a<this.diff_addr_min&&(this.diff_addr_min=a);b>this.diff_addr_max&&(this.diff_addr_max=b)};VGAScreen.prototype.partial_replot=function(a,b){a<this.diff_plot_min&&(this.diff_plot_min=a);b>this.diff_plot_max&&(this.diff_plot_max=b);this.partial_redraw(a,b)};VGAScreen.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0};VGAScreen.prototype.destroy=function(){};\nVGAScreen.prototype.vga_bytes_per_line=function(){var a=this.offset_register<<2;this.underline_location_register&64?a<<=1:this.crtc_mode&64&&(a>>>=1);return a};VGAScreen.prototype.vga_addr_shift_count=function(){var a=128+(~this.underline_location_register&this.crtc_mode&64);a-=this.underline_location_register&64;a-=this.attribute_mode&64;return a>>>6};\nVGAScreen.prototype.vga_addr_to_pixel=function(a){var b=this.vga_addr_shift_count();if(~this.crtc_mode&3){var c=a-this.start_address;c&=this.crtc_mode<<13|-24577;c<<=b;var d=c/this.virtual_width|0;c%=this.virtual_width;switch(this.crtc_mode&3){case 2:d=d<<1|a>>13&1;break;case 1:d=d<<1|a>>14&1;break;case 0:d=d<<2|a>>13&3}return d*this.virtual_width+c+(this.start_address<<b)}return a<<b};\nVGAScreen.prototype.scan_line_to_screen_row=function(a){this.max_scan_line&128&&(a>>>=1);a=Math.ceil(a/(1+(this.max_scan_line&31)));this.crtc_mode&1||(a<<=1);this.crtc_mode&2||(a<<=1);return a};VGAScreen.prototype.set_size_text=function(a,b){this.max_cols=a;this.max_rows=b;this.bus.send(\"screen-set-size-text\",[a,b])};\nVGAScreen.prototype.set_size_graphical=function(a,b,c,d,e){this.stats.is_graphical&&this.stats.bpp===c&&this.screen_width===a&&this.screen_height===b&&this.virtual_width===d&&this.virtual_height===e||(this.screen_width=a,this.screen_height=b,this.virtual_width=d,this.virtual_height=e,this.stats.bpp=c,this.stats.is_graphical=!0,this.stats.res_x=a,this.stats.res_y=b,this.bus.send(\"screen-set-size-graphical\",[a,b,d,e,c]))};\nVGAScreen.prototype.update_vga_size=function(){if(!this.svga_enabled){var a=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4;this.attribute_mode&64&&(a>>>=1,c>>>=1);b=this.scan_line_to_screen_row(b);var d=Math.ceil(VGA_HOST_MEMORY_SPACE_SIZE[0]/this.vga_bytes_per_line());this.set_size_graphical(a,b,8,c,d);this.update_vertical_retrace();\nthis.update_layers()}else this.max_scan_line&128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};\nVGAScreen.prototype.update_layers=function(){this.graphical_mode||this.text_mode_redraw();if(this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width)if(!this.palette_source||this.clocking_mode&32)this.layers=[],this.bus.send(\"screen-clear\");else{var a=this.start_address_latched,b=this.horizontal_panning;this.attribute_mode&64&&(b>>>=1);var c=this.preset_row_scan>>5&3,d=this.vga_addr_to_pixel(a+c);a=d/this.virtual_width|0;var e=d%this.virtual_width+b;d=this.scan_line_to_screen_row(1+\nthis.line_compare);d=Math.min(d,this.screen_height);var f=this.screen_height-d;this.layers=[];e=-e;for(var k=0;e<this.screen_width;e+=this.virtual_width,k++)this.layers.push({screen_x:e,screen_y:0,buffer_x:0,buffer_y:a+k,buffer_width:this.virtual_width,buffer_height:d});a=0;this.attribute_mode&32||(a=this.vga_addr_to_pixel(c)+b);e=-a;for(k=0;e<this.screen_width;e+=this.virtual_width,k++)this.layers.push({screen_x:e,screen_y:d,buffer_x:0,buffer_y:k,buffer_width:this.virtual_width,buffer_height:f})}};\nVGAScreen.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8;this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())};VGAScreen.prototype.update_cursor_scanline=function(){this.bus.send(\"screen-update-cursor-scanline\",[this.cursor_scanline_start,this.cursor_scanline_end])};\nVGAScreen.prototype.port3C0_write=function(a){if(-1===this.attribute_controller_index)dbg_log(\"attribute controller index register: \"+h(a),LOG_VGA),this.attribute_controller_index=a&31,dbg_log(\"attribute actual index: \"+h(this.attribute_controller_index),LOG_VGA),this.palette_source!==(a&32)&&(this.palette_source=a&32,this.update_layers());else{if(16>this.attribute_controller_index)dbg_log(\"internal palette: \"+h(this.attribute_controller_index)+\" -> \"+h(a),LOG_VGA),this.dac_map[this.attribute_controller_index]=\na,this.attribute_mode&64||this.complete_redraw();else switch(this.attribute_controller_index){case 16:dbg_log(\"3C0 / attribute mode control: \"+h(a),LOG_VGA);if(this.attribute_mode!==a){var b=this.attribute_mode;this.attribute_mode=a;var c=0<(a&1);this.svga_enabled||this.graphical_mode===c||(this.graphical_mode=c,this.bus.send(\"screen-set-mode\",this.graphical_mode));(b^a)&64&&this.complete_replot();this.update_vga_size();this.complete_redraw()}break;case 18:dbg_log(\"3C0 / color plane enable: \"+h(a),\nLOG_VGA);this.color_plane_enable!==a&&(this.color_plane_enable=a,this.complete_redraw());break;case 19:dbg_log(\"3C0 / horizontal panning: \"+h(a),LOG_VGA);this.horizontal_panning!==a&&(this.horizontal_panning=a&15,this.update_layers());break;case 20:dbg_log(\"3C0 / color select: \"+h(a),LOG_VGA);this.color_select!==a&&(this.color_select=a,this.complete_redraw());break;default:dbg_log(\"3C0 / attribute controller write \"+h(this.attribute_controller_index)+\": \"+h(a),LOG_VGA)}this.attribute_controller_index=\n-1}};VGAScreen.prototype.port3C0_read=function(){dbg_log(\"3C0 read\",LOG_VGA);return this.attribute_controller_index|this.palette_source};VGAScreen.prototype.port3C0_read16=function(){dbg_log(\"3C0 read16\",LOG_VGA);return this.port3C0_read()&255|this.port3C1_read()<<8&65280};\nVGAScreen.prototype.port3C1_read=function(){if(16>this.attribute_controller_index)return dbg_log(\"3C1 / internal palette read: \"+h(this.attribute_controller_index)+\" -> \"+h(this.dac_map[this.attribute_controller_index]),LOG_VGA),this.dac_map[this.attribute_controller_index]&255;switch(this.attribute_controller_index){case 16:return dbg_log(\"3C1 / attribute mode read: \"+h(this.attribute_mode),LOG_VGA),this.attribute_mode;case 18:return dbg_log(\"3C1 / color plane enable read: \"+h(this.color_plane_enable),\nLOG_VGA),this.color_plane_enable;case 19:return dbg_log(\"3C1 / horizontal panning read: \"+h(this.horizontal_panning),LOG_VGA),this.horizontal_panning;case 20:return dbg_log(\"3C1 / color select read: \"+h(this.color_select),LOG_VGA),this.color_select;default:dbg_log(\"3C1 / attribute controller read \"+h(this.attribute_controller_index),LOG_VGA)}return 255};VGAScreen.prototype.port3C2_write=function(a){dbg_log(\"3C2 / miscellaneous output register = \"+h(a),LOG_VGA);this.miscellaneous_output_register=a};\nVGAScreen.prototype.port3C4_write=function(a){this.sequencer_index=a};VGAScreen.prototype.port3C4_read=function(){return this.sequencer_index};\nVGAScreen.prototype.port3C5_write=function(a){switch(this.sequencer_index){case 1:dbg_log(\"clocking mode: \"+h(a),LOG_VGA);var b=this.clocking_mode;this.clocking_mode=a;(b^a)&32&&this.update_layers();break;case 2:dbg_log(\"plane write mask: \"+h(a),LOG_VGA);this.plane_write_bm=a;break;case 4:dbg_log(\"sequencer memory mode: \"+h(a),LOG_VGA);this.sequencer_memory_mode=a;break;default:dbg_log(\"3C5 / sequencer write \"+h(this.sequencer_index)+\": \"+h(a),LOG_VGA)}};\nVGAScreen.prototype.port3C5_read=function(){dbg_log(\"3C5 / sequencer read \"+h(this.sequencer_index),LOG_VGA);switch(this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0};VGAScreen.prototype.port3C7_write=function(a){dbg_log(\"3C7 write: \"+h(a),LOG_VGA);this.dac_color_index_read=3*a;this.dac_state&=0};VGAScreen.prototype.port3C7_read=function(){return this.dac_state};\nVGAScreen.prototype.port3C8_write=function(a){this.dac_color_index_write=3*a;this.dac_state|=3};VGAScreen.prototype.port3C8_read=function(){return this.dac_color_index_write/3|0};\nVGAScreen.prototype.port3C9_write=function(a){var b=this.dac_color_index_write/3|0,c=this.dac_color_index_write%3,d=this.vga256_palette[b];a=255*(a&63)/63|0;0===c?d=d&-16711681|a<<16:1===c?d=d&-65281|a<<8:(d=d&-256|a,dbg_log(\"dac set color, index=\"+h(b)+\" value=\"+h(d),LOG_VGA));this.vga256_palette[b]!==d&&(this.vga256_palette[b]=d,this.complete_redraw());this.dac_color_index_write++};\nVGAScreen.prototype.port3C9_read=function(){dbg_log(\"3C9 read\",LOG_VGA);var a=this.dac_color_index_read%3,b=this.vga256_palette[this.dac_color_index_read/3|0];this.dac_color_index_read++;return(b>>8*(2-a)&255)/255*63|0};VGAScreen.prototype.port3CC_read=function(){dbg_log(\"3CC read\",LOG_VGA);return this.miscellaneous_output_register};VGAScreen.prototype.port3CE_write=function(a){this.graphics_index=a};VGAScreen.prototype.port3CE_read=function(){return this.graphics_index};\nVGAScreen.prototype.port3CF_write=function(a){switch(this.graphics_index){case 0:this.planar_setreset=a;dbg_log(\"plane set/reset: \"+h(a),LOG_VGA);break;case 1:this.planar_setreset_enable=a;dbg_log(\"plane set/reset enable: \"+h(a),LOG_VGA);break;case 2:this.color_compare=a;dbg_log(\"color compare: \"+h(a),LOG_VGA);break;case 3:this.planar_rotate_reg=a;dbg_log(\"plane rotate: \"+h(a),LOG_VGA);break;case 4:this.plane_read=a;dbg_log(\"plane read: \"+h(a),LOG_VGA);break;case 5:var b=this.planar_mode;this.planar_mode=\na;dbg_log(\"planar mode: \"+h(a),LOG_VGA);(b^a)&96&&this.complete_replot();break;case 6:dbg_log(\"miscellaneous graphics register: \"+h(a),LOG_VGA);this.miscellaneous_graphics_register!==a&&(this.miscellaneous_graphics_register=a,this.update_vga_size());break;case 7:this.color_dont_care=a;dbg_log(\"color don't care: \"+h(a),LOG_VGA);break;case 8:this.planar_bitmap=a;dbg_log(\"planar bitmap: \"+h(a),LOG_VGA);break;default:dbg_log(\"3CF / graphics write \"+h(this.graphics_index)+\": \"+h(a),LOG_VGA)}};\nVGAScreen.prototype.port3CF_read=function(){dbg_log(\"3CF / graphics read \"+h(this.graphics_index),LOG_VGA);switch(this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0};\nVGAScreen.prototype.port3D4_write=function(a){dbg_log(\"3D4 / crtc index: \"+a,LOG_VGA);this.index_crtc=a};VGAScreen.prototype.port3D4_read=function(){dbg_log(\"3D4 read / crtc index: \"+this.index_crtc,LOG_VGA);return this.index_crtc};\nVGAScreen.prototype.port3D5_write=function(a){switch(this.index_crtc){case 1:dbg_log(\"3D5 / hdisp enable end write: \"+h(a),LOG_VGA);this.horizontal_display_enable_end!==a&&(this.horizontal_display_enable_end=a,this.update_vga_size());break;case 2:this.horizontal_blank_start!==a&&(this.horizontal_blank_start=a,this.update_vga_size());break;case 7:dbg_log(\"3D5 / overflow register write: \"+h(a),LOG_VGA);var b=this.vertical_display_enable_end;this.vertical_display_enable_end&=255;this.vertical_display_enable_end=\nthis.vertical_display_enable_end|a<<3&512|a<<7&256;b!=this.vertical_display_enable_end&&this.update_vga_size();this.line_compare=this.line_compare&767|a<<4&256;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&767|a<<5&256;b!==this.vertical_blank_start&&this.update_vga_size();this.update_layers();break;case 8:dbg_log(\"3D5 / preset row scan write: \"+h(a),LOG_VGA);this.preset_row_scan=a;this.update_layers();break;case 9:dbg_log(\"3D5 / max scan line write: \"+h(a),LOG_VGA);\nthis.max_scan_line=a;this.line_compare=this.line_compare&511|a<<3&512;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&511|a<<4&512;b!==this.vertical_blank_start&&this.update_vga_size();this.update_layers();break;case 10:dbg_log(\"3D5 / cursor scanline start write: \"+h(a),LOG_VGA);this.cursor_scanline_start=a;this.update_cursor_scanline();break;case 11:dbg_log(\"3D5 / cursor scanline end write: \"+h(a),LOG_VGA);this.cursor_scanline_end=a;this.update_cursor_scanline();break;\ncase 12:(this.start_address>>8&255)!==a&&(this.start_address=this.start_address&255|a<<8,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());dbg_log(\"3D5 / start addr hi write: \"+h(a)+\" -> \"+h(this.start_address,4),LOG_VGA);break;case 13:(this.start_address&255)!==a&&(this.start_address=this.start_address&65280|a,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());dbg_log(\"3D5 / start addr lo write: \"+h(a)+\" -> \"+h(this.start_address,4),LOG_VGA);break;case 14:dbg_log(\"3D5 / cursor address hi write: \"+\nh(a),LOG_VGA);this.cursor_address=this.cursor_address&255|a<<8;this.update_cursor();break;case 15:dbg_log(\"3D5 / cursor address lo write: \"+h(a),LOG_VGA);this.cursor_address=this.cursor_address&65280|a;this.update_cursor();break;case 18:dbg_log(\"3D5 / vdisp enable end write: \"+h(a),LOG_VGA);(this.vertical_display_enable_end&255)!==a&&(this.vertical_display_enable_end=this.vertical_display_enable_end&768|a,this.update_vga_size());break;case 19:dbg_log(\"3D5 / offset register write: \"+h(a),LOG_VGA);\nthis.offset_register!==a&&(this.offset_register=a,this.update_vga_size(),~this.crtc_mode&3&&this.complete_replot());break;case 20:dbg_log(\"3D5 / underline location write: \"+h(a),LOG_VGA);this.underline_location_register!==a&&(b=this.underline_location_register,this.underline_location_register=a,this.update_vga_size(),(b^a)&64&&this.complete_replot());break;case 21:dbg_log(\"3D5 / vertical blank start write: \"+h(a),LOG_VGA);(this.vertical_blank_start&255)!==a&&(this.vertical_blank_start=this.vertical_blank_start&\n768|a,this.update_vga_size());break;case 23:dbg_log(\"3D5 / crtc mode write: \"+h(a),LOG_VGA);this.crtc_mode!==a&&(b=this.crtc_mode,this.crtc_mode=a,this.update_vga_size(),(b^a)&67&&this.complete_replot());break;case 24:dbg_log(\"3D5 / line compare write: \"+h(a),LOG_VGA);this.line_compare=this.line_compare&768|a;this.update_layers();break;default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=a),dbg_log(\"3D5 / CRTC write \"+h(this.index_crtc)+\": \"+h(a),LOG_VGA)}};\nVGAScreen.prototype.port3D5_read=function(){dbg_log(\"3D5 read \"+h(this.index_crtc),LOG_VGA);switch(this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;\ncase 12:return this.start_address&255;case 13:return this.start_address>>8;case 14:return this.cursor_address>>8;case 15:return this.cursor_address&255;case 18:return this.vertical_display_enable_end&255;case 19:return this.offset_register;case 20:return this.underline_location_register;case 21:return this.vertical_blank_start&255;case 23:return this.crtc_mode;case 24:return this.line_compare&255}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0};\nVGAScreen.prototype.port3DA_read=function(){dbg_log(\"3DA read - status 1 and clear attr index\",LOG_VGA);var a=this.port_3DA_value;this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(this.port_3DA_value&1&&(this.port_3DA_value^=8),this.port_3DA_value^=1);this.attribute_controller_index=-1;return a};VGAScreen.prototype.svga_bytes_per_line=function(){return this.svga_width*(15===this.svga_bpp?16:this.svga_bpp)/8};VGAScreen.prototype.port1CE_write=function(a){this.dispi_index=a};\nVGAScreen.prototype.port1CF_write=function(a){dbg_log(\"1CF / dispi write \"+h(this.dispi_index)+\": \"+h(a),LOG_VGA);switch(this.dispi_index){case 1:this.svga_width=a;this.svga_width>MAX_XRES&&(dbg_log(\"svga_width reduced from \"+this.svga_width+\" to \"+MAX_XRES,LOG_VGA),this.svga_width=MAX_XRES);break;case 2:this.svga_height=a;this.svga_height>MAX_YRES&&(dbg_log(\"svga_height reduced from \"+this.svga_height+\" to \"+MAX_YRES,LOG_VGA),this.svga_height=MAX_YRES);break;case 3:this.svga_bpp=a;break;case 4:this.svga_enabled=\n1===(a&1);this.dispi_enable_value=a;break;case 5:this.svga_bank_offset=a<<16;break;case 9:this.svga_offset=a*this.svga_bytes_per_line(),dbg_log(\"SVGA offset: \"+h(this.svga_offset)+\" y=\"+h(a),LOG_VGA),this.complete_redraw()}!this.svga_enabled||this.svga_width&&this.svga_height||(dbg_log(\"SVGA: disabled because of invalid width/height: \"+this.svga_width+\"x\"+this.svga_height,LOG_VGA),this.svga_enabled=!1);dbg_assert(4!==this.svga_bpp,\"unimplemented svga bpp: 4\");dbg_assert(15!==this.svga_bpp,\"unimplemented svga bpp: 15\");\ndbg_assert(4===this.svga_bpp||8===this.svga_bpp||15===this.svga_bpp||16===this.svga_bpp||24===this.svga_bpp||32===this.svga_bpp,\"unexpected svga bpp: \"+this.svga_bpp);dbg_log(\"SVGA: enabled=\"+this.svga_enabled+\", \"+this.svga_width+\"x\"+this.svga_height+\"x\"+this.svga_bpp,LOG_VGA);this.svga_enabled&&4===this.dispi_index&&(this.set_size_graphical(this.svga_width,this.svga_height,this.svga_bpp,this.svga_width,this.svga_height),this.bus.send(\"screen-set-mode\",!0),this.graphical_mode_is_linear=this.graphical_mode=\n!0);this.svga_enabled||(this.svga_bank_offset=0);this.update_layers()};VGAScreen.prototype.port1CF_read=function(){dbg_log(\"1CF / dispi read \"+h(this.dispi_index),LOG_VGA);return this.svga_register_read(this.dispi_index)};\nVGAScreen.prototype.svga_register_read=function(a){switch(a){case 0:return 45248;case 1:return this.dispi_enable_value&2?MAX_XRES:this.svga_width;case 2:return this.dispi_enable_value&2?MAX_YRES:this.svga_height;case 3:return this.dispi_enable_value&2?MAX_BPP:this.svga_bpp;case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return 0;case 10:return this.vga_memory_size/VGA_BANK_SIZE|0}return 255};\nVGAScreen.prototype.vga_replot=function(){for(var a=this.diff_plot_min&-16,b=Math.min(this.diff_plot_max|15,VGA_PIXEL_BUFFER_SIZE-1),c=this.vga_addr_shift_count(),d=~this.crtc_mode&3,e=this.planar_mode&96,f=this.attribute_mode&64;a<=b;){var k=a>>>c;if(d){var g=a/this.virtual_width|0,l=a-this.virtual_width*g;switch(d){case 1:k=(g&1)<<13;g>>>=1;break;case 2:k=(g&1)<<14;g>>>=1;break;case 3:k=(g&3)<<13,g>>>=2}k|=(g*this.virtual_width+l>>>c)+this.start_address}g=this.plane0[k];l=this.plane1[k];var m=this.plane2[k],\nn=this.plane3[k];k=new Uint8Array(8);switch(e){case 0:g<<=0;l<<=1;m<<=2;n<<=3;for(var r=7;0<=r;r--)k[7-r]=g>>r&1|l>>r&2|m>>r&4|n>>r&8;break;case 32:k[0]=g>>6&3|m>>4&12;k[1]=g>>4&3|m>>2&12;k[2]=g>>2&3|m>>0&12;k[3]=g>>0&3|m<<2&12;k[4]=l>>6&3|n>>4&12;k[5]=l>>4&3|n>>2&12;k[6]=l>>2&3|n>>0&12;k[7]=l>>0&3|n<<2&12;break;case 64:case 96:k[0]=g>>4&15,k[1]=g>>0&15,k[2]=l>>4&15,k[3]=l>>0&15,k[4]=m>>4&15,k[5]=m>>0&15,k[6]=n>>4&15,k[7]=n>>0&15}if(f)for(g=r=0;4>r;r++,a++,g+=2)this.pixel_buffer[a]=k[g]<<4|k[g+1];\nelse for(r=0;8>r;r++,a++)this.pixel_buffer[a]=k[r]}};\nVGAScreen.prototype.vga_redraw=function(){var a=this.diff_addr_min,b=Math.min(this.diff_addr_max,VGA_PIXEL_BUFFER_SIZE-1),c=this.dest_buffer;if(c){var d=255,e=0;this.attribute_mode&128&&(d&=207,e|=this.color_select<<4&48);if(this.attribute_mode&64)for(;a<=b;a++){var f=this.pixel_buffer[a]&d|e;f=this.vga256_palette[f];c[a]=f&65280|f<<16|f>>16|4278190080}else for(d&=63,e|=this.color_select<<4&192;a<=b;a++)f=this.dac_map[this.pixel_buffer[a]&this.color_plane_enable]&d|e,f=this.vga256_palette[f],c[a]=\nf&65280|f<<16|f>>16|4278190080}};\nVGAScreen.prototype.screen_fill_buffer=function(){if(this.graphical_mode)if(this.dest_buffer)if(this.diff_addr_max<this.diff_addr_min&&this.diff_plot_max<this.diff_plot_min)this.bus.send(\"screen-fill-buffer-end\",this.layers);else{if(this.svga_enabled){var a=this.svga_bpp,b=this.dest_buffer,c=this.diff_addr_min,d=this.diff_addr_max;switch(a){case 32:var e=c-this.svga_offset>>2,f=(d-this.svga_offset>>2)+1;a=c>>2;for(c=e;c<f;c++)d=this.svga_memory32[a++],b[c]=d<<16|d>>16&255|d&65280|4278190080;break;\ncase 24:c-=c%3;d+=3-d%3;dbg_assert(0===this.svga_offset%3);e=(c-this.svga_offset)/3|0;f=((d-this.svga_offset)/3|0)+1;a=c;for(c=e;a<d;c++){var k=this.svga_memory[a++],g=this.svga_memory[a++],l=this.svga_memory[a++];b[c]=k<<16|g<<8|l|4278190080}break;case 16:e=c-this.svga_offset>>1;f=(d-this.svga_offset>>1)+1;a=c>>1;for(c=e;c<f;c++)d=this.svga_memory16[a++],l=255*(d>>11)/31|0,g=255*(d>>5&63)/63|0,k=255*(d&31)/31|0,b[c]=k<<16|g<<8|l|4278190080;break;case 8:e=c-this.svga_offset;f=d-this.svga_offset+1;\nfor(a=c;c<=d;c++)g=this.vga256_palette[this.svga_memory[a++]],b[c]=g&65280|g<<16|g>>16|4278190080;break;default:dbg_assert(!1,\"Unsupported BPP: \"+a)}b=e/this.svga_width|0;this.bus.send(\"screen-fill-buffer-end\",[{screen_x:0,screen_y:b,buffer_x:0,buffer_y:b,buffer_width:this.svga_width,buffer_height:(f/this.svga_width|0)-b+1}])}else this.vga_replot(),this.vga_redraw(),this.bus.send(\"screen-fill-buffer-end\",this.layers);this.reset_diffs()}else dbg_log(\"Cannot fill buffer: No destination buffer\",LOG_VGA);\nthis.update_vertical_retrace()};let PS2_LOG_VERBOSE=!1;\nfunction PS2(a,b){this.cpu=a;this.bus=b;this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=this.mouse_delta_y=this.mouse_delta_x=0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new ByteQueue(1024);this.last_port60_byte=0;this.sample_rate=100;this.resolution=4;this.scaling2=!1;this.last_mouse_packet=-1;this.mouse_buffer=\nnew ByteQueue(1024);this.next_byte_is_aux=this.next_byte_is_ready=!1;this.bus.register(\"keyboard-code\",function(c){this.kbd_send_code(c)},this);this.bus.register(\"mouse-click\",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register(\"mouse-delta\",function(c){this.mouse_send_delta(c[0],c[1])},this);this.bus.register(\"mouse-wheel\",function(c){},this);this.command_register=5;this.read_command_register=this.read_output_register=!1;a.io.register_read(96,this,this.port60_read);a.io.register_read(100,\nthis,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}\nPS2.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=\nthis.scaling2;a[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;return a};\nPS2.prototype.set_state=function(a){this.enable_mouse_stream=a[0];this.use_mouse=a[1];this.have_mouse=a[2];this.mouse_delta_x=a[3];this.mouse_delta_y=a[4];this.mouse_clicks=a[5];this.have_keyboard=a[6];this.enable_keyboard_stream=a[7];this.next_is_mouse_command=a[8];this.next_read_sample=a[9];this.next_read_led=a[10];this.next_handle_scan_code_set=a[11];this.next_read_rate=a[12];this.next_read_resolution=a[13];this.last_port60_byte=a[15];this.sample_rate=a[16];this.resolution=a[17];this.scaling2=\na[18];this.command_register=a[20];this.read_output_register=a[21];this.read_command_register=a[22];this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send(\"mouse-enable\",this.use_mouse)};PS2.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())};\nPS2.prototype.mouse_irq=function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(dbg_log(\"Mouse irq\",LOG_PS2),this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};PS2.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(dbg_log(\"Keyboard irq\",LOG_PS2),this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))};\nPS2.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(dbg_log(\"adding kbd code: \"+h(a),LOG_PS2),this.kbd_buffer.push(a),this.raise_irq())};PS2.prototype.mouse_send_delta=function(a,b){if(this.have_mouse&&this.use_mouse){var c=this.resolution*this.sample_rate/80;this.mouse_delta_x+=a*c;this.mouse_delta_y+=b*c;this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b)&&(Date.now(),this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,b))}};\nPS2.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))};PS2.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);PS2_LOG_VERBOSE&&dbg_log(\"adding mouse packets: \"+[c,a,b],LOG_PS2);this.raise_irq()};\nPS2.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};\nPS2.prototype.port60_read=function(){this.next_byte_is_ready=!1;if(!this.kbd_buffer.length&&!this.mouse_buffer.length)return dbg_log(\"Port 60 read: Empty\",LOG_PS2),this.last_port60_byte;this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift(),dbg_log(\"Port 60 read (mouse): \"+h(this.last_port60_byte),LOG_PS2)):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift(),dbg_log(\"Port 60 read (kbd)  : \"+h(this.last_port60_byte),LOG_PS2));(this.kbd_buffer.length||\nthis.mouse_buffer.length)&&this.raise_irq();return this.last_port60_byte};PS2.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);dbg_log(\"port 64 read: \"+h(a),LOG_PS2);return a};\nPS2.prototype.port60_write=function(a){dbg_log(\"port 60 write: \"+h(a),LOG_PS2);if(this.read_command_register)this.command_register=a,this.read_command_register=!1,dbg_log(\"Keyboard command register = \"+h(this.command_register),LOG_PS2);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),this.mouse_irq();else if(this.next_read_sample)this.next_read_sample=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),this.sample_rate=a,dbg_log(\"mouse sample rate: \"+\nh(a),LOG_PS2),this.sample_rate||(dbg_log(\"invalid sample rate, reset to 100\",LOG_PS2),this.sample_rate=100),this.mouse_irq();else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),3<a?(this.resolution=4,dbg_log(\"invalid resolution, resetting to 4\",LOG_PS2)):(this.resolution=1<<a,dbg_log(\"resolution: \"+this.resolution,LOG_PS2)),this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=\n!1,this.kbd_buffer.push(250),this.kbd_irq(),a||this.kbd_buffer.push(2);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,dbg_log(\"Port 60 data register write: \"+h(a),LOG_PS2),this.have_mouse){this.kbd_buffer.clear();this.mouse_buffer.clear();this.mouse_buffer.push(250);switch(a){case 230:dbg_log(\"Scaling 1:1\",LOG_PS2);this.scaling2=!1;break;case 231:dbg_log(\"Scaling 2:1\",LOG_PS2);this.scaling2=\n!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:dbg_log(\"unimplemented request single packet\",LOG_PS2);this.send_mouse_packet(0,0);break;case 242:this.mouse_buffer.push(0);this.mouse_buffer.push(0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 243:this.next_read_sample=!0;break;case 244:this.use_mouse=this.enable_mouse_stream=!0;this.bus.send(\"mouse-enable\",!0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;\nbreak;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;break;case 255:dbg_log(\"Mouse reset\",LOG_PS2);this.mouse_buffer.push(170);this.mouse_buffer.push(0);this.use_mouse=!0;this.bus.send(\"mouse-enable\",!0);this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;default:dbg_log(\"Unimplemented mouse command: \"+h(a),LOG_PS2)}this.mouse_irq()}}else{dbg_log(\"Port 60 data register write: \"+\nh(a),LOG_PS2);this.mouse_buffer.clear();this.kbd_buffer.clear();this.kbd_buffer.push(250);switch(a){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171);this.kbd_buffer.push(83);break;case 243:this.next_read_rate=!0;break;case 244:dbg_log(\"kbd enable scanning\",LOG_PS2);this.enable_keyboard_stream=!0;break;case 245:dbg_log(\"kbd disable scanning\",LOG_PS2);this.enable_keyboard_stream=!1;break;case 246:break;case 255:this.kbd_buffer.clear();\nthis.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;default:dbg_log(\"Unimplemented keyboard command: \"+h(a),LOG_PS2)}this.kbd_irq()}};\nPS2.prototype.port64_write=function(a){dbg_log(\"port 64 write: \"+h(a),LOG_PS2);switch(a){case 32:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(this.command_register);this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:dbg_log(\"Disable second port\",LOG_PS2);this.command_register|=32;break;case 168:dbg_log(\"Enable second port\",LOG_PS2);this.command_register&=-33;break;\ncase 169:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:dbg_log(\"Disable Keyboard\",LOG_PS2);this.command_register|=16;break;case 174:dbg_log(\"Enable Keyboard\",LOG_PS2);this.command_register&=-17;break;case 254:dbg_log(\"CPU reboot via PS2\");\nthis.cpu.reboot_internal();break;default:dbg_log(\"port 64: Unimplemented command byte: \"+h(a),LOG_PS2)}};var PIC_LOG_VERBOSE=!1;\nfunction PIC(a,b){this.irq_value=this.irr=this.isr=this.irq_map=this.irq_mask=0;this.requested_irq=-1;this.master=b;this.is_master=void 0===this.master;this.slave=void 0;this.name=this.is_master?\"master\":\"slave \";this.expect_icw4=!1;this.read_isr=this.state=0;this.auto_eoi=1;this.elcr=this.special_mask_mode=0;this.cpu=a;this.is_master?(this.slave=new PIC(this.cpu,this),this.check_irqs=function(){if(0<=this.requested_irq)PIC_LOG_VERBOSE&&dbg_log(\"master> Already requested irq: \"+this.requested_irq,\nLOG_PIC),this.cpu.handle_irqs();else{var c=this.irr&this.irq_mask;if(c){c&=-c;var d=this.special_mask_mode?this.irq_mask:-1;this.isr&&(this.isr&-this.isr&d)<=c?dbg_log(\"master> higher prio: isr=\"+h(this.isr,2)+\" mask=\"+h(this.irq_mask&255,2)+\" irq=\"+h(c,2),LOG_PIC):(dbg_assert(0!==c),d=v86util.int_log2_byte(c),dbg_assert(c===1<<d),PIC_LOG_VERBOSE&&dbg_log(\"master> request irq \"+d,LOG_PIC),this.requested_irq=d,this.cpu.handle_irqs())}else PIC_LOG_VERBOSE&&dbg_log(\"master> no unmasked irrs. irr=\"+h(this.irr,\n2)+\" mask=\"+h(this.irq_mask&255,2)+\" isr=\"+h(this.isr,2),LOG_PIC)}},this.acknowledge_irq=function(){if(-1!==this.requested_irq)if(0===this.irr)PIC_LOG_VERBOSE&&dbg_log(\"master> spurious requested=\"+this.requested_irq,LOG_PIC),this.requested_irq=-1;else{dbg_assert(this.irr);dbg_assert(0<=this.requested_irq);var c=1<<this.requested_irq;0===(this.elcr&c)&&(this.irr&=~c);this.auto_eoi||(this.isr|=c);PIC_LOG_VERBOSE&&dbg_log(\"master> acknowledge \"+this.requested_irq,LOG_PIC);2===this.requested_irq?this.slave.acknowledge_irq():\nthis.cpu.pic_call_irq(this.irq_map|this.requested_irq);this.requested_irq=-1;this.check_irqs()}}):(this.check_irqs=function(){if(0<=this.requested_irq)PIC_LOG_VERBOSE&&dbg_log(\"slave > Already requested irq: \"+this.requested_irq,LOG_PIC),this.cpu.handle_irqs();else{var c=this.irr&this.irq_mask;if(c){c&=-c;var d=this.special_mask_mode?this.irq_mask:-1;this.isr&&(this.isr&-this.isr&d)<=c?PIC_LOG_VERBOSE&&dbg_log(\"slave > higher prio: isr=\"+h(this.isr,2)+\" irq=\"+h(c,2),LOG_PIC):(dbg_assert(0!==c),d=\nv86util.int_log2_byte(c),dbg_assert(c===1<<d),PIC_LOG_VERBOSE&&dbg_log(\"slave > request irq \"+d,LOG_PIC),this.requested_irq=d,this.master.set_irq(2))}else PIC_LOG_VERBOSE&&dbg_log(\"slave > no unmasked irrs. irr=\"+h(this.irr,2)+\" mask=\"+h(this.irq_mask&255,2)+\" isr=\"+h(this.isr,2),LOG_PIC)}},this.acknowledge_irq=function(){if(-1!==this.requested_irq)if(0===this.irr)PIC_LOG_VERBOSE&&dbg_log(\"slave > spurious requested=\"+this.requested_irq,LOG_PIC),this.requested_irq=-1,this.master.irq_value&=-5,this.cpu.pic_call_irq(this.irq_map|\n7);else{dbg_assert(this.irr);dbg_assert(0<=this.requested_irq);var c=1<<this.requested_irq;0===(this.elcr&c)&&(this.irr&=~c);this.auto_eoi||(this.isr|=c);this.master.irq_value&=-5;PIC_LOG_VERBOSE&&dbg_log(\"slave > acknowledge \"+this.requested_irq,LOG_PIC);this.cpu.pic_call_irq(this.irq_map|this.requested_irq);this.requested_irq=-1;this.check_irqs()}});this.dump=function(){dbg_log(\"mask: \"+h(this.irq_mask&255),LOG_PIC);dbg_log(\"base: \"+h(this.irq_map),LOG_PIC);dbg_log(\"requested: \"+h(this.irr),LOG_PIC);\ndbg_log(\"serviced: \"+h(this.isr),LOG_PIC);this.is_master&&this.slave.dump()};this.is_master?(a=32,b=1232):(a=160,b=1233);this.cpu.io.register_write(a,this,this.port20_write);this.cpu.io.register_read(a,this,this.port20_read);this.cpu.io.register_write(a|1,this,this.port21_write);this.cpu.io.register_read(a|1,this,this.port21_read);this.cpu.io.register_write(b,this,this.port4D0_write);this.cpu.io.register_read(b,this,this.port4D0_read);this.is_master?(this.set_irq=function(c){dbg_assert(0<=c&&16>c);\nif(8<=c)this.slave.set_irq(c-8);else{var d=1<<c;0===(this.irq_value&d)?(PIC_LOG_VERBOSE&&dbg_log(\"master> set irq \"+c,LOG_PIC),this.irr|=d,this.irq_value|=d,this.check_irqs()):PIC_LOG_VERBOSE&&dbg_log(\"master> set irq \"+c+\": already set!\",LOG_PIC)}},this.clear_irq=function(c){dbg_assert(0<=c&&16>c);PIC_LOG_VERBOSE&&dbg_log(\"master> clear irq \"+c,LOG_PIC);8<=c?this.slave.clear_irq(c-8):(c=1<<c,this.irq_value&c&&(this.irq_value&=~c,this.irr&=~c,this.check_irqs()))}):(this.set_irq=function(c){dbg_assert(0<=\nc&&8>c);var d=1<<c;0===(this.irq_value&d)?(PIC_LOG_VERBOSE&&dbg_log(\"slave > set irq \"+c,LOG_PIC),this.irr|=d,this.irq_value|=d,this.check_irqs()):PIC_LOG_VERBOSE&&dbg_log(\"slave > set irq \"+c+\": already set!\",LOG_PIC)},this.clear_irq=function(c){dbg_assert(0<=c&&8>c);PIC_LOG_VERBOSE&&dbg_log(\"slave > clear irq \"+c,LOG_PIC);c=1<<c;this.irq_value&c&&(this.irq_value&=~c,this.irr&=~c,this.check_irqs())});this.get_isr=function(){return this.isr}}\nPIC.prototype.get_state=function(){var a=[];a[0]=this.irq_mask;a[1]=this.irq_map;a[2]=this.isr;a[3]=this.irr;a[4]=this.is_master;a[5]=this.slave;a[6]=this.expect_icw4;a[7]=this.state;a[8]=this.read_isr;a[9]=this.auto_eoi;a[10]=this.elcr;return a};PIC.prototype.set_state=function(a){this.irq_mask=a[0];this.irq_map=a[1];this.isr=a[2];this.irr=a[3];this.is_master=a[4];this.slave&&this.slave.set_state(a[5]);this.expect_icw4=a[6];this.state=a[7];this.read_isr=a[8];this.auto_eoi=a[9];this.elcr=a[10]};\nPIC.prototype.port20_write=function(a){if(a&16)dbg_log(\"icw1 = \"+h(a),LOG_PIC),this.irq_value=this.irq_mask=this.irr=this.isr=0,this.auto_eoi=1,this.requested_irq=-1,this.expect_icw4=a&1,this.state=1;else if(a&8)dbg_log(\"ocw3: \"+h(a),LOG_PIC),a&2&&(this.read_isr=a&1),a&4&&dbg_assert(!1,\"unimplemented: polling\",LOG_PIC),a&64&&(this.special_mask_mode=32===(a&32),dbg_log(\"special mask mode: \"+this.special_mask_mode,LOG_PIC));else{dbg_log(\"eoi: \"+h(a)+\" (\"+this.name+\")\",LOG_PIC);var b=a>>5;1===b?(this.isr&=\nthis.isr-1,dbg_log(\"new isr: \"+h(this.isr,2),LOG_PIC)):3===b?this.isr&=~(1<<(a&7)):192===(a&200)?dbg_log(\"lowest priority: \"+h(a&7),LOG_PIC):(dbg_log(\"Unknown eoi: \"+h(a),LOG_PIC),dbg_assert(!1),this.isr&=this.isr-1);this.check_irqs()}};PIC.prototype.port20_read=function(){if(this.read_isr)return dbg_log(\"read port 20h (isr): \"+h(this.isr),LOG_PIC),this.isr;dbg_log(\"read port 20h (irr): \"+h(this.irr),LOG_PIC);return this.irr};\nPIC.prototype.port21_write=function(a){0===this.state?this.expect_icw4?(this.expect_icw4=!1,this.auto_eoi=a&2,dbg_log(\"icw4: \"+h(a)+\" autoeoi=\"+this.auto_eoi,LOG_PIC),0===(a&1)&&dbg_assert(!1,\"unimplemented: not 8086 mode\",LOG_PIC)):(this.irq_mask=~a,PIC_LOG_VERBOSE&&dbg_log(\"interrupt mask: \"+(this.irq_mask&255).toString(2)+\" (\"+this.name+\")\",LOG_PIC),this.check_irqs()):1===this.state?(this.irq_map=a,dbg_log(\"interrupts are mapped to \"+h(this.irq_map)+\" (\"+this.name+\")\",LOG_PIC),this.state++):2===\nthis.state&&(this.state=0,dbg_log(\"icw3: \"+h(a),LOG_PIC))};PIC.prototype.port21_read=function(){dbg_log(\"21h read \"+h(~this.irq_mask&255),LOG_PIC);return~this.irq_mask&255};PIC.prototype.port4D0_read=function(){dbg_log(\"elcr read: \"+h(this.elcr,2),LOG_PIC);return this.elcr};PIC.prototype.port4D0_write=function(a){dbg_log(\"elcr write: \"+h(a,2),LOG_PIC);this.elcr=a};var CMOS_RTC_SECONDS=0,CMOS_RTC_SECONDS_ALARM=1,CMOS_RTC_MINUTES=2,CMOS_RTC_MINUTES_ALARM=3,CMOS_RTC_HOURS=4,CMOS_RTC_HOURS_ALARM=5,CMOS_RTC_DAY_WEEK=6,CMOS_RTC_DAY_MONTH=7,CMOS_RTC_MONTH=8,CMOS_RTC_YEAR=9,CMOS_STATUS_A=10,CMOS_STATUS_B=11,CMOS_STATUS_C=12,CMOS_STATUS_D=13,CMOS_RESET_CODE=15,CMOS_FLOPPY_DRIVE_TYPE=16,CMOS_DISK_DATA=18,CMOS_EQUIPMENT_INFO=20,CMOS_MEM_BASE_LOW=21,CMOS_MEM_BASE_HIGH=22,CMOS_MEM_OLD_EXT_LOW=23,CMOS_MEM_OLD_EXT_HIGH=24,CMOS_DISK_DRIVE1_TYPE=25,CMOS_DISK_DRIVE2_TYPE=26,\nCMOS_DISK_DRIVE1_CYL=27,CMOS_DISK_DRIVE2_CYL=36,CMOS_MEM_EXTMEM_LOW=48,CMOS_MEM_EXTMEM_HIGH=49,CMOS_CENTURY=50,CMOS_MEM_EXTMEM2_LOW=52,CMOS_MEM_EXTMEM2_HIGH=53,CMOS_BIOS_BOOTFLAG1=56,CMOS_BIOS_DISKTRANSFLAG=57,CMOS_BIOS_BOOTFLAG2=61,CMOS_MEM_HIGHMEM_LOW=91,CMOS_MEM_HIGHMEM_MID=92,CMOS_MEM_HIGHMEM_HIGH=93,CMOS_BIOS_SMP_COUNT=95;\nfunction RTC(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=.9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=this.cmos_c=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}\nRTC.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;return a};\nRTC.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11]};\nRTC.prototype.timer=function(a,b){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;if(this.periodic_interrupt&&this.next_interrupt<a)return this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time),Math.max(0,a-this.next_interrupt);this.next_interrupt_alarm&&this.next_interrupt_alarm<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);return 100};\nRTC.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;return c};RTC.prototype.bcd_unpack=function(a){const b=a&15,c=a>>4&15;dbg_assert(256>a);dbg_assert(10>b);dbg_assert(10>c);return b+10*c};RTC.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};RTC.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};\nRTC.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case CMOS_RTC_SECONDS:return this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case CMOS_RTC_MINUTES:return this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case CMOS_RTC_HOURS:return this.encode_time((new Date(this.rtc_time)).getUTCHours());case CMOS_RTC_DAY_MONTH:return this.encode_time((new Date(this.rtc_time)).getUTCDate());case CMOS_RTC_MONTH:return this.encode_time((new Date(this.rtc_time)).getUTCMonth()+\n1);case CMOS_RTC_YEAR:return this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case CMOS_STATUS_A:return this.cmos_a;case CMOS_STATUS_B:return this.cmos_b;case CMOS_STATUS_C:return this.cpu.device_lower_irq(8),dbg_log(\"cmos reg C read\",LOG_RTC),a=this.cmos_c,this.cmos_c&=-241,a;case CMOS_STATUS_D:return 255;case CMOS_CENTURY:return this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return dbg_log(\"cmos read from index \"+h(a),LOG_RTC),this.cmos_data[this.cmos_index]}};\nRTC.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=a&127;this.periodic_interrupt_time=1E3/(32768>>(this.cmos_a&15)-1);dbg_log(\"Periodic interrupt, a=\"+h(this.cmos_a,2)+\" t=\"+this.periodic_interrupt_time,LOG_RTC);break;case 11:this.cmos_b=a;this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[CMOS_RTC_SECONDS_ALARM]),c=this.decode_time(this.cmos_data[CMOS_RTC_MINUTES_ALARM]),d=this.decode_time(this.cmos_data[CMOS_RTC_HOURS_ALARM]),\ne=new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b));dbg_log(\"RTC alarm scheduled for \"+e+\" hh:mm:ss=\"+d+\":\"+c+\":\"+b+\" ms_from_now=\"+(e-a),LOG_RTC);this.next_interrupt_alarm=+e}this.cmos_b&16&&dbg_log(\"Unimplemented: updated interrupt\",LOG_RTC);dbg_log(\"cmos b=\"+h(this.cmos_b,2),LOG_RTC);break;case CMOS_RTC_SECONDS_ALARM:case CMOS_RTC_MINUTES_ALARM:case CMOS_RTC_HOURS_ALARM:this.cmos_write(this.cmos_index,a);break;default:dbg_log(\"cmos write index \"+h(this.cmos_index)+\": \"+\nh(a),LOG_RTC)}this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&15)};RTC.prototype.cmos_read=function(a){dbg_assert(128>a);return this.cmos_data[a]};RTC.prototype.cmos_write=function(a,b){dbg_log(\"cmos \"+h(a)+\" <- \"+h(b),LOG_RTC);dbg_assert(128>a);this.cmos_data[a]=b};var DLAB=128,UART_IER_MSI=8,UART_IER_THRI=2,UART_IER_RDI=1,UART_IIR_MSI=0,UART_IIR_NO_INT=1,UART_IIR_THRI=2,UART_IIR_RDI=4,UART_IIR_RLSI=6,UART_IIR_CTI=12,UART_LSR_DATA_READY=1,UART_LSR_TX_EMPTY=32,UART_LSR_TRANSMITTER_EMPTY=64;\nfunction UART(a,b,c){this.bus=c;this.cpu=a;this.ints=1<<UART_IIR_THRI;this.line_control=this.baud_rate=0;this.lsr=UART_LSR_TRANSMITTER_EMPTY|UART_LSR_TX_EMPTY;this.ier=this.fifo_control=0;this.iir=UART_IIR_NO_INT;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=new ByteQueue(4096);this.current_line=[];switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:dbg_log(\"Invalid serial port: \"+\nh(b),LOG_SERIAL),this.com=0,this.irq=4}this.bus.register(\"serial\"+this.com+\"-input\",function(d){this.data_received(d)},this);a=a.io;a.register_write(b,this,function(d){this.write_data(d)},function(d){this.write_data(d&255);this.write_data(d>>8)});a.register_write(b|1,this,function(d){this.line_control&DLAB?(this.baud_rate=this.baud_rate&255|d<<8,dbg_log(\"baud rate: \"+h(this.baud_rate),LOG_SERIAL)):(this.ier=d&15,dbg_log(\"interrupt enable: \"+h(d),LOG_SERIAL),this.CheckInterrupt())});a.register_read(b,\nthis,function(){if(this.line_control&DLAB)return this.baud_rate&255;var d=this.input.shift();-1===d?dbg_log(\"Read input empty\",LOG_SERIAL):dbg_log(\"Read input: \"+h(d),LOG_SERIAL);0===this.input.length&&(this.lsr&=~UART_LSR_DATA_READY,this.ClearInterrupt(UART_IIR_CTI));return d});a.register_read(b|1,this,function(){return this.line_control&DLAB?this.baud_rate>>8:this.ier&15});a.register_read(b|2,this,function(){var d=this.iir&15|192;dbg_log(\"read interrupt identification: \"+h(this.iir),LOG_SERIAL);\nthis.iir==UART_IIR_THRI&&this.ClearInterrupt(UART_IIR_THRI);return d});a.register_write(b|2,this,function(d){dbg_log(\"fifo control: \"+h(d),LOG_SERIAL);this.fifo_control=d});a.register_read(b|3,this,function(){dbg_log(\"read line control: \"+h(this.line_control),LOG_SERIAL);return this.line_control});a.register_write(b|3,this,function(d){dbg_log(\"line control: \"+h(d),LOG_SERIAL);this.line_control=d});a.register_read(b|4,this,function(){return this.modem_control});a.register_write(b|4,this,function(d){dbg_log(\"modem control: \"+\nh(d),LOG_SERIAL);this.modem_control=d});a.register_read(b|5,this,function(){dbg_log(\"read line status: \"+h(this.lsr),LOG_SERIAL);return this.lsr});a.register_write(b|5,this,function(d){dbg_log(\"Factory test write\",LOG_SERIAL)});a.register_read(b|6,this,function(){dbg_log(\"read modem status: \"+h(this.modem_status),LOG_SERIAL);return this.modem_status});a.register_write(b|6,this,function(d){dbg_log(\"Unkown register write (base+6)\",LOG_SERIAL)});a.register_read(b|7,this,function(){return this.scratch_register});\na.register_write(b|7,this,function(d){this.scratch_register=d})}UART.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};\nUART.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];this.ier=a[5];this.iir=a[6];this.modem_control=a[7];this.modem_status=a[8];this.scratch_register=a[9];this.irq=a[10]};\nUART.prototype.CheckInterrupt=function(){this.ints&1<<UART_IIR_CTI&&this.ier&UART_IER_RDI?(this.iir=UART_IIR_CTI,this.cpu.device_raise_irq(this.irq)):this.ints&1<<UART_IIR_THRI&&this.ier&UART_IER_THRI?(this.iir=UART_IIR_THRI,this.cpu.device_raise_irq(this.irq)):this.ints&1<<UART_IIR_MSI&&this.ier&UART_IER_MSI?(this.iir=UART_IIR_MSI,this.cpu.device_raise_irq(this.irq)):(this.iir=UART_IIR_NO_INT,this.cpu.device_lower_irq(this.irq))};UART.prototype.ThrowInterrupt=function(a){this.ints|=1<<a;this.CheckInterrupt()};\nUART.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};UART.prototype.data_received=function(a){dbg_log(\"input: \"+h(a),LOG_SERIAL);this.input.push(a);this.lsr|=UART_LSR_DATA_READY;this.ThrowInterrupt(UART_IIR_CTI)};\nUART.prototype.write_data=function(a){if(this.line_control&DLAB)this.baud_rate=this.baud_rate&-256|a;else if(dbg_log(\"data: \"+h(a),LOG_SERIAL),this.ThrowInterrupt(UART_IIR_THRI),255!==a){var b=String.fromCharCode(a);this.bus.send(\"serial\"+this.com+\"-output-char\",b);this.current_line.push(a);\"\\n\"===b&&(a=String.fromCharCode.apply(\"\",this.current_line).trimRight().replace(/[\\x00-\\x08\\x0b-\\x1f\\x7f\\x80-\\xff]/g,\"\"),dbg_log(\"SERIAL: \"+a),this.bus.send(\"serial\"+this.com+\"-output-line\",String.fromCharCode.apply(\"\",\nthis.current_line)),this.current_line=[])}};var HPET_ADDR=4275044352,HPET_PERIOD=1E8,HPET_FREQ_MS=1E12/HPET_PERIOD,HPET_SUPPORT_64=0,HPET_COUNTER_CONFIG=16|HPET_SUPPORT_64<<5,HPET_COUNTER_CONFIG_MASK=32816,HPET_NUM_COUNTERS=4;\nfunction HPET(a){function b(){return e?(Date.now()-f)*HPET_FREQ_MS+k|0:k}function c(){return HPET_SUPPORT_64?e?(Date.now()-f)*(HPET_FREQ_MS/4294967296)+g|0:g:0}var d=this,e=!1,f=Date.now(),k=0,g=0,l=!1,m=0,n=new Int32Array(HPET_NUM_COUNTERS<<1),r=new Int32Array(HPET_NUM_COUNTERS<<1),v=new Int32Array(HPET_NUM_COUNTERS<<1),q=0;this.legacy_mode=!1;this.timer=function(p){if(e){p=b()>>>0;for(var u,t,x=0;x<HPET_NUM_COUNTERS;x++)if(u=n[x<<1],t=r[x<<1]>>>0,q<=p?t>q&&t<=p:t>q||t<=p)t=u&4,u&2?(t=t&&!(m&1<<\nx),m|=1<<x):m&=~(1<<x),u&8&&(r[x<<1]+=v[x<<1]),t&&a.device_raise_irq(0);q=p}};a.io.mmap_register(HPET_ADDR,16384,function(p){dbg_log(\"Read \"+h(p,4)+\" (ctr=\"+h(b()>>>0)+\")\",LOG_HPET);switch(p){case 0:return HPET_NUM_COUNTERS-1<<8|98305|HPET_SUPPORT_64<<13;case 4:return HPET_PERIOD;case 16:return d.legacy_mode<<1|e;case 240:return b();case 244:return c()}var u=p>>2&7,t=p-256>>5;if(256>p||t>=HPET_NUM_COUNTERS||5<u)return dbg_log(\"Read reserved address: \"+h(p),LOG_HPET),0;dbg_log(\"Read counter: addr=\"+\nh(p)+\" counter=\"+h(t,2)+\" reg=\"+h(u),LOG_HPET);switch(u){case 0:return n[t<<1]&~HPET_COUNTER_CONFIG_MASK|HPET_COUNTER_CONFIG;case 1:return n[t<<1|1];case 2:return r[t<<1];case 3:return r[t<<1|1];case 4:case 5:return 0}},function(p,u){dbg_log(\"Write \"+h(p,4)+\": \"+h(u,2),LOG_HPET);switch(p){case 16:dbg_log(\"conf: enabled=\"+(u&1)+\" legacy=\"+(u>>1&1),LOG_HPET);(e^u)&1&&(u&1?f=Date.now():(k=b(),g=c()));e=1===(u&1);d.legacy_mode=2===(u&2);return;case 32:m&=~u;return;case 240:k=u;return;case 244:g=u;return}var t=\np>>2&7,x=p-256>>5;if(256>p||x>=HPET_NUM_COUNTERS||2<t)dbg_log(\"Write reserved address: \"+h(p)+\" data=\"+h(u),LOG_HPET);else switch(dbg_log(\"Write counter: addr=\"+h(p)+\" counter=\"+h(x,2)+\" reg=\"+h(t)+\" data=\"+h(u,2),LOG_HPET),t){case 0:n[x<<1]=u;break;case 2:l?(v[x<<1]=u,l=!1,dbg_log(\"Accumulator acc=\"+h(u>>>0,8)+\" ctr=\"+h(x,2),LOG_HPET)):(r[x<<1]=u,n[x<<1]&64&&(l=!0,n[x<<1]&=-65));break;case 3:r[x<<1|1]=u}})};var PMTIMER_FREQ_SECONDS=3579545;\nfunction ACPI(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:\"acpi\"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(v86.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){dbg_log(\"ACPI pm1_status read\",\nLOG_ACPI);return this.pm1_status});b.register_write(45056,this,void 0,function(c){dbg_log(\"ACPI pm1_status write: \"+h(c,4),LOG_ACPI);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){dbg_log(\"ACPI pm1_enable read\",LOG_ACPI);return this.pm1_enable});b.register_write(45058,this,void 0,function(c){dbg_log(\"ACPI pm1_enable write: \"+h(c),LOG_ACPI);this.pm1_enable=c});b.register_read(45060,this,void 0,function(){dbg_log(\"ACPI status read\",LOG_ACPI);return this.status});b.register_write(45060,\nthis,void 0,function(c){dbg_log(\"ACPI status write: \"+h(c),LOG_ACPI);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(v86.microtick())&16777215});b.register_read(45024,this,function(){dbg_log(\"Read gpe#0\",LOG_ACPI);return this.gpe[0]});b.register_read(45025,this,function(){dbg_log(\"Read gpe#1\",LOG_ACPI);return this.gpe[1]});b.register_read(45026,this,function(){dbg_log(\"Read gpe#2\",LOG_ACPI);return this.gpe[2]});b.register_read(45027,this,function(){dbg_log(\"Read gpe#3\",\nLOG_ACPI);return this.gpe[3]});b.register_write(45024,this,function(c){dbg_log(\"Write gpe#0: \"+h(c),LOG_ACPI);this.gpe[0]=c});b.register_write(45025,this,function(c){dbg_log(\"Write gpe#1: \"+h(c),LOG_ACPI);this.gpe[1]=c});b.register_write(45026,this,function(c){dbg_log(\"Write gpe#2: \"+h(c),LOG_ACPI);this.gpe[2]=c});b.register_write(45027,this,function(c){dbg_log(\"Write gpe#3: \"+h(c),LOG_ACPI);this.gpe[3]=c})}\nACPI.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(dbg_log(\"ACPI raise irq\",LOG_ACPI),this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a};\nACPI.prototype.get_timer=function(a){a=Math.round(PMTIMER_FREQ_SECONDS/1E3*a);a===this.timer_last_value?this.timer_imprecision_offset<PMTIMER_FREQ_SECONDS/1E3&&this.timer_imprecision_offset++:(dbg_assert(a>this.timer_last_value),this.timer_last_value+this.timer_imprecision_offset<=a?(this.timer_imprecision_offset=0,this.timer_last_value=a):dbg_log(\"Warning: Overshot pmtimer, waiting; current=\"+a+\" last=\"+this.timer_last_value+\" offset=\"+this.timer_imprecision_offset,LOG_ACPI));return this.timer_last_value+\nthis.timer_imprecision_offset};ACPI.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};ACPI.prototype.set_state=function(a){this.status=a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};var APIC_LOG_VERBOSE=!1,APIC_ADDRESS=4276092928,APIC_TIMER_MODE_MASK=393216,APIC_TIMER_MODE_ONE_SHOT=0,APIC_TIMER_MODE_PERIODIC=131072,APIC_TIMER_MODE_TSC=262144,DELIVERY_MODES=\"Fixed (0);Lowest Prio (1);SMI (2);Reserved (3);NMI (4);INIT (5);Reserved (6);ExtINT (7)\".split(\";\"),DESTINATION_MODES=[\"physical\",\"logical\"];\nfunction APIC(a){this.cpu=a;this.timer_divider=this.apic_id=0;this.timer_divider_shift=1;this.timer_current_count=this.timer_initial_count=0;this.next_tick=v86.microtick();this.lvt_error=this.lvt_int1=this.lvt_int0=this.lvt_perf_counter=this.lvt_timer=IOAPIC_CONFIG_MASKED;this.icr1=this.icr0=this.tpr=0;this.irr=new Int32Array(8);this.isr=new Int32Array(8);this.tmr=new Int32Array(8);this.spurious_vector=254;this.destination_format=-1;this.read_error=this.error=this.local_destination=0;a.io.mmap_register(APIC_ADDRESS,\n1048576,b=>{dbg_log(\"Unsupported read8 from apic: \"+h(b>>>0),LOG_APIC);var c=b&3;return this.read32(b&-4)>>8*c&255},(b,c)=>{dbg_log(\"Unsupported write8 from apic: \"+h(b)+\" <- \"+h(c),LOG_APIC);dbg_trace();dbg_assert(!1)},b=>this.read32(b),(b,c)=>this.write32(b,c))}\nAPIC.prototype.read32=function(a){a=a-APIC_ADDRESS|0;switch(a){case 32:return dbg_log(\"APIC read id\",LOG_APIC),this.apic_id;case 48:return dbg_log(\"APIC read version\",LOG_APIC),327700;case 128:return APIC_LOG_VERBOSE&&dbg_log(\"APIC read tpr\",LOG_APIC),this.tpr;case 208:return dbg_log(\"Read local destination\",LOG_APIC),this.local_destination;case 224:return dbg_log(\"Read destination format\",LOG_APIC),this.destination_format;case 240:return this.spurious_vector;case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:return a=\na-256>>4,dbg_log(\"Read isr \"+a+\": \"+h(this.isr[a]>>>0,8),LOG_APIC),this.isr[a];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:return a=a-384>>4,dbg_log(\"Read tmr \"+a+\": \"+h(this.tmr[a]>>>0,8),LOG_APIC),this.tmr[a];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:return a=a-512>>4,dbg_log(\"Read irr \"+a+\": \"+h(this.irr[a]>>>0,8),LOG_APIC),this.irr[a];case 640:return dbg_log(\"Read error: \"+h(this.read_error>>>0,8),LOG_APIC),this.read_error;case 768:return APIC_LOG_VERBOSE&&\ndbg_log(\"APIC read icr0\",LOG_APIC),this.icr0;case 784:return dbg_log(\"APIC read icr1\",LOG_APIC),this.icr1;case 800:return dbg_log(\"read timer lvt\",LOG_APIC),this.lvt_timer;case 832:return dbg_log(\"read lvt perf counter\",LOG_APIC),this.lvt_perf_counter;case 848:return dbg_log(\"read lvt int0\",LOG_APIC),this.lvt_int0;case 864:return dbg_log(\"read lvt int1\",LOG_APIC),this.lvt_int1;case 880:return dbg_log(\"read lvt error\",LOG_APIC),this.lvt_error;case 992:return dbg_log(\"read timer divider\",LOG_APIC),\nthis.timer_divider;case 896:return dbg_log(\"read timer initial count\",LOG_APIC),this.timer_initial_count;case 912:return dbg_log(\"read timer current count: \"+h(this.timer_current_count>>>0,8),LOG_APIC),this.timer_current_count;default:return dbg_log(\"APIC read \"+h(a),LOG_APIC),dbg_assert(!1),0}};\nAPIC.prototype.write32=function(a,b){a=a-APIC_ADDRESS|0;switch(a){case 48:dbg_log(\"APIC write version: \"+h(b>>>0,8)+\", ignored\",LOG_APIC);break;case 128:APIC_LOG_VERBOSE&&dbg_log(\"Set tpr: \"+h(b&255,2),LOG_APIC);this.tpr=b&255;this.check_vector();break;case 176:a=this.highest_isr();-1!==a?(APIC_LOG_VERBOSE&&dbg_log(\"eoi: \"+h(b>>>0,8)+\" for vector \"+h(a),LOG_APIC),this.register_clear_bit(this.isr,a),this.register_get_bit(this.tmr,a)&&this.cpu.devices.ioapic.remote_eoi(a),this.check_vector()):dbg_log(\"Bad eoi: No isr set\",\nLOG_APIC);break;case 208:dbg_log(\"Set local destination: \"+h(b>>>0,8),LOG_APIC);this.local_destination=b&4278190080;break;case 224:dbg_log(\"Set destination format: \"+h(b>>>0,8),LOG_APIC);this.destination_format=b|16777215;break;case 240:dbg_log(\"Set spurious vector: \"+h(b>>>0,8),LOG_APIC);this.spurious_vector=b;break;case 640:dbg_log(\"Write error: \"+h(b>>>0,8),LOG_APIC);this.read_error=this.error;this.error=0;break;case 768:a=b&255;var c=b>>8&7,d=b>>11&1,e=b>>15&1,f=b>>18&3,k=this.icr1>>>24;dbg_log(\"APIC write icr0: \"+\nh(b,8)+\" vector=\"+h(a,2)+\" destination_mode=\"+DESTINATION_MODES[d]+\" delivery_mode=\"+DELIVERY_MODES[c]+\" destination_shorthand=\"+[\"no\",\"self\",\"all with self\",\"all without self\"][f],LOG_APIC);this.icr0=b&-4097;0===f?this.route(a,c,e,k,d):1===f?this.deliver(a,IOAPIC_DELIVERY_FIXED,e):2===f?this.deliver(a,c,e):3!==f&&dbg_assert(!1);break;case 784:dbg_log(\"APIC write icr1: \"+h(b>>>0,8),LOG_APIC);this.icr1=b;break;case 800:dbg_log(\"timer lvt: \"+h(b>>>0,8),LOG_APIC);this.lvt_timer=b;break;case 832:dbg_log(\"lvt perf counter: \"+\nh(b>>>0,8),LOG_APIC);this.lvt_perf_counter=b;break;case 848:dbg_log(\"lvt int0: \"+h(b>>>0,8),LOG_APIC);this.lvt_int0=b;break;case 864:dbg_log(\"lvt int1: \"+h(b>>>0,8),LOG_APIC);this.lvt_int1=b;break;case 880:dbg_log(\"lvt error: \"+h(b>>>0,8),LOG_APIC);this.lvt_error=b;break;case 992:dbg_log(\"timer divider: \"+h(b>>>0,8),LOG_APIC);this.timer_divider=b;b=b&3|(b&8)>>1;this.timer_divider_shift=7===b?0:b+1;break;case 896:dbg_log(\"timer initial: \"+h(b>>>0,8),LOG_APIC);this.timer_initial_count=b>>>0;this.timer_current_count=\nb>>>0;this.next_tick=v86.microtick();this.timer_active=!0;break;case 912:dbg_log(\"timer current: \"+h(b>>>0,8),LOG_APIC);dbg_assert(!1,\"read-only register\");break;default:dbg_log(\"APIC write32 \"+h(a)+\" <- \"+h(b>>>0,8),LOG_APIC),dbg_assert(!1)}};\nAPIC.prototype.timer=function(a){0!==this.timer_current_count&&(a=(a-this.next_tick)*TSC_RATE/(1<<this.timer_divider_shift)>>>0,0!==a&&(this.next_tick+=a/TSC_RATE*(1<<this.timer_divider_shift),this.timer_current_count-=a,0>=this.timer_current_count&&(a=this.lvt_timer&APIC_TIMER_MODE_MASK,a===APIC_TIMER_MODE_PERIODIC?(this.timer_current_count%=this.timer_initial_count,0>=this.timer_current_count&&(this.timer_current_count+=this.timer_initial_count),dbg_assert(0!==this.timer_current_count),0===(this.lvt_timer&\nIOAPIC_CONFIG_MASKED)&&this.deliver(this.lvt_timer&255,IOAPIC_DELIVERY_FIXED,!1)):a===APIC_TIMER_MODE_ONE_SHOT&&(this.timer_current_count=0,dbg_log(\"APIC timer one shot end\",LOG_APIC),0===(this.lvt_timer&IOAPIC_CONFIG_MASKED)&&this.deliver(this.lvt_timer&255,IOAPIC_DELIVERY_FIXED,!1)))))};APIC.prototype.route=function(a,b,c,d,e){this.deliver(a,b,c)};\nAPIC.prototype.deliver=function(a,b,c){APIC_LOG_VERBOSE&&dbg_log(\"Deliver \"+h(a,2)+\" mode=\"+b+\" level=\"+c,LOG_APIC);b!==IOAPIC_DELIVERY_INIT&&b!==IOAPIC_DELIVERY_NMI&&((16>a||255===a)&&dbg_assert(!1,\"TODO: Invalid vector\"),this.register_get_bit(this.irr,a)?dbg_log(\"Not delivered: irr already set, vector=\"+h(a,2),LOG_APIC):(this.register_set_bit(this.irr,a),c?this.register_set_bit(this.tmr,a):this.register_clear_bit(this.tmr,a),this.check_vector()))};\nAPIC.prototype.highest_irr=function(){var a=this.register_get_highest_bit(this.irr);dbg_assert(255!==a);dbg_assert(16<=a||-1===a);return a};APIC.prototype.highest_isr=function(){var a=this.register_get_highest_bit(this.isr);dbg_assert(255!==a);dbg_assert(16<=a||-1===a);return a};\nAPIC.prototype.check_vector=function(){var a=this.highest_irr();if(-1!==a){var b=this.highest_isr();b>=a?APIC_LOG_VERBOSE&&dbg_log(\"Higher isr, isr=\"+h(b)+\" irr=\"+h(a),LOG_APIC):(a&240)<=(this.tpr&240)?APIC_LOG_VERBOSE&&dbg_log(\"Higher tpr, tpr=\"+h(this.tpr&240)+\" irr=\"+h(a),LOG_APIC):this.cpu.handle_irqs()}};\nAPIC.prototype.acknowledge_irq=function(){var a=this.highest_irr();if(-1!==a){var b=this.highest_isr();b>=a?APIC_LOG_VERBOSE&&dbg_log(\"Higher isr, isr=\"+h(b)+\" irr=\"+h(a),LOG_APIC):(a&240)<=(this.tpr&240)?APIC_LOG_VERBOSE&&dbg_log(\"Higher tpr, tpr=\"+h(this.tpr&240)+\" irr=\"+h(a),LOG_APIC):(this.register_clear_bit(this.irr,a),this.register_set_bit(this.isr,a),APIC_LOG_VERBOSE&&dbg_log(\"Calling vector \"+h(a),LOG_APIC),this.cpu.pic_call_irq(a),this.check_vector())}};\nAPIC.prototype.get_state=function(){var a=[];a[0]=this.apic_id;a[1]=this.timer_divider;a[2]=this.timer_divider_shift;a[3]=this.timer_initial_count;a[4]=this.timer_current_count;a[5]=this.next_tick;a[6]=this.lvt_timer;a[7]=this.lvt_perf_counter;a[8]=this.lvt_int0;a[9]=this.lvt_int1;a[10]=this.lvt_error;a[11]=this.tpr;a[12]=this.icr0;a[13]=this.icr1;a[14]=this.irr;a[15]=this.isr;a[16]=this.tmr;a[17]=this.spurious_vector;a[18]=this.destination_format;a[19]=this.local_destination;a[20]=this.error;a[21]=\nthis.read_error;return a};\nAPIC.prototype.set_state=function(a){this.apic_id=a[0];this.timer_divider=a[1];this.timer_divider_shift=a[2];this.timer_initial_count=a[3];this.timer_current_count=a[4];this.next_tick=a[5];this.lvt_timer=a[6];this.lvt_perf_counter=a[7];this.lvt_int0=a[8];this.lvt_int1=a[9];this.lvt_error=a[10];this.tpr=a[11];this.icr0=a[12];this.icr1=a[13];this.irr=a[14];this.isr=a[15];this.tmr=a[16];this.spurious_vector=a[17];this.destination_format=a[18];this.local_destination=a[19];this.error=a[20];this.read_error=\na[21]};APIC.prototype.register_get_bit=function(a,b){dbg_assert(0<=b&&256>b);return a[b>>5]>>(b&31)&1};APIC.prototype.register_set_bit=function(a,b){dbg_assert(0<=b&&256>b);a[b>>5]|=1<<(b&31)};APIC.prototype.register_clear_bit=function(a,b){dbg_assert(0<=b&&256>b);a[b>>5]&=~(1<<(b&31))};APIC.prototype.register_get_highest_bit=function(a){for(var b=7;0<=b;b--){var c=a[b];if(c)return v86util.int_log2(c>>>0)|b<<5}return-1};var IOAPIC_ADDRESS=4273995776,IOREGSEL=0,IOWIN=16,IOAPIC_IRQ_COUNT=24,IOAPIC_ID=0,IOAPIC_CONFIG_TRIGGER_MODE_LEVEL=32768,IOAPIC_CONFIG_MASKED=65536,IOAPIC_CONFIG_DELIVS=4096,IOAPIC_CONFIG_REMOTE_IRR=16384,IOAPIC_CONFIG_READONLY_MASK=IOAPIC_CONFIG_REMOTE_IRR|IOAPIC_CONFIG_DELIVS|4294836224,IOAPIC_DELIVERY_FIXED=0,IOAPIC_DELIVERY_LOWEST_PRIORITY=1,IOAPIC_DELIVERY_NMI=4,IOAPIC_DELIVERY_INIT=5;\nfunction IOAPIC(a){this.cpu=a;this.ioredtbl_config=new Int32Array(IOAPIC_IRQ_COUNT);this.ioredtbl_destination=new Int32Array(IOAPIC_IRQ_COUNT);for(var b=0;b<this.ioredtbl_config.length;b++)this.ioredtbl_config[b]=IOAPIC_CONFIG_MASKED;this.ioregsel=0;this.ioapic_id=IOAPIC_ID;this.irq_value=this.irr=0;dbg_assert(32<=MMAP_BLOCK_SIZE);a.io.mmap_register(IOAPIC_ADDRESS,MMAP_BLOCK_SIZE,c=>{c=c-IOAPIC_ADDRESS|0;if(c>=IOWIN&&c<IOWIN+4)return c-=IOWIN,dbg_log(\"ioapic read8 byte \"+c+\" \"+h(this.ioregsel),LOG_APIC),\nthis.read(this.ioregsel)>>8*c&255;dbg_log(\"Unexpected IOAPIC register read: \"+h(c>>>0),LOG_APIC);dbg_assert(!1);return 0},(c,d)=>{dbg_assert(!1,\"unsupported write8 from ioapic: \"+h(c>>>0))},c=>{c=c-IOAPIC_ADDRESS|0;if(c===IOREGSEL)return this.ioregsel;if(c===IOWIN)return this.read(this.ioregsel);dbg_log(\"Unexpected IOAPIC register read: \"+h(c>>>0),LOG_APIC);dbg_assert(!1);return 0},(c,d)=>{c=c-IOAPIC_ADDRESS|0;c===IOREGSEL?this.ioregsel=d:c===IOWIN?this.write(this.ioregsel,d):(dbg_log(\"Unexpected IOAPIC register write: \"+\nh(c>>>0)+\" <- \"+h(d>>>0,8),LOG_APIC),dbg_assert(!1))})}IOAPIC.prototype.remote_eoi=function(a){for(var b=0;b<IOAPIC_IRQ_COUNT;b++){var c=this.ioredtbl_config[b];(c&255)===a&&c&IOAPIC_CONFIG_REMOTE_IRR&&(dbg_log(\"Clear remote IRR for irq=\"+h(b),LOG_APIC),this.ioredtbl_config[b]&=~IOAPIC_CONFIG_REMOTE_IRR,this.check_irq(b))}};\nIOAPIC.prototype.check_irq=function(a){var b=1<<a;if(0!==(this.irr&b)){var c=this.ioredtbl_config[a];if(0===(c&IOAPIC_CONFIG_MASKED)){var d=c>>8&7,e=c>>11&1,f=c&255,k=this.ioredtbl_destination[a]>>>24,g=(c&IOAPIC_CONFIG_TRIGGER_MODE_LEVEL)===IOAPIC_CONFIG_TRIGGER_MODE_LEVEL;if(0===(c&IOAPIC_CONFIG_TRIGGER_MODE_LEVEL))this.irr&=~b;else if(this.ioredtbl_config[a]|=IOAPIC_CONFIG_REMOTE_IRR,c&IOAPIC_CONFIG_REMOTE_IRR){dbg_log(\"No route: level interrupt and remote IRR still set\",LOG_APIC);return}d===IOAPIC_DELIVERY_FIXED||\nd===IOAPIC_DELIVERY_LOWEST_PRIORITY?this.cpu.devices.apic.route(f,d,g,k,e):dbg_assert(!1,\"TODO\");this.ioredtbl_config[a]&=~IOAPIC_CONFIG_DELIVS}}};IOAPIC.prototype.set_irq=function(a){if(a>=IOAPIC_IRQ_COUNT)dbg_assert(!1,\"Bad irq: \"+a,LOG_APIC);else{var b=1<<a;0===(this.irq_value&b)&&(APIC_LOG_VERBOSE&&dbg_log(\"apic set irq \"+a,LOG_APIC),this.irq_value|=b,(this.ioredtbl_config[a]&(IOAPIC_CONFIG_TRIGGER_MODE_LEVEL|IOAPIC_CONFIG_MASKED))!==IOAPIC_CONFIG_MASKED&&(this.irr|=b,this.check_irq(a)))}};\nIOAPIC.prototype.clear_irq=function(a){if(a>=IOAPIC_IRQ_COUNT)dbg_assert(!1,\"Bad irq: \"+a,LOG_APIC);else{var b=1<<a;(this.irq_value&b)===b&&(this.irq_value&=~b,this.ioredtbl_config[a]&IOAPIC_CONFIG_TRIGGER_MODE_LEVEL&&(this.irr&=~b))}};\nIOAPIC.prototype.read=function(a){if(0===a)return dbg_log(\"IOAPIC Read id\",LOG_APIC),this.ioapic_id<<24;if(1===a)return dbg_log(\"IOAPIC Read version\",LOG_APIC),17|IOAPIC_IRQ_COUNT-1<<16;if(2===a)return dbg_log(\"IOAPIC Read arbitration id\",LOG_APIC),this.ioapic_id<<24;if(16<=a&&a<16+2*IOAPIC_IRQ_COUNT){var b=a-16>>1;a&1?(a=this.ioredtbl_destination[b],dbg_log(\"IOAPIC Read destination irq=\"+h(b)+\" -> \"+h(a,8),LOG_APIC)):(a=this.ioredtbl_config[b],dbg_log(\"IOAPIC Read config irq=\"+h(b)+\" -> \"+h(a,8),\nLOG_APIC));return a}dbg_log(\"IOAPIC register read outside of range \"+h(a),LOG_APIC);dbg_assert(!1);return 0};\nIOAPIC.prototype.write=function(a,b){if(0===a)this.ioapic_id=b>>>24&15;else if(1===a||2===a)dbg_log(\"Invalid write: \"+a,LOG_APIC);else if(16<=a&&a<16+2*IOAPIC_IRQ_COUNT){var c=a-16>>1;if(a&1)this.ioredtbl_destination[c]=b&4278190080,dbg_log(\"Write destination \"+h(b>>>0,8)+\" irq=\"+h(c)+\" dest=\"+h(b>>>24,2),LOG_APIC);else{this.ioredtbl_config[c]=b&~IOAPIC_CONFIG_READONLY_MASK|this.ioredtbl_config[c]&IOAPIC_CONFIG_READONLY_MASK;a=b&255;var d=b>>8&7,e=b>>11&1,f=b>>15&1,k=b>>16&1;dbg_log(\"Write config \"+\nh(b>>>0,8)+\" irq=\"+h(c)+\" vector=\"+h(a,2)+\" deliverymode=\"+DELIVERY_MODES[d]+\" destmode=\"+DESTINATION_MODES[e]+\" is_level=\"+f+\" disabled=\"+k,LOG_APIC);this.check_irq(c)}}else dbg_log(\"IOAPIC register write outside of range \"+h(a)+\": \"+h(b>>>0,8),LOG_APIC),dbg_assert(!1)};IOAPIC.prototype.get_state=function(){var a=[];a[0]=this.ioredtbl_config;a[1]=this.ioredtbl_destination;a[2]=this.ioregsel;a[3]=this.ioapic_id;a[4]=this.irr;a[5]=this.irq_value;return a};\nIOAPIC.prototype.set_state=function(a){this.ioredtbl_config=a[0];this.ioredtbl_destination=a[1];this.ioregsel=a[2];this.ioapic_id=a[3];this.irr=a[4];this.irq_value=a[5]};var STATE_VERSION=6,STATE_MAGIC=-2039052682,STATE_INDEX_MAGIC=0,STATE_INDEX_VERSION=1,STATE_INDEX_TOTAL_LEN=2,STATE_INDEX_INFO_LEN=3,STATE_INFO_BLOCK_START=16;const ZSTD_MAGIC=4247762216;function StateLoadError(a){this.message=a}StateLoadError.prototype=Error();const CONSTRUCTOR_TABLE={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};\nfunction save_object(a,b){if(\"object\"!==typeof a||null===a)return dbg_assert(\"function\"!==typeof a),a;if(a instanceof Array)return a.map(f=>save_object(f,b));a.constructor===Object&&(console.log(a),dbg_assert(a.constructor!==Object,\"Expected non-object\"));if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);a=a.constructor.name.replace(\"bound \",\"\");dbg_assert(CONSTRUCTOR_TABLE[a]);return{__state_type__:a,buffer_id:b.push(c)-1}}DEBUG&&!a.get_state&&console.log(\"Object without get_state: \",\na);c=a.get_state();a=[];for(var d=0;d<c.length;d++){var e=c[d];dbg_assert(\"function\"!==typeof e);a[d]=save_object(e,b)}return a}function restore_buffers(a,b){if(\"object\"!==typeof a||null===a)return dbg_assert(\"function\"!==typeof a),a;if(a instanceof Array){for(var c=0;c<a.length;c++)a[c]=restore_buffers(a[c],b);return a}c=a.__state_type__;dbg_assert(void 0!==c);const d=CONSTRUCTOR_TABLE[c];dbg_assert(d,\"Unkown type: \"+c);return new d(b[a.buffer_id])}\nCPU.prototype.save_state=function(){for(var a=[],b=save_object(this,a),c=[],d=0,e=0;e<a.length;e++){var f=a[e].byteLength;c[e]={offset:d,length:f};d+=f;d=d+3&-4}b=JSON.stringify({buffer_infos:c,state:b});b=(new TextEncoder).encode(b);e=STATE_INFO_BLOCK_START+b.length;e=e+3&-4;var k=e+d;d=new ArrayBuffer(k);var g=new Int32Array(d,0,STATE_INFO_BLOCK_START/4);(new Uint8Array(d,STATE_INFO_BLOCK_START,b.length)).set(b);f=new Uint8Array(d,e);g[STATE_INDEX_MAGIC]=STATE_MAGIC;g[STATE_INDEX_VERSION]=STATE_VERSION;\ng[STATE_INDEX_TOTAL_LEN]=k;g[STATE_INDEX_INFO_LEN]=b.length;for(e=0;e<a.length;e++)k=a[e],dbg_assert(k.constructor===Uint8Array),f.set(k,c[e].offset);dbg_log(\"State: json size \"+(b.byteLength>>10)+\"k\");dbg_log(\"State: Total buffers size \"+(f.byteLength>>10)+\"k\");return d};\nCPU.prototype.restore_state=function(a){function b(v,q){const p=v.length;if(p<STATE_INFO_BLOCK_START)throw new StateLoadError(\"Invalid length: \"+p);v=new Int32Array(v.buffer,v.byteOffset,4);if(v[STATE_INDEX_MAGIC]!==STATE_MAGIC)throw new StateLoadError(\"Invalid header: \"+h(v[STATE_INDEX_MAGIC]>>>0));if(v[STATE_INDEX_VERSION]!==STATE_VERSION)throw new StateLoadError(\"Version mismatch: dump=\"+v[STATE_INDEX_VERSION]+\" we=\"+STATE_VERSION);if(q&&v[STATE_INDEX_TOTAL_LEN]!==p)throw new StateLoadError(\"Length doesn't match header: real=\"+\np+\" header=\"+v[STATE_INDEX_TOTAL_LEN]);return v[STATE_INDEX_INFO_LEN]}function c(v){v=(new TextDecoder).decode(v);return JSON.parse(v)}a=new Uint8Array(a);if((new Uint32Array(a.buffer,0,1))[0]===ZSTD_MAGIC){var d=this.zstd_create_ctx(a.length);(new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(d),a.length)).set(a);var e=this.zstd_read(d,16),f=new Uint8Array(this.wasm_memory.buffer,e,16),k=b(f,!1);this.zstd_read_free(e,16);e=this.zstd_read(d,k);f=new Uint8Array(this.wasm_memory.buffer,e,\nk);f=c(f);this.zstd_read_free(e,k);e=f.state;var g=f.buffer_infos;f=[];k=STATE_INFO_BLOCK_START+k;for(var l of g){g=(k+3&-4)-k;if(1048576<l.length){var m=this.zstd_read(d,g);this.zstd_read_free(m,g);m=new Uint8Array(l.length);f.push(m.buffer);for(var n=0;n<l.length;){var r=l.length-n;dbg_assert(0<=r);r=Math.min(r,1048576);const v=this.zstd_read(d,r);m.set(new Uint8Array(this.wasm_memory.buffer,v,r),n);this.zstd_read_free(v,r);n+=r}}else m=this.zstd_read(d,g+l.length),n=m+g,f.push(this.wasm_memory.buffer.slice(n,\nn+l.length)),this.zstd_read_free(m,g+l.length);k+=g+l.length}e=restore_buffers(e,f);this.set_state(e);this.zstd_free_ctx(d)}else{d=b(a,!0);if(0>d||d+12>=a.length)throw new StateLoadError(\"Invalid info block length: \"+d);l=a.subarray(STATE_INFO_BLOCK_START,STATE_INFO_BLOCK_START+d);e=c(l);l=e.state;e=e.buffer_infos;let v=STATE_INFO_BLOCK_START+d;v=v+3&-4;d=e.map(q=>{const p=v+q.offset;return a.buffer.slice(p,p+q.length)});l=restore_buffers(l,d);this.set_state(l)}};const NE2K_LOG_VERBOSE=!1;\nvar E8390_CMD=0,EN0_CLDALO=1,EN0_STARTPG=1,EN0_CLDAHI=2,EN0_STOPPG=2,EN0_BOUNDARY=3,EN0_TSR=4,EN0_TPSR=4,EN0_NCR=5,EN0_TCNTLO=5,EN0_FIFO=6,EN0_TCNTHI=6,EN0_ISR=7,EN0_CRDALO=8,EN0_RSARLO=8,EN0_CRDAHI=9,EN0_RSARHI=9,EN0_RCNTLO=10,EN0_RCNTHI=11,EN0_RSR=12,EN0_RXCR=12,EN0_TXCR=13,EN0_COUNTER0=13,EN0_DCFG=14,EN0_COUNTER1=14,EN0_IMR=15,EN0_COUNTER2=15,NE_DATAPORT=16,NE_RESET=31,ENISR_RX=1,ENISR_TX=2,ENISR_RX_ERR=4,ENISR_TX_ERR=8,ENISR_OVER=16,ENISR_COUNTERS=32,ENISR_RDC=64,ENISR_RESET=128,ENISR_ALL=63,\nENRSR_RXOK=1,START_PAGE=64,START_RX_PAGE=76,STOP_PAGE=128;\nfunction Ne2k(a,b,c){this.cpu=a;this.pci=a.devices.pci;this.preserve_mac_from_state_image=c;this.bus=b;this.bus.register(\"net0-receive\",function(d){this.receive(d)},this);this.port=768;this.name=\"ne2k\";this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,this.port&255|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0];this.pci_id=40;this.pci_bars=[{size:32}];this.imr=this.isr=0;this.cr=1;this.tpsr=this.tcnt=this.rcnt=this.dcfg=0;this.memory=\nnew Uint8Array(32768);this.txcr=this.rxcr=0;this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=87;dbg_log(\"Mac: \"+h(this.mac[0],2)+\":\"+h(this.mac[1],2)+\":\"+h(this.mac[2],2)+\":\"+h(this.mac[3],2)+\":\"+h(this.mac[4],2)+\":\"+h(this.mac[5],2),LOG_NET);this.rsar=0;this.pstart=START_PAGE;this.pstop=STOP_PAGE;this.boundary=\nthis.curpg=START_RX_PAGE;b=a.io;b.register_read(this.port|E8390_CMD,this,function(){dbg_log(\"Read cmd\",LOG_NET);return this.cr});b.register_write(this.port|E8390_CMD,this,function(d){this.cr=d;dbg_log(\"Write command: \"+h(d,2)+\" newpg=\"+(this.cr>>6)+\" txcr=\"+h(this.txcr,2),LOG_NET);this.cr&1||(d&24&&0===this.rcnt&&this.do_interrupt(ENISR_RDC),d&4&&(d=this.tpsr<<8,d=this.memory.subarray(d,d+this.tcnt),this.bus.send(\"net0-send\",d),this.bus.send(\"eth-transmit-end\",[d.length]),this.cr&=-5,this.do_interrupt(ENISR_TX),\ndbg_log(\"Command: Transfer. length=\"+h(d.byteLength),LOG_NET)))});b.register_read(this.port|EN0_COUNTER0,this,function(){dbg_log(\"Read counter0\",LOG_NET);return 0});b.register_read(this.port|EN0_COUNTER1,this,function(){dbg_log(\"Read counter1\",LOG_NET);return 0});b.register_read(this.port|EN0_COUNTER2,this,function(){dbg_log(\"Read counter2\",LOG_NET);return 0});b.register_read(this.port|NE_RESET,this,function(){var d=this.get_page();0===d?(dbg_log(\"Read reset\",LOG_NET),this.do_interrupt(ENISR_RESET)):\n(dbg_log(\"Read pg\"+d+\"/1f\",LOG_NET),dbg_assert(!1));return 0});b.register_write(this.port|NE_RESET,this,function(d){var e=this.get_page();0===e?dbg_log(\"Write reset: \"+h(d,2),LOG_NET):(dbg_log(\"Write pg\"+e+\"/1f: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_STARTPG,this,function(){var d=this.get_page();if(0===d)return this.pstart;if(1===d)return dbg_log(\"Read pg1/01 (mac[0])\",LOG_NET),this.mac[0];if(2===d)return this.pstart;dbg_log(\"Read pg\"+d+\"/01\");dbg_assert(!1);return 0});b.register_write(this.port|\nEN0_STARTPG,this,function(d){var e=this.get_page();0===e?(dbg_log(\"start page: \"+h(d,2),LOG_NET),this.pstart=d):1===e?(dbg_log(\"mac[0] = \"+h(d),LOG_NET),this.mac[0]=d):3===e?dbg_log(\"Unimplemented: Write pg3/01 (9346CR): \"+h(d),LOG_NET):(dbg_log(\"Write pg\"+e+\"/01: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_STOPPG,this,function(){var d=this.get_page();if(0===d)return this.pstop;if(1===d)return dbg_log(\"Read pg1/02 (mac[1])\",LOG_NET),this.mac[1];if(2===d)return this.pstop;dbg_log(\"Read pg\"+\nd+\"/02\",LOG_NET);dbg_assert(!1);return 0});b.register_write(this.port|EN0_STOPPG,this,function(d){var e=this.get_page();0===e?(dbg_log(\"stop page: \"+h(d,2),LOG_NET),d>this.memory.length>>8&&(d=this.memory.length>>8,dbg_log(\"XXX: Adjusting stop page to \"+h(d),LOG_NET)),this.pstop=d):1===e?(dbg_log(\"mac[1] = \"+h(d),LOG_NET),this.mac[1]=d):(dbg_log(\"Write pg\"+e+\"/02: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_ISR,this,function(){var d=this.get_page();if(0===d)return dbg_log(\"Read isr: \"+\nh(this.isr,2),LOG_NET),this.isr;if(1===d)return dbg_log(\"Read curpg: \"+h(this.curpg,2),LOG_NET),this.curpg;dbg_assert(!1)});b.register_write(this.port|EN0_ISR,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write isr: \"+h(d,2),LOG_NET),this.isr&=~d,this.update_irq()):1===e?(dbg_log(\"Write curpg: \"+h(d,2),LOG_NET),this.curpg=d):dbg_assert(!1)});b.register_write(this.port|EN0_TXCR,this,function(d){var e=this.get_page();0===e?(this.txcr=d,dbg_log(\"Write tx config: \"+h(d,2),LOG_NET)):dbg_log(\"Unimplemented: Write pg\"+\ne+\"/0d \"+h(d,2),LOG_NET)});b.register_write(this.port|EN0_DCFG,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write data configuration: \"+h(d,2),LOG_NET),this.dcfg=d):dbg_log(\"Unimplemented: Write pg\"+e+\"/0e \"+h(d,2),LOG_NET)});b.register_read(this.port|EN0_RCNTLO,this,function(){if(0===this.get_page())return dbg_log(\"Read pg0/0a\",LOG_NET),80;dbg_assert(!1,\"TODO\");return 0});b.register_write(this.port|EN0_RCNTLO,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write remote byte count low: \"+\nh(d,2),LOG_NET),this.rcnt=this.rcnt&65280|d&255):dbg_log(\"Unimplemented: Write pg\"+e+\"/0a \"+h(d,2),LOG_NET)});b.register_read(this.port|EN0_RCNTHI,this,function(){if(0===this.get_page())return dbg_log(\"Read pg0/0b\",LOG_NET),67;dbg_assert(!1,\"TODO\");return 0});b.register_write(this.port|EN0_RCNTHI,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write remote byte count high: \"+h(d,2),LOG_NET),this.rcnt=this.rcnt&255|d<<8&65280):dbg_log(\"Unimplemented: Write pg\"+e+\"/0b \"+h(d,2),LOG_NET)});b.register_read(this.port|\nEN0_RSARLO,this,function(){var d=this.get_page();if(0===d)return dbg_log(\"Read remote start address low\",LOG_NET),this.rsar&255;dbg_log(\"Unimplemented: Read pg\"+d+\"/08\",LOG_NET);dbg_assert(!1)});b.register_write(this.port|EN0_RSARLO,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write remote start address low: \"+h(d,2),LOG_NET),this.rsar=this.rsar&65280|d&255):dbg_log(\"Unimplemented: Write pg\"+e+\"/08 \"+h(d,2),LOG_NET)});b.register_read(this.port|EN0_RSARHI,this,function(){var d=this.get_page();\nif(0===d)return dbg_log(\"Read remote start address high\",LOG_NET),this.rsar>>8&255;dbg_log(\"Unimplemented: Read pg\"+d+\"/09\",LOG_NET);dbg_assert(!1)});b.register_write(this.port|EN0_RSARHI,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write remote start address low: \"+h(d,2),LOG_NET),this.rsar=this.rsar&255|d<<8&65280):dbg_log(\"Unimplemented: Write pg\"+e+\"/09 \"+h(d,2),LOG_NET)});b.register_write(this.port|EN0_IMR,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write interrupt mask register: \"+\nh(d,2)+\" isr=\"+h(this.isr,2),LOG_NET),this.imr=d,this.update_irq()):dbg_log(\"Unimplemented: Write pg\"+e+\"/0f \"+h(d,2),LOG_NET)});b.register_read(this.port|EN0_BOUNDARY,this,function(){var d=this.get_page();if(0===d)return dbg_log(\"Read boundary: \"+h(this.boundary,2),LOG_NET),this.boundary;if(1===d)return dbg_log(\"Read pg1/03 (mac[2])\",LOG_NET),this.mac[2];3===d?dbg_log(\"Unimplemented: Read pg3/03 (CONFIG0)\",LOG_NET):(dbg_log(\"Read pg\"+d+\"/03\",LOG_NET),dbg_assert(!1));return 0});b.register_write(this.port|\nEN0_BOUNDARY,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write boundary: \"+h(d,2),LOG_NET),this.boundary=d):1===e?(dbg_log(\"mac[2] = \"+h(d),LOG_NET),this.mac[2]=d):(dbg_log(\"Write pg\"+e+\"/03: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_TSR,this,function(){var d=this.get_page();if(0===d)return this.tsr;if(1===d)return dbg_log(\"Read pg1/04 (mac[3])\",LOG_NET),this.mac[3];dbg_log(\"Read pg\"+d+\"/04\",LOG_NET);dbg_assert(!1);return 0});b.register_write(this.port|EN0_TPSR,this,\nfunction(d){var e=this.get_page();0===e?(dbg_log(\"Write tpsr: \"+h(d,2),LOG_NET),this.tpsr=d):1===e?(dbg_log(\"mac[3] = \"+h(d),LOG_NET),this.mac[3]=d):(dbg_log(\"Write pg\"+e+\"/04: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_TCNTLO,this,function(){var d=this.get_page();if(0===d)return dbg_log(\"Unimplemented: Read pg0/05 (NCR: Number of Collisions Register)\",LOG_NET),0;if(1===d)return dbg_log(\"Read pg1/05 (mac[4])\",LOG_NET),this.mac[4];3===d?dbg_log(\"Unimplemented: Read pg3/05 (CONFIG2)\",\nLOG_NET):(dbg_log(\"Read pg\"+d+\"/05\",LOG_NET),dbg_assert(!1));return 0});b.register_write(this.port|EN0_TCNTLO,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write tcnt low: \"+h(d,2),LOG_NET),this.tcnt=this.tcnt&-256|d):1===e?(dbg_log(\"mac[4] = \"+h(d),LOG_NET),this.mac[4]=d):3===e?dbg_log(\"Unimplemented: Write pg3/05 (CONFIG2): \"+h(d),LOG_NET):(dbg_log(\"Write pg\"+e+\"/05: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_TCNTHI,this,function(){var d=this.get_page();if(0===d)return dbg_assert(!1,\n\"TODO\"),0;if(1===d)return dbg_log(\"Read pg1/06 (mac[5])\",LOG_NET),this.mac[5];3===d?dbg_log(\"Unimplemented: Read pg3/06 (CONFIG3)\",LOG_NET):(dbg_log(\"Read pg\"+d+\"/06\",LOG_NET),dbg_assert(!1));return 0});b.register_write(this.port|EN0_TCNTHI,this,function(d){var e=this.get_page();0===e?(dbg_log(\"Write tcnt high: \"+h(d,2),LOG_NET),this.tcnt=this.tcnt&255|d<<8):1===e?(dbg_log(\"mac[5] = \"+h(d),LOG_NET),this.mac[5]=d):3===e?dbg_log(\"Unimplemented: Write pg3/06 (CONFIG3): \"+h(d),LOG_NET):(dbg_log(\"Write pg\"+\ne+\"/06: \"+h(d),LOG_NET),dbg_assert(!1))});b.register_read(this.port|EN0_RSR,this,function(){var d=this.get_page();if(0===d)return 9;dbg_log(\"Unimplemented: Read pg\"+d+\"/0c\",LOG_NET);dbg_assert(!1);return 0});b.register_write(this.port|EN0_RXCR,this,function(d){var e=this.get_page();0===e?(dbg_log(\"RX configuration reg write: \"+h(d,2),LOG_NET),this.rxcr=d):dbg_log(\"Unimplemented: Write pg\"+e+\"/0c: \"+h(d),LOG_NET)});b.register_read(this.port|NE_DATAPORT|0,this,this.data_port_read8,this.data_port_read16,\nthis.data_port_read32);b.register_write(this.port|NE_DATAPORT|0,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);a.devices.pci.register_device(this)}Ne2k.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};\nNe2k.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image&&(this.mac=a[15],this.memory=a[16])};Ne2k.prototype.do_interrupt=function(a){dbg_log(\"Do interrupt \"+h(a,2),LOG_NET);this.isr|=a;this.update_irq()};\nNe2k.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};Ne2k.prototype.data_port_write=function(a){NE2K_LOG_VERBOSE&&dbg_log(\"Write data port: data=\"+h(a&255,2)+\" rsar=\"+h(this.rsar,4)+\" rcnt=\"+h(this.rcnt,4),LOG_NET);if(16>=this.rsar||this.rsar>=START_PAGE<<8&&this.rsar<STOP_PAGE<<8)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(ENISR_RDC)};\nNe2k.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};Ne2k.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};\nNe2k.prototype.data_port_read=function(){let a=0;this.rsar<STOP_PAGE<<8&&(a=this.memory[this.rsar]);NE2K_LOG_VERBOSE&&dbg_log(\"Read data port: data=\"+h(a,2)+\" rsar=\"+h(this.rsar,4)+\" rcnt=\"+h(this.rcnt,4),LOG_NET);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(ENISR_RDC);return a};Ne2k.prototype.data_port_read8=function(){return this.data_port_read16()&255};\nNe2k.prototype.data_port_read16=function(){return this.dcfg&1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};Ne2k.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24};\nNe2k.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send(\"eth-receive-end\",[a.length]),this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+1+(c>>8),f=b+c,k=1+(c>>8),g=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-\nthis.curpg+this.boundary-this.pstart;g<k&&0!==this.boundary?dbg_log(\"Buffer full, dropping packet pstart=\"+h(this.pstart)+\" pstop=\"+h(this.pstop)+\" curpg=\"+h(this.curpg)+\" needed=\"+h(k)+\" boundary=\"+h(this.boundary)+\" available=\"+h(g),LOG_NET):(f>this.pstop<<8?(dbg_assert(60<=a.length),f=(this.pstop<<8)-d,dbg_assert(0<=f),this.memory.set(a.subarray(0,f),d),this.memory.set(a.subarray(f),this.pstart<<8),dbg_log(\"rcv cut=\"+h(f),LOG_NET)):(this.memory.set(a,d),60>a.length&&this.memory.fill(0,d+a.length,\nd+60)),e>=this.pstop&&(e+=this.pstart-this.pstop),this.memory[b]=ENRSR_RXOK,this.memory[b+1]=e,this.memory[b+2]=c,this.memory[b+3]=c>>8,this.curpg=e,dbg_log(\"rcv offset=\"+h(b)+\" len=\"+h(c)+\" next=\"+h(e),LOG_NET),this.do_interrupt(ENISR_RX))}};Ne2k.prototype.get_page=function(){return this.cr>>6&3};var DSP_COPYRIGHT=\"COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.\",DSP_NO_COMMAND=0,DSP_BUFSIZE=64,DSP_DACSIZE=65536,SB_DMA_BUFSIZE=65536,SB_DMA_BLOCK_SAMPLES=1024,SB_DMA0=0,SB_DMA1=1,SB_DMA3=3,SB_DMA5=5,SB_DMA6=6,SB_DMA7=7,SB_DMA_CHANNEL_8BIT=SB_DMA1,SB_DMA_CHANNEL_16BIT=SB_DMA5,SB_IRQ2=2,SB_IRQ5=5,SB_IRQ7=7,SB_IRQ10=10,SB_IRQ=SB_IRQ5,SB_IRQ_8BIT=1,SB_IRQ_16BIT=2,SB_IRQ_MIDI=1,SB_IRQ_MPU=4,DSP_COMMAND_SIZES=new Uint8Array(256),DSP_COMMAND_HANDLERS=[],MIXER_READ_HANDLERS=[],MIXER_WRITE_HANDLERS=[],\nMIXER_REGISTER_IS_LEGACY=new Uint8Array(256),FM_HANDLERS=[];\nfunction SB16(a,b){this.cpu=a;this.bus=b;this.write_buffer=new ByteQueue(DSP_BUFSIZE);this.read_buffer=new ByteQueue(DSP_BUFSIZE);this.read_buffer_lastvalue=0;this.command=DSP_NO_COMMAND;this.mixer_current_address=this.command_size=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new FloatQueue(DSP_DACSIZE),new FloatQueue(DSP_DACSIZE)];this.dma=a.devices.dma;\nthis.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=SB_DMA_CHANNEL_8BIT;this.dma_channel_16bit=SB_DMA_CHANNEL_16BIT;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(SB_DMA_BUFSIZE);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=\nnew SyncBuffer(this.dma_buffer);this.dma_paused=this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send(\"dac-tell-sampling-rate\",this.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new ByteQueue(DSP_BUFSIZE);this.fm_current_address1=this.fm_current_address0=this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=SB_IRQ;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,\nthis,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);a.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);\na.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,this.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,\nthis,this.port2x7_write);a.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write);a.io.register_write(554,this,this.port2xA_write);a.io.register_write(555,this,this.port2xB_write);a.io.register_write(556,this,this.port2xC_write);a.io.register_write(557,this,this.port2xD_write);a.io.register_write(558,this,this.port2xE_write);a.io.register_write(559,this,this.port2xF_write);a.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,\nthis,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register(\"dac-request-data\",function(){this.dac_handle_request()},this);b.register(\"speaker-has-initialized\",function(){this.mixer_reset()},this);b.send(\"speaker-confirm-initialized\");this.dsp_reset()}\nSB16.prototype.dsp_reset=function(){this.write_buffer.clear();this.read_buffer.clear();this.command=DSP_NO_COMMAND;this.command_size=0;this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers[0].clear();this.dac_buffers[1].clear();this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_autoinit=!1;this.dma_buffer_uint8.fill(0);this.dma_paused=this.dma_waiting_transfer=\n!1;this.e2_value=170;this.e2_count=0;this.sampling_rate=22050;this.bytes_per_sample=1;this.lower_irq(SB_IRQ_8BIT);this.irq_triggered.fill(0);this.asp_registers.fill(0);this.asp_registers[5]=1;this.asp_registers[9]=248};\nSB16.prototype.get_state=function(){var a=[];a[2]=this.read_buffer_lastvalue;a[3]=this.command;a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=\nthis.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};\nSB16.prototype.set_state=function(a){this.read_buffer_lastvalue=a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=a[5];this.mixer_registers=a[6];this.mixer_full_update();this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=\na[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=\nnew Uint16Array(this.dma_buffer);this.dma_syncbuffer=new SyncBuffer(this.dma_buffer);this.dma_paused?this.bus.send(\"dac-disable\"):this.bus.send(\"dac-enable\")};SB16.prototype.port2x0_read=function(){dbg_log(\"220 read: fm music status port (unimplemented)\",LOG_SB16);return 255};SB16.prototype.port2x1_read=function(){dbg_log(\"221 read: fm music data port (write only)\",LOG_SB16);return 255};\nSB16.prototype.port2x2_read=function(){dbg_log(\"222 read: advanced fm music status port (unimplemented)\",LOG_SB16);return 255};SB16.prototype.port2x3_read=function(){dbg_log(\"223 read: advanced music data port (write only)\",LOG_SB16);return 255};SB16.prototype.port2x4_read=function(){dbg_log(\"224 read: mixer address port\",LOG_SB16);return this.mixer_current_address};SB16.prototype.port2x5_read=function(){dbg_log(\"225 read: mixer data port\",LOG_SB16);return this.mixer_read(this.mixer_current_address)};\nSB16.prototype.port2x6_read=function(){dbg_log(\"226 read: (write only)\",LOG_SB16);return 255};SB16.prototype.port2x7_read=function(){dbg_log(\"227 read: undocumented\",LOG_SB16);return 255};SB16.prototype.port2x8_read=function(){dbg_log(\"228 read: fm music status port (unimplemented)\",LOG_SB16);return 255};SB16.prototype.port2x9_read=function(){dbg_log(\"229 read: fm music data port (write only)\",LOG_SB16);return 255};\nSB16.prototype.port2xA_read=function(){dbg_log(\"22A read: read data\",LOG_SB16);this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift());dbg_log(\" <- \"+this.read_buffer_lastvalue+\" \"+h(this.read_buffer_lastvalue)+\" '\"+String.fromCharCode(this.read_buffer_lastvalue)+\"'\",LOG_SB16);return this.read_buffer_lastvalue};SB16.prototype.port2xB_read=function(){dbg_log(\"22B read: undocumented\",LOG_SB16);return 255};\nSB16.prototype.port2xC_read=function(){dbg_log(\"22C read: write-buffer status\",LOG_SB16);return 127};SB16.prototype.port2xD_read=function(){dbg_log(\"22D read: undocumented\",LOG_SB16);return 255};SB16.prototype.port2xE_read=function(){dbg_log(\"22E read: read-buffer status / irq 8bit ack.\",LOG_SB16);this.irq_triggered[SB_IRQ_8BIT]&&this.lower_irq(SB_IRQ_8BIT);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};\nSB16.prototype.port2xF_read=function(){dbg_log(\"22F read: irq 16bit ack\",LOG_SB16);this.lower_irq(SB_IRQ_16BIT);return 0};SB16.prototype.port2x0_write=function(a){dbg_log(\"220 write: (unimplemented) fm register 0 address = \"+h(a),LOG_SB16);this.fm_current_address0=0};SB16.prototype.port2x1_write=function(a){dbg_log(\"221 write: (unimplemented) fm register 0 data = \"+h(a),LOG_SB16);var b=FM_HANDLERS[this.fm_current_address0];b||(b=this.fm_default_write);b.call(this,a,0,this.fm_current_address0)};\nSB16.prototype.port2x2_write=function(a){dbg_log(\"222 write: (unimplemented) fm register 1 address = \"+h(a),LOG_SB16);this.fm_current_address1=0};SB16.prototype.port2x3_write=function(a){dbg_log(\"223 write: (unimplemented) fm register 1 data =\"+h(a),LOG_SB16);var b=FM_HANDLERS[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};SB16.prototype.port2x4_write=function(a){dbg_log(\"224 write: mixer address = \"+h(a),LOG_SB16);this.mixer_current_address=a};\nSB16.prototype.port2x5_write=function(a){dbg_log(\"225 write: mixer data = \"+h(a),LOG_SB16);this.mixer_write(this.mixer_current_address,a)};SB16.prototype.port2x6_write=function(a){dbg_log(\"226 write: reset = \"+h(a),LOG_SB16);this.dsp_highspeed?(dbg_log(\" -> exit highspeed\",LOG_SB16),this.dsp_highspeed=!1):a&&(dbg_log(\" -> reset\",LOG_SB16),this.dsp_reset());this.read_buffer.clear();this.read_buffer.push(170)};SB16.prototype.port2x7_write=function(a){dbg_log(\"227 write: undocumented\",LOG_SB16)};\nSB16.prototype.port2x8_write=function(a){dbg_log(\"228 write: fm music register port (unimplemented)\",LOG_SB16)};SB16.prototype.port2x9_write=function(a){dbg_log(\"229 write: fm music data port (unimplemented)\",LOG_SB16)};SB16.prototype.port2xA_write=function(a){dbg_log(\"22A write: dsp read data port (read only)\",LOG_SB16)};SB16.prototype.port2xB_write=function(a){dbg_log(\"22B write: undocumented\",LOG_SB16)};\nSB16.prototype.port2xC_write=function(a){dbg_log(\"22C write: write command/data\",LOG_SB16);this.command===DSP_NO_COMMAND?(dbg_log(\"22C write: command = \"+h(a),LOG_SB16),this.command=a,this.write_buffer.clear(),this.command_size=DSP_COMMAND_SIZES[a]):(dbg_log(\"22C write: data: \"+h(a),LOG_SB16),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};SB16.prototype.port2xD_write=function(a){dbg_log(\"22D write: undocumented\",LOG_SB16)};\nSB16.prototype.port2xE_write=function(a){dbg_log(\"22E write: dsp read buffer status (read only)\",LOG_SB16)};SB16.prototype.port2xF_write=function(a){dbg_log(\"22F write: undocumented\",LOG_SB16)};SB16.prototype.port3x0_read=function(){dbg_log(\"330 read: mpu data\",LOG_SB16);this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift());dbg_log(\" <- \"+h(this.mpu_read_buffer_lastvalue),LOG_SB16);return this.mpu_read_buffer_lastvalue};\nSB16.prototype.port3x0_write=function(a){dbg_log(\"330 write: mpu data (unimplemented) : \"+h(a),LOG_SB16)};SB16.prototype.port3x1_read=function(){dbg_log(\"331 read: mpu status\",LOG_SB16);return 0|128*!this.mpu_read_buffer.length};SB16.prototype.port3x1_write=function(a){dbg_log(\"331 write: mpu command: \"+h(a),LOG_SB16);255==a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};\nSB16.prototype.command_do=function(){var a=DSP_COMMAND_HANDLERS[this.command];a||(a=this.dsp_default_handler);a.call(this);this.command=DSP_NO_COMMAND;this.command_size=0;this.write_buffer.clear()};SB16.prototype.dsp_default_handler=function(){dbg_log(\"Unhandled command: \"+h(this.command),LOG_SB16)};function register_dsp_command(a,b,c){c||(c=SB16.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)DSP_COMMAND_SIZES[a[d]]=b,DSP_COMMAND_HANDLERS[a[d]]=c}\nfunction any_first_digit(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}register_dsp_command([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});register_dsp_command([15],1,function(){this.read_buffer.clear();this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});register_dsp_command([16],1,function(){var a=audio_normalize(this.write_buffer.shift(),127.5,-1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send(\"dac-enable\")});\nregister_dsp_command([20,21],2,function(){this.dma_irq=SB_IRQ_8BIT;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});register_dsp_command([22],2);register_dsp_command([23],2);register_dsp_command([28],0,function(){this.dma_irq=SB_IRQ_8BIT;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});\nregister_dsp_command([31],0);register_dsp_command([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});register_dsp_command([36],2);register_dsp_command([44],0);register_dsp_command([48],0);register_dsp_command([49],0);register_dsp_command([52],0);register_dsp_command([53],0);register_dsp_command([54],0);register_dsp_command([55],0);register_dsp_command([56],0);register_dsp_command([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});\nregister_dsp_command([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});register_dsp_command([72],2,function(){this.dma_transfer_size_set()});register_dsp_command([116],2);register_dsp_command([117],2);register_dsp_command([118],2);register_dsp_command([119],2);register_dsp_command([125],0);register_dsp_command([127],0);register_dsp_command([128],2);\nregister_dsp_command([144],0,function(){this.dma_irq=SB_IRQ_8BIT;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});register_dsp_command([145],0);register_dsp_command([152],0);register_dsp_command([153],0);register_dsp_command([160],0);register_dsp_command([168],0);\nregister_dsp_command(any_first_digit(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=SB_IRQ_16BIT;this.dma_channel=this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});\nregister_dsp_command(any_first_digit(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=SB_IRQ_8BIT;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});register_dsp_command([208],0,function(){this.dma_paused=!0;this.bus.send(\"dac-disable\")});\nregister_dsp_command([209],0,function(){this.dummy_speaker_enabled=!0});register_dsp_command([211],0,function(){this.dummy_speaker_enabled=!1});register_dsp_command([212],0,function(){this.dma_paused=!1;this.bus.send(\"dac-enable\")});register_dsp_command([213],0,function(){this.dma_paused=!0;this.bus.send(\"dac-disable\")});register_dsp_command([214],0,function(){this.dma_paused=!1;this.bus.send(\"dac-enable\")});\nregister_dsp_command([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});register_dsp_command([217,218],0,function(){this.dma_autoinit=!1});register_dsp_command([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});register_dsp_command([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});register_dsp_command([226],1);\nregister_dsp_command([227],0,function(){this.read_buffer.clear();for(var a=0;a<DSP_COPYRIGHT.length;a++)this.read_buffer.push(DSP_COPYRIGHT.charCodeAt(a));this.read_buffer.push(0)});register_dsp_command([228],1,function(){this.test_register=this.write_buffer.shift()});register_dsp_command([232],0,function(){this.read_buffer.clear();this.read_buffer.push(this.test_register)});register_dsp_command([242,243],0,function(){this.raise_irq()});var SB_F9=new Uint8Array(256);SB_F9[14]=255;SB_F9[15]=7;\nSB_F9[55]=56;register_dsp_command([249],1,function(){var a=this.write_buffer.shift();dbg_log(\"dsp 0xf9: unknown function. input: \"+a,LOG_SB16);this.read_buffer.clear();this.read_buffer.push(SB_F9[a])});SB16.prototype.mixer_read=function(a){var b=MIXER_READ_HANDLERS[a];b?b=b.call(this):(b=this.mixer_registers[a],dbg_log(\"unhandled mixer register read. addr:\"+h(a)+\" data:\"+h(b),LOG_SB16));return b};\nSB16.prototype.mixer_write=function(a,b){var c=MIXER_WRITE_HANDLERS[a];c?c.call(this,b):dbg_log(\"unhandled mixer register write. addr:\"+h(a)+\" data:\"+h(b),LOG_SB16)};SB16.prototype.mixer_default_read=function(){dbg_log(\"mixer register read. addr:\"+h(this.mixer_current_address),LOG_SB16);return this.mixer_registers[this.mixer_current_address]};\nSB16.prototype.mixer_default_write=function(a){dbg_log(\"mixer register write. addr:\"+h(this.mixer_current_address)+\" data:\"+h(a),LOG_SB16);this.mixer_registers[this.mixer_current_address]=a};\nSB16.prototype.mixer_reset=function(){this.mixer_registers[4]=204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=0;this.mixer_registers[57]=0;this.mixer_registers[59]=\n0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};\nSB16.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)MIXER_REGISTER_IS_LEGACY[a]||this.mixer_write(a,this.mixer_registers[a])};function register_mixer_read(a,b){b||(b=SB16.prototype.mixer_default_read);MIXER_READ_HANDLERS[a]=b}function register_mixer_write(a,b){b||(b=SB16.prototype.mixer_default_write);MIXER_WRITE_HANDLERS[a]=b}\nfunction register_mixer_legacy(a,b,c){MIXER_REGISTER_IS_LEGACY[a]=1;MIXER_READ_HANDLERS[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};MIXER_WRITE_HANDLERS[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}\nfunction register_mixer_volume(a,b,c){MIXER_READ_HANDLERS[a]=SB16.prototype.mixer_default_read;MIXER_WRITE_HANDLERS[a]=function(d){this.mixer_registers[a]=d;this.bus.send(\"mixer-volume\",[b,c,(d>>>2)-62])}}register_mixer_read(0,function(){this.mixer_reset();return 0});register_mixer_write(0);register_mixer_legacy(4,50,51);register_mixer_legacy(34,48,49);register_mixer_legacy(38,52,53);register_mixer_legacy(40,54,55);register_mixer_legacy(46,56,57);register_mixer_volume(48,MIXER_SRC_MASTER,MIXER_CHANNEL_LEFT);\nregister_mixer_volume(49,MIXER_SRC_MASTER,MIXER_CHANNEL_RIGHT);register_mixer_volume(50,MIXER_SRC_DAC,MIXER_CHANNEL_LEFT);register_mixer_volume(51,MIXER_SRC_DAC,MIXER_CHANNEL_RIGHT);register_mixer_read(59);register_mixer_write(59,function(a){this.mixer_registers[59]=a;this.bus.send(\"mixer-volume\",[MIXER_SRC_PCSPEAKER,MIXER_CHANNEL_BOTH,6*(a>>>6)-18])});register_mixer_read(65);register_mixer_write(65,function(a){this.mixer_registers[65]=a;this.bus.send(\"mixer-gain-left\",6*(a>>>6))});register_mixer_read(66);\nregister_mixer_write(66,function(a){this.mixer_registers[66]=a;this.bus.send(\"mixer-gain-right\",6*(a>>>6))});register_mixer_read(68);register_mixer_write(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send(\"mixer-treble-left\",a-(16>a?14:16))});register_mixer_read(69);register_mixer_write(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send(\"mixer-treble-right\",a-(16>a?14:16))});register_mixer_read(70);\nregister_mixer_write(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send(\"mixer-bass-right\",a-(16>a?14:16))});register_mixer_read(71);register_mixer_write(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send(\"mixer-bass-right\",a-(16>a?14:16))});register_mixer_read(128,function(){switch(this.irq){case SB_IRQ2:return 1;case SB_IRQ5:return 2;case SB_IRQ7:return 4;case SB_IRQ10:return 8;default:return 0}});\nregister_mixer_write(128,function(a){a&1&&(this.irq=SB_IRQ2);a&2&&(this.irq=SB_IRQ5);a&4&&(this.irq=SB_IRQ7);a&8&&(this.irq=SB_IRQ10)});register_mixer_read(129,function(){var a=0;switch(this.dma_channel_8bit){case SB_DMA0:a|=1;break;case SB_DMA1:a|=2;break;case SB_DMA3:a|=8}switch(this.dma_channel_16bit){case SB_DMA5:a|=32;break;case SB_DMA6:a|=64;break;case SB_DMA7:a|=128}return a});\nregister_mixer_write(129,function(a){a&1&&(this.dma_channel_8bit=SB_DMA0);a&2&&(this.dma_channel_8bit=SB_DMA1);a&8&&(this.dma_channel_8bit=SB_DMA3);a&32&&(this.dma_channel_16bit=SB_DMA5);a&64&&(this.dma_channel_16bit=SB_DMA6);a&128&&(this.dma_channel_16bit=SB_DMA7)});register_mixer_read(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});SB16.prototype.fm_default_write=function(a,b,c){dbg_log(\"unhandled fm register write. addr:\"+b+\"|\"+h(c)+\" data:\"+h(a),LOG_SB16)};\nfunction register_fm_write(a,b){b||(b=SB16.prototype.fm_default_write);for(var c=0;c<a.length;c++)FM_HANDLERS[a[c]]=b}function between(a,b){for(var c=[];a<=b;a++)c.push(a);return c}var SB_FM_OPERATORS_BY_OFFSET=new Uint8Array(32);SB_FM_OPERATORS_BY_OFFSET[0]=0;SB_FM_OPERATORS_BY_OFFSET[1]=1;SB_FM_OPERATORS_BY_OFFSET[2]=2;SB_FM_OPERATORS_BY_OFFSET[3]=3;SB_FM_OPERATORS_BY_OFFSET[4]=4;SB_FM_OPERATORS_BY_OFFSET[5]=5;SB_FM_OPERATORS_BY_OFFSET[8]=6;SB_FM_OPERATORS_BY_OFFSET[9]=7;\nSB_FM_OPERATORS_BY_OFFSET[10]=8;SB_FM_OPERATORS_BY_OFFSET[11]=9;SB_FM_OPERATORS_BY_OFFSET[12]=10;SB_FM_OPERATORS_BY_OFFSET[13]=11;SB_FM_OPERATORS_BY_OFFSET[16]=12;SB_FM_OPERATORS_BY_OFFSET[17]=13;SB_FM_OPERATORS_BY_OFFSET[18]=14;SB_FM_OPERATORS_BY_OFFSET[19]=15;SB_FM_OPERATORS_BY_OFFSET[20]=16;SB_FM_OPERATORS_BY_OFFSET[21]=17;function get_fm_operator(a,b){return 18*a+SB_FM_OPERATORS_BY_OFFSET[b]}register_fm_write([1],function(a,b,c){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});\nregister_fm_write([2]);register_fm_write([3]);register_fm_write([4],function(a,b,c){});register_fm_write([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});register_fm_write([8],function(a,b,c){});register_fm_write(between(32,53),function(a,b,c){get_fm_operator(b,c-32)});register_fm_write(between(64,85),function(a,b,c){get_fm_operator(b,c-64)});register_fm_write(between(96,117),function(a,b,c){get_fm_operator(b,c-96)});\nregister_fm_write(between(128,149),function(a,b,c){get_fm_operator(b,c-128)});register_fm_write(between(160,168),function(a,b,c){});register_fm_write(between(176,184),function(a,b,c){});register_fm_write([189],function(a,b,c){});register_fm_write(between(192,200),function(a,b,c){});register_fm_write(between(224,245),function(a,b,c){get_fm_operator(b,c-224)});SB16.prototype.fm_update_waveforms=function(){};\nSB16.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send(\"dac-tell-sampling-rate\",a)};SB16.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};SB16.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)};\nSB16.prototype.dma_transfer_start=function(){dbg_log(\"begin dma transfer\",LOG_SB16);this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*this.bytes_per_sample;this.dma_bytes_block=SB_DMA_BLOCK_SAMPLES*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};\nSB16.prototype.dma_on_unmask=function(a){a===this.dma_channel&&this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send(\"dac-enable\"))};\nSB16.prototype.dma_transfer_next=function(){dbg_log(\"dma transfering next block\",LOG_SB16);var a=Math.min(this.dma_bytes_left,this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{dbg_log(\"dma block transfer \"+(c?\"unsuccessful\":\"successful\"),LOG_SB16);c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};\nSB16.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var f=0,k=0;k<a;k++)for(var g=audio_normalize(e[k],b,c),l=0;l<d;l++)this.dac_buffers[f].push(g),f^=1;this.dac_send()};SB16.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};\nSB16.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send(\"dac-send-data\",[a,b],[a.buffer,b.buffer])}};SB16.prototype.raise_irq=function(a){dbg_log(\"raise irq\",LOG_SB16);this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};SB16.prototype.lower_irq=function(a){dbg_log(\"lower irq\",LOG_SB16);this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};\nfunction audio_normalize(a,b,c){return audio_clip(a/b+c,-1,1)}function audio_clip(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a};const VIRTIO_PCI_VENDOR_ID=6900,VIRTIO_PCI_CAP_VENDOR=9,VIRTIO_PCI_CAP_LENGTH=16,VIRTIO_PCI_CAP_COMMON_CFG=1,VIRTIO_PCI_CAP_NOTIFY_CFG=2,VIRTIO_PCI_CAP_ISR_CFG=3,VIRTIO_PCI_CAP_DEVICE_CFG=4,VIRTIO_PCI_CAP_PCI_CFG=5,VIRTIO_STATUS_ACKNOWLEDGE=1,VIRTIO_STATUS_DRIVER=2,VIRTIO_STATUS_DRIVER_OK=4,VIRTIO_STATUS_FEATURES_OK=8,VIRTIO_STATUS_DEVICE_NEEDS_RESET=64,VIRTIO_STATUS_FAILED=128,VIRTIO_ISR_QUEUE=1,VIRTIO_ISR_DEVICE_CFG=2,VIRTIO_F_RING_INDIRECT_DESC=28,VIRTIO_F_RING_EVENT_IDX=29,VIRTIO_F_VERSION_1=\n32,VIRTQ_DESC_ENTRYSIZE=16,VIRTQ_AVAIL_BASESIZE=6,VIRTQ_AVAIL_ENTRYSIZE=2,VIRTQ_USED_BASESIZE=6,VIRTQ_USED_ENTRYSIZE=8,VIRTQ_IDX_MASK=65535,VIRTQ_DESC_F_NEXT=1,VIRTQ_DESC_F_WRITE=2,VIRTQ_DESC_F_INDIRECT=4,VIRTQ_AVAIL_F_NO_INTERRUPT=1,VIRTQ_USED_F_NO_NOTIFY=1;var VirtIO_CapabilityStruct,VirtIO_CapabilityInfo,VirtQueue_Options,VirtIO_CommonCapabilityOptions,VirtIO_NotificationCapabilityOptions,VirtIO_ISRCapabilityOptions,VirtIO_DeviceSpecificCapabilityOptions,VirtIO_Options;\nfunction VirtIO(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[VIRTIO_PCI_VENDOR_ID&255,VIRTIO_PCI_VENDOR_ID>>8,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,VIRTIO_PCI_VENDOR_ID&255,VIRTIO_PCI_VENDOR_ID>>8,b.subsystem_device_id&255,b.subsystem_device_id>>8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(v86util.zeros(256-this.pci_space.length));this.pci_id=b.pci_id;this.pci_bars=\n[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=new Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)dbg_assert(0<=c,\"VirtIO device<\"+this.name+\"> feature bit numbers must be non-negative\"),dbg_assert(128>c,\"VirtIO device<\"+this.name+\"> feature bit numbers assumed less than 128 in implementation\"),this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);dbg_assert(b.common.features.includes(VIRTIO_F_VERSION_1),\n\"VirtIO device<\"+this.name+\"> only non-transitional devices are supported\");this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(var d of b.common.queues)this.queues.push(new VirtQueue(a,this,d));this.queue_select=0;this.queue_selected=this.queues[0];this.isr_status=0;if(DEBUG){c=new Set;for(var e of this.queues.map(f=>f.notify_offset))d=b.notification.single_handler?0:e,c.add(d),dbg_assert(b.notification.handlers[d],\"VirtIO device<\"+this.name+\n\"> every queue's notifier must exist\");for(const [f,k]of b.notification.handlers.entries())dbg_assert(!k||c.has(f),\"VirtIO device<\"+this.name+\"> no defined notify handler should be unused\")}e=[];e.push(this.create_common_capability(b.common));e.push(this.create_notification_capability(b.notification));e.push(this.create_isr_capability(b.isr_status));b.device_specific&&e.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(e);a.devices.pci.register_device(this);this.reset()}\nVirtIO.prototype.create_common_capability=function(a){return{type:VIRTIO_PCI_CAP_COMMON_CFG,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:\"device_feature_select\",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:\"device_feature\",read:()=>this.device_feature[this.device_feature_select]||0,write:b=>{}},{bytes:4,name:\"driver_feature_select\",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=\nb}},{bytes:4,name:\"driver_feature\",read:()=>this.driver_feature[this.driver_feature_select]||0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=b&c);this.features_ok=this.features_ok&&!(b&~c)}},{bytes:2,name:\"msix_config\",read:()=>{dbg_log(\"No msi-x capability supported.\",LOG_VIRTIO);return 65535},write:b=>{dbg_log(\"No msi-x capability supported.\",LOG_VIRTIO)}},{bytes:2,name:\"num_queues\",\nread:()=>this.queues.length,write:b=>{}},{bytes:1,name:\"device_status\",read:()=>this.device_status,write:b=>{0===b?(dbg_log(\"Reset device<\"+this.name+\">\",LOG_VIRTIO),this.reset()):b&VIRTIO_STATUS_FAILED?dbg_log(\"Warning: Device<\"+this.name+\"> status failed\",LOG_VIRTIO):dbg_log(\"Device<\"+this.name+\"> status: \"+(b&VIRTIO_STATUS_ACKNOWLEDGE?\"ACKNOWLEDGE \":\"\")+(b&VIRTIO_STATUS_DRIVER?\"DRIVER \":\"\")+(b&VIRTIO_STATUS_DRIVER_OK?\"DRIVER_OK\":\"\")+(b&VIRTIO_STATUS_FEATURES_OK?\"FEATURES_OK \":\"\")+(b&VIRTIO_STATUS_DEVICE_NEEDS_RESET?\n\"DEVICE_NEEDS_RESET\":\"\"),LOG_VIRTIO);b&~this.device_status&VIRTIO_STATUS_DRIVER_OK&&this.device_status&VIRTIO_STATUS_DEVICE_NEEDS_RESET&&this.notify_config_changes();this.features_ok||(DEBUG&&b&VIRTIO_STATUS_FEATURES_OK&&dbg_log(\"Removing FEATURES_OK\",LOG_VIRTIO),b&=~VIRTIO_STATUS_FEATURES_OK);this.device_status=b;if(b&~this.device_status&VIRTIO_STATUS_DRIVER_OK)a.on_driver_ok()}},{bytes:1,name:\"config_generation\",read:()=>this.config_generation,write:b=>{}},{bytes:2,name:\"queue_select\",read:()=>\nthis.queue_select,write:b=>{this.queue_select=b;this.queue_select<this.queues.length?this.queues_selected=this.queues[this.queue_select]:this.queue_selected=null}},{bytes:2,name:\"queue_size\",read:()=>this.queue_selected?this.queue_selected.size:0,write:b=>{this.queue_selected&&(b&b-1&&(dbg_log(\"Warning: dev<\"+this.name+\"> Given queue size was not a power of 2. Rounding up to next power of 2.\",LOG_VIRTIO),b=1<<v86util.int_log2(b-1)+1),b>this.queue_selected.size_supported&&(dbg_log(\"Warning: dev<\"+\nthis.name+\"> Trying to set queue size greater than supported. Clamping to supported size.\",LOG_VIRTIO),b=this.queue_selected.size_supported),this.queue_selected.set_size(b))}},{bytes:2,name:\"queue_msix_vector\",read:()=>{dbg_log(\"No msi-x capability supported.\",LOG_VIRTIO);return 65535},write:b=>{dbg_log(\"No msi-x capability supported.\",LOG_VIRTIO)}},{bytes:2,name:\"queue_enable\",read:()=>this.queue_selected?this.queue_selected.enabled|0:0,write:b=>{this.queue_selected&&(1===b?this.queue_selected.is_configured()?\nthis.queue_selected.enable():dbg_log(\"Driver bug: tried enabling unconfigured queue\",LOG_VIRTIO):0===b&&dbg_log(\"Driver bug: tried writing 0 to queue_enable\",LOG_VIRTIO))}},{bytes:2,name:\"queue_notify_off\",read:()=>this.queue_selected?this.queue_selected.notify_offset:0,write:b=>{}},{bytes:4,name:\"queue_desc (low dword)\",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.desc_addr=b)}},{bytes:4,name:\"queue_desc (high dword)\",read:()=>0,\nwrite:b=>{dbg_log(\"Warning: High dword of 64 bit queue_desc ignored\",LOG_VIRTIO)}},{bytes:4,name:\"queue_avail (low dword)\",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.avail_addr=b)}},{bytes:4,name:\"queue_avail (high dword)\",read:()=>0,write:b=>{dbg_log(\"Warning: High dword of 64 bit queue_avail ignored\",LOG_VIRTIO)}},{bytes:4,name:\"queue_used (low dword)\",read:()=>this.queue_selected?this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&\n(this.queue_selected.used_addr=b)}},{bytes:4,name:\"queue_used (high dword)\",read:()=>0,write:b=>{dbg_log(\"Warning: High dword of 64 bit queue_used ignored\",LOG_VIRTIO)}}]}};\nVirtIO.prototype.create_notification_capability=function(a){const b=[];let c;a.single_handler?(dbg_assert(1===a.handlers.length,\"VirtIO device<\"+this.name+\"> too many notify handlers specified: expected single handler\"),c=0):c=2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,name:\"notify\"+d,read:()=>65535,write:e||(f=>{})});return{type:VIRTIO_PCI_CAP_NOTIFY_CFG,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};\nVirtIO.prototype.create_isr_capability=function(a){return{type:VIRTIO_PCI_CAP_ISR_CFG,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:\"isr_status\",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:b=>{}}]}};\nVirtIO.prototype.create_device_specific_capability=function(a){dbg_assert(~a.offset&3,\"VirtIO device<\"+this.name+\"> device specific cap offset must be 4-byte aligned\");return{type:VIRTIO_PCI_CAP_DEVICE_CFG,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};\nVirtIO.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=VIRTIO_PCI_CAP_LENGTH+e.extra.length;c=b;b=c+a;dbg_assert(256>=b,\"VirtIO device<\"+this.name+\"> can't fit all capabilities into 256byte configspace\");dbg_assert(0<=e.bar&&6>e.bar,\"VirtIO device<\"+this.name+\"> capability invalid bar number\");var d=e.struct.reduce((f,k)=>f+k.bytes,0);d+=e.offset;d=16>d?16:1<<v86util.int_log2(d-1)+1;dbg_assert(0===(e.port&d-1),\"VirtIO device<\"+this.name+\"> capability port should be aligned to pci bar size\");\nthis.pci_bars[e.bar]={size:d};this.pci_space[c]=VIRTIO_PCI_CAP_VENDOR;this.pci_space[c+1]=b;this.pci_space[c+2]=a;this.pci_space[c+3]=e.type;this.pci_space[c+4]=e.bar;this.pci_space[c+5]=0;this.pci_space[c+6]=0;this.pci_space[c+7]=0;this.pci_space[c+8]=e.offset&255;this.pci_space[c+9]=e.offset>>>8&255;this.pci_space[c+10]=e.offset>>>16&255;this.pci_space[c+11]=e.offset>>>24;this.pci_space[c+12]=d&255;this.pci_space[c+13]=d>>>8&255;this.pci_space[c+14]=d>>>16&255;this.pci_space[c+15]=d>>>24;for(const [f,\nk]of e.extra.entries())this.pci_space[c+16+f]=k;c=16+4*e.bar;this.pci_space[c]=e.port&254|!e.use_mmio;this.pci_space[c+1]=e.port>>>8&255;this.pci_space[c+2]=e.port>>>16&255;this.pci_space[c+3]=e.port>>>24&255;c=e.port+e.offset;for(const f of e.struct){let k=f.read;a=f.write;DEBUG&&(k=()=>{const g=f.read();dbg_log(\"Device<\"+this.name+\"> cap[\"+e.type+\"] read[\"+f.name+\"] => \"+h(g,8*f.bytes),LOG_VIRTIO);return g},a=g=>{dbg_log(\"Device<\"+this.name+\"> cap[\"+e.type+\"] write[\"+f.name+\"] <= \"+h(g,8*f.bytes),\nLOG_VIRTIO);f.write(g)});if(e.use_mmio)dbg_assert(!1,\"VirtIO device <\"+this.name+\"> mmio capability not implemented.\");else{d=function(l){dbg_log(\"Warning: 8-bit read from 16-bit virtio port\",LOG_VIRTIO);return k(l&-2)>>((l&1)<<3)&255};const g=function(l){dbg_log(\"Warning: 8-bit read from 32-bit virtio port\",LOG_VIRTIO);return k(l&-4)>>((l&3)<<3)&255};switch(f.bytes){case 4:this.cpu.io.register_read(c,this,g,void 0,k);this.cpu.io.register_write(c,this,void 0,void 0,a);break;case 2:this.cpu.io.register_read(c,\nthis,d,k);this.cpu.io.register_write(c,this,void 0,a);break;case 1:this.cpu.io.register_read(c,this,k);this.cpu.io.register_write(c,this,a);break;default:dbg_assert(!1,\"VirtIO device <\"+this.name+\"> invalid capability field width of \"+f.bytes+\" bytes\")}}c+=f.bytes}}c=VIRTIO_PCI_CAP_LENGTH+4;dbg_assert(256>=b+c,\"VirtIO device<\"+this.name+\"> can't fit all capabilities into 256byte configspace\");this.pci_space[b]=VIRTIO_PCI_CAP_VENDOR;this.pci_space[b+1]=0;this.pci_space[b+2]=c;this.pci_space[b+3]=VIRTIO_PCI_CAP_PCI_CFG;\nthis.pci_space[b+4]=0;this.pci_space[b+5]=0;this.pci_space[b+6]=0;this.pci_space[b+7]=0;this.pci_space[b+8]=0;this.pci_space[b+9]=0;this.pci_space[b+10]=0;this.pci_space[b+11]=0;this.pci_space[b+12]=0;this.pci_space[b+13]=0;this.pci_space[b+14]=0;this.pci_space[b+15]=0;this.pci_space[b+16]=0;this.pci_space[b+17]=0;this.pci_space[b+18]=0;this.pci_space[b+19]=0};\nVirtIO.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};\nVirtIO.prototype.set_state=function(a){this.device_feature_select=a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(let c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};\nVirtIO.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=!0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};\nVirtIO.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&VIRTIO_STATUS_DRIVER_OK?this.raise_irq(VIRTIO_ISR_DEVICE_CFG):dbg_assert(!1,\"VirtIO device<\"+this.name+\"> attempted to notify driver before DRIVER_OK\")};VirtIO.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)};\nVirtIO.prototype.is_feature_negotiated=function(a){return 0<(this.driver_feature[a>>>5]&1<<(a&31))};VirtIO.prototype.needs_reset=function(){dbg_log(\"Device<\"+this.name+\"> experienced error - requires reset\",LOG_VIRTIO);this.device_status|=VIRTIO_STATUS_DEVICE_NEEDS_RESET;this.device_status&VIRTIO_STATUS_DRIVER_OK&&this.notify_config_changes()};VirtIO.prototype.raise_irq=function(a){dbg_log(\"Raise irq \"+h(a),LOG_VIRTIO);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};\nVirtIO.prototype.lower_irq=function(){dbg_log(\"Lower irq \",LOG_VIRTIO);this.isr_status=0;this.pci.lower_irq(this.pci_id)};function VirtQueue(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}\nVirtQueue.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;return a};\nVirtQueue.prototype.set_state=function(a){this.size=a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1};VirtQueue.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};\nVirtQueue.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};VirtQueue.prototype.enable=function(){dbg_assert(this.is_configured(),\"VirtQueue must be configured before enabled\");this.enabled=!0};VirtQueue.prototype.set_size=function(a){dbg_assert(0===(a&a-1),\"VirtQueue size must be power of 2 or zero\");dbg_assert(a<=this.size_supported,\"VirtQueue size must be within supported size\");this.size=a;this.mask=a-1};\nVirtQueue.prototype.count_requests=function(){dbg_assert(this.avail_addr,\"VirtQueue addresses must be configured before use\");return this.avail_get_idx()-this.avail_last_idx&this.mask};VirtQueue.prototype.has_request=function(){dbg_assert(this.avail_addr,\"VirtQueue addresses must be configured before use\");return(this.avail_get_idx()&this.mask)!==this.avail_last_idx};\nVirtQueue.prototype.pop_request=function(){dbg_assert(this.avail_addr,\"VirtQueue addresses must be configured before use\");dbg_assert(this.has_request(),\"VirtQueue must not pop nonexistent request\");var a=this.avail_get_entry(this.avail_last_idx);dbg_log(\"Pop request: avail_last_idx=\"+this.avail_last_idx+\" desc_idx=\"+a,LOG_VIRTIO);a=new VirtQueueBufferChain(this,a);this.avail_last_idx=this.avail_last_idx+1&this.mask;return a};\nVirtQueue.prototype.push_reply=function(a){dbg_assert(this.used_addr,\"VirtQueue addresses must be configured before use\");dbg_assert(this.num_staged_replies<this.size,\"VirtQueue replies must not exceed queue size\");const b=this.used_get_idx()+this.num_staged_replies&this.mask;dbg_log(\"Push reply: used_idx=\"+b+\" desc_idx=\"+a.head_idx,LOG_VIRTIO);this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};\nVirtQueue.prototype.flush_replies=function(){dbg_assert(this.used_addr,\"VirtQueue addresses must be configured before use\");if(0===this.num_staged_replies)dbg_log(\"flush_replies: Nothing to flush\",LOG_VIRTIO);else{dbg_log(\"Flushing \"+this.num_staged_replies+\" replies\",LOG_VIRTIO);var a=this.used_get_idx()+this.num_staged_replies&VIRTQ_IDX_MASK;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(VIRTIO_F_RING_EVENT_IDX)?(this.avail_get_used_event(),this.virtio.raise_irq(VIRTIO_ISR_QUEUE)):\n~this.avail_get_flags()&VIRTQ_AVAIL_F_NO_INTERRUPT&&this.virtio.raise_irq(VIRTIO_ISR_QUEUE)}};VirtQueue.prototype.notify_me_after=function(a){dbg_assert(0<=a,\"Must skip a non-negative number of requests\");a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};\nVirtQueue.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+b*VIRTQ_DESC_ENTRYSIZE),addr_high:this.cpu.read32s(a+b*VIRTQ_DESC_ENTRYSIZE+4),len:this.cpu.read32s(a+b*VIRTQ_DESC_ENTRYSIZE+8),flags:this.cpu.read16(a+b*VIRTQ_DESC_ENTRYSIZE+12),next:this.cpu.read16(a+b*VIRTQ_DESC_ENTRYSIZE+14)}};VirtQueue.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};VirtQueue.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)};\nVirtQueue.prototype.avail_get_entry=function(a){return this.cpu.read16(this.avail_addr+4+VIRTQ_AVAIL_ENTRYSIZE*a)};VirtQueue.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+VIRTQ_AVAIL_ENTRYSIZE*this.size)};VirtQueue.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)};VirtQueue.prototype.used_set_flags=function(a){this.cpu.write16(this.used_addr,a)};VirtQueue.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};\nVirtQueue.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+2,a)};VirtQueue.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+VIRTQ_USED_ENTRYSIZE*a,b);this.cpu.write32(this.used_addr+8+VIRTQ_USED_ENTRYSIZE*a,c)};VirtQueue.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+VIRTQ_USED_ENTRYSIZE*this.size,a)};\nfunction VirtQueueBufferChain(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=a.desc_addr,d=0,e=a.size,f=!1;const k=this.virtio.is_feature_negotiated(VIRTIO_F_RING_INDIRECT_DESC);dbg_log(\"<<< Descriptor chain start\",LOG_VIRTIO);do{const g=a.get_descriptor(c,b);dbg_log(\"descriptor: idx=\"+\nb+\" addr=\"+h(g.addr_high,8)+\":\"+h(g.addr_low,8)+\" len=\"+h(g.len,8)+\" flags=\"+h(g.flags,4)+\" next=\"+h(g.next,4),LOG_VIRTIO);if(k&&g.flags&VIRTQ_DESC_F_INDIRECT)DEBUG&&g.flags&VIRTQ_DESC_F_NEXT&&dbg_log(\"Driver bug: has set VIRTQ_DESC_F_NEXT flag in an indirect table descriptor\",LOG_VIRTIO),c=g.addr_low,d=b=0,e=g.len/VIRTQ_DESC_ENTRYSIZE,dbg_log(\"start indirect\",LOG_VIRTIO);else{if(g.flags&VIRTQ_DESC_F_WRITE)f=!0,this.write_buffers.push(g),this.length_writable+=g.len;else{if(f){dbg_log(\"Driver bug: readonly buffer after writeonly buffer within chain\",\nLOG_VIRTIO);break}this.read_buffers.push(g);this.length_readable+=g.len}d++;if(d>e){dbg_log(\"Driver bug: descriptor chain cycle detected\",LOG_VIRTIO);break}if(g.flags&VIRTQ_DESC_F_NEXT)b=g.next;else break}}while(1);dbg_log(\"Descriptor chain end >>>\",LOG_VIRTIO)}\nVirtQueueBufferChain.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.read_buffer_idx===this.read_buffers.length){dbg_log(\"Device<\"+this.virtio.name+\"> Read more than device-readable buffers has\",LOG_VIRTIO);break}var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};\nVirtQueueBufferChain.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c;){if(this.write_buffer_idx===this.write_buffers.length){dbg_log(\"Device<\"+this.virtio.name+\"> Write more than device-writable capacity\",LOG_VIRTIO);break}var d=this.write_buffers[this.write_buffer_idx];const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=\nd}this.length_written+=b;return b};var Bus={};function BusConnector(){this.listeners={};this.pair=void 0}BusConnector.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};BusConnector.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};\nBusConnector.prototype.send=function(a,b,c){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};BusConnector.prototype.send_async=function(a,b){dbg_assert(1===arguments.length||2===arguments.length);setTimeout(this.send.bind(this,a,b),0)};Bus.create=function(){var a=new BusConnector,b=new BusConnector;a.pair=b;b.pair=a;return[a,b]};var log_data=[];function do_the_log(a){LOG_TO_FILE?log_data.push(a,\"\\n\"):console.log(a)}\nvar dbg_log=function(){if(!DEBUG)return function(){};var a=LOG_NAMES.reduce(function(d,e){d[e[0]]=e[1];return d},{}),b=\"\",c=0;return function(d,e){if(DEBUG&&(e=e||1,e&LOG_LEVEL)){d=\"[\"+v86util.pads(a[e]||\"\",4)+\"] \"+d;if(d===b&&(c++,2048>c))return;e=new Date;e=v86util.pad0(e.getHours(),2)+\":\"+v86util.pad0(e.getMinutes(),2)+\":\"+v86util.pad0(e.getSeconds(),2)+\"+\"+v86util.pad0(e.getMilliseconds(),3)+\" \";c&&(1===c?do_the_log(e+b):do_the_log(\"Previous message repeated \"+c+\" times\"),c=0);do_the_log(e+d);\nb=d}}}();function dbg_trace(a){DEBUG&&dbg_log(Error().stack,a)}function dbg_assert(a,b,c){DEBUG&&(a||dbg_assert_failed(b))}function dbg_assert_failed(a){debugger;console.trace();if(a)throw\"Assert failed: \"+a;throw\"Assert failed\";};var CPU_LOG_VERBOSE=!1;\nfunction CPU(a,b){this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=v86util.view(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=v86util.view(Uint8Array,b,724,8);this.segment_offsets=v86util.view(Int32Array,b,736,8);this.segment_limits=v86util.view(Uint32Array,b,768,8);this.protected_mode=v86util.view(Int32Array,b,800,1);this.idtr_size=v86util.view(Int32Array,b,564,1);\nthis.idtr_offset=v86util.view(Int32Array,b,568,1);this.gdtr_size=v86util.view(Int32Array,b,572,1);this.gdtr_offset=v86util.view(Int32Array,b,576,1);this.tss_size_32=v86util.view(Int32Array,b,1128,1);this.page_fault=v86util.view(Uint32Array,b,540,8);this.cr=v86util.view(Int32Array,b,580,8);this.cpl=v86util.view(Uint8Array,b,612,1);this.is_32=v86util.view(Int32Array,b,804,1);this.stack_size_32=v86util.view(Int32Array,b,808,1);this.in_hlt=v86util.view(Uint8Array,b,616,1);this.last_virt_eip=v86util.view(Int32Array,\nb,620,1);this.eip_phys=v86util.view(Int32Array,b,624,1);this.sysenter_cs=v86util.view(Int32Array,b,636,1);this.sysenter_esp=v86util.view(Int32Array,b,640,1);this.sysenter_eip=v86util.view(Int32Array,b,644,1);this.prefixes=v86util.view(Int32Array,b,648,1);this.flags=v86util.view(Int32Array,b,120,1);this.flags_changed=v86util.view(Int32Array,b,116,1);this.last_op1=v86util.view(Int32Array,b,96,1);this.last_op_size=v86util.view(Int32Array,b,104,1);this.last_result=v86util.view(Int32Array,b,112,1);this.current_tsc=\nv86util.view(Uint32Array,b,960,2);this.devices={};this.instruction_pointer=v86util.view(Int32Array,b,556,1);this.previous_ip=v86util.view(Int32Array,b,560,1);this.apic_enabled=v86util.view(Uint8Array,b,548,1);this.acpi_enabled=v86util.view(Uint8Array,b,552,1);this.memory_map_read8=[];this.memory_map_write8=[];this.memory_map_read32=[];this.memory_map_write32=[];this.bios={main:null,vga:null};this.instruction_counter=v86util.view(Uint32Array,b,664,1);this.reg32=v86util.view(Int32Array,b,64,8);this.fpu_st=\nv86util.view(Int32Array,b,1152,32);this.fpu_stack_empty=v86util.view(Uint8Array,b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=v86util.view(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=v86util.view(Uint16Array,b,1036,1);this.fpu_control_word[0]=895;this.fpu_status_word=v86util.view(Uint16Array,b,1040,1);this.fpu_status_word[0]=0;this.fpu_ip=v86util.view(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=v86util.view(Int32Array,b,1052,1);this.fpu_ip_selector[0]=\n0;this.fpu_opcode=v86util.view(Int32Array,b,1044,1);this.fpu_opcode[0]=0;this.fpu_dp=v86util.view(Int32Array,b,1056,1);this.fpu_dp[0]=0;this.fpu_dp_selector=v86util.view(Int32Array,b,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=v86util.view(Int32Array,b,832,32);this.mxcsr=v86util.view(Int32Array,b,824,1);this.sreg=v86util.view(Uint16Array,b,668,8);this.dreg=v86util.view(Int32Array,b,684,8);this.fw_value=[];this.fw_pointer=0;this.option_roms=[];this.io=void 0;this.bus=a;this.set_tsc(0,0);this.debug_init()}\nCPU.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};CPU.prototype.create_jit_imports=function(){const a=Object.create(null);a.m=this.wm.exports.memory;for(let b of Object.keys(this.wm.exports))b.startsWith(\"_\")||b.startsWith(\"ZSTD\")||b.startsWith(\"zstd\")||b.endsWith(\"_js\")||(a[b]=this.wm.exports[b]);this.jit_imports=a};\nCPU.prototype.wasm_patch=function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,\"Missing import: \"+c);return d};this.getiopl=b(\"getiopl\");this.vm86_mode=b(\"vm86_mode\");this.get_eflags=b(\"get_eflags\");this.get_eflags_no_arith=b(\"get_eflags_no_arith\");this.update_eflags=b(\"update_eflags\");this.trigger_gp=b(\"trigger_gp\");this.trigger_np=b(\"trigger_np\");this.trigger_ss=b(\"trigger_ss\");this.switch_cs_real_mode=b(\"switch_cs_real_mode\");this.pic_call_irq=b(\"pic_call_irq\");this.do_many_cycles_native=\nb(\"do_many_cycles_native\");this.cycle_internal=b(\"cycle_internal\");this.read8=b(\"read8\");this.read16=b(\"read16\");this.read32s=b(\"read32s\");this.write8=b(\"write8\");this.write16=b(\"write16\");this.write32=b(\"write32\");this.in_mapped_range=b(\"in_mapped_range\");this.push16=b(\"push16_js\");this.push32=b(\"push32_js\");this.set_stack_reg=b(\"set_stack_reg\");this.fpu_load_tag_word=b(\"fpu_load_tag_word\");this.fpu_load_status_word=b(\"fpu_load_status_word\");this.translate_address_system_read=b(\"translate_address_system_read_js\");\nthis.translate_address_system_write=b(\"translate_address_system_write_js\");this.get_seg_cs=b(\"get_seg_cs\");this.adjust_stack_reg=b(\"adjust_stack_reg\");this.get_real_eip=b(\"get_real_eip\");this.get_stack_pointer=b(\"get_stack_pointer\");this.writable_or_pagefault=b(\"writable_or_pagefault_js\");this.safe_write32=b(\"safe_write32_js\");this.safe_read32s=b(\"safe_read32s_js\");this.safe_write16=b(\"safe_write16_js\");this.safe_read16=b(\"safe_read16_js\");this.clear_tlb=b(\"clear_tlb\");this.full_clear_tlb=b(\"full_clear_tlb\");\nthis.set_tsc=b(\"set_tsc\");this.store_current_tsc=b(\"store_current_tsc\");this.fpu_get_sti_f64=b(\"fpu_get_sti_f64\");DEBUG&&(this.jit_force_generate_unsafe=a(\"jit_force_generate_unsafe\"));this.jit_clear_cache=b(\"jit_clear_cache_js\");this.jit_dirty_cache=b(\"jit_dirty_cache\");this.codegen_finalize_finished=b(\"codegen_finalize_finished\");this.allocate_memory=b(\"allocate_memory\");this.zero_memory=b(\"zero_memory\");this.zstd_create_ctx=b(\"zstd_create_ctx\");this.zstd_get_src_ptr=b(\"zstd_get_src_ptr\");this.zstd_free_ctx=\nb(\"zstd_free_ctx\");this.zstd_read=b(\"zstd_read\");this.zstd_read_free=b(\"zstd_read_free\")};CPU.prototype.jit_force_generate=function(a){this.jit_force_generate_unsafe?this.jit_force_generate_unsafe(a):dbg_assert(!1,\"Not supported in this wasm build: jit_force_generate_unsafe\")};CPU.prototype.jit_clear_func=function(a){dbg_assert(0<=a&&a<WASM_TABLE_SIZE);this.wm.wasm_table.set(a+WASM_TABLE_OFFSET,null)};\nCPU.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;b<WASM_TABLE_SIZE;b++)a.set(WASM_TABLE_OFFSET+b,null)};\nCPU.prototype.get_state=function(){var a=[];a[0]=this.memory_size[0];a[1]=this.segment_is_null;a[2]=this.segment_offsets;a[3]=this.segment_limits;a[4]=this.protected_mode[0];a[5]=this.idtr_offset[0];a[6]=this.idtr_size[0];a[7]=this.gdtr_offset[0];a[8]=this.gdtr_size[0];a[9]=this.page_fault[0];a[10]=this.cr;a[11]=this.cpl[0];a[13]=this.is_32[0];a[16]=this.stack_size_32[0];a[17]=this.in_hlt[0];a[18]=this.last_virt_eip[0];a[19]=this.eip_phys[0];a[22]=this.sysenter_cs[0];a[23]=this.sysenter_eip[0];a[24]=\nthis.sysenter_esp[0];a[25]=this.prefixes[0];a[26]=this.flags[0];a[27]=this.flags_changed[0];a[28]=this.last_op1[0];a[30]=this.last_op_size[0];a[37]=this.instruction_pointer[0];a[38]=this.previous_ip[0];a[39]=this.reg32;a[40]=this.sreg;a[41]=this.dreg;this.store_current_tsc();a[43]=this.current_tsc;a[45]=this.devices.virtio_9p;a[46]=this.devices.apic;a[47]=this.devices.rtc;a[48]=this.devices.pci;a[49]=this.devices.dma;a[50]=this.devices.acpi;a[51]=this.devices.hpet;a[52]=this.devices.vga;a[53]=this.devices.ps2;\na[54]=this.devices.uart0;a[55]=this.devices.fdc;a[56]=this.devices.cdrom;a[57]=this.devices.hda;a[58]=this.devices.pit;a[59]=this.devices.net;a[60]=this.devices.pic;a[61]=this.devices.sb16;a[62]=this.fw_value;a[63]=this.devices.ioapic;a[64]=this.tss_size_32[0];a[66]=this.reg_xmm32s;a[67]=this.fpu_st;a[68]=this.fpu_stack_empty[0];a[69]=this.fpu_stack_ptr[0];a[70]=this.fpu_control_word[0];a[71]=this.fpu_ip[0];a[72]=this.fpu_ip_selector[0];a[73]=this.fpu_dp[0];a[74]=this.fpu_dp_selector[0];a[75]=this.fpu_opcode[0];\nconst {packed_memory:b,bitmap:c}=this.pack_memory();a[77]=b;a[78]=new Uint8Array(c.get_buffer());a[79]=this.devices.uart1;a[80]=this.devices.uart2;a[81]=this.devices.uart3;return a};\nCPU.prototype.set_state=function(a){this.memory_size[0]=a[0];this.mem8.length!==this.memory_size[0]&&console.warn(\"Note: Memory size mismatch. we=\"+this.mem8.length+\" state=\"+this.memory_size[0]);this.segment_is_null.set(a[1]);this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=a[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=\na[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=a[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);this.sreg.set(a[40]);this.dreg.set(a[41]);this.set_tsc(a[43][0],a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);this.devices.apic&&\nthis.devices.apic.set_state(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.hpet&&this.devices.hpet.set_state(a[51]);this.devices.vga&&this.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);\nthis.devices.cdrom&&this.devices.cdrom.set_state(a[56]);this.devices.hda&&this.devices.hda.set_state(a[57]);this.devices.pit&&this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);this.devices.pic&&this.devices.pic.set_state(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&this.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart1.set_state(a[80]);this.devices.uart3&&this.devices.uart1.set_state(a[81]);this.fw_value=a[62];\nthis.devices.ioapic&&this.devices.ioapic.set_state(a[63]);this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);this.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];const b=new v86util.Bitmap(a[78].buffer);this.unpack_memory(b,a[77]);this.full_clear_tlb();this.jit_clear_cache()};\nCPU.prototype.pack_memory=function(){dbg_assert(0===(this.mem8.length&4095));var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++){var d=c<<12;d=this.mem32s.subarray(d>>2,d+4096>>2);let e=!0;for(let f=0;f<d.length;f++)if(0!==d[f]){e=!1;break}e||b.push(c)}a=new v86util.Bitmap(a);c=new Uint8Array(b.length<<12);for(let [e,f]of b.entries())a.set(f,1),b=f<<12,b=this.mem8.subarray(b,b+4096),c.set(b,e<<12);return{bitmap:a,packed_memory:c}};\nCPU.prototype.unpack_memory=function(a,b){this.zero_memory(this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let f=0;f<c;f++)if(a.get(f)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,f<<12);d++}};CPU.prototype.main_run=function(){if(this.in_hlt[0]){var a=this.hlt_loop();if(this.in_hlt[0])return a}this.do_run();return 0};CPU.prototype.reboot_internal=function(){this.reset();this.load_bios()};\nCPU.prototype.reset=function(){this.segment_is_null.fill(0);this.segment_limits.fill(0);this.segment_offsets.fill(0);this.reg32.fill(0);this.sreg.fill(0);this.dreg.fill(0);this.fpu_st.fill(0);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr[0]=0;this.fpu_control_word[0]=895;this.fpu_status_word[0]=0;this.fpu_ip[0]=0;this.fpu_ip_selector[0]=0;this.fpu_opcode[0]=0;this.fpu_dp[0]=0;this.fpu_dp_selector[0]=0;this.reg_xmm32s.fill(0);this.mxcsr[0]=8064;this.full_clear_tlb();this.protected_mode[0]=0;this.idtr_size[0]=\n0;this.idtr_offset[0]=0;this.gdtr_size[0]=0;this.gdtr_offset[0]=0;this.page_fault[0]=0;this.cr[0]=1610612752;this.cr[2]=0;this.cr[3]=0;this.cr[4]=0;this.dreg[6]=-61456;this.dreg[7]=1024;this.cpl[0]=0;this.is_32[0]=0;this.stack_size_32[0]=0;this.prefixes[0]=0;this.last_virt_eip[0]=-1;this.instruction_counter[0]=0;this.previous_ip[0]=0;this.in_hlt[0]=0;this.sysenter_cs[0]=0;this.sysenter_esp[0]=0;this.sysenter_eip[0]=0;this.flags[0]=flags_default;this.flags_changed.fill(0);this.last_result.fill(0);\nthis.last_op1.fill(0);this.last_op_size.fill(0);this.set_tsc(0,0);this.instruction_pointer[0]=1048560;this.switch_cs_real_mode(61440);this.switch_seg(reg_ss,48)||dbg_assert(!1);this.reg32[reg_esp]=256;this.devices.virtio&&this.devices.virtio.reset();this.fw_value=[];this.jit_clear_cache()};CPU.prototype.reset_memory=function(){this.mem8.fill(0)};\nCPU.prototype.create_memory=function(a){1048576>a?a=1048576:0>(a|0)&&(a=Math.pow(2,31)-MMAP_BLOCK_SIZE);a=(a-1|MMAP_BLOCK_SIZE-1)+1|0;dbg_assert(0<(a|0));dbg_assert(0===(a&MMAP_BLOCK_SIZE-1));console.assert(0===this.memory_size[0],\"Expected uninitialised memory\");this.memory_size[0]=a;const b=this.allocate_memory(a);this.mem8=v86util.view(Uint8Array,this.wasm_memory,b,a);this.mem32s=v86util.view(Uint32Array,this.wasm_memory,b,a>>2)};goog.exportProperty(CPU.prototype,\"create_memory\",CPU.prototype.create_memory);\nCPU.prototype.init=function(a,b){\"number\"===typeof a.log_level&&(LOG_LEVEL=a.log_level);this.create_memory(\"number\"===typeof a.memory_size?a.memory_size:67108864);this.acpi_enabled[0]=+a.acpi;this.reset();var c=new IO(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const {option_rom:e}=load_kernel(this.mem8,a.bzimage,a.initrd,a.cmdline||\"\");e&&this.option_roms.push(e)}c.register_read(179,this,function(){dbg_log(\"port 0xB3 read\");return 0});var d=0;c.register_read(146,\nthis,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){if(this.fw_pointer<this.fw_value.length)return this.fw_value[this.fw_pointer++];dbg_assert(!1,\"config port: Read past value\");return 0});c.register_write(1296,this,void 0,function(e){function f(l){return new Uint8Array((new Int32Array([l])).buffer)}function k(l){return l>>8|l<<8&65280}function g(l){return l<<24|l<<8&16711680|l>>8&65280|l>>>24}dbg_log(\"bios config port, index=\"+h(e));this.fw_pointer=\n0;if(e===FW_CFG_SIGNATURE)this.fw_value=f(FW_CFG_SIGNATURE_QEMU);else if(e===FW_CFG_ID)this.fw_value=f(0);else if(e===FW_CFG_RAM_SIZE)this.fw_value=f(this.memory_size[0]);else if(e===FW_CFG_NB_CPUS)this.fw_value=f(1);else if(e===FW_CFG_MAX_CPUS)this.fw_value=f(1);else if(e===FW_CFG_NUMA)this.fw_value=new Uint8Array(16);else if(e===FW_CFG_FILE_DIR){e=new Int32Array(4+64*this.option_roms.length);const l=new Uint8Array(e.buffer);e[0]=g(this.option_roms.length);for(let m=0;m<this.option_roms.length;m++){const {name:n,\ndata:r}=this.option_roms[m],v=4+64*m;dbg_assert(65536>FW_CFG_FILE_START+m);e[v+0>>2]=g(r.length);e[v+4>>2]=k(FW_CFG_FILE_START+m);dbg_assert(56>n.length);for(let q=0;q<n.length;q++)l[v+8+q]=n.charCodeAt(q)}this.fw_value=l}else e>=FW_CFG_CUSTOM_START&&e<FW_CFG_FILE_START?this.fw_value=f(0):e>=FW_CFG_FILE_START&&e-FW_CFG_FILE_START<this.option_roms.length?this.fw_value=this.option_roms[e-FW_CFG_FILE_START].data:(dbg_log(\"Warning: Unimplemented fw index: \"+h(e)),this.fw_value=f(0))});DEBUG&&c.register_write(128,\nthis,function(e){});this.devices={};a.load_devices&&(this.devices.pic=new PIC(this),this.devices.pci=new PCI(this),this.acpi_enabled[0]&&(this.devices.ioapic=new IOAPIC(this),this.devices.apic=new APIC(this),this.devices.acpi=new ACPI(this)),this.devices.rtc=new RTC(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new DMA(this),ENABLE_HPET&&(this.devices.hpet=new HPET(this)),this.devices.vga=new VGAScreen(this,b,a.vga_memory_size||8388608),this.devices.ps2=new PS2(this,b),this.devices.uart0=\nnew UART(this,1016,b),a.uart1&&(this.devices.uart1=new UART(this,760,b)),a.uart2&&(this.devices.uart2=new UART(this,1E3,b)),a.uart3&&(this.devices.uart3=new UART(this,1E3,b)),this.devices.fdc=new FloppyController(this,a.fda,a.fdb),c=0,a.hda&&(this.devices.hda=new IDEDevice(this,a.hda,a.hdb,!1,c++,b)),a.cdrom&&(this.devices.cdrom=new IDEDevice(this,a.cdrom,void 0,!0,c++,b)),this.devices.pit=new PIT(this,b),a.enable_ne2k&&(this.devices.net=new Ne2k(this,b,a.preserve_mac_from_state_image)),a.fs9p&&(this.devices.virtio_9p=\nnew Virtio9p(a.fs9p,this,b)),this.devices.sb16=new SB16(this,b));a.multiboot&&this.load_multiboot(a.multiboot);DEBUG&&this.debug.init()};\nCPU.prototype.load_multiboot=function(a){dbg_log(\"Trying multiboot from buffer of size \"+a.byteLength,LOG_CPU);if(8192>a.byteLength){var b=new Int32Array(2048);(new Uint8Array(b.buffer)).set(new Uint8Array(a))}else b=new Int32Array(a,0,2048);for(var c=0;8192>c;c+=4)if(464367618===b[c>>2]){var d=b[c+4>>2];if(464367618+d+b[c+8>>2]|0)dbg_log(\"Multiboot checksum check failed\",LOG_CPU);else{dbg_log(\"Multiboot magic found, flags: \"+h(d>>>0,8),LOG_CPU);dbg_assert(0===(d&-65537),\"TODO\");this.reg32[reg_eax]=\n732803074;this.reg32[reg_ebx]=31744;this.write32(31744,0);this.cr[0]=1;this.protected_mode[0]=1;this.flags[0]=flags_default;this.update_cs_size(!0);this.stack_size_32[0]=1;for(var e=0;6>e;e++)this.segment_is_null[e]=0,this.segment_offsets[e]=0,this.segment_limits[e]=4294967295,this.sreg[e]=45058;if(d&65536){dbg_log(\"Multiboot specifies its own address table\",LOG_CPU);e=b[c+12>>2];var f=b[c+16>>2];d=b[c+20>>2];var k=b[c+24>>2];b=b[c+28>>2];dbg_log(\"header=\"+h(e,8)+\" load=\"+h(f,8)+\" load_end=\"+h(d,\n8)+\" bss_end=\"+h(k,8)+\" entry=\"+h(b,8));dbg_assert(f<=e);c-=e-f;0===d?d=void 0:(dbg_assert(d>=f),d-=f);a=new Uint8Array(a,c,d);this.write_blob(a,f);this.instruction_pointer[0]=this.get_seg_cs()+b|0}else if(1179403647===b[0]){dbg_log(\"Multiboot image is in elf format\",LOG_CPU);c=read_elf(a);this.instruction_pointer[0]=this.get_seg_cs()+c.header.entry|0;for(f of c.program_headers)0!==f.type&&(1===f.type?(dbg_assert(f.paddr===f.vaddr),dbg_assert(f.filesz<=f.memsz),f.paddr+f.memsz<this.memory_size[0]?\nf.filesz&&(c=new Uint8Array(a,f.offset,f.filesz),this.write_blob(c,f.paddr)):dbg_log(\"Warning: Skipped loading section, paddr=\"+h(f.paddr)+\" memsz=\"+f.memsz,LOG_CPU)):2!==f.type&&3!==f.type&&4!==f.type&&6!==f.type&&1685382480!==f.type&&1685382481!==f.type&&dbg_assert(!1,\"unimplemented elf section type\"))}else dbg_assert(!1,\"Not a bootable multiboot format\");this.io.register_write_consecutive(244,this,function(g){console.log(\"Test exited with code \"+h(g,2));throw\"HALT\";},function(){},function(){},\nfunction(){});for(let g=14;15>=g;g++)this.io.register_write(8192+g,this,function(l){dbg_log(\"kvm-unit-test: Set irq \"+h(g)+\" to \"+h(l,2));l?this.device_raise_irq(g):this.device_lower_irq(g)});dbg_log(\"Starting multiboot kernel at:\",LOG_CPU);this.debug.dump_state();this.debug.dump_regs();break}}};\nCPU.prototype.fill_cmos=function(a,b){var c=b.boot_order||531;a.cmos_write(CMOS_BIOS_BOOTFLAG1,1|c>>4&240);a.cmos_write(CMOS_BIOS_BOOTFLAG2,c&255);a.cmos_write(CMOS_MEM_BASE_LOW,128);a.cmos_write(CMOS_MEM_BASE_HIGH,2);c=0;1048576<=this.memory_size[0]&&(c=this.memory_size[0]-1048576>>10,c=Math.min(c,65535));a.cmos_write(CMOS_MEM_OLD_EXT_LOW,c&255);a.cmos_write(CMOS_MEM_OLD_EXT_HIGH,c>>8&255);a.cmos_write(CMOS_MEM_EXTMEM_LOW,c&255);a.cmos_write(CMOS_MEM_EXTMEM_HIGH,c>>8&255);c=0;16777216<=this.memory_size[0]&&\n(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(CMOS_MEM_EXTMEM2_LOW,c&255);a.cmos_write(CMOS_MEM_EXTMEM2_HIGH,c>>8&255);a.cmos_write(CMOS_MEM_HIGHMEM_LOW,0);a.cmos_write(CMOS_MEM_HIGHMEM_MID,0);a.cmos_write(CMOS_MEM_HIGHMEM_HIGH,0);a.cmos_write(CMOS_EQUIPMENT_INFO,47);a.cmos_write(CMOS_BIOS_SMP_COUNT,0);b.fastboot&&a.cmos_write(63,1)};\nCPU.prototype.load_bios=function(){var a=this.bios.main,b=this.bios.vga;if(a){var c=new Uint8Array(a);this.write_blob(c,1048576-a.byteLength);if(b){var d=new Uint8Array(b);this.write_blob(d,786432);this.io.mmap_register(4272947200,1048576,function(e){e=e-4272947200|0;return e<d.length?d[e]:0},function(e,f){dbg_assert(!1,\"Unexpected write to VGA rom\")})}else dbg_log(\"Warning: No VGA BIOS\");this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,f){this.mem8[e&\n1048575]=f}.bind(this))}else dbg_log(\"Warning: No BIOS\")};CPU.prototype.do_run=function(){for(var a=v86.microtick(),b=a;b-a<TIME_PER_FRAME;){this.run_hardware_timers(b);this.handle_irqs();this.do_many_cycles();if(this.in_hlt[0])break;b=v86.microtick()}};let do_many_cycles_count=0,do_many_cycles_total=0;CPU.prototype.do_many_cycles=function(){if(DEBUG)var a=v86.microtick();this.do_many_cycles_native();DEBUG&&(do_many_cycles_total+=v86.microtick()-a,do_many_cycles_count++)};CPU.prototype.cycle=function(){this.cycle_internal()};\ngoog.exportProperty(CPU.prototype,\"cycle\",CPU.prototype.cycle);var seen_code={},seen_code_uncompiled={};\nCPU.prototype.codegen_finalize=function(a,b,c,d,e){d>>>=0;e>>>=0;dbg_assert(0<=a&&a<WASM_TABLE_SIZE);const f=new Uint8Array(this.wasm_memory.buffer,d,e);DEBUG&&(DUMP_GENERATED_WASM&&!seen_code[b]&&this.debug.dump_wasm(f),seen_code[b]=(seen_code[b]||0)+1,this.test_hook_did_generate_wasm&&this.test_hook_did_generate_wasm(f));d=WebAssembly.instantiate(f,{e:this.jit_imports}).then(k=>{k=k.instance.exports.f;this.codegen_finalize_finished(a,b,c);this.wm.wasm_table.set(a+WASM_TABLE_OFFSET,k);this.test_hook_did_finalize_wasm&&\nthis.test_hook_did_finalize_wasm(f)});DEBUG&&d.catch(k=>{console.log(k);debugger;throw k;})};\nCPU.prototype.log_uncompiled_code=function(a,b){if(DEBUG&&DUMP_UNCOMPILED_ASSEMBLY&&100>(seen_code_uncompiled[a]||0)){seen_code_uncompiled[a]=(seen_code_uncompiled[a]||0)+1;b+=8;(a^b)&-4096&&(dbg_log(\"truncated disassembly start=\"+h(a>>>0)+\" end=\"+h(b>>>0)),b=(a|4095)+1);b<a&&(b=a);dbg_assert(b>=a);const c=new Uint8Array(b-a);for(let d=a;d<b;d++)c[d-a]=this.read8(d);dbg_log(\"Uncompiled code:\");this.debug.dump_code(this.is_32[0]?1:0,c,a)}};\nCPU.prototype.dump_function_code=function(a,b){if(DEBUG&&DUMP_GENERATED_WASM){var c=new Int32Array(this.wasm_memory.buffer);dbg_assert(0===(a&3));var d=this.is_32[0];for(let f=0;f<b;f++){var e=(a>>2)+7*f;const k=c[e+0],g=c[e+1];e=c[e+6]&65280;const l=new Uint8Array(g-k);for(let m=k;m<g;m++)l[m-k]=this.read8(this.translate_address_system_read(m));dbg_log(\"---\"+(e?\" entry\":\"\"));this.debug.dump_code(d?1:0,l,k)}}};CPU.prototype.dbg_log=function(){dbg_log(\"from wasm: \"+[].join.call(arguments))};\nCPU.prototype.dbg_assert=function(a){dbg_assert(a)};CPU.prototype.hlt_loop=function(){return this.get_eflags_no_arith()&flag_interrupt?(this.run_hardware_timers(v86.microtick()),this.handle_irqs(),0):100};\nCPU.prototype.run_hardware_timers=function(a){ENABLE_HPET?(this.devices.pit.timer(a,this.devices.hpet.legacy_mode),this.devices.rtc.timer(a,this.devices.hpet.legacy_mode),this.devices.hpet.timer(a)):(this.devices.pit.timer(a,!1),this.devices.rtc.timer(a,!1));this.acpi_enabled[0]&&(this.devices.acpi.timer(a),this.devices.apic.timer(a))};CPU.prototype.cpl_changed=function(){this.last_virt_eip[0]=-1};\nCPU.prototype.do_task_switch=function(a,b,c){dbg_assert(this.tss_size_32[0],\"TODO\");dbg_log(\"do_task_switch sel=\"+h(a),LOG_CPU);var d=this.lookup_segment_selector(a);dbg_assert(3===(d.type|2)||11===(d.type|2));var e=3>=d.type,f=2===(d.type&2);if(!d.is_valid||d.is_null||!d.from_gdt)throw this.debug.unimpl(\"#GP handler\");if(11===(d.access&31))throw this.debug.unimpl(\"#GP handler\");if(!d.is_present)throw this.debug.unimpl(\"#NP handler\");if(103>d.effective_limit)throw this.debug.unimpl(\"#NP handler\");\nvar k=this.segment_offsets[reg_tr],g=this.get_eflags();f&&(g&=~flag_nt);if(this.writable_or_pagefault(k,102)){this.safe_write32(k+TSR_EIP,this.get_real_eip());this.safe_write32(k+TSR_EFLAGS,g);this.safe_write32(k+TSR_EAX,this.reg32[reg_eax]);this.safe_write32(k+TSR_ECX,this.reg32[reg_ecx]);this.safe_write32(k+TSR_EDX,this.reg32[reg_edx]);this.safe_write32(k+TSR_EBX,this.reg32[reg_ebx]);this.safe_write32(k+TSR_ESP,this.reg32[reg_esp]);this.safe_write32(k+TSR_EBP,this.reg32[reg_ebp]);this.safe_write32(k+\nTSR_ESI,this.reg32[reg_esi]);this.safe_write32(k+TSR_EDI,this.reg32[reg_edi]);this.safe_write32(k+TSR_ES,this.sreg[reg_es]);this.safe_write32(k+TSR_CS,this.sreg[reg_cs]);this.safe_write32(k+TSR_SS,this.sreg[reg_ss]);this.safe_write32(k+TSR_DS,this.sreg[reg_ds]);this.safe_write32(k+TSR_FS,this.sreg[reg_fs]);this.safe_write32(k+TSR_GS,this.sreg[reg_gs]);this.write8(d.table_offset+5|0,this.read8(d.table_offset+5|0)|2);f=d.base;dbg_assert(!e,\"unimplemented\");this.safe_write16(f+TSR_BACKLINK,this.sreg[reg_tr]);\ng=this.safe_read32s(f+TSR_CR3);this.flags[0]&=~flag_vm;var l=this.safe_read32s(f+TSR_EIP),m=this.safe_read16(f+TSR_CS),n=this.lookup_segment_selector(m);if(n.is_null)throw dbg_log(\"null cs\",LOG_CPU),this.debug.unimpl(\"#TS handler\");if(!n.is_valid)throw dbg_log(\"invalid cs: \"+h(a),LOG_CPU),this.debug.unimpl(\"#TS handler\");if(n.is_system)throw this.debug.unimpl(\"#TS handler\");if(!n.is_executable)throw this.debug.unimpl(\"#TS handler\");if(n.dc_bit&&n.dpl>n.rpl)throw dbg_log(\"cs conforming and dpl > rpl: \"+\nh(a),LOG_CPU),this.debug.unimpl(\"#TS handler\");if(!n.dc_bit&&n.dpl!==n.rpl)throw dbg_log(\"cs non-conforming and dpl != rpl: \"+h(a),LOG_CPU),this.debug.unimpl(\"#TS handler\");if(!n.is_present)throw dbg_log(\"#NP for loading not-present in cs sel=\"+h(a,4),LOG_CPU),this.debug.unimpl(\"#TS handler\");this.segment_is_null[reg_cs]=0;this.segment_limits[reg_cs]=n.effective_limit;this.segment_offsets[reg_cs]=n.base;this.sreg[reg_cs]=m;this.cpl=n.dpl;this.cpl_changed();dbg_assert((this.sreg[reg_cs]&3)===this.cpl);\ndbg_assert(l>>>0<=n.effective_limit,\"todo: #gp\");this.update_cs_size(n.size);m=this.safe_read32s(f+TSR_EFLAGS);this.safe_write32(k+TSR_BACKLINK,a);m|=flag_nt;if(m&flag_vm)throw this.debug.unimpl(\"task switch to VM mode\");this.update_eflags(m);this.flags[0]|=flag_nt;k=this.safe_read16(f+TSR_LDT);this.load_ldt(k);this.reg32[reg_eax]=this.safe_read32s(f+TSR_EAX);this.reg32[reg_ecx]=this.safe_read32s(f+TSR_ECX);this.reg32[reg_edx]=this.safe_read32s(f+TSR_EDX);this.reg32[reg_ebx]=this.safe_read32s(f+TSR_EBX);\nthis.reg32[reg_esp]=this.safe_read32s(f+TSR_ESP);this.reg32[reg_ebp]=this.safe_read32s(f+TSR_EBP);this.reg32[reg_esi]=this.safe_read32s(f+TSR_ESI);this.reg32[reg_edi]=this.safe_read32s(f+TSR_EDI);this.switch_seg(reg_es,this.safe_read16(f+TSR_ES))&&this.switch_seg(reg_ss,this.safe_read16(f+TSR_SS))&&this.switch_seg(reg_ds,this.safe_read16(f+TSR_DS))&&this.switch_seg(reg_fs,this.safe_read16(f+TSR_FS))&&this.switch_seg(reg_gs,this.safe_read16(f+TSR_GS))||dbg_assert(!1);this.instruction_pointer[0]=this.get_seg_cs()+\nl|0;this.segment_offsets[reg_tr]=d.base;this.segment_limits[reg_tr]=d.effective_limit;this.sreg[reg_tr]=a;this.cr[3]=g;dbg_assert(0===(this.cr[3]&4095));this.clear_tlb();this.cr[0]|=CR0_TS;!1!==b&&(e?this.push16(c&65535):this.push32(c))}};CPU.prototype.hlt_op=function(){this.cpl[0]?(dbg_log(\"#gp hlt with cpl != 0\",LOG_CPU),this.trigger_gp(0)):(0===(this.get_eflags_no_arith()&flag_interrupt)&&this.bus.send(\"cpu-event-halt\"),this.in_hlt[0]=1,this.hlt_loop())};\nCPU.prototype.handle_irqs=function(){this.get_eflags_no_arith()&flag_interrupt&&this.pic_acknowledge()};CPU.prototype.pic_acknowledge=function(){dbg_assert(this.get_eflags_no_arith()&flag_interrupt);this.devices.pic&&this.devices.pic.acknowledge_irq();this.devices.apic&&this.devices.apic.acknowledge_irq()};CPU.prototype.device_raise_irq=function(a){dbg_assert(1===arguments.length);this.devices.pic&&this.devices.pic.set_irq(a);this.devices.ioapic&&this.devices.ioapic.set_irq(a)};\nCPU.prototype.device_lower_irq=function(a){this.devices.pic&&this.devices.pic.clear_irq(a);this.devices.ioapic&&this.devices.ioapic.clear_irq(a)};\nCPU.prototype.cpuid=function(){var a=0,b=0,c=0,d=0;const e=this.reg32[reg_eax];switch(e){case 0:a=22;d=1970169159;c=1231384169;b=1818588270;break;case 1:a=3939;d=67584;b=1082130432;VMWARE_HYPERVISOR_PORT&&(b|=-2147483648);c=125872441;this.acpi_enabled[0]&&(c|=512);break;case 2:a=1717260289;b=d=0;c=8024064;break;case 4:switch(this.reg32[reg_ecx]){case 0:a=289;d=29360191;b=63;c=1;break;case 1:a=290;d=29360191;b=63;c=1;break;case 2:a=323,d=96469055,b=4095,c=1}break;case 5:d=a=64;b=3;c=1319200;break;\ncase 7:a=0;d=512;c=b=0;break;case -2147483648:a=5;break;case 1073741824:VMWARE_HYPERVISOR_PORT&&(d=1635208534,b=1297507698,c=1701994871);break;case 21:d=a=1;b=1E3*TSC_RATE;dbg_assert(b>>>0===b);break;case 22:a=Math.floor(TSC_RATE/1E3);d=Math.floor(TSC_RATE/1E3);b=10;dbg_assert(65536>a);dbg_assert(65536>d);dbg_assert(65536>b);break;default:dbg_log(\"cpuid: unimplemented eax: \"+h(this.reg32[reg_eax]>>>0),LOG_CPU)}4===e?dbg_log(\"cpuid: eax=\"+h(this.reg32[reg_eax]>>>0,8)+\" cl=\"+h(this.reg32[reg_ecx]&255,\n2),LOG_CPU):0!==e&&2!==e&&-2147483648!==e&&dbg_log(\"cpuid: eax=\"+h(this.reg32[reg_eax]>>>0,8),LOG_CPU);this.reg32[reg_eax]=a;this.reg32[reg_ecx]=b;this.reg32[reg_edx]=c;this.reg32[reg_ebx]=d};CPU.prototype.update_cs_size=function(a){a=!!a;!!this.is_32[0]!==a&&(this.is_32[0]=+a)};\nCPU.prototype.lookup_segment_selector=function(a){dbg_assert(\"number\"===typeof a&&0<=a&&65536>a);var b=0===(a&4),c=a&-8;var d={rpl:a&3,from_gdt:b,is_null:!1,is_valid:!0,base:0,access:0,flags:0,type:0,dpl:0,is_system:!1,is_present:!1,is_executable:!1,rw_bit:!1,dc_bit:!1,size:!1,is_conforming_executable:!1,effective_limit:0,is_writable:!1,is_readable:!1,table_offset:0,raw0:0,raw1:0};if(b){var e=this.gdtr_offset[0];var f=this.gdtr_size[0]}else e=this.segment_offsets[reg_ldtr],f=this.segment_limits[reg_ldtr];\nif(b&&0===c)return d.is_null=!0,d;if((a|7)>f)return dbg_log(\"Selector \"+h(a,4)+\" is outside of the \"+(b?\"g\":\"l\")+\"dt limits\",LOG_CPU),d.is_valid=!1,d;e=e+c|0;this.cr[0]&CR0_PG&&(e=this.translate_address_system_read(e));d.table_offset=e;d.base=this.read16(e+2|0)|this.read8(e+4|0)<<16|this.read8(e+7|0)<<24;d.access=this.read8(e+5|0);d.flags=this.read8(e+6|0)>>4;d.raw0=this.read32s(e|0);d.raw1=this.read32s(e+4|0);d.type=d.access&15;d.dpl=d.access>>5&3;d.is_system=0===(d.access&16);d.is_present=128===\n(d.access&128);d.is_executable=8===(d.access&8);d.rw_bit=2===(d.access&2);d.dc_bit=4===(d.access&4);d.is_conforming_executable=d.dc_bit&&d.is_executable;d.size=4===(d.flags&4);a=this.read16(e)|(this.read8(e+6|0)&15)<<16;d.effective_limit=d.flags&8?(a<<12|4095)>>>0:a;d.is_writable=d.rw_bit&&!d.is_executable;d.is_readable=d.rw_bit||!d.is_executable;return d};\nCPU.prototype.switch_seg=function(a,b){dbg_assert(0<=a&&5>=a);dbg_assert(\"number\"===typeof b&&65536>b&&0<=b);if(!this.protected_mode[0]||this.vm86_mode())return this.sreg[a]=b,this.segment_is_null[a]=0,this.segment_offsets[a]=b<<4,a===reg_ss&&(this.stack_size_32[0]=0),!0;var c=this.lookup_segment_selector(b);if(a===reg_ss){if(c.is_null)return dbg_log(\"#GP for loading 0 in SS sel=\"+h(b,4),LOG_CPU),dbg_trace(LOG_CPU),this.trigger_gp(0),!1;if(!c.is_valid||c.is_system||c.rpl!==this.cpl[0]||!c.is_writable||\nc.dpl!==this.cpl[0])return dbg_log(\"#GP for loading invalid in SS sel=\"+h(b,4),LOG_CPU),dbg_trace(LOG_CPU),this.trigger_gp(b&-4),!1;if(!c.is_present)return dbg_log(\"#SS for loading non-present in SS sel=\"+h(b,4),LOG_CPU),dbg_trace(LOG_CPU),this.trigger_ss(b&-4),!1;this.stack_size_32[0]=c.size}else if(a===reg_cs)dbg_assert(!1);else{if(c.is_null)return this.sreg[a]=b,this.segment_is_null[a]=1,!0;if(!c.is_valid||c.is_system||!c.is_readable||!c.is_conforming_executable&&(c.rpl>c.dpl||this.cpl[0]>c.dpl))return dbg_log(\"#GP for loading invalid in seg \"+\na+\" sel=\"+h(b,4),LOG_CPU),this.debug.dump_state(),this.debug.dump_regs(),dbg_trace(LOG_CPU),this.trigger_gp(b&-4),!1;if(!c.is_present)return dbg_log(\"#NP for loading not-present in seg \"+a+\" sel=\"+h(b,4),LOG_CPU),dbg_trace(LOG_CPU),this.trigger_np(b&-4),!1}this.segment_is_null[a]=0;this.segment_limits[a]=c.effective_limit;this.segment_offsets[a]=c.base;this.sreg[a]=b;return!0};\nCPU.prototype.load_tr=function(a){var b=this.lookup_segment_selector(a);dbg_assert(b.is_valid);if(!b.from_gdt)throw this.debug.unimpl(\"TR can only be loaded from GDT\");if(b.is_null)throw dbg_log(\"#GP(0) | tried to load null selector (ltr)\"),this.debug.unimpl(\"#GP handler\");if(!b.is_system)throw dbg_log(\"#GP | ltr: not a system entry\"),this.debug.unimpl(\"#GP handler (happens when running kvm-unit-test without ACPI)\");if(9!==b.type&&1!==b.type)throw dbg_log(\"#GP | ltr: invalid type (type = \"+h(b.type)+\n\")\"),this.debug.unimpl(\"#GP handler\");if(!b.is_present)throw dbg_log(\"#NT | present bit not set (ltr)\"),this.debug.unimpl(\"#NT handler\");this.tss_size_32[0]=9===b.type;this.segment_offsets[reg_tr]=b.base;this.segment_limits[reg_tr]=b.effective_limit;this.sreg[reg_tr]=a;this.write8(b.table_offset+5|0,this.read8(b.table_offset+5|0)|2)};\nCPU.prototype.load_ldt=function(a){var b=this.lookup_segment_selector(a);if(b.is_null)this.segment_offsets[reg_ldtr]=0,this.segment_limits[reg_ldtr]=0;else{dbg_assert(b.is_valid);if(!b.from_gdt)throw this.debug.unimpl(\"LDTR can only be loaded from GDT\");if(!b.is_present)throw dbg_log(\"lldt: present bit not set\"),this.debug.unimpl(\"#GP handler\");if(!b.is_system)throw dbg_log(\"lldt: not a system entry\"),this.debug.unimpl(\"#GP handler\");if(2!==b.type)throw dbg_log(\"lldt: invalid type (\"+b.type+\")\"),\nthis.debug.unimpl(\"#GP handler\");this.segment_offsets[reg_ldtr]=b.base;this.segment_limits[reg_ldtr]=b.effective_limit;this.sreg[reg_ldtr]=a}};\"undefined\"!==typeof window?window.CPU=CPU:\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?module.exports.CPU=CPU:\"function\"===typeof importScripts&&(self.CPU=CPU);CPU.prototype.debug_init=function(){function a(){DEBUG&&(g.running||g.cycle(),d(),Date.now(),g.running=!1,f())}function b(q){if(DEBUG){for(var p=g.protected_mode[0]?\"prot\":\"real\",u=g.get_eflags(),t=g.getiopl(),x=g.cpl[0],z=h(g.sreg[reg_cs],4)+\":\"+h(g.get_real_eip()>>>0,8),A=h(g.sreg[reg_ss],4)+\":\"+h(g.reg32[reg_es]>>>0,8),E=g.is_32[0]?\"32\":\"16\",B=g.flags[0]&flag_interrupt?1:0,I={[flag_carry]:\"c\",[flag_parity]:\"p\",[flag_adjust]:\"a\",[flag_zero]:\"z\",[flag_sign]:\"s\",[flag_trap]:\"t\",[flag_interrupt]:\"i\",\n[flag_direction]:\"d\",[flag_overflow]:\"o\"},J=\"\",G=0;16>G;G++)I[1<<G]&&(J=u&1<<G?J+I[1<<G]:J+\" \");return\"mode=\"+p+\"/\"+E+\" paging=\"+ +(0!==(g.cr[0]&CR0_PG))+\" iopl=\"+t+\" cpl=\"+x+\" if=\"+B+\" cs:eip=\"+z+\" cs_off=\"+h(g.get_seg_cs()>>>0,8)+\" flgs=\"+h(g.get_eflags()>>>0,6)+\" (\"+J+\") ss:esp=\"+A+\" ssize=\"+ +g.stack_size_32[0]+(q?\" in \"+q:\"\")}}function c(){for(var q={eax:reg_eax,ecx:reg_ecx,edx:reg_edx,ebx:reg_ebx,esp:reg_esp,ebp:reg_ebp,esi:reg_esi,edi:reg_edi},p=\"eax ecx edx ebx esp ebp esi edi\".split(\" \"),\nu=\"\",t=\"\",x=0;4>x;x++)u+=p[x]+\"=\"+h(g.reg32[q[p[x]]]>>>0,8)+\" \",t+=p[x+4]+\"=\"+h(g.reg32[q[p[x+4]]]>>>0,8)+\" \";u+=\"  ds=\"+h(g.sreg[reg_ds],4)+\" es=\"+h(g.sreg[reg_es],4)+\" fs=\"+h(g.sreg[reg_fs],4);t+=\"  gs=\"+h(g.sreg[reg_gs],4)+\" cs=\"+h(g.sreg[reg_cs],4)+\" ss=\"+h(g.sreg[reg_ss],4);return[u,t]}function d(){if(DEBUG){var q=c();dbg_log(q[0],LOG_CPU);dbg_log(q[1],LOG_CPU)}}function e(){if(DEBUG){l.step_mode=!0;var q,p=\"\";l.trace_all&&l.all_ops?q=l.all_ops:l.ops&&(q=l.ops.toArray());if(!q)return\"\";for(var u=\n0;u<q.length;u+=2){var t=q[u+1];p+=h(q[u],8)+\":        \"+v86util.pads(m[t]||\"unkown\",20)+h(t,2)+\"\\n\"}l.ops.clear();l.all_ops=[];return p}}function f(){DEBUG&&l.show(e())}function k(q,p){if(DEBUG){if(!(q&1))return!1;var u=128===(q&128);return{size:u,global:256===(q&256),accessed:32===(q&32),dirty:64===(q&64),cache_disable:16===(q&16),user:4===(q&4),read_write:2===(q&2),address:(u&&!p?q&4290772992:q&4294963200)>>>0}}}var g=this,l={};this.debug=l;l.step_mode=!1;l.ops=void 0;l.all_ops=[];l.trace_all=\n!1;l.show=function(q){if(\"undefined\"!==typeof document){var p=document.getElementById(\"log\");if(p){p.textContent+=q+\"\\n\";p.style.display=\"block\";p.scrollTop=1E9;return}}console.log(q)};l.init=function(){function q(u){10===u?(dbg_log(p,LOG_BIOS),p=\"\"):p+=String.fromCharCode(u)}if(DEBUG&&(l.ops=new CircularQueue(2E5),g.io)){var p=\"\";g.io.register_write(1026,this,q);g.io.register_write(1280,this,q)}};l.get_regs_short=c;l.dump_regs=d;l.dump_instructions=f;l.get_instructions=e;l.get_state=b;l.dump_state=\nfunction(q){DEBUG&&dbg_log(b(q),LOG_CPU)};l.dump_stack=function(q,p){if(DEBUG){var u=g.reg32[reg_esp];dbg_log(\"========= STACK ==========\");if(p>=q||void 0===p)q=5,p=-5;for(;q>p;q--){var t=\"    \";q||(t=\"=>  \");t+=h(q,2)+\" | \";dbg_log(t+h(u+4*q,8)+\" | \"+h(g.read32s(u+4*q)>>>0))}}};l.dump_page_directory=function(){if(DEBUG)for(var q=0;1024>q;q++){var p=g.read32s(g.cr[3]+4*q),u=k(p,!0);if(u)if(p=\"\",p+=u.size?\"S \":\"  \",p+=u.accessed?\"A \":\"  \",p+=u.cache_disable?\"Cd \":\"  \",p+=u.user?\"U \":\"  \",p+=u.read_write?\n\"Rw \":\"   \",u.size)dbg_log(\"=== \"+h(q<<22>>>0,8)+\" -> \"+h(u.address>>>0,8)+\" | \"+p);else{dbg_log(\"=== \"+h(q<<22>>>0,8)+\" | \"+p);for(var t=0;1024>t;t++){var x=u.address+4*t;p=g.read32s(x);var z=k(p,!1);z&&(p=\"\",p+=z.cache_disable?\"Cd \":\"   \",p+=z.user?\"U \":\"  \",p+=z.read_write?\"Rw \":\"   \",p+=z.global?\"G \":\"  \",p+=z.accessed?\"A \":\"  \",p+=z.dirty?\"Di \":\"   \",dbg_log(\"# \"+h((q<<22|t<<12)>>>0,8)+\" -> \"+h(z.address,8)+\" | \"+p+\"        (at \"+h(x,8)+\")\"))}}else dbg_log(\"Not present: \"+h(q<<22>>>0,8))}};l.dump_gdt_ldt=\nfunction(){function q(p,u){for(var t=0;t<u;t+=8,p+=8){var x=g.read16(p+2)|g.read8(p+4)<<16|g.read8(p+7)<<24,z=g.read16(p)|(g.read8(p+6)&15)<<16,A=g.read8(p+5),E=g.read8(p+6)>>4,B=\"\",I=A>>5&3;B=A&128?B+\" P \":B+\"NP \";A&16?(B=E&4?B+\"32b \":B+\"16b \",A&8?(B+=\"X \",A&4&&(B+=\"C \")):B+=\"R \",B+=\"RW \"):B+=\"sys: \"+h(A&15);E&8&&(z=z<<12|4095);dbg_log(h(t&-8,4)+\" \"+h(x>>>0,8)+\" (\"+h(z>>>0,8)+\" bytes) \"+B+\";  dpl = \"+I+\", a = \"+A.toString(2)+\", f = \"+E.toString(2))}}DEBUG&&(dbg_log(\"gdt: (len = \"+h(g.gdtr_size[0])+\n\")\"),q(g.translate_address_system_read(g.gdtr_offset[0]),g.gdtr_size[0]),dbg_log(\"\\nldt: (len = \"+h(g.segment_limits[reg_ldtr])+\")\"),q(g.translate_address_system_read(g.segment_offsets[reg_ldtr]),g.segment_limits[reg_ldtr]))};l.dump_idt=function(){if(DEBUG)for(var q=0;q<g.idtr_size[0];q+=8){var p=g.translate_address_system_read(g.idtr_offset[0]+q),u=g.read16(p)|g.read16(p+6)<<16,t=g.read16(p+2);p=g.read8(p+5);var x=p>>5&3;var z=5===(p&31)?\"task gate \":14===(p&31)?\"intr gate \":15===(p&31)?\"trap gate \":\n\"invalid   \";z=p&128?z+\" P\":z+\"NP\";dbg_log(h(q>>3,4)+\" \"+h(u>>>0,8)+\", \"+h(t,4)+\"; \"+z+\";  dpl = \"+x+\", t = \"+p.toString(2))}};l.get_memory_dump=function(q,p){if(DEBUG)return void 0===q?(q=0,p=g.memory_size[0]):void 0===p&&(p=q,q=0),g.mem8.slice(q,q+p).buffer};l.memory_hex_dump=function(q,p){if(DEBUG){p=p||64;for(var u,t,x=0;x<p>>4;x++){u=h(q+(x<<4),5)+\"   \";for(var z=0;16>z;z++)t=g.read8(q+(x<<4)+z),u+=h(t,2)+\" \";u+=\"  \";for(z=0;16>z;z++)t=g.read8(q+(x<<4)+z),u+=33>t||126<t?\".\":String.fromCharCode(t);\ndbg_log(u)}}};l.used_memory_dump=function(){if(DEBUG)for(var q=g.memory_size[0]/128/16|0,p,u=0;16>u;u++){p=h(128*u*q,8)+\" | \";for(var t=0;128>t;t++)p+=0<g.mem32s[(128*u+t)*q]?\"X\":\" \";dbg_log(p)}};l.step=a;l.run_until=function(){if(DEBUG){g.running=!1;var q=parseInt(prompt(\"input hex\",\"\"),16);if(q)for(;g.instruction_pointer[0]!=q;)a()}};l.unimpl=function(q){q=\"Unimplemented\"+(q?\": \"+q:\"\");l.show(q);DEBUG?console.trace():l.show(\"Execution stopped\");return q};var m=\"ADD ADD ADD ADD ADD ADD PUSH POP OR OR OR OR OR OR PUSH 0F: ADC ADC ADC ADC ADC ADC PUSH POP SBB SBB SBB SBB SBB SBB PUSH POP AND AND AND AND AND AND ES DAA SUB SUB SUB SUB SUB SUB CS DAS XOR XOR XOR XOR XOR XOR SS AAA CMP CMP CMP CMP CMP CMP DS AAS INC INC INC INC INC INC INC INC DEC DEC DEC DEC DEC DEC DEC DEC PUSH PUSH PUSH PUSH PUSH PUSH PUSH PUSH POP POP POP POP POP POP POP POP PUSHA POPA BOUND ARPL FS GS none none PUSH IMUL PUSH IMUL INS INS OUTS OUTS JO JNO JB JNB JZ JNZ JBE JNBE JS JNS JP JNP JL JNL JLE JNLE ADD ADD ADD ADD TEST TEST XCHG XCHG MOV MOV MOV MOV MOV LEA MOV POP NOP XCHG XCHG XCHG XCHG XCHG XCHG XCHG CBW CWD CALLF FWAIT PUSHF POPF SAHF LAHF MOV MOV MOV MOV MOVS MOVS CMPS CMPS TEST TEST STOS STOS LODS LODS SCAS SCAS MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV ROL ROL RETN RETN LES LDS MOV MOV ENTER LEAVE RETF RETF INT INT INTO IRET ROL ROL ROL ROL AAM AAD none XLAT FADD FLD FIADD FILD FADD FLD FIADD FILD LOOPNZ LOOPZ LOOP JCXZ IN IN OUT OUT CALL JMP JMPF JMP IN IN OUT OUT LOCK none REPNZ REPZ HLT CMC TEST TEST CLC STC CLI STI CLD STD INC INC\".split(\" \");\nl.logop=function(q,p){DEBUG&&l.step_mode&&(q>>>=0,l.trace_all&&l.all_ops?l.all_ops.push(q,p):l.ops&&(l.ops.add(q),l.ops.add(p)))};l.debug_interrupt=function(q){};let n,r;l.dump_code=function(q,p,u){if(!r){if(void 0===n&&(n=\"function\"===typeof require?require(\"./capstone-x86.min.js\"):window.cs,void 0===n)){dbg_log(\"Warning: Missing capstone library, disassembly not available\");return}r=[new n.Capstone(n.ARCH_X86,n.MODE_16),new n.Capstone(n.ARCH_X86,n.MODE_32)]}try{r[q].disasm(p,u).forEach(function(t){dbg_log(h(t.address>>>\n0)+\": \"+v86util.pads(t.bytes.map(x=>h(x,2).slice(-2)).join(\" \"),20)+\" \"+t.mnemonic+\" \"+t.op_str)}),dbg_log(\"\")}catch(t){dbg_log(\"Could not disassemble: \"+Array.from(p).map(x=>h(x,2)).join(\" \"))}};let v;l.dump_wasm=function(q){if(void 0===v&&(v=\"function\"===typeof require?require(\"./libwabt.js\"):new window.WabtModule,void 0===v)){dbg_log(\"Warning: Missing libwabt, wasm dump not available\");return}q=q.slice();try{var p=v.readWasm(q,{readDebugNames:!1});p.generateNames();p.applyNames();const x=p.toText({foldExprs:!0,\ninlineExport:!0});dbg_log(x)}catch(x){var u=new Blob([q]),t=document.createElement(\"a\");t.download=\"failed.wasm\";t.href=window.URL.createObjectURL(u);t.dataset.downloadurl=[\"application/octet-stream\",t.download,t.href].join(\":\");t.click();window.URL.revokeObjectURL(t.src);console.log(x.toString())}finally{p&&p.destroy()}}};const ELF_MAGIC=1179403647;\nlet types=DataView.prototype,U8={size:1,get:types.getUint8,set:types.setUint8},U16={size:2,get:types.getUint16,set:types.setUint16},U32={size:4,get:types.getUint32,set:types.setUint32},pad=function(a){return{size:a,get:b=>-1}},Header=create_struct([{magic:U32},{class:U8},{data:U8},{version0:U8},{osabi:U8},{abiversion:U8},{pad0:pad(7)},{type:U16},{machine:U16},{version1:U32},{entry:U32},{phoff:U32},{shoff:U32},{flags:U32},{ehsize:U16},{phentsize:U16},{phnum:U16},{shentsize:U16},{shnum:U16},{shstrndx:U16}]);\nconsole.assert(52===Header.reduce((a,b)=>a+b.size,0));let ProgramHeader=create_struct([{type:U32},{offset:U32},{vaddr:U32},{paddr:U32},{filesz:U32},{memsz:U32},{flags:U32},{align:U32}]);console.assert(32===ProgramHeader.reduce((a,b)=>a+b.size,0));let SectionHeader=create_struct([{name:U32},{type:U32},{flags:U32},{addr:U32},{offset:U32},{size:U32},{link:U32},{info:U32},{addralign:U32},{entsize:U32}]);console.assert(40===SectionHeader.reduce((a,b)=>a+b.size,0));\nfunction create_struct(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}\nfunction read_elf(a){a=new DataView(a);let [b,c]=read_struct(a,Header);console.assert(52===c);if(DEBUG){for(var d of Object.keys(b))dbg_log(d+\": 0x\"+b[d].toString(16));dbg_log(b)}console.assert(b.magic===ELF_MAGIC,\"Bad magic\");console.assert(1===b.class,\"Unimplemented: 64 bit elf\");console.assert(1===b.data,\"Unimplemented: big endian\");console.assert(1===b.version0,\"Bad version0\");console.assert(2===b.type,\"Unimplemented type\");console.assert(1===b.version1,\"Bad version1\");console.assert(52===b.ehsize,\n\"Bad header size\");console.assert(32===b.phentsize,\"Bad program header size\");console.assert(40===b.shentsize,\"Bad section header size\");[d]=read_structs(view_slice(a,b.phoff,b.phentsize*b.phnum),ProgramHeader,b.phnum);[a]=read_structs(view_slice(a,b.shoff,b.shentsize*b.shnum),SectionHeader,b.shnum);if(DEBUG&&LOG_LEVEL){console.log(\"%d program headers:\",d.length);for(let e of d)console.log(\"type=%s offset=%s vaddr=%s paddr=%s filesz=%s memsz=%s flags=%s align=%s\",e.type.toString(16),e.offset.toString(16),\ne.vaddr.toString(16),e.paddr.toString(16),e.filesz.toString(16),e.memsz.toString(16),e.flags.toString(16),e.align.toString(16));console.log(\"%d program headers:\",a.length);for(let e of a)console.log(\"name=%s type=%s flags=%s addr=%s offset=%s size=%s link=%s info=%s addralign=%s entsize=%s\",e.name.toString(16),e.type.toString(16),e.flags.toString(16),e.addr.toString(16),e.offset.toString(16),e.size.toString(16),e.link.toString(16),e.info.toString(16),e.addralign.toString(16),e.entsize.toString(16))}return{header:b,\nprogram_headers:d,sections_headers:a}}function read_struct(a,b){let c={},d=0;for(let e of b)b=e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function read_structs(a,b,c){let d=[],e=0;for(var f=0;f<c;f++){let [k,g]=read_struct(view_slice(a,e),b);d.push(k);e+=g}return[d,e]}function view_slice(a,b,c){return new DataView(a.buffer,a.byteOffset+b,c)};const LINUX_BOOT_HDR_SETUP_SECTS=497,LINUX_BOOT_HDR_SYSSIZE=500,LINUX_BOOT_HDR_VIDMODE=506,LINUX_BOOT_HDR_BOOT_FLAG=510,LINUX_BOOT_HDR_HEADER=514,LINUX_BOOT_HDR_VERSION=518,LINUX_BOOT_HDR_TYPE_OF_LOADER=528,LINUX_BOOT_HDR_LOADFLAGS=529,LINUX_BOOT_HDR_CODE32_START=532,LINUX_BOOT_HDR_RAMDISK_IMAGE=536,LINUX_BOOT_HDR_RAMDISK_SIZE=540,LINUX_BOOT_HDR_HEAP_END_PTR=548,LINUX_BOOT_HDR_CMD_LINE_PTR=552,LINUX_BOOT_HDR_INITRD_ADDR_MAX=556,LINUX_BOOT_HDR_KERNEL_ALIGNMENT=560,LINUX_BOOT_HDR_RELOCATABLE_KERNEL=\n564,LINUX_BOOT_HDR_MIN_ALIGNMENT=565,LINUX_BOOT_HDR_XLOADFLAGS=566,LINUX_BOOT_HDR_CMDLINE_SIZE=568,LINUX_BOOT_HDR_PAYLOAD_OFFSET=584,LINUX_BOOT_HDR_PAYLOAD_LENGTH=588,LINUX_BOOT_HDR_PREF_ADDRESS=600,LINUX_BOOT_HDR_INIT_SIZE=608,LINUX_BOOT_HDR_CHECKSUM1=43605,LINUX_BOOT_HDR_CHECKSUM2=1400005704,LINUX_BOOT_HDR_TYPE_OF_LOADER_NOT_ASSIGNED=255,LINUX_BOOT_HDR_LOADFLAGS_LOADED_HIGH=1,LINUX_BOOT_HDR_LOADFLAGS_QUIET_FLAG=32,LINUX_BOOT_HDR_LOADFLAGS_KEEP_SEGMENTS=64,LINUX_BOOT_HDR_LOADFLAGS_CAN_USE_HEAPS=\n128;\nfunction load_kernel(a,b,c,d){dbg_log(\"Trying to load kernel of size \"+b.byteLength);var e=new Uint8Array(b);const f=new Uint16Array(b),k=new Uint32Array(b);var g=e[LINUX_BOOT_HDR_SETUP_SECTS]||4,l=f[LINUX_BOOT_HDR_BOOT_FLAG>>1];if(l!==LINUX_BOOT_HDR_CHECKSUM1)dbg_log(\"Bad checksum1: \"+h(l));else if(l=f[LINUX_BOOT_HDR_HEADER>>1]|f[LINUX_BOOT_HDR_HEADER+2>>1]<<16,l!==LINUX_BOOT_HDR_CHECKSUM2)dbg_log(\"Bad checksum2: \"+h(l));else{l=f[LINUX_BOOT_HDR_VERSION>>1];dbg_assert(514<=l);var m=e[LINUX_BOOT_HDR_LOADFLAGS];dbg_assert(m&\nLINUX_BOOT_HDR_LOADFLAGS_LOADED_HIGH);var n=f[LINUX_BOOT_HDR_XLOADFLAGS>>1],r=k[LINUX_BOOT_HDR_INITRD_ADDR_MAX>>2],v=k[LINUX_BOOT_HDR_KERNEL_ALIGNMENT>>2],q=e[LINUX_BOOT_HDR_RELOCATABLE_KERNEL],p=e[LINUX_BOOT_HDR_MIN_ALIGNMENT],u=k[LINUX_BOOT_HDR_CMDLINE_SIZE>>2],t=k[LINUX_BOOT_HDR_PAYLOAD_OFFSET>>2],x=k[LINUX_BOOT_HDR_PAYLOAD_LENGTH>>2],z=k[LINUX_BOOT_HDR_PREF_ADDRESS>>2],A=k[LINUX_BOOT_HDR_PREF_ADDRESS+4>>2],E=k[LINUX_BOOT_HDR_INIT_SIZE>>2];dbg_log(\"kernel boot protocol version: \"+h(l));dbg_log(\"flags=\"+\nh(m)+\" xflags=\"+h(n));dbg_log(\"code32_start=\"+h(k[LINUX_BOOT_HDR_CODE32_START>>2]));dbg_log(\"initrd_addr_max=\"+h(r));dbg_log(\"kernel_alignment=\"+h(v));dbg_log(\"relocatable=\"+q);dbg_log(\"min_alignment=\"+h(p));dbg_log(\"cmdline max=\"+h(u));dbg_log(\"payload offset=\"+h(t)+\" size=\"+h(x));dbg_log(\"pref_address=\"+h(A)+\":\"+h(z));dbg_log(\"init_size=\"+h(E));e[LINUX_BOOT_HDR_TYPE_OF_LOADER]=LINUX_BOOT_HDR_TYPE_OF_LOADER_NOT_ASSIGNED;e[LINUX_BOOT_HDR_LOADFLAGS]=m&~LINUX_BOOT_HDR_LOADFLAGS_QUIET_FLAG&~LINUX_BOOT_HDR_LOADFLAGS_KEEP_SEGMENTS|\nLINUX_BOOT_HDR_LOADFLAGS_CAN_USE_HEAPS;f[LINUX_BOOT_HDR_HEAP_END_PTR>>1]=56832;f[LINUX_BOOT_HDR_VIDMODE>>1]=65535;dbg_log(\"heap_end_ptr=\"+h(56832));d+=\"\\x00\";dbg_assert(d.length<u);dbg_log(\"cmd_line_ptr=\"+h(581632));k[LINUX_BOOT_HDR_CMD_LINE_PTR>>2]=581632;for(e=0;e<d.length;e++)a[581632+e]=d.charCodeAt(e);g=512*(g+1);dbg_log(\"prot_mode_kernel_start=\"+h(g));d=new Uint8Array(b,0,g);b=new Uint8Array(b,g);e=g=0;c&&(g=67108864,e=c.byteLength,dbg_assert(1048576+b.length<g),a.set(new Uint8Array(c),g));\nk[LINUX_BOOT_HDR_RAMDISK_IMAGE>>2]=g;k[LINUX_BOOT_HDR_RAMDISK_SIZE>>2]=e;dbg_assert(655360>524288+d.length);a.set(d,524288);a.set(b,1048576);return{option_rom:{name:\"genroms/kernel.bin\",data:make_linux_boot_rom(32768,57344)}}}}\nfunction make_linux_boot_rom(a,b){const c=new Uint8Array(256);(new Uint16Array(c.buffer))[0]=43605;c[2]=1;var d=3;c[d++]=250;c[d++]=184;c[d++]=a>>0;c[d++]=a>>8;c[d++]=142;c[d++]=192;c[d++]=142;c[d++]=216;c[d++]=142;c[d++]=224;c[d++]=142;c[d++]=232;c[d++]=142;c[d++]=208;c[d++]=188;c[d++]=b>>0;c[d++]=b>>8;c[d++]=234;c[d++]=0;c[d++]=0;c[d++]=a+32>>0;c[d++]=a+32>>8;dbg_assert(512>d);a=d;b=c[a]=0;for(d=0;d<c.length;d++)b+=c[d];c[a]=-b;return c};var SHIFT_SCAN_CODE=42,SCAN_CODE_RELEASE=128;\nfunction KeyboardAdapter(a){function b(q){!q.altKey&&g[56]&&f(56,!1);return e(q,!1)}function c(q){!q.altKey&&g[56]&&f(56,!1);return e(q,!0)}function d(q){q=Object.keys(g);for(var p,u=0;u<q.length;u++)p=+q[u],g[p]&&f(p,!1);g={}}function e(q,p){var u;if(u=l.bus)u=q.shiftKey&&q.ctrlKey&&(73===q.keyCode||74===q.keyCode||75===q.keyCode)||!l.emu_enabled?!1:q.target?q.target.classList.contains(\"phone_keyboard\")||\"INPUT\"!==q.target.nodeName&&\"TEXTAREA\"!==q.target.nodeName:!0;if(u){a:{if(void 0!==q.code&&\n(u=v[q.code],void 0!==u))break a;u=m[q.keyCode]}if(u)return f(u,p,q.repeat),q.preventDefault&&q.preventDefault(),!1;console.log(\"Missing char in map: keyCode=\"+(q.keyCode||-1).toString(16)+\" code=\"+q.code)}}function f(q,p,u){if(p)g[q]&&!u&&f(q,!1);else if(!g[q])return;(g[q]=p)||(q|=128);255<q?(k(q>>8),k(q&255)):k(q)}function k(q){l.bus.send(\"keyboard-code\",q)}var g={},l=this;this.emu_enabled=!0;var m=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,\n57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0]),n={8:8,10:13,32:32,39:222,44:188,45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},r={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,\n72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192},v={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,\nKeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,ShiftRight:54,NumpadMultiply:55,AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,\nControlRight:57373,NumpadDivide:57397,AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,Delete:57427,OSLeft:57435,OSRight:57436,ContextMenu:57437};this.bus=a;this.destroy=function(){\"undefined\"!==typeof window&&(window.removeEventListener(\"keyup\",b,!1),window.removeEventListener(\"keydown\",c,!1),window.removeEventListener(\"blur\",d,!1))};this.init=function(){\"undefined\"!==typeof window&&(this.destroy(),window.addEventListener(\"keyup\",\nb,!1),window.addEventListener(\"keydown\",c,!1),window.addEventListener(\"blur\",d,!1))};this.init();this.simulate_press=function(q){q={keyCode:q};e(q,!0);e(q,!1)};this.simulate_char=function(q){var p=q.charCodeAt(0);p in n?this.simulate_press(n[p]):p in r?(k(SHIFT_SCAN_CODE),this.simulate_press(r[p]),k(SHIFT_SCAN_CODE|SCAN_CODE_RELEASE)):console.log(\"ascii -> keyCode not found: \",p,q)}};function MouseAdapter(a,b){function c(t){if(!u.enabled||!u.emu_enabled)return!1;var x=b||document.body,z;if(!(z=document.pointerLockElement))a:{for(t=t.target;t.parentNode;){if(t===x){z=!0;break a}t=t.parentNode}z=!1}return z}function d(t){c(t)&&(t=t.changedTouches)&&t.length&&(t=t[t.length-1],q=t.clientX,p=t.clientY)}function e(t){if(n||v||r)u.bus.send(\"mouse-click\",[!1,!1,!1]),n=v=r=!1}function f(t){if(u.bus&&c(t)){var x=0,z=0,A=t.changedTouches;A?A.length&&(A=A[A.length-1],x=A.clientX-q,z=A.clientY-\np,q=A.clientX,p=A.clientY,t.preventDefault()):\"number\"===typeof t.movementX?(x=t.movementX,z=t.movementY):\"number\"===typeof t.webkitMovementX?(x=t.webkitMovementX,z=t.webkitMovementY):\"number\"===typeof t.mozMovementX?(x=t.mozMovementX,z=t.mozMovementY):(x=t.clientX-q,z=t.clientY-p,q=t.clientX,p=t.clientY);u.bus.send(\"mouse-delta\",[.15*x,-(.15*z)]);b&&u.bus.send(\"mouse-absolute\",[t.pageX-b.offsetLeft,t.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function k(t){c(t)&&l(t,!0)}function g(t){c(t)&&\nl(t,!1)}function l(t,x){u.bus&&(1===t.which?n=x:2===t.which?v=x:3===t.which?r=x:dbg_log(\"Unknown event.which: \"+t.which),u.bus.send(\"mouse-click\",[n,v,r]))}function m(t){if(c(t)){var x=t.wheelDelta||-t.detail;0>x?x=-1:0<x&&(x=1);u.bus.send(\"mouse-wheel\",[x,0]);t.preventDefault()}}var n=!1,r=!1,v=!1,q=0,p=0,u=this;this.enabled=!1;this.emu_enabled=!0;this.bus=a;this.bus.register(\"mouse-enable\",function(t){this.enabled=t},this);this.destroy=function(){\"undefined\"!==typeof window&&(window.removeEventListener(\"touchstart\",\nd,!1),window.removeEventListener(\"touchend\",e,!1),window.removeEventListener(\"touchmove\",f,!1),window.removeEventListener(\"mousemove\",f,!1),window.removeEventListener(\"mousedown\",k,!1),window.removeEventListener(\"mouseup\",g,!1),window.removeEventListener(\"DOMMouseScroll\",m,!1),window.removeEventListener(\"mousewheel\",m,{passive:!1}))};this.init=function(){\"undefined\"!==typeof window&&(this.destroy(),window.addEventListener(\"touchstart\",d,!1),window.addEventListener(\"touchend\",e,!1),window.addEventListener(\"touchmove\",\nf,!1),window.addEventListener(\"mousemove\",f,!1),window.addEventListener(\"mousedown\",k,!1),window.addEventListener(\"mouseup\",g,!1),window.addEventListener(\"DOMMouseScroll\",m,!1),window.addEventListener(\"mousewheel\",m,{passive:!1}))};this.init()};var DAC_QUEUE_RESERVE=.2,AUDIOBUFFER_MINIMUM_SAMPLING_RATE=8E3;\nfunction SpeakerAdapter(a){if(\"undefined\"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?SpeakerWorkletDAC:SpeakerBufferSourceDAC;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new SpeakerMixer(a,this.audio_context);this.pcspeaker=new PCSpeaker(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register(\"emulator-stopped\",function(){this.audio_context.suspend()},\nthis);a.register(\"emulator-started\",function(){this.audio_context.resume()},this);a.register(\"speaker-confirm-initialized\",function(){a.send(\"speaker-has-initialized\")},this);a.send(\"speaker-has-initialized\")}else console.warn(\"Web browser doesn't support Web Audio API\")}\nfunction SpeakerMixer(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=b;this.sources=new Map;this.gain_right=this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type=\"highshelf\";this.node_treble_right.type=\"highshelf\";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);\nthis.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_bass_left=this.audio_context.createBiquadFilter();this.node_bass_right=this.audio_context.createBiquadFilter();this.node_bass_left.type=\"lowshelf\";this.node_bass_right.type=\"lowshelf\";this.node_bass_left.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=\nthis.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);\na.register(\"mixer-connect\",function(d){this.connect_source(d[0],d[1])},this);a.register(\"mixer-disconnect\",function(d){this.disconnect_source(d[0],d[1])},this);a.register(\"mixer-volume\",function(d){var e=d[0],f=d[1];d=Math.pow(10,d[2]/20);var k=e===MIXER_SRC_MASTER?this:this.sources.get(e);void 0===k?dbg_assert(!1,\"Mixer set volume - cannot set volume for undefined source: \"+e):k.set_volume(d,f)},this);a.register(\"mixer-gain-left\",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);\na.register(\"mixer-gain-right\",function(d){this.gain_right=Math.pow(10,d/20);this.update()},this);a.register(\"mixer-treble-left\",c(this.node_treble_left),this);a.register(\"mixer-treble-right\",c(this.node_treble_right),this);a.register(\"mixer-bass-left\",c(this.node_bass_left),this);a.register(\"mixer-bass-right\",c(this.node_bass_right),this)}\nSpeakerMixer.prototype.add_source=function(a,b){a=new SpeakerMixerSource(this.audio_context,a,this.input_left,this.input_right);dbg_assert(!this.sources.has(b),\"Mixer add source - overwritting source: \"+b);this.sources.set(b,a);return a};SpeakerMixer.prototype.connect_source=function(a,b){var c=this.sources.get(a);void 0===c?dbg_assert(!1,\"Mixer connect - cannot connect undefined source: \"+a):c.connect(b)};\nSpeakerMixer.prototype.disconnect_source=function(a,b){var c=this.sources.get(a);void 0===c?dbg_assert(!1,\"Mixer disconnect - cannot disconnect undefined source: \"+a):c.disconnect(b)};SpeakerMixer.prototype.set_volume=function(a,b){void 0===b&&(b=MIXER_CHANNEL_BOTH);switch(b){case MIXER_CHANNEL_LEFT:this.volume_left=a;break;case MIXER_CHANNEL_RIGHT:this.volume_right=a;break;case MIXER_CHANNEL_BOTH:this.volume_both=a;break;default:dbg_assert(!1,\"Mixer set master volume - unknown channel: \"+b);return}this.update()};\nSpeakerMixer.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};\nfunction SpeakerMixerSource(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}\nSpeakerMixerSource.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};\nSpeakerMixerSource.prototype.connect=function(a){var b=!a||a===MIXER_CHANNEL_BOTH;if(b||a===MIXER_CHANNEL_LEFT)this.connected_left=!0;if(b||a===MIXER_CHANNEL_RIGHT)this.connected_right=!0;this.update()};SpeakerMixerSource.prototype.disconnect=function(a){var b=!a||a===MIXER_CHANNEL_BOTH;if(b||a===MIXER_CHANNEL_LEFT)this.connected_left=!1;if(b||a===MIXER_CHANNEL_RIGHT)this.connected_right=!1;this.update()};\nSpeakerMixerSource.prototype.set_volume=function(a,b){void 0===b&&(b=MIXER_CHANNEL_BOTH);switch(b){case MIXER_CHANNEL_LEFT:this.volume_left=a;break;case MIXER_CHANNEL_RIGHT:this.volume_right=a;break;case MIXER_CHANNEL_BOTH:this.volume_both=a;break;default:dbg_assert(!1,\"Mixer set volume - unknown channel: \"+b);return}this.update()};SpeakerMixerSource.prototype.set_gain_hidden=function(a){this.gain_hidden=a};\nfunction PCSpeaker(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type=\"square\";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,MIXER_SRC_PCSPEAKER);this.mixer_connection.disconnect();a.register(\"pcspeaker-enable\",function(){c.connect_source(MIXER_SRC_PCSPEAKER)},this);a.register(\"pcspeaker-disable\",function(){c.disconnect_source(MIXER_SRC_PCSPEAKER)},this);a.register(\"pcspeaker-update\",function(d){var e=\nd[1],f=0;3===d[0]&&(f=1E3*OSCILLATOR_FREQ/e,f=Math.min(f,this.node_oscillator.frequency.maxValue),f=Math.max(f,0));this.node_oscillator.frequency.setValueAtTime(f,b.currentTime)},this)}PCSpeaker.prototype.start=function(){this.node_oscillator.start()};\nfunction SpeakerWorkletDAC(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function k(m){if(0===m)return 1;m*=Math.PI;return Math.sin(m)/m}function g(){var m=Reflect.construct(AudioWorkletProcessor,[],g);m.kernel_size=3;m.queue_data=Array(1024);m.queue_start=0;m.queue_end=0;m.queue_length=0;m.queue_size=m.queue_data.length;m.queued_samples=0;m.source_buffer_previous=l;m.source_buffer_current=l;m.source_samples_per_destination=1;m.source_block_start=0;m.source_time=\n0;m.source_offset=0;m.port.onmessage=n=>{switch(n.data.type){case \"queue\":m.queue_push(n.data.value);break;case \"sampling-rate\":m.source_samples_per_destination=n.data.value/sampleRate}};return m}var l=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(g.prototype,AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(g,AudioWorkletProcessor);g.prototype.process=g.prototype.process=function(m,n,r){for(m=0;m<n[0][0].length;m++){for(var v=r=0,q=this.source_offset+this.kernel_size,\np=this.source_offset-this.kernel_size+1;p<=q;p++){var u=this.source_block_start+p;r+=this.get_sample(u,0)*this.kernel(this.source_time-p);v+=this.get_sample(u,1)*this.kernel(this.source_time-p)}if(isNaN(r)||isNaN(v))r=v=0,this.dbg_log(\"ERROR: NaN values! Ignoring for now.\");n[0][0][m]=r;n[0][1][m]=v;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}n=this.source_offset;n+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=\nthis.source_offset;this.source_offset=0;this.ensure_enough_data(n);return!0};g.prototype.kernel=function(m){return k(m)*k(m/this.kernel_size)};g.prototype.get_sample=function(m,n){return 0>m?(m+=this.source_buffer_previous[0].length,this.source_buffer_previous[n][m]):this.source_buffer_current[n][m]};g.prototype.ensure_enough_data=function(m){var n=this.source_buffer_current[0].length;n-this.source_block_start<m&&(this.prepare_next_buffer(),this.source_block_start-=n)};g.prototype.prepare_next_buffer=\nfunction(){256>this.queued_samples&&this.queue_length&&this.dbg_log(\"Not enough samples - should not happen during midway of playback\");this.source_buffer_previous=this.source_buffer_current;this.source_buffer_current=this.queue_shift();var m=this.source_buffer_current[0].length;if(256>m){for(var n=this.queue_start,r=0;256>m&&r<this.queue_length;)m+=this.queue_data[n][0].length,n=n+1&this.queue_size-1,r++;m=Math.max(m,256);m=[new Float32Array(m),new Float32Array(m)];m[0].set(this.source_buffer_current[0]);\nm[1].set(this.source_buffer_current[1]);n=this.source_buffer_current[0].length;for(var v=0;v<r;v++){var q=this.queue_shift();m[0].set(q[0],n);m[1].set(q[1],n);n+=q[0].length}this.source_buffer_current=m}this.pump()};g.prototype.pump=function(){1024>this.queued_samples/this.source_samples_per_destination&&this.port.postMessage({type:\"pump\"})};g.prototype.queue_push=function(m){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=m,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,\nthis.queued_samples+=m[0].length,this.pump())};g.prototype.queue_shift=function(){if(!this.queue_length)return l;var m=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=m[0].length;return m};g.prototype.dbg_log=function(m){DEBUG&&this.port.postMessage({type:\"debug-log\",value:m})};registerProcessor(\"dac-processor\",g)}.toString();var d=b.indexOf(\"{\")+1,e=b.lastIndexOf(\"}\");b=b.substring(d,\ne);DEBUG&&(b=\"var DEBUG = true;\\n\"+b);b=new Blob([b],{type:\"application/javascript\"});var f=URL.createObjectURL(b);this.node_processor=null;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(f).then(()=>{URL.revokeObjectURL(f);this.node_processor=new AudioWorkletNode(this.audio_context,\"dac-processor\",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}});this.node_processor.port.postMessage({type:\"sampling-rate\",value:this.sampling_rate});\nthis.node_processor.port.onmessage=k=>{switch(k.data.type){case \"pump\":this.pump();break;case \"debug-log\":dbg_log(\"SpeakerWorkletDAC - Worklet: \"+k.data.value)}};this.node_processor.connect(this.node_output)});this.mixer_connection=c.add_source(this.node_output,MIXER_SRC_DAC);this.mixer_connection.set_gain_hidden(3);a.register(\"dac-send-data\",function(k){this.queue(k)},this);a.register(\"dac-enable\",function(k){this.enabled=!0},this);a.register(\"dac-disable\",function(){this.enabled=!1},this);a.register(\"dac-tell-sampling-rate\",\nfunction(k){dbg_assert(0<k,\"Sampling rate should be nonzero\");this.sampling_rate=k;this.node_processor&&this.node_processor.port.postMessage({type:\"sampling-rate\",value:k})},this);DEBUG&&(this.debugger=new SpeakerDACDebugger(this.audio_context,this.node_output))}SpeakerWorkletDAC.prototype.queue=function(a){this.node_processor&&(DEBUG&&this.debugger.push_queued_data(a),this.node_processor.port.postMessage({type:\"queue\",value:a},[a[0].buffer,a[1].buffer]))};\nSpeakerWorkletDAC.prototype.pump=function(){this.enabled&&this.bus.send(\"dac-request-data\")};\nfunction SpeakerBufferSourceDAC(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type=\"lowpass\";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,MIXER_SRC_DAC);this.mixer_connection.set_gain_hidden(3);a.register(\"dac-send-data\",function(d){this.queue(d)},this);a.register(\"dac-enable\",function(d){this.enabled=!0;this.pump()},\nthis);a.register(\"dac-disable\",function(){this.enabled=!1},this);a.register(\"dac-tell-sampling-rate\",function(d){dbg_assert(0<d,\"Sampling rate should be nonzero\");this.sampling_rate=d;this.rate_ratio=Math.ceil(AUDIOBUFFER_MINIMUM_SAMPLING_RATE/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this);DEBUG&&(this.debugger=new SpeakerDACDebugger(this.audio_context,this.node_output))}\nSpeakerBufferSourceDAC.prototype.queue=function(a){DEBUG&&this.debugger.push_queued_data(a);var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),f=d.getChannelData(1),k=0,g=0;g<b;g++)for(var l=0;l<this.rate_ratio;l++,k++)e[k]=a[0][g],f[k]=a[1][g]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?(d.copyToChannel(a[0],0),d.copyToChannel(a[1],\n1)):(d.getChannelData(0).set(a[0]),d.getChannelData(1).set(a[1]));a=this.audio_context.createBufferSource();a.buffer=d;a.connect(this.node_lowpass);a.addEventListener(\"ended\",this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(dbg_log(\"Speaker DAC - Creating/Recreating reserve - shouldn't occur frequently during playback\"),this.buffered_time=d,d=DAC_QUEUE_RESERVE-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=\nc;setTimeout(()=>this.pump(),0)};SpeakerBufferSourceDAC.prototype.pump=function(){this.enabled&&(this.buffered_time-this.audio_context.currentTime>DAC_QUEUE_RESERVE||this.bus.send(\"dac-request-data\"))};\nfunction SpeakerDACDebugger(a,b){this.audio_context=a;this.node_source=b;this.node_processor=null;this.node_gain=this.audio_context.createGain();this.node_gain.gain.setValueAtTime(0,this.audio_context.currentTime);this.node_gain.connect(this.audio_context.destination);this.is_active=!1;this.queued_history=[];this.output_history=[];this.queued=[[],[]];this.output=[[],[]]}\nSpeakerDACDebugger.prototype.start=function(a){this.is_active=!0;this.queued=[[],[]];this.output=[[],[]];this.queued_history.push(this.queued);this.output_history.push(this.output);this.node_processor=this.audio_context.createScriptProcessor(1024,2,2);this.node_processor.onaudioprocess=b=>{this.output[0].push(b.inputBuffer.getChannelData(0).slice());this.output[1].push(b.inputBuffer.getChannelData(1).slice())};this.node_source.connect(this.node_processor);this.node_processor.connect(this.node_gain);\nsetTimeout(()=>{this.stop()},a)};SpeakerDACDebugger.prototype.stop=function(){this.is_active=!1;this.node_source.disconnect(this.node_processor);this.node_processor.disconnect();this.node_processor=null};SpeakerDACDebugger.prototype.push_queued_data=function(a){this.is_active&&(this.queued[0].push(a[0].slice()),this.queued[1].push(a[1].slice()))};SpeakerDACDebugger.prototype.download_txt=function(a,b){a=this.output_history[a][b].map(c=>c.join(\" \")).join(\" \");dump_file(a,\"dacdata.txt\")};\nSpeakerDACDebugger.prototype.download_csv=function(a){a=this.output_history[a];for(var b=[],c=0;c<a[0].length;c++)for(var d=0;d<a[0][c].length;d++)b.push(`${a[0][c][d]},${a[1][c][d]}`);dump_file(b.join(\"\\n\"),\"dacdata.csv\")};function SerialAdapter(a,b){function c(g){k.bus&&k.enabled&&(k.send_char(g.which),g.preventDefault())}function d(g){var l=g.which;8===l?(k.send_char(127),g.preventDefault()):9===l&&(k.send_char(9),g.preventDefault())}function e(g){if(k.enabled){for(var l=g.clipboardData.getData(\"text/plain\"),m=0;m<l.length;m++)k.send_char(l.charCodeAt(m));g.preventDefault()}}function f(g){g.target!==a&&a.blur()}var k=this;this.enabled=!0;this.bus=b;this.text=\"\";this.text_new_line=!1;this.last_update=0;this.bus.register(\"serial0-output-char\",\nfunction(g){this.show_char(g)},this);this.destroy=function(){a.removeEventListener(\"keypress\",c,!1);a.removeEventListener(\"keydown\",d,!1);a.removeEventListener(\"paste\",e,!1);window.removeEventListener(\"mousedown\",f,!1)};this.init=function(){this.destroy();a.style.display=\"block\";a.addEventListener(\"keypress\",c,!1);a.addEventListener(\"keydown\",d,!1);a.addEventListener(\"paste\",e,!1);window.addEventListener(\"mousedown\",f,!1)};this.init();this.show_char=function(g){\"\\b\"===g?(this.text=this.text.slice(0,\n-1),this.update()):\"\\r\"!==g&&(this.text+=g,\"\\n\"===g&&(this.text_new_line=!0),this.update())};this.update=function(){var g=Date.now(),l=g-this.last_update;16>l?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;var m=Date.now();dbg_assert(15<=m-this.last_update);this.last_update=m;this.render()},16-l)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=g,this.render())};this.render=function(){a.value=this.text;\nthis.text_new_line&&(this.text_new_line=!1,a.scrollTop=1E9)};this.send_char=function(g){k.bus&&k.bus.send(\"serial0-input\",g)}}function SerialRecordingAdapter(a){this.text=\"\";a.register(\"serial0-output-char\",function(b){this.text+=b},this)}\nfunction SerialAdapterXtermJS(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal;c.setOption(\"logLevel\",\"off\");c.write(\"This is the serial console. Whatever you type or paste here will be sent to COM1\");c.onData(function(d){b.send(\"serial0-input\",d.charCodeAt(0))});b.register(\"serial0-output-char\",function(d){c.write(d)},this)}}SerialAdapterXtermJS.prototype.show=function(){this.term&&this.term.open(this.element)};function NetworkAdapter(a,b){this.bus=b;this.socket=void 0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.bus.register(\"net0-send\",function(c){this.send(c)},this)}NetworkAdapter.prototype.handle_message=function(a){this.bus&&this.bus.send(\"net0-receive\",new Uint8Array(a.data))};NetworkAdapter.prototype.handle_close=function(a){this.connect();setTimeout(this.connect.bind(this),this.reconnect_interval)};\nNetworkAdapter.prototype.handle_open=function(a){for(a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};NetworkAdapter.prototype.handle_error=function(a){};NetworkAdapter.prototype.destroy=function(){this.socket&&this.socket.close()};\nNetworkAdapter.prototype.connect=function(){if(\"undefined\"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();this.last_connect_attempt+this.reconnect_interval>a||(this.last_connect_attempt=Date.now(),this.socket=new WebSocket(this.url),this.socket.binaryType=\"arraybuffer\",this.socket.onopen=this.handle_open.bind(this),this.socket.onmessage=this.handle_message.bind(this),this.socket.onclose=this.handle_close.bind(this),this.socket.onerror=this.handle_error.bind(this))}};\nNetworkAdapter.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};NetworkAdapter.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};var ASYNC_SAFE=!1;\n(function(){function a(g,l){var m=new XMLHttpRequest;m.open(l.method||\"get\",g,!0);m.responseType=l.as_json?\"json\":\"arraybuffer\";if(l.headers)for(var n=Object.keys(l.headers),r=0;r<n.length;r++){var v=n[r];m.setRequestHeader(v,l.headers[v])}l.range&&(n=l.range.start,m.setRequestHeader(\"Range\",\"bytes=\"+n+\"-\"+(n+l.range.length-1)),m.onreadystatechange=function(){200===m.status&&m.abort()});m.onload=function(q){4===m.readyState&&(200!==m.status&&206!==m.status?console.error(\"Loading the image `\"+g+\"` failed (status %d)\",\nm.status):m.response&&l.done&&l.done(m.response,m))};l.progress&&(m.onprogress=function(q){l.progress(q)});m.send(null)}function b(g,l){let m=require(\"fs\");l.range?(dbg_assert(!l.as_json),m.open(g,\"r\",(n,r)=>{if(n)throw n;let v=l.range.length;var q=Buffer.allocUnsafe(v);m.read(r,q,0,v,l.range.start,(p,u)=>{if(p)throw p;dbg_assert(u===v);l.done&&l.done(new Uint8Array(q));m.close(r,t=>{if(t)throw t;})})})):m.readFile(g,{encoding:l.as_json?\"utf-8\":null},function(n,r){n?console.log(\"Could not read file:\",\ng,n):(n=r,n=l.as_json?JSON.parse(n):(new Uint8Array(n)).buffer,l.done(n))})}function c(g,l){this.filename=g;this.block_size=256;this.byteLength=l;this.loaded_blocks=Object.create(null);this.onprogress=this.onload=void 0}function d(g,l){const m=g.match(/(.*)(\\..*)/);m?(this.basename=m[1],this.extension=m[2]):(this.basename=g,this.extension=\"\");this.block_size=256;this.byteLength=l;this.loaded_blocks=Object.create(null);this.onprogress=this.onload=void 0}function e(g){this.file=g;this.byteLength=g.size;\n1073741824<g.size&&console.warn(\"SyncFileBuffer: Allocating buffer of \"+(g.size>>20)+\" MB ...\");this.buffer=new ArrayBuffer(g.size);this.onprogress=this.onload=void 0}function f(g){this.file=g;this.byteLength=g.size;this.block_size=256;this.loaded_blocks=Object.create(null);this.onprogress=this.onload=void 0}v86util.load_file=\"undefined\"===typeof XMLHttpRequest?b:a;v86util.AsyncXHRBuffer=c;v86util.AsyncXHRPartfileBuffer=d;v86util.AsyncFileBuffer=f;v86util.SyncFileBuffer=e;v86util.read_sized_string_from_mem=\nfunction(g,l,m){return String.fromCharCode(...new Uint8Array(g.buffer,l>>>0,m>>>0))};var k=\"undefined\"===typeof XMLHttpRequest?function(g,l){require(\"fs\").stat(g,(m,n)=>{m?l(m):l(null,n.size)})}:function(g,l){v86util.load_file(g,{done:(m,n)=>{m=n.getResponseHeader(\"Content-Range\")||\"\";(n=m.match(/\\/(\\d+)\\s*$/))?l(null,+n[1]):l(\"`Range: bytes=...` header not supported (Got `\"+m+\"`)\")},headers:{Range:\"bytes=0-0\"}})};c.prototype.load=function(){void 0!==this.byteLength?this.onload&&this.onload(Object.create(null)):\nk(this.filename,(g,l)=>{if(g)throw Error(\"Cannot use: \"+this.filename+\". \"+g);dbg_assert(0<=l);this.byteLength=l;this.onload&&this.onload(Object.create(null))})};c.prototype.get_from_cache=function(g,l,m){m=l/this.block_size;g/=this.block_size;for(var n=0;n<m;n++)if(!this.loaded_blocks[g+n])return;if(1===m)return this.loaded_blocks[g];l=new Uint8Array(l);for(n=0;n<m;n++)l.set(this.loaded_blocks[g+n],n*this.block_size);return l};c.prototype.get=function(g,l,m){console.assert(g+l<=this.byteLength);\nconsole.assert(0===g%this.block_size);console.assert(0===l%this.block_size);console.assert(l);var n=this.get_from_cache(g,l,m);n?ASYNC_SAFE?setTimeout(m.bind(this,n),0):m(n):v86util.load_file(this.filename,{done:function(r){r=new Uint8Array(r);this.handle_read(g,l,r);m(r)}.bind(this),range:{start:g,length:l}})};c.prototype.set=function(g,l,m){console.assert(g+l.byteLength<=this.byteLength);var n=l.length;console.assert(0===g%this.block_size);console.assert(0===n%this.block_size);console.assert(n);\ng/=this.block_size;n/=this.block_size;for(var r=0;r<n;r++){var v=this.loaded_blocks[g+r];void 0===v&&(v=this.loaded_blocks[g+r]=new Uint8Array(this.block_size));var q=l.subarray(r*this.block_size,(r+1)*this.block_size);v.set(q);console.assert(v.byteLength===q.length)}m()};c.prototype.handle_read=function(g,l,m){g/=this.block_size;l/=this.block_size;for(var n=0;n<l;n++){var r=this.loaded_blocks[g+n];r&&m.set(r,n*this.block_size)}};c.prototype.get_buffer=function(g){g()};c.prototype.get_written_blocks=\nfunction(){var g=Object.keys(this.loaded_blocks).length;g=new Uint8Array(g*this.block_size);var l=[],m=0;for(r of Object.keys(this.loaded_blocks)){var n=this.loaded_blocks[r];dbg_assert(n.length===this.block_size);var r=+r;l.push(r);g.set(n,m*this.block_size);m++}return{buffer:g,indices:l,block_size:this.block_size}};c.prototype.get_state=function(){const g=[],l=[];for(let [m,n]of Object.entries(this.loaded_blocks))dbg_assert(isFinite(+m)),l.push([+m,n]);g[0]=l;return g};c.prototype.set_state=function(g){g=\ng[0];this.loaded_blocks=Object.create(null);for(let [l,m]of Object.values(g))this.loaded_blocks[l]=m};d.prototype.load=function(){void 0===this.byteLength&&dbg_assert(!1);this.onload&&this.onload(Object.create(null))};d.prototype.get_from_cache=c.prototype.get_from_cache;d.prototype.get=function(g,l,m){console.assert(g+l<=this.byteLength);console.assert(0===g%this.block_size);console.assert(0===l%this.block_size);console.assert(l);var n=this.get_from_cache(g,l,m);n?ASYNC_SAFE?setTimeout(m.bind(this,\nn),0):m(n):v86util.load_file(this.basename+\"-\"+g+\"-\"+(g+l)+this.extension,{done:function(r){dbg_assert(r.byteLength===l);r=new Uint8Array(r);this.handle_read(g,l,r);m(r)}.bind(this)})};d.prototype.set=c.prototype.set;d.prototype.handle_read=c.prototype.handle_read;d.prototype.get_written_blocks=c.prototype.get_written_blocks;d.prototype.get_state=c.prototype.get_state;d.prototype.set_state=c.prototype.set_state;e.prototype.load=function(){this.load_next(0)};e.prototype.load_next=function(g){var l=\nnew FileReader;l.onload=function(n){n=new Uint8Array(n.target.result);(new Uint8Array(this.buffer,g)).set(n);this.load_next(g+4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:g,total:this.byteLength,lengthComputable:!0});if(g<this.byteLength){var m=this.file.slice(g,Math.min(g+4194304,this.byteLength));l.readAsArrayBuffer(m)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};e.prototype.get=function(g,l,m){console.assert(g+l<=this.byteLength);m(new Uint8Array(this.buffer,\ng,l))};e.prototype.set=function(g,l,m){console.assert(g+l.byteLength<=this.byteLength);(new Uint8Array(this.buffer,g,l.byteLength)).set(l);m()};e.prototype.get_buffer=function(g){g(this.buffer)};e.prototype.get_state=function(){const g=[];g[0]=this.byteLength;g[1]=new Uint8Array(this.buffer);return g};e.prototype.set_state=function(g){this.byteLength=g[0];this.buffer=g[1].slice().buffer};f.prototype.load=function(){this.onload&&this.onload(Object.create(null))};f.prototype.get=function(g,l,m){console.assert(0===\ng%this.block_size);console.assert(0===l%this.block_size);console.assert(l);var n=this.get_from_cache(g,l,m);n?m(n):(n=new FileReader,n.onload=function(r){r=new Uint8Array(r.target.result);this.handle_read(g,l,r);m(r)}.bind(this),n.readAsArrayBuffer(this.file.slice(g,g+l)))};f.prototype.get_from_cache=c.prototype.get_from_cache;f.prototype.set=c.prototype.set;f.prototype.handle_read=c.prototype.handle_read;f.prototype.get_state=c.prototype.get_state;f.prototype.get_buffer=function(g){g()};f.prototype.get_as_file=\nfunction(g){for(var l=[],m=Object.keys(this.loaded_blocks).map(Number).sort(function(p,u){return p-u}),n=0,r=0;r<m.length;r++){var v=m[r],q=this.loaded_blocks[v];v*=this.block_size;console.assert(v>=n);v!==n&&(l.push(this.file.slice(n,v)),n=v);l.push(q);n+=q.length}n!==this.file.size&&l.push(this.file.slice(n));g=new File(l,g);console.assert(g.size===this.file.size);return g}})();function V86Starter(a){this.cpu_is_running=!1;const b=Bus.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:\"anyfunc\",initial:WASM_TABLE_SIZE+WASM_TABLE_OFFSET}),f={cpu_exception_hook:l=>this.cpu_exception_hook&&this.cpu_exception_hook(l),hlt_op:function(){return c.hlt_op()},abort:function(){dbg_assert(!1)},logop:function(l,m){return c.debug.logop(l,m)},microtick:v86.microtick,get_rand_int:function(){return v86util.get_rand_int()},pic_acknowledge:function(){c.pic_acknowledge()},\nio_port_read8:function(l){return c.io.port_read8(l)},io_port_read16:function(l){return c.io.port_read16(l)},io_port_read32:function(l){return c.io.port_read32(l)},io_port_write8:function(l,m){c.io.port_write8(l,m)},io_port_write16:function(l,m){c.io.port_write16(l,m)},io_port_write32:function(l,m){c.io.port_write32(l,m)},mmap_read8:function(l){return c.mmap_read8(l)},mmap_read16:function(l){return c.mmap_read16(l)},mmap_read32:function(l){return c.mmap_read32(l)},mmap_write8:function(l,m){c.mmap_write8(l,\nm)},mmap_write16:function(l,m){c.mmap_write16(l,m)},mmap_write32:function(l,m){c.mmap_write32(l,m)},mmap_write64:function(l,m,n){c.mmap_write64(l,m,n)},mmap_write128:function(l,m,n,r,v){c.mmap_write128(l,m,n,r,v)},cpuid:function(){return c.cpuid()},load_ldt:function(){return c.load_ldt.apply(c,arguments)},load_tr:function(){return c.load_tr.apply(c,arguments)},log_from_wasm:function(l,m){l=v86util.read_sized_string_from_mem(d,l,m);dbg_log(l,LOG_CPU)},console_log_from_wasm:function(l,m){l=v86util.read_sized_string_from_mem(d,\nl,m);console.error(l)},dbg_trace_from_wasm:function(){dbg_trace()},codegen_finalize:(l,m,n,r,v)=>{c.codegen_finalize(l,m,n,r,v)},jit_clear_func:l=>c.jit_clear_func(l),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),do_task_switch:(l,m,n)=>{c.do_task_switch(l,m,n)},__indirect_function_table:e};let k=DEBUG?\"v86-debug.wasm\":\"v86.wasm\",g=\"v86-fallback.wasm\";a.wasm_path?k=a.wasm_path:\"undefined\"===typeof window&&\"string\"===typeof __dirname?(k=__dirname+\"/\"+k,g=__dirname+\"/\"+g):(k=\"build/\"+k,g=\"build/\"+\ng);v86util.load_file(k,{done:l=>{WebAssembly.instantiate(l,{env:f}).then(({instance:m})=>{m=m.exports;d=m.memory;m.rust_init();m=this.v86=new v86(this.emulator_bus,{exports:m,wasm_table:e});c=m.cpu;this.continue_init(m,a)},m=>{v86util.load_file(g,{done:n=>{WebAssembly.instantiate(n,{env:f}).then(({instance:r})=>{r=r.exports;d=r.memory;r.rust_init();r=this.v86=new v86(this.emulator_bus,{exports:r,wasm_table:e});c=r.cpu;this.continue_init(r,a)})}})})},progress:l=>{this.emulator_bus.send(\"download-progress\",\n{file_index:0,file_count:1,file_name:k,lengthComputable:l.lengthComputable,total:l.total,loaded:l.loaded})}})}\nV86Starter.prototype.continue_init=async function(a,b){function c(q,p){switch(q){case \"hda\":f.hda=this.disk_images.hda=p;break;case \"hdb\":f.hdb=this.disk_images.hdb=p;break;case \"cdrom\":f.cdrom=this.disk_images.cdrom=p;break;case \"fda\":f.fda=this.disk_images.fda=p;break;case \"fdb\":f.fdb=this.disk_images.fdb=p;break;case \"multiboot\":f.multiboot=this.disk_images.multiboot=p.buffer;break;case \"bzimage\":f.bzimage=this.disk_images.bzimage=p.buffer;break;case \"initrd\":f.initrd=this.disk_images.initrd=p.buffer;\nbreak;case \"bios\":f.bios=p.buffer;break;case \"vga_bios\":f.vga_bios=p.buffer;break;case \"initial_state\":f.initial_state=p.buffer;break;case \"fs9p_json\":f.fs9p_json=p;break;default:dbg_assert(!1,q)}}function d(q,p){if(p)if(p.get&&p.set&&p.load)k.push({name:q,loadable:p});else{p={buffer:p.buffer,async:p.async,url:p.url,size:p.size,use_parts:p.use_parts};if(\"bios\"===q||\"vga_bios\"===q||\"initial_state\"===q||\"multiboot\"===q||\"bzimage\"===q||\"initrd\"===q)p.async=!1;p.buffer instanceof ArrayBuffer?(p=new SyncBuffer(p.buffer),\nk.push({name:q,loadable:p})):\"undefined\"!==typeof File&&p.buffer instanceof File?(void 0===p.async&&(p.async=268435456<=p.buffer.size),p=p.async?new v86util.AsyncFileBuffer(p.buffer):new v86util.SyncFileBuffer(p.buffer),k.push({name:q,loadable:p})):p.url?p.async?(p=p.use_parts?new v86util.AsyncXHRPartfileBuffer(p.url,p.size):new v86util.AsyncXHRBuffer(p.url,p.size),k.push({name:q,loadable:p})):k.push({name:q,url:p.url,size:p.size}):dbg_log(\"Ignored file: url=\"+p.url+\" buffer=\"+p.buffer)}}function e(){function q(){this.serial_adapter&&\nthis.serial_adapter.show&&this.serial_adapter.show();this.bus.send(\"cpu-init\",f);f.initial_state&&(a.restore_state(f.initial_state),f.initial_state=void 0);b.autostart&&this.bus.send(\"cpu-run\");this.emulator_bus.send(\"emulator-loaded\")}if(f.fs9p&&f.fs9p_json)if(f.initial_state?dbg_log(\"Filesystem basefs ignored: Overridden by state image\"):f.fs9p.load_from_json(f.fs9p_json),b.bzimage_initrd_from_filesystem){const {bzimage:p,initrd:u}=this.get_bzimage_initrd_from_filesystem(f.fs9p);dbg_log(\"Found bzimage: \"+\np+\" and initrd: \"+u);Promise.all([f.fs9p.read_file(u),f.fs9p.read_file(p)]).then(([t,x])=>{c.call(this,\"initrd\",new SyncBuffer(t.buffer));c.call(this,\"bzimage\",new SyncBuffer(x.buffer));q.call(this)})}else q.call(this);else console.assert(!b.bzimage_initrd_from_filesystem,\"bzimage_initrd_from_filesystem: Requires a filesystem\"),q.call(this)}this.bus.register(\"emulator-stopped\",function(){this.cpu_is_running=!1},this);this.bus.register(\"emulator-started\",function(){this.cpu_is_running=!0},this);var f=\n{};this.disk_images={fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0};f.acpi=b.acpi;f.load_devices=!0;f.log_level=b.log_level;f.memory_size=b.memory_size||67108864;f.vga_memory_size=b.vga_memory_size||8388608;f.boot_order=b.boot_order||531;f.fastboot=b.fastboot||!1;f.fda=void 0;f.fdb=void 0;f.uart1=b.uart1;f.uart2=b.uart2;f.uart3=b.uart3;f.cmdline=b.cmdline;f.preserve_mac_from_state_image=b.preserve_mac_from_state_image;b.network_adapter?this.network_adapter=b.network_adapter(this.bus):b.network_relay_url&&\n(this.network_adapter=new NetworkAdapter(b.network_relay_url,this.bus));f.enable_ne2k=!0;b.disable_keyboard||(this.keyboard_adapter=new KeyboardAdapter(this.bus));b.disable_mouse||(this.mouse_adapter=new MouseAdapter(this.bus,b.screen_container));b.screen_container?this.screen_adapter=new ScreenAdapter(b.screen_container,this.bus):b.screen_dummy&&(this.screen_adapter=new DummyScreenAdapter(this.bus));b.serial_container&&(this.serial_adapter=new SerialAdapter(b.serial_container,this.bus));b.serial_container_xtermjs&&\n(this.serial_adapter=new SerialAdapterXtermJS(b.serial_container_xtermjs,this.bus));b.disable_speaker||(this.speaker_adapter=new SpeakerAdapter(this.bus));var k=[];b.state&&console.warn(\"Warning: Unknown option 'state'. Did you mean 'initial_state'?\");for(var g=\"bios vga_bios cdrom hda hdb fda fdb initial_state multiboot bzimage initrd\".split(\" \"),l=0;l<g.length;l++)d(g[l],b[g[l]]);if(b.filesystem){g=b.filesystem.basefs;l=b.filesystem.baseurl;let q=new MemoryFileStorage;l&&(q=new ServerFileStorageWrapper(q,\nl));f.fs9p=this.fs9p=new FS(q);if(g){console.assert(l,\"Filesystem: baseurl must be specified\");if(\"object\"===typeof g){var m=g.size;g=g.url}dbg_assert(\"string\"===typeof g);k.push({name:\"fs9p_json\",url:g,size:m,as_json:!0})}}var n=this,r=k.length,v=function(q){if(q===r)setTimeout(e.bind(this),0);else{var p=k[q];p.loadable?(p.loadable.onload=function(u){c.call(this,p.name,p.loadable);v(q+1)}.bind(this),p.loadable.load()):v86util.load_file(p.url,{done:function(u){c.call(this,p.name,p.as_json?u:new SyncBuffer(u));\nv(q+1)}.bind(this),progress:function(u){200===u.target.status?n.emulator_bus.send(\"download-progress\",{file_index:q,file_count:r,file_name:p.url,lengthComputable:u.lengthComputable,total:u.total||p.size,loaded:u.loaded}):n.emulator_bus.send(\"download-error\",{file_index:q,file_count:r,file_name:p.url,request:u.target})},as_json:p.as_json})}}.bind(this);v(0)};\nV86Starter.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir(\"/\")||[]).map(e=>\"/\"+e);a=(a.read_dir(\"/boot/\")||[]).map(e=>\"/boot/\"+e);let c,d;for(let e of[].concat(b,a)){const f=/old/i.test(e)||/fallback/i.test(e),k=/vmlinuz/i.test(e)||/bzimage/i.test(e),g=/initrd/i.test(e)||/initramfs/i.test(e);!k||d&&f||(d=e);!g||c&&f||(c=e)}c&&d||(console.log(\"Failed to find bzimage or initrd in filesystem. Files:\"),console.log(b.join(\" \")),console.log(a.join(\" \")));return{initrd:c,bzimage:d}};\nV86Starter.prototype.run=function(){this.bus.send(\"cpu-run\")};goog.exportProperty(V86Starter.prototype,\"run\",V86Starter.prototype.run);V86Starter.prototype.stop=function(){this.bus.send(\"cpu-stop\")};goog.exportProperty(V86Starter.prototype,\"stop\",V86Starter.prototype.stop);\nV86Starter.prototype.destroy=function(){this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy()};goog.exportProperty(V86Starter.prototype,\"destroy\",V86Starter.prototype.destroy);V86Starter.prototype.restart=function(){this.bus.send(\"cpu-restart\")};\ngoog.exportProperty(V86Starter.prototype,\"restart\",V86Starter.prototype.restart);V86Starter.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};goog.exportProperty(V86Starter.prototype,\"add_listener\",V86Starter.prototype.add_listener);V86Starter.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};goog.exportProperty(V86Starter.prototype,\"remove_listener\",V86Starter.prototype.remove_listener);V86Starter.prototype.restore_state=function(a){this.v86.restore_state(a)};\ngoog.exportProperty(V86Starter.prototype,\"restore_state\",V86Starter.prototype.restore_state);V86Starter.prototype.save_state=function(a){setTimeout(function(){try{a(null,this.v86.save_state())}catch(b){a(b,null)}}.bind(this),0)};goog.exportProperty(V86Starter.prototype,\"save_state\",V86Starter.prototype.save_state);\nV86Starter.prototype.get_statistics=function(){console.warn(\"V86Starter.prototype.get_statistics is deprecated. Use events instead.\");var a={cpu:{instruction_counter:this.get_instruction_counter()}};if(!this.v86)return a;var b=this.v86.cpu.devices;b.hda&&(a.hda=b.hda.stats);b.cdrom&&(a.cdrom=b.cdrom.stats);b.ps2&&(a.mouse={enabled:b.ps2.use_mouse});b.vga&&(a.vga={is_graphical:b.vga.stats.is_graphical});return a};goog.exportProperty(V86Starter.prototype,\"get_statistics\",V86Starter.prototype.get_statistics);\nV86Starter.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};goog.exportProperty(V86Starter.prototype,\"get_instruction_counter\",V86Starter.prototype.get_instruction_counter);V86Starter.prototype.is_running=function(){return this.cpu_is_running};goog.exportProperty(V86Starter.prototype,\"is_running\",V86Starter.prototype.is_running);V86Starter.prototype.keyboard_send_scancodes=function(a){for(var b=0;b<a.length;b++)this.bus.send(\"keyboard-code\",a[b])};\ngoog.exportProperty(V86Starter.prototype,\"keyboard_send_scancodes\",V86Starter.prototype.keyboard_send_scancodes);V86Starter.prototype.keyboard_send_keys=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_press(a[b])};goog.exportProperty(V86Starter.prototype,\"keyboard_send_keys\",V86Starter.prototype.keyboard_send_keys);V86Starter.prototype.keyboard_send_text=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_char(a[b])};\ngoog.exportProperty(V86Starter.prototype,\"keyboard_send_text\",V86Starter.prototype.keyboard_send_text);V86Starter.prototype.screen_make_screenshot=function(){this.screen_adapter&&this.screen_adapter.make_screenshot()};goog.exportProperty(V86Starter.prototype,\"screen_make_screenshot\",V86Starter.prototype.screen_make_screenshot);V86Starter.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};goog.exportProperty(V86Starter.prototype,\"screen_set_scale\",V86Starter.prototype.screen_set_scale);\nV86Starter.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById(\"screen_container\");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName(\"phone_keyboard\")[0])&&a.focus());this.lock_mouse()}}};goog.exportProperty(V86Starter.prototype,\"screen_go_fullscreen\",V86Starter.prototype.screen_go_fullscreen);\nV86Starter.prototype.lock_mouse=function(){var a=document.body,b=a.requestPointerLock||a.mozRequestPointerLock||a.webkitRequestPointerLock;b&&b.call(a)};goog.exportProperty(V86Starter.prototype,\"lock_mouse\",V86Starter.prototype.lock_mouse);V86Starter.prototype.mouse_set_status=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a)};V86Starter.prototype.keyboard_set_status=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};\ngoog.exportProperty(V86Starter.prototype,\"keyboard_set_status\",V86Starter.prototype.keyboard_set_status);V86Starter.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send(\"serial0-input\",a.charCodeAt(b))};goog.exportProperty(V86Starter.prototype,\"serial0_send\",V86Starter.prototype.serial0_send);V86Starter.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send(\"serial\"+a+\"-input\",b[c])};goog.exportProperty(V86Starter.prototype,\"serial_send_bytes\",V86Starter.prototype.serial_send_bytes);\nV86Starter.prototype.mount_fs=async function(a,b,c,d){let e=new MemoryFileStorage;b&&(e=new ServerFileStorageWrapper(e,b));const f=new FS(e,this.fs9p.qidcounter),k=()=>{const g=this.fs9p.Mount(a,f);d&&(g===-ENOENT?d(new FileNotFoundError):g===-EEXIST?d(new FileExistsError):0>g?(dbg_assert(!1,\"Unexpected error code: \"+-g),d(Error(\"Failed to mount. Error number: \"+-g))):d(null))};b?(dbg_assert(\"object\"===typeof c,\"Filesystem: basefs must be a JSON object\"),f.load_from_json(c,()=>k())):k()};\ngoog.exportProperty(V86Starter.prototype,\"mount_fs\",V86Starter.prototype.mount_fs);V86Starter.prototype.create_file=function(a,b,c){c=c||function(){};var d=this.fs9p;if(d){var e=a.split(\"/\");e=e[e.length-1];a=d.SearchPath(a).parentid;\"\"!==e&&-1!==a?d.CreateBinaryFile(e,a,b).then(()=>c(null)):setTimeout(function(){c(new FileNotFoundError)},0)}};goog.exportProperty(V86Starter.prototype,\"create_file\",V86Starter.prototype.create_file);\nV86Starter.prototype.read_file=function(a,b){var c=this.fs9p;c&&c.read_file(a).then(d=>{d?b(null,d):b(new FileNotFoundError,null)})};goog.exportProperty(V86Starter.prototype,\"read_file\",V86Starter.prototype.read_file);\nV86Starter.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);if(d.sleep)setTimeout(()=>b(e),1E3*d.sleep);else if(d.vga_text){const f=this.screen_adapter.get_text_screen();for(let k of f)if(k.includes(d.vga_text)){b(e);return}setTimeout(()=>b(c),1E3)}else d.keyboard_send?(d.keyboard_send instanceof Array?this.keyboard_send_scancodes(d.keyboard_send):(dbg_assert(\"string\"===typeof d.keyboard_send),this.keyboard_send_text(d.keyboard_send)),b(e)):d.call?(d.call(),b(e)):\nconsole.assert(!1,d)}};b(a)};function FileExistsError(a){this.message=a||\"File already exists\"}FileExistsError.prototype=Error.prototype;function FileNotFoundError(a){this.message=a||\"File not found\"}FileNotFoundError.prototype=Error.prototype;\n\"undefined\"!==typeof window?(window.V86Starter=V86Starter,window.V86=V86Starter):\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?(module.exports.V86Starter=V86Starter,module.exports.V86=V86Starter):\"function\"===typeof importScripts&&(self.V86Starter=V86Starter,self.V86=V86Starter);var WorkerBus={Connector:function(a){this.listeners={};this.pair=a;a.addEventListener(\"message\",function(b){b=b.data;for(var c=this.listeners[b[0]],d=0;d<c.length;d++){var e=c[d];e.fn.call(e.this_value,b[1])}}.bind(this),!1)}};WorkerBus.Connector.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};WorkerBus.Connector.prototype.send=function(a,b,c){dbg_assert(1<=arguments.length);this.pair&&this.pair.postMessage([a,b],c)};\nWorkerBus.init=function(a){return new WorkerBus.Connector(a)};function DummyScreenAdapter(a){var b,c,d,e,f,k,g;this.bus=a;a.register(\"screen-set-mode\",function(l){this.set_mode(l)},this);a.register(\"screen-fill-buffer-end\",function(l){this.update_buffer(l[0],l[1])},this);a.register(\"screen-put-char\",function(l){this.put_char(l[0],l[1],l[2],l[3],l[4])},this);a.register(\"screen-text-scroll\",function(l){console.log(\"scroll\",l)},this);a.register(\"screen-update-cursor\",function(l){this.update_cursor(l[0],l[1])},this);a.register(\"screen-update-cursor-scanline\",function(l){this.update_cursor_scanline(l[0],\nl[1])},this);a.register(\"screen-set-size-text\",function(l){this.set_size_text(l[0],l[1])},this);a.register(\"screen-set-size-graphical\",function(l){this.set_size_graphical(l[0],l[1])},this);this.put_char=function(l,m,n,r,v){l<g&&m<k&&(l=3*(l*k+m),f[l]=n,f[l+1]=r,f[l+2]=v)};this.destroy=function(){};this.set_mode=function(l){};this.clear_screen=function(){};this.set_size_text=function(l,m){if(l!==k||m!==g)f=new Int32Array(l*m*3),k=l,g=m};this.set_size_graphical=function(l,m){b=new Uint8Array(4*l*m);\nc=new Int32Array(b.buffer);this.bus.send(\"screen-tell-buffer\",[c],[c.buffer])};this.set_scale=function(l,m){};this.update_cursor_scanline=function(l,m){};this.update_cursor=function(l,m){if(l!==d||m!==e)d=l,e=m};this.update_buffer=function(l,m){};this.get_text_screen=function(){for(var l=[],m=0;m<g;m++)l.push(this.get_text_row(m));return l};this.get_text_row=function(l){var m=\"\";l=3*l*k;for(var n=0;n<k;n++)m+=String.fromCharCode(f[l+3*n]);return m}};const print_stats={stats_to_string:function(a){return print_stats.print_misc_stats(a)+print_stats.print_instruction_counts(a)},print_misc_stats:function(a){let b=\"\";var c=\"COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_SUCCESS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE_SUCCESS COMPILE_PAGE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE JIT_CACHE_OVERRIDE JIT_CACHE_OVERRIDE_DIFFERENT_STATE_FLAGS RUN_INTERPRETED RUN_INTERPRETED_PENDING RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_MISSED_COMPILED_ENTRY_LOOKUP RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS DO_RUN DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED\".split(\" \"),\nd=0;const e={};for(let k=0;k<c.length;k++){const g=c[k];var f=void 0;if(g.includes(\"/\")){d++;const [l,m]=g.split(\"/\");f=e[l]/e[m]}else f=e[g]=a.wm.exports.profiler_stat_get(k-d),f=1E8<=f?Math.round(f/1E6)+\"m\":1E5<=f?Math.round(f/1E3)+\"k\":f;b+=g+\"=\"+f+\"\\n\"}b+=\"\\n\";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+(\"TLB_ENTRIES=\"+c+\" (\"+d+\" global, \"+(c-d)+\" non-global)\\nWASM_TABLE_FREE=\")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+\"\\n\");\nb+=\"JIT_CACHE_SIZE=\"+a.wm.exports.jit_get_cache_size()+\"\\n\";b+=\"FLAT_SEGMENTS=\"+a.wm.exports.has_flat_segmentation()+\"\\n\";b+=\"do_many_cycles avg: \"+(do_many_cycles_total/do_many_cycles_count||0)+\"\\n\";b+=\"wasm memory size: \"+(a.wasm_memory.buffer.byteLength>>20)+\"m\\n\";b=b+\"Config:\\nMAX_PAGES=\"+(a.wm.exports.get_config(0)+\"\\n\");b+=\"JIT_USE_LOOP_SAFETY=\"+a.wm.exports.get_config(1)+\"\\n\";return b+=\"MAX_EXTRA_BASIC_BLOCKS=\"+a.wm.exports.get_config(2)+\"\\n\"},print_instruction_counts:function(a){return[print_stats.print_instruction_counts_offset(a,\n!1,!1,!1,!1),print_stats.print_instruction_counts_offset(a,!0,!1,!1,!1),print_stats.print_instruction_counts_offset(a,!1,!0,!1,!1),print_stats.print_instruction_counts_offset(a,!1,!1,!0,!1),print_stats.print_instruction_counts_offset(a,!1,!1,!1,!0)].join(\"\\n\\n\")},print_instruction_counts_offset:function(a,b,c,d,e){let f=\"\";var k=[],g=b?\"compiled\":c?\"jit exit\":d?\"unguarded register\":e?\"wasm size\":\"executed\";for(let n=0;256>n;n++)for(let r=0;8>r;r++)for(let v of[!1,!0]){var l=a.wm.exports.get_opstats_buffer(b,\nc,d,e,n,!1,v,r);k.push({opcode:n,count:l,is_mem:v,fixed_g:r});l=a.wm.exports.get_opstats_buffer(b,c,d,e,n,!0,v,r);k.push({opcode:3840|n,count:l,is_mem:v,fixed_g:r})}a=0;b=new Set([38,46,54,62,100,101,102,103,240,242,243]);for(let {count:n,opcode:r}of k)b.has(r)||(a+=n);if(0===a)return\"\";c=new Uint32Array(256);b=new Uint32Array(256);for(let {opcode:n,count:r}of k)3840==(n&65280)?b[n&255]+=r:c[n&255]+=r;f=f+\"------------------\\nTotal: \"+(a+\"\\n\");const m=1E7<a?1E3:1;d=Math.max.apply(Math,k.map(({count:n})=>\nMath.round(n/m)));d=String(d).length;f+=`Instruction counts ${g} (in ${m}):\\n`;for(e=0;256>e;e++)f+=h(e,2).slice(2)+\":\"+v86util.pads(Math.round(c[e]/m),d),f=15==e%16?f+\"\\n\":f+\" \";f=f+\"\\n\"+`Instruction counts ${g} (0f, in ${m}):\\n`;for(g=0;256>g;g++)f+=h(g&255,2).slice(2)+\":\"+v86util.pads(Math.round(b[g]/m),d),f=15==g%16?f+\"\\n\":f+\" \";f+=\"\\n\";k=k.filter(({count:n})=>n).sort(({count:n},{count:r})=>r-n);for(let {opcode:n,is_mem:r,fixed_g:v,count:q}of k.slice(0,200))k=n.toString(16)+\"_\"+v+(r?\"_m\":\"_r\"),\nf+=k+\":\"+(q/a*100).toFixed(2)+\" \";return f+\"\\n\"}};\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports&&(module.exports.print_stats=print_stats);function FileStorageInterface(){}FileStorageInterface.prototype.read=function(a,b,c){};FileStorageInterface.prototype.cache=function(a,b){};FileStorageInterface.prototype.uncache=function(a){};function MemoryFileStorage(){this.filedata=new Map}MemoryFileStorage.prototype.read=async function(a,b,c){dbg_assert(a,\"MemoryFileStorage read: sha256sum should be a non-empty string\");return(a=this.filedata.get(a))?a.subarray(b,b+c):null};\nMemoryFileStorage.prototype.cache=async function(a,b){dbg_assert(a,\"MemoryFileStorage cache: sha256sum should be a non-empty string\");this.filedata.set(a,b)};MemoryFileStorage.prototype.uncache=function(a){this.filedata.delete(a)};function ServerFileStorageWrapper(a,b){dbg_assert(b,\"ServerMemoryFileStorage: baseurl should not be empty\");this.storage=a;this.baseurl=b}\nServerFileStorageWrapper.prototype.load_from_server=function(a){return new Promise((b,c)=>{v86util.load_file(this.baseurl+a,{done:d=>{const e=new Uint8Array(d);this.cache(a,e).then(()=>b(e))}})})};ServerFileStorageWrapper.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,b+c)};ServerFileStorageWrapper.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};\nServerFileStorageWrapper.prototype.uncache=function(a){this.storage.uncache(a)};\"undefined\"!==typeof window?(window.MemoryFileStorage=MemoryFileStorage,window.ServerFileStorageWrapper=ServerFileStorageWrapper):\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?(module.exports.MemoryFileStorage=MemoryFileStorage,module.exports.ServerFileStorageWrapper=ServerFileStorageWrapper):\"function\"===typeof importScripts&&(self.MemoryFileStorage=MemoryFileStorage,self.ServerFileStorageWrapper=ServerFileStorageWrapper);var S_IRWXUGO=511,S_IFMT=61440,S_IFSOCK=49152,S_IFLNK=40960,S_IFREG=32768,S_IFBLK=24576,S_IFDIR=16384,S_IFCHR=8192,O_RDONLY=0,O_WRONLY=1,O_RDWR=2,O_ACCMODE=3,STATUS_INVALID=-1,STATUS_OK=0,STATUS_ON_STORAGE=2,STATUS_UNLINKED=4,STATUS_FORWARDING=5,JSONFS_VERSION=3,JSONFS_IDX_NAME=0,JSONFS_IDX_SIZE=1,JSONFS_IDX_MTIME=2,JSONFS_IDX_MODE=3,JSONFS_IDX_UID=4,JSONFS_IDX_GID=5,JSONFS_IDX_TARGET=6,JSONFS_IDX_SHA256=6;\nfunction FS(a,b){this.inodes=[];this.events=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata={};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory(\"\",-1)}FS.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&S_IFDIR)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};\nFS.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new Inode(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};\nFS.prototype.AddEvent=function(a,b){var c=this.inodes[a];c.status==STATUS_OK||c.status==STATUS_ON_STORAGE?b():this.is_forwarder(c)?this.follow_fs(c).AddEvent(c.foreign_id,b):this.events.push({id:a,OnEvent:b})};FS.prototype.HandleEvent=function(a){var b=this.inodes[a];this.is_forwarder(b)&&this.follow_fs(b).HandleEvent(b.foreign_id);b=[];for(var c=0;c<this.events.length;c++)this.events[c].id==a?this.events[c].OnEvent():b.push(this.events[c]);this.events=b};\nFS.prototype.load_from_json=function(a,b){dbg_assert(a,\"Invalid fs passed to load_from_json\");if(a.version!==JSONFS_VERSION)throw\"The filesystem JSON format has changed. Please update your fs2json (https://github.com/copy/fs2json) and recreate the filesystem JSON.\";var c=a.fsroot;this.used_size=a.size;for(a=0;a<c.length;a++)this.LoadRecursive(c[a],0);b&&b()};\nFS.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();const d=a[JSONFS_IDX_NAME];c.size=a[JSONFS_IDX_SIZE];c.mtime=a[JSONFS_IDX_MTIME];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[JSONFS_IDX_MODE];c.uid=a[JSONFS_IDX_UID];c.gid=a[JSONFS_IDX_GID];var e=c.mode&S_IFMT;e===S_IFDIR?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[JSONFS_IDX_TARGET])):e===S_IFREG?(c.status=STATUS_ON_STORAGE,c.sha256sum=a[JSONFS_IDX_SHA256],dbg_assert(c.sha256sum),this.PushInode(c,b,d)):e===S_IFLNK?(c.symlink=\na[JSONFS_IDX_TARGET],this.PushInode(c,b,d)):e!==S_IFSOCK&&dbg_log(\"Unexpected ifmt: \"+h(e)+\" (\"+d+\")\")};FS.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};FS.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||0===a.foreign_id};\nFS.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];dbg_assert(!this.is_forwarder(e),\"Filesystem: Shouldn't link under fowarder parents\");dbg_assert(this.IsDirectory(a),\"Filesystem: Can't link under non-directories\");dbg_assert(this.should_be_linked(d),\"Filesystem: Can't link across filesystems apart from their root\");dbg_assert(0<=d.nlinks,\"Filesystem: Found negative nlinks value of \"+d.nlinks);dbg_assert(!e.direntries.has(c),\"Filesystem: Name '\"+c+\"' is already taken\");\ne.direntries.set(c,b);d.nlinks++;this.IsDirectory(b)&&(dbg_assert(!d.direntries.has(\"..\"),\"Filesystem: Cannot link a directory twice\"),d.direntries.has(\".\")||d.nlinks++,d.direntries.set(\".\",b),d.direntries.set(\"..\",a),e.nlinks++)};\nFS.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];dbg_assert(!this.is_forwarder(e),\"Filesystem: Can't unlink from fowarders\");dbg_assert(this.IsDirectory(a),\"Filesystem: Can't unlink from non-directories\");e.direntries.delete(b)?(d.nlinks--,this.IsDirectory(c)&&(dbg_assert(d.direntries.get(\"..\")===a,\"Filesystem: Found directory with bad parent id\"),d.direntries.delete(\"..\"),e.nlinks--),dbg_assert(0<=d.nlinks,\"Filesystem: Found negative nlinks value of \"+\nd.nlinks)):dbg_assert(!1,\"Filesystem: Can't unlink non-existent file: \"+b)};FS.prototype.PushInode=function(a,b,c){-1!=b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0==this.inodes.length?(this.inodes.push(a),a.direntries.set(\".\",0),a.direntries.set(\"..\",0),a.nlinks=2):(message.Debug(\"Error in Filesystem: Pushed inode with name = \"+c+\" has no parent\"),message.Abort())};\nfunction Inode(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink=\"\";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum=\"\";this.locks=[];this.foreign_id=this.mount_id=-1}\nInode.prototype.get_state=function(){const a=[];a[0]=this.mode;a[1]=(this.mode&S_IFMT)===S_IFDIR?[...this.direntries]:(this.mode&S_IFMT)===S_IFREG?this.sha256sum:(this.mode&S_IFMT)===S_IFLNK?this.symlink:(this.mode&S_IFMT)===S_IFSOCK?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};\nInode.prototype.set_state=function(a){this.mode=a[0];if((this.mode&S_IFMT)===S_IFDIR){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else(this.mode&S_IFMT)===S_IFREG?this.sha256sum=a[1]:(this.mode&S_IFMT)===S_IFLNK?this.symlink=a[1]:(this.mode&S_IFMT)===S_IFSOCK&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new FSLockRegion;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];\nthis.atime=a[9];this.mtime=a[10];this.qid.type=(this.mode&S_IFMT)>>8;this.qid.version=a[11];this.qid.path=a[12];this.nlinks=a[13]};\nFS.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new Inode(-1);dbg_assert(d,\"Filesystem divert: name (\"+b+\") not found\");dbg_assert(this.IsDirectory(c)||1>=d.nlinks,\"Filesystem: can't divert hardlinked file '\"+b+\"' with nlinks=\"+d.nlinks);Object.assign(e,d);const f=this.inodes.length;this.inodes.push(e);e.fid=f;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,f);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,f,b));if(this.IsDirectory(c)&&\n!this.is_forwarder(d))for(const [k,g]of e.direntries)\".\"!==k&&\"..\"!==k&&this.IsDirectory(g)&&this.inodes[g].direntries.set(\"..\",f);this.inodedata[f]=this.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return f};FS.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};FS.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new Inode(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=a;return b};\nFS.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=511|S_IFDIR;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|S_IFDIR);c.qid.type=S_IFDIR>>8;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,\"newdir\");return this.inodes.length-1};\nFS.prototype.CreateFile=function(a,b){var c=this.inodes[b];if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.uid=this.inodes[b].uid;c.gid=this.inodes[b].gid;c.qid.type=S_IFREG>>8;c.mode=this.inodes[b].mode&438|S_IFREG;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,\"newfile\");return this.inodes.length-1};\nFS.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;e.qid.type=S_IFSOCK>>8;e.mode=this.inodes[b].mode&438;this.PushInode(e,b,a);return this.inodes.length-1};\nFS.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=S_IFLNK>>8;d.symlink=c;d.mode=S_IFLNK;this.PushInode(d,b,a);return this.inodes.length-1};\nFS.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateTextFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);b=this.inodes[d];a=new Uint8Array(c.length);b.size=c.length;for(b=0;b<c.length;b++)a[b]=c.charCodeAt(b);await this.set_data(d,a);return d};\nFS.prototype.CreateBinaryFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateBinaryFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);a=this.inodes[d];b=new Uint8Array(c.length);b.set(c);await this.set_data(d,b);a.size=c.length;return d};\nFS.prototype.OpenInode=function(a,b){var c=this.inodes[a];if(this.is_forwarder(c))return this.follow_fs(c).OpenInode(c.foreign_id,b);(c.mode&S_IFMT)==S_IFDIR&&this.FillDirectory(a);return!0};FS.prototype.CloseInode=async function(a){var b=this.inodes[a];if(this.is_forwarder(b))return await this.follow_fs(b).CloseInode(b.foreign_id);b.status===STATUS_ON_STORAGE&&this.storage.uncache(b.sha256sum);b.status==STATUS_UNLINKED&&(b.status=STATUS_INVALID,await this.DeleteData(a))};\nFS.prototype.Rename=async function(a,b,c,d){if(a==c&&b==d)return 0;var e=this.Search(a,b);if(-1===e)return-ENOENT;var f=this.GetFullPath(a)+\"/\"+b;if(-1!=this.Search(c,d)){var k=this.Unlink(c,d);if(0>k)return k}var g=this.inodes[e],l=this.inodes[a];k=this.inodes[c];if(this.is_forwarder(l)||this.is_forwarder(k))if(this.is_forwarder(l)&&l.mount_id===k.mount_id){if(a=await this.follow_fs(l).Rename(l.foreign_id,b,k.foreign_id,d),0>a)return a}else{if(this.is_a_root(e))return dbg_log(\"XXX: Attempted to move mountpoint (\"+\nb+\") - skipped\",LOG_9P),-EPERM;if(!this.IsDirectory(e)&&1<this.GetInode(e).nlinks)return dbg_log(\"XXX: Attempted to move hardlinked file (\"+b+\") across filesystems - skipped\",LOG_9P),-EPERM;{l=this.divert(a,b);const m=this.GetInode(e),n=await this.Read(l,0,m.size);this.is_forwarder(k)?(c=this.follow_fs(k),d=this.IsDirectory(l)?c.CreateDirectory(d,k.foreign_id):c.CreateFile(d,k.foreign_id),c=c.GetInode(d),this.copy_inode(m,c),this.set_forwarder(e,k.mount_id,d)):(this.delete_forwarder(g),this.copy_inode(m,\ng),this.link_under_dir(c,e,d));await this.ChangeSize(e,m.size);n&&n.length&&await this.Write(e,0,n.length,n);if(this.IsDirectory(e))for(const r of this.GetChildren(l))if(k=await this.Rename(l,r,e,r),0>k)return k;await this.DeleteData(l);a=this.Unlink(a,b);if(0>a)return a}}else this.unlink_from_dir(a,b),this.link_under_dir(c,e,d),g.qid.version++;this.NotifyListeners(e,\"rename\",{oldpath:f});return 0};\nFS.prototype.Write=async function(a,b,c,d){this.NotifyListeners(a,\"write\");var e=this.inodes[a];if(this.is_forwarder(e))a=e.foreign_id,await this.follow_fs(e).Write(a,b,c,d);else{var f=await this.get_buffer(a);!f||f.length<b+c?(await this.ChangeSize(a,Math.floor(3*(b+c)/2)),e.size=b+c,f=await this.get_buffer(a)):e.size<b+c&&(e.size=b+c);d&&f.set(d.subarray(0,c),b);await this.set_data(a,f)}};\nFS.prototype.Read=async function(a,b,c){const d=this.inodes[a];return this.is_forwarder(d)?(a=d.foreign_id,await this.follow_fs(d).Read(a,b,c)):await this.get_data(a,b,c)};FS.prototype.Search=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){const c=a.foreign_id;b=this.follow_fs(a).Search(c,b);return-1===b?-1:this.get_forwarder(a.mount_id,b)}b=a.direntries.get(b);return void 0===b?-1:b};\nFS.prototype.CountUsedInodes=function(){let a=this.inodes.length;for(const {fs:b,backtrack:c}of this.mounts)a+=b.CountUsedInodes(),a-=c.size;return a};FS.prototype.CountFreeInodes=function(){let a=1048576;for(const {fs:b}of this.mounts)a+=b.CountFreeInodes();return a};FS.prototype.GetTotalSize=function(){let a=this.used_size;for(const {fs:b}of this.mounts)a+=b.GetTotalSize();return a};FS.prototype.GetSpace=function(){let a=this.total_size;for(const {fs:b}of this.mounts)a+=b.GetSpace();return this.total_size};\nFS.prototype.GetDirectoryName=function(a){const b=this.inodes[this.GetParent(a)];if(this.is_forwarder(b))return this.follow_fs(b).GetDirectoryName(this.inodes[a].foreign_id);if(!b)return\"\";for(const [c,d]of b.direntries)if(d===a)return c;dbg_assert(!1,\"Filesystem: Found directory inode whose parent doesn't link to it\");return\"\"};\nFS.prototype.GetFullPath=function(a){dbg_assert(this.IsDirectory(a),\"Filesystem: Cannot get full path of non-directory inode\");for(var b=\"\";0!=a;)b=\"/\"+this.GetDirectoryName(a)+b,a=this.GetParent(a);return b.substring(1)};\nFS.prototype.Link=function(a,b,c){if(this.IsDirectory(b))return-EPERM;const d=this.inodes[a],e=this.inodes[b];if(this.is_forwarder(d))return this.is_forwarder(e)&&e.mount_id===d.mount_id?this.follow_fs(d).Link(d.foreign_id,e.foreign_id,c):(dbg_log(\"XXX: Attempted to hardlink a file into a child filesystem - skipped\",LOG_9P),-EPERM);if(this.is_forwarder(e))return dbg_log(\"XXX: Attempted to hardlink file across filesystems - skipped\",LOG_9P),-EPERM;this.link_under_dir(a,b,c);return 0};\nFS.prototype.Unlink=function(a,b){if(\".\"===b||\"..\"===b)return-EPERM;const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];if(this.is_forwarder(e))return dbg_assert(this.is_forwarder(d),\"Children of forwarders should be forwarders\"),a=e.foreign_id,this.follow_fs(e).Unlink(a,b);if(this.IsDirectory(c)&&!this.IsEmpty(c))return-ENOTEMPTY;this.unlink_from_dir(a,b);0===d.nlinks&&(d.status=STATUS_UNLINKED,this.NotifyListeners(c,\"delete\"));return 0};\nFS.prototype.DeleteData=async function(a){const b=this.inodes[a];this.is_forwarder(b)?await this.follow_fs(b).DeleteData(b.foreign_id):(b.size=0,delete this.inodedata[a])};\nFS.prototype.get_buffer=async function(a){const b=this.inodes[a];dbg_assert(b,`Filesystem get_buffer: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a]:b.status===STATUS_ON_STORAGE?(dbg_assert(b.sha256sum,\"Filesystem get_data: found inode on server without sha256sum\"),await this.storage.read(b.sha256sum,0,b.size)):null};\nFS.prototype.get_data=async function(a,b,c){const d=this.inodes[a];dbg_assert(d,`Filesystem get_data: idx ${a} does not point to an inode`);return this.inodedata[a]?this.inodedata[a].subarray(b,b+c):d.status===STATUS_ON_STORAGE?(dbg_assert(d.sha256sum,\"Filesystem get_data: found inode on server without sha256sum\"),await this.storage.read(d.sha256sum,b,c)):null};\nFS.prototype.set_data=async function(a,b){this.inodedata[a]=b;this.inodes[a].status===STATUS_ON_STORAGE&&(this.inodes[a].status=STATUS_OK,this.storage.uncache(this.inodes[a].sha256sum))};FS.prototype.GetInode=function(a){dbg_assert(!isNaN(a),\"Filesystem GetInode: NaN idx\");dbg_assert(0<=a&&a<this.inodes.length,\"Filesystem GetInode: out of range idx:\"+a);a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).GetInode(a.foreign_id):a};\nFS.prototype.ChangeSize=async function(a,b){var c=this.GetInode(a),d=await this.get_data(a,0,c.size);if(b!=c.size){var e=new Uint8Array(b);c.size=b;d&&e.set(d.subarray(0,Math.min(d.length,c.size)),0);await this.set_data(a,e)}};\nFS.prototype.SearchPath=function(a){a=a.replace(\"//\",\"/\");a=a.split(\"/\");0<a.length&&0===a[a.length-1].length&&a.pop();0<a.length&&0===a[0].length&&a.shift();const b=a.length;var c=-1,d=0;let e=null;for(var f=0;f<b;f++)if(c=d,d=this.Search(c,a[f]),!e&&this.is_forwarder(this.inodes[c])&&(e=\"/\"+a.slice(f).join(\"/\")),-1==d)return f<b-1?{id:-1,parentid:-1,name:a[f],forward_path:e}:{id:-1,parentid:c,name:a[f],forward_path:e};return{id:d,parentid:c,name:a[f],forward_path:e}};\nFS.prototype.GetRecursiveList=function(a,b){if(this.is_forwarder(this.inodes[a])){const c=this.follow_fs(this.inodes[a]),d=this.inodes[a].mount_id,e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)\".\"!==c&&\"..\"!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,b))};\nFS.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--){const c=this.Unlink(b[a].parentid,b[a].name);dbg_assert(0===c,\"Filesystem RecursiveDelete failed at parent=\"+b[a].parentid+\", name='\"+b[a].name+\"' with error code: \"+-c)}};\nFS.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!=b.id&&((this.inodes[b.id].mode&S_IFMT)==S_IFREG?(a=this.Unlink(b.parentid,b.name),dbg_assert(0===a,\"Filesystem DeleteNode failed with error code: \"+-a)):(this.inodes[b.id].mode&S_IFMT)==S_IFDIR&&(this.RecursiveDelete(a),a=this.Unlink(b.parentid,b.name),dbg_assert(0===a,\"Filesystem DeleteNode failed with error code: \"+-a)))};FS.prototype.NotifyListeners=function(a,b,c){};\nFS.prototype.Check=function(){for(var a=1;a<this.inodes.length;a++)if(this.inodes[a].status!=STATUS_INVALID){var b=this.GetInode(a);0>b.nlinks&&message.Debug(\"Error in filesystem: negative nlinks=\"+b.nlinks+\" at id =\"+a);if(this.IsDirectory(a)){b=this.GetInode(a);this.IsDirectory(a)&&0>this.GetParent(a)&&message.Debug(\"Error in filesystem: negative parent id \"+a);for(const [c,d]of b.direntries){0===c.length&&message.Debug(\"Error in filesystem: inode with no name and id \"+d);for(const e of c)32>e&&\nmessage.Debug(\"Error in filesystem: Unallowed char in filename\")}}}};FS.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+UTF8.UTF8Length(d);a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=marshall.Marshall([\"Q\",\"d\",\"b\",\"s\"],[b.qid,c+13+8+1+2+UTF8.UTF8Length(d),b.mode>>12,d],a,c)}};\nFS.prototype.RoundToDirentry=function(a,b){const c=this.inodedata[a];dbg_assert(c,`FS directory data for dirid=${a} should be generated`);dbg_assert(c.length,\"FS directory should have at least an entry\");if(b>=c.length)return c.length;for(a=0;;){const d=marshall.Unmarshall([\"Q\",\"d\"],c,{offset:a})[1];if(d>b)break;a=d}return a};FS.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):(a.mode&S_IFMT)===S_IFDIR};\nFS.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if(\".\"!==b&&\"..\"!==b)return!1;return!0};FS.prototype.GetChildren=function(a){dbg_assert(this.IsDirectory(a),\"Filesystem: cannot get children of non-directory inode\");a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())\".\"!==c&&\"..\"!==c&&b.push(c);return b};\nFS.prototype.GetParent=function(a){dbg_assert(this.IsDirectory(a),\"Filesystem: cannot get parent of non-directory inode\");a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get(\"..\");{const b=this.follow_fs(a).GetParent(a.foreign_id);dbg_assert(-1!==b,\"Filesystem: should not have invalid parent ids\");return this.get_forwarder(a.mount_id,b)}};\nFS.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;a.caps[4]=255;a.caps[5]=255;a.caps[6]=255;a.caps[7]=255;a.caps[8]=255;a.caps[9]=255;a.caps[10]=255;a.caps[11]=255;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};function FSMountInfo(a){this.fs=a;this.backtrack=new Map}\nFSMountInfo.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};FSMountInfo.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};\nFS.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];dbg_assert(0===d.nlinks,\"Filesystem: attempted to convert an inode into forwarder before unlinking the inode\");this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=STATUS_FORWARDING;d.mount_id=b;d.foreign_id=c;this.mounts[b].backtrack.set(c,a)};FS.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};\nFS.prototype.is_forwarder=function(a){return a.status===STATUS_FORWARDING};FS.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};FS.prototype.get_forwarder=function(a,b){var c=this.mounts[a];dbg_assert(0<=b,\"Filesystem get_forwarder: invalid foreign_id: \"+b);dbg_assert(c,\"Filesystem get_forwarder: invalid mount number: \"+a);c=c.backtrack.get(b);return void 0===c?this.create_forwarder(a,b):c};\nFS.prototype.delete_forwarder=function(a){dbg_assert(this.is_forwarder(a),\"Filesystem delete_forwarder: expected forwarder\");a.status=STATUS_INVALID;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};FS.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];dbg_assert(this.is_forwarder(a),\"Filesystem follow_fs: inode should be a forwarding inode\");dbg_assert(b,\"Filesystem follow_fs: inode<id=\"+a.fid+\"> should point to valid mounted FS\");return b.fs};\nFS.prototype.Mount=function(a,b){dbg_assert(b.qidcounter===this.qidcounter,\"Cannot mount filesystem whose qid numbers aren't synchronised with current filesystem.\");var c=this.SearchPath(a);if(-1===c.parentid)return dbg_log(\"Mount failed: parent for path not found: \"+a,LOG_9P),-ENOENT;if(-1!==c.id)return dbg_log(\"Mount failed: file already exists at path: \"+a,LOG_9P),-EEXIST;if(c.forward_path)return a=this.inodes[c.parentid],c=this.follow_fs(a).Mount(c.forward_path,b),0>c?c:this.get_forwarder(a.mount_id,\nc);a=this.mounts.length;this.mounts.push(new FSMountInfo(b));b=this.create_forwarder(a,0);this.link_under_dir(c.parentid,b,c.name);return b};function FSLockRegion(){this.type=P9_LOCK_TYPE_UNLCK;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=\"\"}FSLockRegion.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};\nFSLockRegion.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};FSLockRegion.prototype.clone=function(){const a=new FSLockRegion;a.set_state(this.get_state());return a};\nFSLockRegion.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||this.type===P9_LOCK_TYPE_UNLCK||a.type===P9_LOCK_TYPE_UNLCK||this.type!==P9_LOCK_TYPE_WRLCK&&a.type!==P9_LOCK_TYPE_WRLCK||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};FSLockRegion.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};\nFSLockRegion.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};FS.prototype.DescribeLock=function(a,b,c,d,e){dbg_assert(a===P9_LOCK_TYPE_RDLCK||a===P9_LOCK_TYPE_WRLCK||a===P9_LOCK_TYPE_UNLCK,\"Filesystem: Invalid lock type: \"+a);dbg_assert(0<=b,\"Filesystem: Invalid negative lock starting offset: \"+b);dbg_assert(0<c,\"Filesystem: Invalid non-positive lock length: \"+c);const f=new FSLockRegion;f.type=a;f.start=b;f.length=c;f.proc_id=d;f.client_id=e;return f};\nFS.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};\nFS.prototype.Lock=function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(b.type!==P9_LOCK_TYPE_UNLCK&&this.GetLock(a,b))return P9_LOCK_BLOCKED;for(c=0;c<d.locks.length;c++){a=d.locks[c];dbg_assert(0<a.length,\"Filesystem: Found non-positive lock region length: \"+a.length);dbg_assert(a.type===P9_LOCK_TYPE_RDLCK||a.type===P9_LOCK_TYPE_WRLCK,\"Filesystem: Found invalid lock type: \"+a.type);dbg_assert(!d.locks[c-1]||d.locks[c-1].start<=\na.start,\"Filesystem: Locks should be sorted by starting offset\");if(a.start+a.length<=b.start)continue;if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){dbg_assert(!a.conflicts_with(b),\"Filesytem: Found conflicting lock region, despite already checked for conflicts\");continue}var e=b.start+b.length;const f=b.start-a.start,k=a.start+a.length-e;if(0<f&&0<k&&a.type===b.type)return P9_LOCK_SUCCESS;0<f&&(a.length=f);if(0>=f&&0<k)a.start=e,a.length=k;else if(0<k){for(;c<\nd.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,k,a.proc_id,a.client_id))}else 0>=f&&(d.locks.splice(c,1),c--)}if(b.type!==P9_LOCK_TYPE_UNLCK){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=d.locks[e].length,d.locks.splice(e,1));break}}return P9_LOCK_SUCCESS};\nFS.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>\".\"!==b&&\"..\"!==b)};FS.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};var VIRTIO_MAGIC_REG=0,VIRTIO_VERSION_REG=4,VIRTIO_DEVICE_REG=8,VIRTIO_VENDOR_REG=12,VIRTIO_HOSTFEATURES_REG=16,VIRTIO_HOSTFEATURESSEL_REG=20,VIRTIO_GUESTFEATURES_REG=32,VIRTIO_GUESTFEATURESSEL_REG=36,VIRTIO_GUEST_PAGE_SIZE_REG=40,VIRTIO_QUEUESEL_REG=48,VIRTIO_QUEUENUMMAX_REG=52,VIRTIO_QUEUENUM_REG=56,VIRTIO_QUEUEALIGN_REG=60,VIRTIO_QUEUEPFN_REG=64,VIRTIO_QUEUENOTIFY_REG=80,VIRTIO_INTERRUPTSTATUS_REG=96,VIRTIO_INTERRUPTACK_REG=100,VIRTIO_STATUS_REG=112,VRING_DESC_F_NEXT=1,VRING_DESC_F_WRITE=2,VRING_DESC_F_INDIRECT=\n4;function hex8(a){return h(a)}var message={Debug:function(a){dbg_log([].slice.apply(arguments).join(\" \"),LOG_9P)},Abort:function(){if(DEBUG)throw Error(\"message.Abort()\");}},LoadBinaryResource;\nLoadBinaryResource=\"undefined\"!==typeof XMLHttpRequest?function(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onreadystatechange=function(){if(4==d.readyState)if(200!=d.status&&0!=d.status)c(\"Error: Could not load file \"+a);else{var e=d.response;e?b(e):c(\"Error: No data received from: \"+a)}};d.send(null)}:function(a,b,c){require(\"fs\").readFile(a,function(d,e){d?c(d):b(e.buffer)})};var marshall={Marshall:function(a,b,c,d){for(var e,f=0,k=0;k<a.length;k++)switch(e=b[k],a[k]){case \"w\":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;f+=4;break;case \"d\":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;f+=8;break;case \"h\":c[d++]=e&255;c[d++]=e>>8;f+=2;break;case \"b\":c[d++]=e;f+=1;break;case \"s\":var g=d,l=0;c[d++]=0;c[d++]=0;f+=2;for(var m of e)UnicodeToUTF8Stream(m.charCodeAt(0)).forEach(function(n){c[d++]=n;f+=1;l++});\nc[g+0]=l&255;c[g+1]=l>>8&255;break;case \"Q\":marshall.Marshall([\"b\",\"w\",\"d\"],[e.type,e.version,e.path],c,d);d+=13;f+=13;break;default:message.Debug(\"Marshall: Unknown type=\"+a[k])}return f},Unmarshall:function(a,b,c){let d=c.offset;for(var e=[],f=0;f<a.length;f++)switch(a[f]){case \"w\":var k=b[d++];k+=b[d++]<<8;k+=b[d++]<<16;k+=b[d++]<<24>>>0;e.push(k);break;case \"d\":k=b[d++];k+=b[d++]<<8;k+=b[d++]<<16;k+=b[d++]<<24>>>0;d+=4;e.push(k);break;case \"h\":k=b[d++];e.push(k+(b[d++]<<8));break;case \"b\":e.push(b[d++]);\nbreak;case \"s\":k=b[d++];k+=b[d++]<<8;for(var g=\"\",l=new UTF8StreamToUnicode,m=0;m<k;m++){var n=l.Put(b[d++]);-1!=n&&(g+=String.fromCharCode(n))}e.push(g);break;case \"Q\":c.offset=d;k=marshall.Unmarshall([\"b\",\"w\",\"d\"],b,c);d=c.offset;e.push({type:k[0],version:k[1],path:k[2]});break;default:message.Debug(\"Error in Unmarshall: Unknown type=\"+a[f])}c.offset=d;return e},Unmarshall2:function(a,b){for(var c=[],d=0;d<a.length;d++)switch(a[d]){case \"w\":var e=b();e+=b()<<8;e+=b()<<16;e+=b()<<24>>>0;c.push(e);\nbreak;case \"d\":e=b();e+=b()<<8;e+=b()<<16;e+=b()<<24>>>0;b();b();b();b();c.push(e);break;case \"h\":e=b();c.push(e+(b()<<8));break;case \"b\":c.push(b());break;case \"s\":e=b();e+=b()<<8;for(var f=\"\",k=new UTF8StreamToUnicode,g=0;g<e;g++){var l=k.Put(b());-1!=l&&(f+=String.fromCharCode(l))}c.push(f);break;default:message.Debug(\"Error in Unmarshall2: Unknown type=\"+a[d])}return c}};var UTF8={};function UTF8StreamToUnicode(){this.stream=new Uint8Array(5);this.ofs=0;this.Put=function(a){this.stream[this.ofs]=a;this.ofs++;switch(this.ofs){case 1:if(128>this.stream[0])return this.ofs=0,this.stream[0];break;case 2:if(192==(this.stream[0]&224)&&128==(this.stream[1]&192))return this.ofs=0,(this.stream[0]&31)<<6|this.stream[1]&63}return-1}}function UnicodeToUTF8Stream(a){if(128>a)return[a];if(2048>a)return[192|a>>6&31,128|a&63]}\nUTF8.UTF8Length=function(a){for(var b=0,c=0;c<a.length;c++){var d=a.charCodeAt(c);b+=128>d?1:2}return b};}).call(this);\n"
  },
  {
    "path": "tabby-web-demo/package.json",
    "content": "{\n  \"name\": \"tabby-web-demo\",\n  \"version\": \"1.0.231-nightly.0\",\n  \"main\": \"dist/index.js\",\n  \"typings\": \"dist/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"webpack --progress --color\",\n    \"watch\": \"webpack --progress --color --watch\"\n  },\n  \"files\": [\n    \"data\",\n    \"dist\"\n  ],\n  \"author\": \"Tabby Developers\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/webpack-env\": \"^1.16.0\"\n  },\n  \"dependencies\": {\n    \"svg-inline-loader\": \"^0.8.2\"\n  }\n}\n"
  },
  {
    "path": "tabby-web-demo/src/buttonProvider.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nimport { Injectable } from '@angular/core'\nimport { ToolbarButtonProvider, ToolbarButton, AppService } from 'tabby-core'\nimport { DemoTerminalTabComponent } from './components/terminalTab.component'\n\n/** @hidden */\n@Injectable()\nexport class ButtonProvider extends ToolbarButtonProvider {\n    constructor (\n        private app: AppService,\n    ) {\n        super()\n        this.app.ready$.subscribe(() => {\n            this.app.openNewTab({ type: DemoTerminalTabComponent })\n        })\n    }\n\n    provide (): ToolbarButton[] {\n        return [\n            {\n                icon: require('./icons/plus.svg'),\n                title: 'New demo terminal',\n                click: () => {\n                    this.app.openNewTab({ type: DemoTerminalTabComponent })\n                },\n            },\n        ]\n    }\n}\n"
  },
  {
    "path": "tabby-web-demo/src/components/terminalTab.component.ts",
    "content": "import { Component, Injector } from '@angular/core'\nimport { BaseTerminalProfile, BaseTerminalTabComponent } from 'tabby-terminal'\nimport { Session } from '../session'\n\n// eslint-disable-next-line @typescript-eslint/no-type-alias\ntype DemoProfile = BaseTerminalProfile\n\n/** @hidden */\n@Component({\n    selector: 'demoTerminalTab',\n    template: BaseTerminalTabComponent.template,\n    styles: BaseTerminalTabComponent.styles,\n    animations: BaseTerminalTabComponent.animations,\n})\nexport class DemoTerminalTabComponent extends BaseTerminalTabComponent<DemoProfile> {\n    session: Session|null = null\n\n    // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n    constructor (\n        injector: Injector,\n    ) {\n        super(injector)\n    }\n\n    ngOnInit (): void {\n        this.logger = this.log.create('terminalTab')\n        this.session = new Session(this.injector, this.logger)\n        super.ngOnInit()\n    }\n\n    protected onFrontendReady (): void {\n        this.initializeSession()\n        super.onFrontendReady()\n    }\n\n    initializeSession (): void {\n        this.session!.start()\n        this.attachSessionHandlers(true)\n        this.recoveryStateChangedHint.next()\n    }\n\n    ngOnDestroy (): void {\n        super.ngOnDestroy()\n        this.session?.destroy()\n    }\n}\n"
  },
  {
    "path": "tabby-web-demo/src/index.ts",
    "content": "import { NgModule } from '@angular/core'\n// import { BrowserModule } from '@angular/platform-browser'\nimport { FormsModule } from '@angular/forms'\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap'\n\nimport TabbyCorePlugin, { ProfileProvider, AppService } from 'tabby-core'\nimport TabbyTerminalModule from 'tabby-terminal'\n\nimport { DemoTerminalTabComponent } from './components/terminalTab.component'\nimport { DemoProfilesService } from './profiles'\n\n/** @hidden */\n@NgModule({\n    imports: [\n        // BrowserModule,\n        FormsModule,\n        NgbModule,\n        TabbyCorePlugin,\n        TabbyTerminalModule,\n    ],\n    providers: [\n        { provide: ProfileProvider, useClass: DemoProfilesService, multi: true },\n    ],\n    declarations: [\n        DemoTerminalTabComponent,\n    ],\n    exports: [\n        DemoTerminalTabComponent,\n    ],\n})\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default class DemoTerminalModule {\n    constructor (\n        app: AppService,\n    ) {\n        app.ready$.subscribe(() => {\n            app.openNewTab({ type: DemoTerminalTabComponent })\n        })\n    }\n}\n"
  },
  {
    "path": "tabby-web-demo/src/profiles.ts",
    "content": "import { Injectable } from '@angular/core'\nimport { ProfileProvider, NewTabParameters, Profile, PartialProfile } from 'tabby-core'\nimport { DemoTerminalTabComponent } from './components/terminalTab.component'\n\n@Injectable({ providedIn: 'root' })\nexport class DemoProfilesService extends ProfileProvider<Profile> {\n    id = 'demo'\n    name = 'Demo'\n    configDefaults = { options: {} }\n\n    async getBuiltinProfiles (): Promise<PartialProfile<Profile>[]> {\n        return [\n            {\n                id: 'demo',\n                type: 'demo',\n                name: 'Demo VM terminal',\n                icon: 'fas fa-microchip',\n                isBuiltin: true,\n            },\n        ]\n    }\n\n    async getNewTabParameters (_profile: Profile): Promise<NewTabParameters<DemoTerminalTabComponent>> {\n        return {\n            type: DemoTerminalTabComponent,\n        }\n    }\n\n    getDescription (_profile: Profile): string {\n        return ''\n    }\n}\n"
  },
  {
    "path": "tabby-web-demo/src/session.ts",
    "content": "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Injector, NgZone } from '@angular/core'\nimport * as path from 'path'\nimport { BaseSession } from 'tabby-terminal'\nimport { Logger } from 'tabby-core'\n\nconst currentScript: any = document.currentScript\n\nexport class Session extends BaseSession {\n    private dataPath = window['tabbyWebDemoDataPath'] ?? currentScript.src + '../../../data'\n    private vm: any\n    private zone: NgZone\n    static v86Loaded = false\n\n    constructor (\n        injector: Injector,\n        logger: Logger,\n    ) {\n        super(logger)\n        this.zone = injector.get(NgZone)\n    }\n\n    async start (): Promise<void> {\n        this.open = true\n        this.emitMessage('Hey\\r\\n')\n\n        if (!Session.v86Loaded) {\n            await new Promise<void>(resolve => {\n                const script = document.createElement('script')\n                script.onload = () => {\n                    resolve()\n                    Session.v86Loaded = true\n                }\n                script.src = `${this.dataPath}/v86_all.js`\n                document.querySelector('head')?.appendChild(script)\n            })\n        }\n\n        this.zone.runOutsideAngular(() => {\n            this.vm = new window['V86Starter']({\n                bios: {\n                    url: `${this.dataPath}/bios.bin`,\n                },\n                vga_bios: {\n                    url: `${this.dataPath}/vgabios.bin`,\n                },\n                wasm_path: `${this.dataPath}/v86.wasm`,\n                cdrom: {\n                    url: `${this.dataPath}/linux.iso`,\n                },\n                initial_state: {\n                    url: `${this.dataPath}/v86state.bin`,\n                },\n                autostart: true,\n                disable_keyboard: true,\n                disable_speaker: true,\n            })\n        })\n\n        this.vm.add_listener('emulator-ready', () => {\n            this.emitMessage('\\r\\nVM ready, booting\\r\\n')\n            setTimeout(() => {\n                this.emitMessage('[Yes, this is a real demo]\\r\\n')\n            }, 2000)\n        })\n        this.vm.add_listener('download-progress', (e) => {\n            this.emitMessage(`\\rDownloading ${path.basename(e.file_name)}: ${Math.floor(e.loaded / 1024)}/${Math.floor(e.total / 1024)} kB         `)\n        })\n        this.vm.add_listener('download-error', (e) => {\n            this.emitMessage(`\\r\\nDownload error: ${e}\\r\\n`)\n        })\n\n        this.vm.add_listener('serial0-output-char', char => {\n            this.emitOutput(Buffer.from(char))\n        })\n    }\n\n    resize (_columns: number, _rows: number): void { }\n\n    write (data: Buffer): void {\n        this.vm.serial0_send(data.toString())\n    }\n\n    kill (_signal?: string): void {\n    }\n\n    emitMessage (msg: string): void {\n        this.emitOutput(Buffer.from(msg))\n    }\n\n    async gracefullyKillProcess (): Promise<void> { }\n\n    supportsWorkingDirectory (): boolean {\n        return false\n    }\n\n    async getWorkingDirectory (): Promise<string | null> {\n        return null\n    }\n}\n"
  },
  {
    "path": "tabby-web-demo/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"exclude\": [\"node_modules\", \"dist\", \"typings\"],\n  \"compilerOptions\": {\n    \"baseUrl\": \"src\"\n  }\n}\n"
  },
  {
    "path": "tabby-web-demo/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\nimport config from '../webpack.plugin.config.mjs'\n\nexport default () => config({\n    name: 'web-demo',\n    dirname: __dirname,\n})\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"es2015\",\n    \"target\": \"es2016\",\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"removeComments\": false,\n    \"emitDeclarationOnly\": false,\n    \"emitDecoratorMetadata\": true,\n    \"experimentalDecorators\": true,\n    \"sourceMap\": true,\n    \"noImplicitReturns\": true,\n    \"noFallthroughCasesInSwitch\": true,\n    \"noUnusedLocals\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"importHelpers\": true,\n    \"strictNullChecks\": true,\n    \"lib\": [\n      \"DOM\",\n      \"ES5\",\n      \"ES6\",\n      \"ES7\",\n      \"ES2015\",\n      \"ES2017\",\n      \"ES2019\",\n      \"ES2021\"\n    ],\n    \"paths\": {\n      \"*\": [\n        \"../node_modules/*\",\n        \"../../app/node_modules/*\",\n        \"./app/node_modules/*\"\n      ],\n      \"tabby-*\": [\"../../tabby-*/src\"],\n    }\n  },\n  \"typeAcquisition\": {\n    \"include\": [\n      \"../node_modules\",\n      \"../../app/node_modules\"\n    ]\n  },\n  \"angularCompilerOptions\": {\n    \"strictTemplates\": true,\n    \"enableResourceInlining\": true,\n    \"strictInjectionParameters\": true,\n  },\n}\n"
  },
  {
    "path": "typedoc.mjs",
    "content": "module.exports = {\n  excludePrivate: true,\n  excludeExternals: true\n}\n"
  },
  {
    "path": "web/entry.preload.ts",
    "content": "import 'source-sans-pro/source-sans-pro.css'\nimport 'source-code-pro/source-code-pro.css'\nimport '@fortawesome/fontawesome-free/css/solid.css'\nimport '@fortawesome/fontawesome-free/css/brands.css'\nimport '@fortawesome/fontawesome-free/css/regular.css'\nimport '@fortawesome/fontawesome-free/css/fontawesome.css'\nimport '../app/src/preload.scss'\n\n// Required before other imports\nimport './polyfills.buffer'\n\nconst mocks = {}\nconst modules = {}\n\nconst customRequire = path => {\n    if (mocks[path]) {\n        console.log(':: mock', path)\n        return mocks[path]\n    }\n    if (modules[path]) {\n        return modules[path]\n    }\n    throw new Error(`Attempted to require ${path}`)\n}\n\ncustomRequire['resolve'] = (() => null) as any\ncustomRequire['main'] = {\n    paths: [],\n}\n\nasync function webRequire (url) {\n    console.log(`>> Loading ${url}`)\n    const e = document.createElement('script')\n    window['module'] = { exports: {} } as any\n    window['exports'] = window['module'].exports\n    await new Promise(resolve => {\n        e.onload = resolve\n        e.src = url\n        document.querySelector('head').appendChild(e)\n    })\n    return window['module'].exports\n}\n\nasync function prefetchURL (url) {\n    console.log(`:: Prefetching ${url}`)\n    await (await fetch(url)).text()\n}\n\nconst Tabby = {\n    registerMock: (name, mod) => {\n        mocks[name] = mod\n    },\n    registerModule: (name, mod) => {\n        modules[name] = mod\n    },\n    resolvePluginInfo: async (url): Promise<any> => {\n        const pkg = await (await fetch(url + '/package.json')).json()\n        url += '/' + pkg.main\n        return { ...pkg, url }\n    },\n    registerPluginModule: (packageName, module) => {\n        Tabby.registerModule(`resources/builtin-plugins/${packageName}`, module)\n        Tabby.registerModule(packageName, module)\n    },\n    loadPlugin: async (url) => {\n        const info = await Tabby.resolvePluginInfo(url)\n        const module = await webRequire(info.url)\n        Tabby.registerPluginModule(info.name, module)\n        return module\n    },\n    loadPlugins: async (urls, progressCallback) => {\n        const infos: any[] = await Promise.all(urls.map(Tabby.resolvePluginInfo))\n        progressCallback?.(0, 1)\n        await Promise.all(infos.map(x => prefetchURL(x.url)))\n        const pluginModules = []\n        for (const info of infos) {\n            const module = await webRequire(info.url)\n            Tabby.registerPluginModule(info.name, module)\n            pluginModules.push(module)\n            progressCallback?.(infos.indexOf(info), infos.length)\n        }\n        progressCallback?.(1, 1)\n        return pluginModules\n    },\n    bootstrap: (...args) => window['bootstrapTabby'](...args),\n    webRequire,\n}\n\nObject.assign(window, {\n    require: customRequire,\n    module: {\n        paths: [],\n    },\n    Tabby,\n    __filename: '',\n    __dirname: '',\n    process: {\n        env: { },\n        argv: ['tabby'],\n        platform: 'darwin',\n        on: () => null,\n        stdout: {},\n        stderr: {},\n        resourcesPath: 'resources',\n        version: '14.0.0',\n        versions: {\n            modules: 0,\n        },\n        nextTick: (f, ...args) => setTimeout(() => f(...args)),\n        cwd: () => '/',\n    },\n    global: window,\n})\n"
  },
  {
    "path": "web/entry.ts",
    "content": "import './polyfills'\n\nimport 'zone.js'\nimport 'core-js/proposals/reflect-metadata'\nimport 'core-js/features/array/flat'\nimport 'rxjs'\n\nimport '../app/src/global.scss'\nimport '../app/src/toastr.scss'\n\nimport { enableProdMode, NgModuleRef, ApplicationRef } from '@angular/core'\nimport { enableDebugTools } from '@angular/platform-browser'\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic'\n\nimport { getRootModule } from '../app/src/app.module'\nimport { BootstrapData, BOOTSTRAP_DATA } from '../tabby-core/src/api/mainProcess'\n\ninterface BootstrapOptions {\n    packageModules: any[]\n    bootstrapData: BootstrapData\n    debugMode: boolean\n    connector: any\n}\n\nwindow['bootstrapTabby'] = async function bootstrap (options: BootstrapOptions): Promise<NgModuleRef<any>> {\n    window.parent.postMessage('request-connector', '*')\n\n    const pluginModules = []\n    for (const packageModule of options.packageModules) {\n        if (!packageModule.default) {\n            continue\n        }\n        const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default\n        pluginModule.pluginName = packageModule.pluginName\n        pluginModule.bootstrap = packageModule.bootstrap\n        pluginModules.push(pluginModule)\n    }\n\n    if (!options.debugMode) {\n        enableProdMode()\n    }\n\n    const module = getRootModule(pluginModules)\n    window['rootModule'] = module\n\n    const moduleRef = await platformBrowserDynamic([\n        { provide: BOOTSTRAP_DATA, useValue: options.bootstrapData },\n        { provide: 'WEB_CONNECTOR', useValue: options.connector },\n    ]).bootstrapModule(module)\n    if (options.debugMode) {\n        const applicationRef = moduleRef.injector.get(ApplicationRef)\n        const componentRef = applicationRef.components[0]\n        enableDebugTools(componentRef)\n    }\n    return moduleRef\n}\n"
  },
  {
    "path": "web/package.json",
    "content": "{\n    \"name\": \"tabby-web-container\",\n    \"devDependencies\": {\n        \"assert\": \"1.5.0\",\n        \"browserify-zlib\": \"^0.2.0\",\n        \"buffer\": \"^6.0.3\",\n        \"constants-browserify\": \"^1.0.0\",\n        \"crypto-browserify\": \"^3.12.0\",\n        \"deepmerge\": \"^4.2.2\",\n        \"events\": \"^3.3.0\",\n        \"patch-package\": \"^6.4.7\",\n        \"path-browserify\": \"^1.0.1\",\n        \"readline-browserify\": \"^0.0.4\",\n        \"stream-browserify\": \"^3.0.0\",\n        \"url\": \"^0.11.0\"\n    },\n    \"resolutions\": {\n        \"**/util\": \"^0.12.0\"\n    },\n    \"scripts\": {\n        \"prepare\": \"patch-package\"\n    },\n    \"version\": \"1.0.231-nightly.0\"\n}\n"
  },
  {
    "path": "web/patches/browserify-sign+4.2.1.patch",
    "content": "diff --git a/node_modules/browserify-sign/browser/index.js b/node_modules/browserify-sign/browser/index.js\nindex e6df44c..641e18e 100644\n--- a/node_modules/browserify-sign/browser/index.js\n+++ b/node_modules/browserify-sign/browser/index.js\n@@ -11,6 +11,8 @@ Object.keys(algorithms).forEach(function (key) {\n   algorithms[key.toLowerCase()] = algorithms[key]\n })\n \n+algorithms['sha1'] = algorithms['RSA-SHA1']\n+\n function Sign (algorithm) {\n   stream.Writable.call(this)\n \n"
  },
  {
    "path": "web/polyfills.buffer.ts",
    "content": "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n/* eslint-disable @typescript-eslint/init-declarations */\n/* eslint-disable prefer-spread */\n/* eslint-disable @typescript-eslint/no-invalid-this */\n/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\nconst base64 = require('base64-js')\n\nfunction blitBuffer (src, dst, offset, length) {\n    let i\n    for (i = 0; i < length; ++i) {\n        if (i + offset >= dst.length || i >= src.length) {break}\n        dst[i + offset] = src[i]\n    }\n    return i\n}\n\nexport function utf8Write (string, offset, length) {\n    return blitBuffer(utf8ToBytes(string, this.length - offset), this, offset, length)\n}\n\nexport function base64Slice (start, end) {\n    if (start === 0 && end === this.length) {\n        return base64.fromByteArray(this)\n    } else {\n        return base64.fromByteArray(this.slice(start, end))\n    }\n}\n\nfunction decodeCodePointsArray (codePoints) {\n    const len = codePoints.length\n    if (len <= MAX_ARGUMENTS_LENGTH) {\n        return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n    }\n\n    // Decode in chunks to avoid \"call stack size exceeded\".\n    let res = ''\n    let i = 0\n    while (i < len) {\n        res += String.fromCharCode.apply(\n            String,\n            codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n        )\n    }\n    return res\n}\n\n\nexport function latin1Slice (start, end) {\n    let ret = ''\n    end = Math.min(this.length, end)\n\n    for (let i = start; i < end; ++i) {\n        ret += String.fromCharCode(this[i])\n    }\n    return ret\n}\n\nexport function utf8Slice (this, start, end) {\n    end = Math.min(this.length, end)\n    const res: number[] = []\n\n    let i = start\n    while (i < end) {\n        const firstByte = this[i]\n        let codePoint: number|null = null\n        let bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1\n\n        if (i + bytesPerSequence <= end) {\n            let secondByte, thirdByte, fourthByte, tempCodePoint\n\n            switch (bytesPerSequence) {\n                case 1:\n                    if (firstByte < 0x80) {\n                        codePoint = firstByte\n                    }\n                    break\n                case 2:\n                    secondByte = this[i + 1]\n                    if ((secondByte & 0xC0) === 0x80) {\n                        tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F\n                        if (tempCodePoint > 0x7F) {\n                            codePoint = tempCodePoint\n                        }\n                    }\n                    break\n                case 3:\n                    secondByte = this[i + 1]\n                    thirdByte = this[i + 2]\n                    if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n                        tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F\n                        if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n                            codePoint = tempCodePoint\n                        }\n                    }\n                    break\n                case 4:\n                    secondByte = this[i + 1]\n                    thirdByte = this[i + 2]\n                    fourthByte = this[i + 3]\n                    if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n                        tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F\n                        if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n                            codePoint = tempCodePoint\n                        }\n                    }\n            }\n        }\n\n        if (codePoint === null) {\n            // we did not generate a valid codePoint so insert a\n            // replacement char (U+FFFD) and advance only 1 byte\n            codePoint = 0xFFFD\n            bytesPerSequence = 1\n        } else if (codePoint > 0xFFFF) {\n            // encode to utf16 (surrogate pair dance)\n            codePoint -= 0x10000\n            res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n            codePoint = 0xDC00 | codePoint & 0x3FF\n        }\n\n        res.push(codePoint)\n        i += bytesPerSequence\n    }\n\n    return decodeCodePointsArray(res)\n}\nfunction utf8ToBytes (string, units) {\n    units = units || Infinity\n    let codePoint\n    const length = string.length\n    let leadSurrogate = null\n    const bytes: number[] = []\n\n    for (let i = 0; i < length; ++i) {\n        codePoint = string.charCodeAt(i)\n\n        // is surrogate component\n        if (codePoint > 0xD7FF && codePoint < 0xE000) {\n            // last char was a lead\n            if (!leadSurrogate) {\n                // no lead yet\n                if (codePoint > 0xDBFF) {\n                    // unexpected trail\n                    if ((units -= 3) > -1) {bytes.push(0xEF, 0xBF, 0xBD)}\n                    continue\n                } else if (i + 1 === length) {\n                    // unpaired lead\n                    if ((units -= 3) > -1) {bytes.push(0xEF, 0xBF, 0xBD)}\n                    continue\n                }\n\n                // valid lead\n                leadSurrogate = codePoint\n\n                continue\n            }\n\n            // 2 leads in a row\n            if (codePoint < 0xDC00) {\n                if ((units -= 3) > -1) {bytes.push(0xEF, 0xBF, 0xBD)}\n                leadSurrogate = codePoint\n                continue\n            }\n            // valid surrogate pair\n            codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n        } else if (leadSurrogate) {\n            // valid bmp char, but last char was a lead\n            if ((units -= 3) > -1) {bytes.push(0xEF, 0xBF, 0xBD)}\n        }\n\n        leadSurrogate = null\n\n        // encode utf8\n        if (codePoint < 0x80) {\n            if ((units -= 1) < 0) {break}\n            bytes.push(codePoint)\n        } else if (codePoint < 0x800) {\n            if ((units -= 2) < 0) {break}\n            bytes.push(\n                codePoint >> 0x6 | 0xC0,\n                codePoint & 0x3F | 0x80\n            )\n        } else if (codePoint < 0x10000) {\n            if ((units -= 3) < 0) {break}\n            bytes.push(\n                codePoint >> 0xC | 0xE0,\n                codePoint >> 0x6 & 0x3F | 0x80,\n                codePoint & 0x3F | 0x80\n            )\n        } else if (codePoint < 0x110000) {\n            if ((units -= 4) < 0) {break}\n            bytes.push(\n                codePoint >> 0x12 | 0xF0,\n                codePoint >> 0xC & 0x3F | 0x80,\n                codePoint >> 0x6 & 0x3F | 0x80,\n                codePoint & 0x3F | 0x80\n            )\n        } else {\n            throw new Error('Invalid code point')\n        }\n    }\n    return bytes\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n    const alphabet = '0123456789abcdef'\n    const table = new Array(256)\n    for (let i = 0; i < 16; ++i) {\n        const i16 = i * 16\n        for (let j = 0; j < 16; ++j) {\n            table[i16 + j] = alphabet[i] + alphabet[j]\n        }\n    }\n    return table\n})()\n\n\nexport function hexSlice (start, end) {\n    const len = this.length\n\n    if (!start || start < 0) {start = 0}\n    if (!end || end < 0 || end > len) {end = len}\n\n    let out = ''\n    for (let i = start; i < end; ++i) {\n        out += hexSliceLookupTable[this[i]]\n    }\n    return out\n}\n\nimport { Buffer } from 'buffer'\n\nBuffer.prototype['latin1Slice'] = latin1Slice\nBuffer.prototype['utf8Slice'] = utf8Slice\nBuffer.prototype['base64Slice'] = base64Slice\nBuffer.prototype['utf8Write'] = utf8Write\nBuffer.prototype['hexSlice'] = hexSlice\n\nwindow['Buffer'] = Buffer\n"
  },
  {
    "path": "web/polyfills.ts",
    "content": "/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @typescript-eslint/no-extraneous-class */\n\nimport './polyfills.buffer'\nimport { Duplex } from 'stream-browserify'\n\nconst Tabby = window['Tabby']\n\nexport class SocketProxy extends Duplex {\n    socket: any\n\n    constructor (...args: any[]) {\n        super({\n            allowHalfOpen: false,\n        })\n        this.socket = window['__connector__'].createSocket(...args)\n        this.socket.connect$.subscribe(() => this['emit']('connect'))\n        this.socket.data$.subscribe(data => this['emit']('data', Buffer.from(data)))\n        this.socket.error$.subscribe(error => this['emit']('error', error))\n    }\n\n    connect (...args: any[]) {\n        this.socket.connect(...args)\n    }\n\n    setNoDelay () { }\n\n    setTimeout () { }\n\n    _read (_size: number): void { }\n\n    _write (chunk: Buffer, _encoding: string, callback: (error?: Error | null) => void): void {\n        this.socket.write(chunk)\n        callback()\n    }\n\n    _destroy (error: Error|null, callback: (error: Error|null) => void): void {\n        this.socket.close(error)\n        callback(error)\n    }\n}\n\nTabby.registerMock('fs', {\n    rmdirSync: () => null,\n    realpathSync: () => null,\n    readdir: () => null,\n    stat: () => null,\n    appendFile: () => null,\n    constants: {},\n})\nTabby.registerMock('fs/promises', {})\nTabby.registerMock('tls', {})\nTabby.registerMock('module', {\n    globalPaths: [],\n    prototype: { require: window['require'] },\n})\n\nTabby.registerMock('http', {\n    Agent: class {},\n    request: {},\n})\nTabby.registerMock('https', {\n    Agent: class {},\n    request: {},\n})\nTabby.registerMock('querystring', {})\nTabby.registerMock('tty', { isatty: () => false })\nTabby.registerMock('child_process', {})\nTabby.registerMock('readable-stream', {})\nTabby.registerMock('os', {\n    arch: () => 'web',\n    platform: () => 'web',\n    homedir: () => '/home',\n    tmpdir: () => '/tmp',\n    constants: {\n        errno: {},\n    },\n})\nTabby.registerModule('buffer', {\n    Buffer: window['Buffer'],\n})\nTabby.registerModule('crypto', {\n    ...require('crypto-browserify'),\n    getHashes () {\n        return ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160']\n    },\n    timingSafeEqual (a, b) {\n        return a.equals(b)\n    },\n})\nTabby.registerMock('dns', {})\nTabby.registerMock('@luminati-io/socksv5', {})\nTabby.registerMock('util', require('util/'))\nTabby.registerMock('keytar', {\n    getPassword: () => null,\n})\nTabby.registerMock('@serialport/bindings', {})\nTabby.registerMock('@serialport/bindings-cpp', {})\nTabby.registerMock('tmp', {})\n\nTabby.registerModule('net', {\n    Socket: SocketProxy,\n})\nTabby.registerModule('events', require('events'))\nTabby.registerModule('path', require('path-browserify'))\nTabby.registerModule('url', {\n    ...require('url'),\n    pathToFileURL: x => `file://${x}`,\n})\nTabby.registerModule('zlib', {\n    ...require('browserify-zlib'),\n    constants: require('browserify-zlib'),\n})\nTabby.registerModule('assert', Object.assign(\n    require('assert'),\n    {\n        assertNotStrictEqual: () => true,\n        notStrictEqual: () => true,\n    },\n))\nTabby.registerModule('constants', require('constants-browserify'))\nTabby.registerModule('stream', require('stream-browserify'))\nTabby.registerModule('readline', {\n    ...require('readline-browserify'),\n    cursorTo: () => null,\n    clearLine: stream => stream.write('\\r'),\n})\n\nTabby.registerModule('@angular/core', require('@angular/core'))\nTabby.registerModule('@angular/cdk', require('@angular/cdk'))\nTabby.registerModule('@angular/cdk/clipboard', require('@angular/cdk/clipboard'))\nTabby.registerModule('@angular/cdk/drag-drop', require('@angular/cdk/drag-drop'))\nTabby.registerModule('@angular/compiler', require('@angular/compiler'))\nTabby.registerModule('@angular/common', require('@angular/common'))\nTabby.registerModule('@angular/forms', require('@angular/forms'))\nTabby.registerModule('@angular/platform-browser', require('@angular/platform-browser'))\nTabby.registerModule('@angular/platform-browser/animations', require('@angular/platform-browser/animations'))\nTabby.registerModule('@angular/platform-browser-dynamic', require('@angular/platform-browser-dynamic'))\nTabby.registerModule('@angular/animations', require('@angular/animations'))\nTabby.registerModule('@angular/localize', require('@angular/localize'))\nTabby.registerModule('@angular/localize/init', require('@angular/localize/init'))\nTabby.registerModule('@ng-bootstrap/ng-bootstrap', require('@ng-bootstrap/ng-bootstrap'))\nTabby.registerModule('ngx-toastr', require('ngx-toastr'))\nTabby.registerModule('deepmerge', require('deepmerge'))\nTabby.registerModule('rxjs', require('rxjs'))\nTabby.registerModule('rxjs/operators', require('rxjs'))\nTabby.registerModule('string_decoder', require('string_decoder'))\nTabby.registerModule('js-yaml', require('js-yaml'))\nTabby.registerModule('zone.js/dist/zone.js', require('zone.js'))\nTabby.registerModule('zone.js', require('zone.js'))\nTabby.registerModule('any-promise', require('any-promise'))\n\nObject.assign(window, {\n    __dirname: '__dirname',\n    setImmediate: setTimeout as any,\n})\n\nprocess.addListener = () => null\n"
  },
  {
    "path": "web/tsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"baseUrl\": \"./src\",\n        \"module\": \"commonjs\",\n        \"target\": \"es2015\",\n        \"declaration\": false,\n        \"noImplicitAny\": false,\n        \"removeComments\": false,\n        \"emitDecoratorMetadata\": true,\n        \"experimentalDecorators\": true,\n        \"sourceMap\": true,\n        \"noImplicitReturns\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"noUnusedParameters\": true,\n        \"noUnusedLocals\": true,\n        \"lib\": [\n           \"dom\",\n           \"es2015\",\n           \"es2015.iterable\",\n           \"es2017\",\n           \"es2019\",\n           \"es7\"\n        ],\n        \"paths\": {\n            \"*\": [\"../../app/node_modules/*\"]\n        }\n    },\n    \"compileOnSave\": false,\n    \"exclude\": [\n        \"dist\",\n        \"node_modules\",\n        \"*/node_modules\",\n        \"tabby*\",\n        \"platforms\"\n    ]\n}\n"
  },
  {
    "path": "web/webpack.config.mjs",
    "content": "import * as path from 'path'\nimport * as url from 'url'\nconst __dirname = url.fileURLToPath(new URL('.', import.meta.url))\n\n\nconst externals = {}\nfor (const key of [\n    'child_process',\n    'crypto',\n    'dns',\n    'fs',\n    'http',\n    'https',\n    'net',\n    'path',\n    'querystring',\n    'tls',\n    'tty',\n    'zlib',\n    '../build/Release/cpufeatures.node',\n    './crypto/build/Release/sshcrypto.node',\n]) {\n    externals[key] = `commonjs ${key}`\n}\n\nconst config = {\n    name: 'tabby-web-entry',\n    target: 'web',\n    entry: {\n        preload: path.resolve(__dirname, 'entry.preload.ts'),\n        bundle: path.resolve(__dirname, 'entry.ts'),\n    },\n    mode: process.env.TABBY_DEV ? 'development' : 'production',\n    optimization:{\n        minimize: false,\n    },\n    context: __dirname,\n    devtool: 'source-map',\n    output: {\n        path: path.join(__dirname, 'dist'),\n        pathinfo: true,\n        filename: '[name].js',\n        publicPath: 'auto',\n    },\n    resolve: {\n        modules: ['../app/node_modules', 'node_modules', '../node_modules', '../app/assets/'].map(x => path.join(__dirname, x)),\n        extensions: ['.ts', '.js'],\n        fallback: {\n            stream: path.join(__dirname, 'node_modules/stream-browserify/index.js'),\n            assert: path.join(__dirname, 'node_modules/assert/assert.js'),\n            constants: path.join(__dirname, 'node_modules/constants-browserify/constants.json'),\n            util: path.join(__dirname, 'node_modules/util/util.js'),\n        },\n    },\n    module: {\n        rules: [\n            {\n                test: /\\.ts$/,\n                use: {\n                    loader: 'ts-loader',\n                    options: {\n                        configFile: path.resolve(__dirname, 'tsconfig.json'),\n                    },\n                },\n            },\n            { test: /\\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] },\n            { test: /\\.css$/, use: ['style-loader', 'css-loader', 'sass-loader'] },\n            {\n                test: /\\.(png|svg|ttf|eot|otf|woff|woff2)(\\?v=[0-9]\\.[0-9]\\.[0-9])?$/,\n                type: 'asset',\n            },\n        ],\n    },\n    externals,\n}\n\nexport default () => config\n"
  },
  {
    "path": "webpack.config.mjs",
    "content": "import log from 'npmlog'\nimport { builtinPlugins } from './scripts/vars.mjs'\n\nconst paths = [\n    './app/webpack.config.mjs',\n    './app/webpack.config.main.mjs',\n    // './web/webpack.config.mjs',\n    // './tabby-web-demo/webpack.config.mjs',\n    ...builtinPlugins.map(x => `./${x}/webpack.config.mjs`),\n]\n\npaths.forEach(x => log.info(`Using config: ${x}`))\n\nexport default () => Promise.all(paths.map(x => import(x).then(x => x.default())))\n"
  },
  {
    "path": "webpack.plugin.config.mjs",
    "content": "import * as fs from 'fs'\nimport * as path from 'path'\nimport wp from 'webpack'\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'\nimport { AngularWebpackPlugin } from '@ngtools/webpack'\n\nconst bundleAnalyzer = new BundleAnalyzerPlugin({\n    analyzerPort: 0,\n})\n\nimport { createEs2015LinkerPlugin } from '@angular/compiler-cli/linker/babel'\nconst linkerPlugin = createEs2015LinkerPlugin({\n    linkerJitMode: true,\n    fileSystem: {\n        resolve: path.resolve,\n        exists: fs.existsSync,\n        dirname: path.dirname,\n        relative: path.relative,\n        readFile: fs.readFileSync,\n    },\n})\n\nexport default options => {\n    const sourceMapOptions = {\n        exclude: [/node_modules/, /vendor/],\n        filename: '[file].map',\n        moduleFilenameTemplate: `webpack-tabby-${options.name}:///[resource-path]`,\n    }\n    let devtoolPlugin = wp.SourceMapDevToolPlugin\n\n    if (process.env.CI) {\n        sourceMapOptions.append = '\\n//# sourceMappingURL=../../../app.asar.unpacked/assets/webpack/[url]'\n    }\n\n    if ((process.platform === 'win32' || process.platform === 'linux') && process.env.TABBY_DEV) {\n        devtoolPlugin = wp.EvalSourceMapDevToolPlugin\n    }\n\n    const isDev = !!process.env.TABBY_DEV\n    const config = {\n        target: 'node',\n        entry: 'src/index.ts',\n        context: options.dirname,\n        devtool: false,\n        output: {\n            path: path.resolve(options.dirname, 'dist'),\n            filename: 'index.js',\n            pathinfo: true,\n            libraryTarget: 'umd',\n            publicPath: 'auto',\n        },\n        mode: isDev ? 'development' : 'production',\n        optimization:{\n            minimize: false,\n        },\n        cache: !isDev ? false : {\n            type: 'filesystem',\n            cacheDirectory: path.resolve(options.dirname, 'node_modules', '.webpack-cache'),\n        },\n        resolve: {\n            alias: options.alias ?? {},\n            modules: ['.', 'src', 'node_modules', '../app/node_modules', '../node_modules'].map(x => path.join(options.dirname, x)),\n            extensions: ['.ts', '.js'],\n            mainFields: ['esm2015', 'browser', 'module', 'main'],\n        },\n        ignoreWarnings: [/Failed to parse source map/],\n        module: {\n            rules: [\n                ...options.rules ?? [],\n                {\n                    test: /\\.js$/,\n                    enforce: 'pre',\n                    use: {\n                        loader: 'source-map-loader',\n                        options: {\n                            filterSourceMappingUrl: (url, resourcePath) => {\n                                if (/node_modules/.test(resourcePath) && !resourcePath.includes('xterm')) {\n                                    return false\n                                }\n                                return true\n                            },\n\n                        },\n                    },\n                },\n                {\n                    test: /\\.(m?)js$/,\n                    loader: 'babel-loader',\n                    options: {\n                        plugins: [linkerPlugin],\n                        compact: false,\n                        cacheDirectory: true,\n                    },\n                    resolve: {\n                        fullySpecified: false,\n                    },\n                },\n                {\n                    test: /\\.ts$/,\n                    use: [\n                        {\n                            loader: '@ngtools/webpack',\n                        },\n                    ],\n                },\n                {\n                    test: /\\.pug$/,\n                    use: [\n                        'apply-loader',\n                        {\n                            loader: 'pug-loader',\n                            options: {\n                                pretty: true,\n                            },\n                        },\n                    ],\n                },\n                { test: /\\.scss$/, use: ['@tabby-gang/to-string-loader', 'css-loader', 'sass-loader'], include: /(theme.*|component)\\.scss/ },\n                { test: /\\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'], exclude: /(theme.*|component)\\.scss/ },\n                { test: /\\.css$/, use: ['@tabby-gang/to-string-loader', 'css-loader'], include: /component\\.css/ },\n                { test: /\\.css$/, use: ['style-loader', 'css-loader'], exclude: /component\\.css/ },\n                { test: /\\.yaml$/, use: ['yaml-loader'] },\n                { test: /\\.svg/, use: ['svg-inline-loader'] },\n                {\n                    test: /\\.(eot|otf|woff|woff2|ogg)(\\?v=[0-9]\\.[0-9]\\.[0-9])?$/,\n                    type: 'asset',\n                },\n                {\n                    test: /\\.ttf$/,\n                    type: 'asset/inline',\n                },\n                {\n                    test: /\\.po$/,\n                    use: [\n                        { loader: 'json-loader' },\n                        { loader: 'po-gettext-loader' },\n                    ],\n                },\n            ],\n        },\n        externals: [\n            '@electron/remote',\n            '@serialport/bindings',\n            '@serialport/bindings-cpp',\n            'any-promise',\n            'child_process',\n            'electron-promise-ipc',\n            'electron-updater',\n            'electron',\n            'fontmanager-redux',\n            'fs',\n            'keytar',\n            'macos-native-processlist',\n            'native-process-working-directory',\n            'net',\n            'ngx-toastr',\n            'os',\n            'path',\n            'readline',\n            'russh',\n            '@luminati-io/socksv5',\n            'stream',\n            'windows-native-registry',\n            '@tabby-gang/windows-process-tree',\n            '@tabby-gang/windows-process-tree/build/Release/windows_process_tree.node',\n            /^@angular(?!\\/common\\/locales)/,\n            /^@ng-bootstrap/,\n            /^rxjs/,\n            /^tabby-/,\n            ...options.externals || [],\n        ],\n        plugins: [\n            new devtoolPlugin(sourceMapOptions),\n            new AngularWebpackPlugin({\n                tsconfig: path.resolve(options.dirname, 'tsconfig.json'),\n                directTemplateLoading: false,\n                jitMode: true,\n            })\n        ],\n    }\n    if (process.env.PLUGIN_BUNDLE_ANALYZER === options.name) {\n        config.plugins.push(bundleAnalyzer)\n        config.cache = false\n    }\n    return config\n}\n"
  }
]