diff --git a/config-amnezia/cadian.DE.conf b/config-amnezia/cadian.DE.conf new file mode 100644 index 0000000..646d782 --- /dev/null +++ b/config-amnezia/cadian.DE.conf @@ -0,0 +1,24 @@ +# Generated on: 2025-12-21 18:28:33 +# VPN Key: vpn://vpn://AAAA_3icdY1PC4IwGIe_iuxcHYwKu4VQIB4Uieo0xlw2dH-cm6Hid2-bRKdOL7zPw--ZAEeMgGMAToyTkaIgU4RRw8AqACXpsKJSU8H_GFjwJ61gT1S3SKF9IknhAuxjAh1RPcUE6kH6EFpm1vI381WkElpg0XjtXTlkLLNrhms12Fv6CWXA7EJGv2CJNPIdl63J4HgbX8Yy2qebq8riXCZJURcoqW67_pynbSPDcHtoHtEdgXn-AEBTVs8= +# Keenetic: interface Wireguard0 wireguard asc 2 10 50 81 33 2023084421 1113200792 1624558687 767247996 + +[Interface] +Address = 100.72.173.249/32 +DNS = 8.8.8.8, 8.8.4.4 +PrivateKey = no/Mo/8PWzF+PRajlwc81TSlYWB4e+BfWHJInzj7dVo= +Jc = 2 +Jmin = 10 +Jmax = 50 +S1 = 81 +S2 = 33 +H1 = 2023084421 +H2 = 1113200792 +H3 = 1624558687 +H4 = 767247996 + +[Peer] +PublicKey = PpitEK737+DsqSMlCIFjEG8uI/0QAj1EQIpQJzozv2Q= +PresharedKey = WFjxvJuR2Fx5XEUTO584yndz8cwUEDuy9E5As1BTUGE= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 162.249.127.178:37515 +PersistentKeepalive = 25 diff --git a/config-amnezia/cadian.EE.conf b/config-amnezia/cadian.EE.conf new file mode 100644 index 0000000..5385a86 --- /dev/null +++ b/config-amnezia/cadian.EE.conf @@ -0,0 +1,24 @@ +# Generated on: 2025-12-21 18:29:07 +# VPN Key: vpn://vpn://AAAA_3icdY1PC4IwGIe_iuxcHYwKu4VQIB4Uieo0xlw2dH-cm6Hid2-bRKdOL7zPw--ZAEeMgGMAToyTkaIgU4RRw8AqACXpsKJSU8H_GFjwJ61gT1S3SKF9IknhAuxjAh1RPcUE6kH6EFpm1vI381WkElpg0XjtXTlkLLNrhms12Fv6CWXA7EJGv2CJNPIdl63J4HgbX8Yy2qebq8riXCZJURcoqW67_pynbSPDcHtoHtEdgXn-AEBTVs8= +# Keenetic: interface Wireguard0 wireguard asc 2 10 50 136 48 947927481 424962932 1068800855 1088281476 + +[Interface] +Address = 100.72.174.0/32 +DNS = 8.8.8.8, 8.8.4.4 +PrivateKey = plDZ4Fcdq7W/veRHhHeIq2CSGDU1jkBo+2VrdegRJa0= +Jc = 2 +Jmin = 10 +Jmax = 50 +S1 = 136 +S2 = 48 +H1 = 947927481 +H2 = 424962932 +H3 = 1068800855 +H4 = 1088281476 + +[Peer] +PublicKey = 8ZGUH6Sy5JJqkYACL7pILD00LPqvPU2k6C8Y5lj47y8= +PresharedKey = kJy5wAVa+bKtbUYeQmXJsmOlgoZQKJ271MLlKpL9c08= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 185.155.97.175:33132 +PersistentKeepalive = 25 diff --git a/config-amnezia/scarus.PT.conf b/config-amnezia/scarus.PT.conf new file mode 100644 index 0000000..8c0e870 --- /dev/null +++ b/config-amnezia/scarus.PT.conf @@ -0,0 +1,24 @@ +# Generated on: 2025-12-21 18:30:09 +# VPN Key: vpn://vpn://AAAA_3icdY1PC4IwGIe_iuxcHYwKu4VQIB4Uieo0xlw2dH-cm6Hid2-bRKdOL7zPw--ZAEeMgGMAToyTkaIgU4RRw8AqACXpsKJSU8H_GFjwJ61gT1S3SKF9IknhAuxjAh1RPcUE6kH6EFpm1vI381WkElpg0XjtXTlkLLNrhms12Fv6CWXA7EJGv2CJNPIdl63J4HgbX8Yy2qebq8riXCZJURcoqW67_pynbSPDcHtoHtEdgXn-AEBTVs8= +# Keenetic: interface Wireguard0 wireguard asc 3 10 50 81 73 1835075253 1381691586 1646178542 710963756 + +[Interface] +Address = 100.72.174.7/32 +DNS = 8.8.8.8, 8.8.4.4 +PrivateKey = H8D1ltUWLDuF+eTTKRH8iG7k8HFsX3esjMbZb9OIoIY= +Jc = 3 +Jmin = 10 +Jmax = 50 +S1 = 81 +S2 = 73 +H1 = 1835075253 +H2 = 1381691586 +H3 = 1646178542 +H4 = 710963756 + +[Peer] +PublicKey = mYJ0OByhDsO+Okhd+AXTcBJoFbVXAOeJ7Pa7ihw441U= +PresharedKey = YLfe5ketC/TFqcCGV/Y8eGOyyIdQgVxueDS/kSY7uG4= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 79.127.168.139:41782 +PersistentKeepalive = 25 diff --git a/config-amnezia/scarus.SE.conf b/config-amnezia/scarus.SE.conf new file mode 100644 index 0000000..f4a28c1 --- /dev/null +++ b/config-amnezia/scarus.SE.conf @@ -0,0 +1,24 @@ +# Generated on: 2025-12-21 18:29:34 +# VPN Key: vpn://vpn://AAAA_3icdY1PC4IwGIe_iuxcHYwKu4VQIB4Uieo0xlw2dH-cm6Hid2-bRKdOL7zPw--ZAEeMgGMAToyTkaIgU4RRw8AqACXpsKJSU8H_GFjwJ61gT1S3SKF9IknhAuxjAh1RPcUE6kH6EFpm1vI381WkElpg0XjtXTlkLLNrhms12Fv6CWXA7EJGv2CJNPIdl63J4HgbX8Yy2qebq8riXCZJURcoqW67_pynbSPDcHtoHtEdgXn-AEBTVs8= +# Keenetic: interface Wireguard0 wireguard asc 3 10 50 105 48 1162346210 1656368792 1067936661 1258665380 + +[Interface] +Address = 100.72.174.6/32 +DNS = 8.8.8.8, 8.8.4.4 +PrivateKey = WB9k3kCd3j9+BRfGtbGdpx6deph6eHAtaBbXsaQX+bY= +Jc = 3 +Jmin = 10 +Jmax = 50 +S1 = 105 +S2 = 48 +H1 = 1162346210 +H2 = 1656368792 +H3 = 1067936661 +H4 = 1258665380 + +[Peer] +PublicKey = 6BOPYPQEFAtTCSgLLqNUqbUU5A/euMb9D48NBr7mryU= +PresharedKey = kDU/LPmsZHqeEToIxjdM+K3pYRWoRxM6p0oQtUd+gFA= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 130.195.218.194:42495 +PersistentKeepalive = 25 diff --git a/config-amnezia/solar.US.conf b/config-amnezia/solar.US.conf new file mode 100644 index 0000000..4553968 --- /dev/null +++ b/config-amnezia/solar.US.conf @@ -0,0 +1,24 @@ +# Generated on: 2025-12-21 18:26:43 +# VPN Key: vpn://vpn://AAAA_3icdY1PC4IwGIe_iuxcHYwKu4VQIB4Uieo0xlw2dH-cm6Hid2-bRKdOL7zPw--ZAEeMgGMAToyTkaIgU4RRw8AqACXpsKJSU8H_GFjwJ61gT1S3SKF9IknhAuxjAh1RPcUE6kH6EFpm1vI381WkElpg0XjtXTlkLLNrhms12Fv6CWXA7EJGv2CJNPIdl63J4HgbX8Yy2qebq8riXCZJURcoqW67_pynbSPDcHtoHtEdgXn-AEBTVs8= +# Keenetic: interface Wireguard0 wireguard asc 3 10 50 115 85 527190701 561860632 441868062 1860350990 + +[Interface] +Address = 100.71.64.155/32 +DNS = 8.8.8.8, 8.8.4.4 +PrivateKey = JsYjJxv2/VCELbRt2y0fiWL8XMfHRU4Hf9ez17s/AKE= +Jc = 3 +Jmin = 10 +Jmax = 50 +S1 = 115 +S2 = 85 +H1 = 527190701 +H2 = 561860632 +H3 = 441868062 +H4 = 1860350990 + +[Peer] +PublicKey = XJWGtcthVWP4ZPDEbto8iSCDLt7aVamPNnW2/oXMYXk= +PresharedKey = 0DkpvP65ftUesTd3/whsNuZ82t6U7CE2St2WgA7Xsmc= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 216.106.180.5:44500 +PersistentKeepalive = 25 diff --git a/config-sub-converter/scripts/demo/embedded.js b/config-sub-converter/scripts/demo/embedded.js new file mode 100644 index 0000000..df95a75 --- /dev/null +++ b/config-sub-converter/scripts/demo/embedded.js @@ -0,0 +1,28 @@ +// Example: +// Script Operator +// 1. backend version(>2.14.88): +$server.name = 'prefix-' + $server.name +$server.ecn = true +$server['test-url'] = 'http://1.0.0.1/generate_204' +// 2. operator function +function operator(proxies, targetPlatform, context) { + return proxies.map( proxy => { + // Change proxy information here + + return proxy; + }); +} + +// Script Filter +// 1. backend version(>2.14.119): +const port = Number($server.port) +return [80].includes(port) + +// 2. filter function +function filter(proxies, targetPlatform) { + return proxies.map( proxy => { + // Return true if the current proxy is selected + + return true; + }); +} \ No newline at end of file diff --git a/config-sub-converter/scripts/demo/fancy-chars.js b/config-sub-converter/scripts/demo/fancy-chars.js new file mode 100644 index 0000000..5116fd6 --- /dev/null +++ b/config-sub-converter/scripts/demo/fancy-chars.js @@ -0,0 +1,59 @@ +/** + * 节点名改为花里胡哨字体,仅支持英文字符和数字 + * + * 【字体】 + * 可参考:https://www.dute.org/weird-fonts + * serif-bold, serif-italic, serif-bold-italic, sans-serif-regular, sans-serif-bold-italic, script-regular, script-bold, fraktur-regular, fraktur-bold, monospace-regular, double-struck-bold, circle-regular, square-regular, modifier-letter(小写没有 q, 用 ᵠ 替代. 大写缺的太多, 用小写替代) + * + * 【示例】 + * 1️⃣ 设置所有格式为 "serif-bold" + * #type=serif-bold + * + * 2️⃣ 设置字母格式为 "serif-bold",数字格式为 "circle-regular" + * #type=serif-bold&num=circle-regular + */ + +global.$arguments = { type: "serif-bold" }; + +function operator(proxies) { + const { type, num } = $arguments; + const TABLE = { + "serif-bold": ["𝟎","𝟏","𝟐","𝟑","𝟒","𝟓","𝟔","𝟕","𝟖","𝟗","𝐚","𝐛","𝐜","𝐝","𝐞","𝐟","𝐠","𝐡","𝐢","𝐣","𝐤","𝐥","𝐦","𝐧","𝐨","𝐩","𝐪","𝐫","𝐬","𝐭","𝐮","𝐯","𝐰","𝐱","𝐲","𝐳","𝐀","𝐁","𝐂","𝐃","𝐄","𝐅","𝐆","𝐇","𝐈","𝐉","𝐊","𝐋","𝐌","𝐍","𝐎","𝐏","𝐐","𝐑","𝐒","𝐓","𝐔","𝐕","𝐖","𝐗","𝐘","𝐙"] , + "serif-italic": ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "𝑎", "𝑏", "𝑐", "𝑑", "𝑒", "𝑓", "𝑔", "ℎ", "𝑖", "𝑗", "𝑘", "𝑙", "𝑚", "𝑛", "𝑜", "𝑝", "𝑞", "𝑟", "𝑠", "𝑡", "𝑢", "𝑣", "𝑤", "𝑥", "𝑦", "𝑧", "𝐴", "𝐵", "𝐶", "𝐷", "𝐸", "𝐹", "𝐺", "𝐻", "𝐼", "𝐽", "𝐾", "𝐿", "𝑀", "𝑁", "𝑂", "𝑃", "𝑄", "𝑅", "𝑆", "𝑇", "𝑈", "𝑉", "𝑊", "𝑋", "𝑌", "𝑍"], + "serif-bold-italic": ["0","1","2","3","4","5","6","7","8","9","𝒂","𝒃","𝒄","𝒅","𝒆","𝒇","𝒈","𝒉","𝒊","𝒋","𝒌","𝒍","𝒎","𝒏","𝒐","𝒑","𝒒","𝒓","𝒔","𝒕","𝒖","𝒗","𝒘","𝒙","𝒚","𝒛","𝑨","𝑩","𝑪","𝑫","𝑬","𝑭","𝑮","𝑯","𝑰","𝑱","𝑲","𝑳","𝑴","𝑵","𝑶","𝑷","𝑸","𝑹","𝑺","𝑻","𝑼","𝑽","𝑾","𝑿","𝒀","𝒁"], + "sans-serif-regular": ["𝟢", "𝟣", "𝟤", "𝟥", "𝟦", "𝟧", "𝟨", "𝟩", "𝟪", "𝟫", "𝖺", "𝖻", "𝖼", "𝖽", "𝖾", "𝖿", "𝗀", "𝗁", "𝗂", "𝗃", "𝗄", "𝗅", "𝗆", "𝗇", "𝗈", "𝗉", "𝗊", "𝗋", "𝗌", "𝗍", "𝗎", "𝗏", "𝗐", "𝗑", "𝗒", "𝗓", "𝖠", "𝖡", "𝖢", "𝖣", "𝖤", "𝖥", "𝖦", "𝖧", "𝖨", "𝖩", "𝖪", "𝖫", "𝖬", "𝖭", "𝖮", "𝖯", "𝖰", "𝖱", "𝖲", "𝖳", "𝖴", "𝖵", "𝖶", "𝖷", "𝖸", "𝖹"], + "sans-serif-bold": ["𝟬","𝟭","𝟮","𝟯","𝟰","𝟱","𝟲","𝟳","𝟴","𝟵","𝗮","𝗯","𝗰","𝗱","𝗲","𝗳","𝗴","𝗵","𝗶","𝗷","𝗸","𝗹","𝗺","𝗻","𝗼","𝗽","𝗾","𝗿","𝘀","𝘁","𝘂","𝘃","𝘄","𝘅","𝘆","𝘇","𝗔","𝗕","𝗖","𝗗","𝗘","𝗙","𝗚","𝗛","𝗜","𝗝","𝗞","𝗟","𝗠","𝗡","𝗢","𝗣","𝗤","𝗥","𝗦","𝗧","𝗨","𝗩","𝗪","𝗫","𝗬","𝗭"], + "sans-serif-italic": ["0","1","2","3","4","5","6","7","8","9","𝘢","𝘣","𝘤","𝘥","𝘦","𝘧","𝘨","𝘩","𝘪","𝘫","𝘬","𝘭","𝘮","𝘯","𝘰","𝘱","𝘲","𝘳","𝘴","𝘵","𝘶","𝘷","𝘸","𝘹","𝘺","𝘻","𝘈","𝘉","𝘊","𝘋","𝘌","𝘍","𝘎","𝘏","𝘐","𝘑","𝘒","𝘓","𝘔","𝘕","𝘖","𝘗","𝘘","𝘙","𝘚","𝘛","𝘜","𝘝","𝘞","𝘟","𝘠","𝘡"], + "sans-serif-bold-italic": ["0","1","2","3","4","5","6","7","8","9","𝙖","𝙗","𝙘","𝙙","𝙚","𝙛","𝙜","𝙝","𝙞","𝙟","𝙠","𝙡","𝙢","𝙣","𝙤","𝙥","𝙦","𝙧","𝙨","𝙩","𝙪","𝙫","𝙬","𝙭","𝙮","𝙯","𝘼","𝘽","𝘾","𝘿","𝙀","𝙁","𝙂","𝙃","𝙄","𝙅","𝙆","𝙇","𝙈","𝙉","𝙊","𝙋","𝙌","𝙍","𝙎","𝙏","𝙐","𝙑","𝙒","𝙓","𝙔","𝙕"], + "script-regular": ["0","1","2","3","4","5","6","7","8","9","𝒶","𝒷","𝒸","𝒹","ℯ","𝒻","ℊ","𝒽","𝒾","𝒿","𝓀","𝓁","𝓂","𝓃","ℴ","𝓅","𝓆","𝓇","𝓈","𝓉","𝓊","𝓋","𝓌","𝓍","𝓎","𝓏","𝒜","ℬ","𝒞","𝒟","ℰ","ℱ","𝒢","ℋ","ℐ","𝒥","𝒦","ℒ","ℳ","𝒩","𝒪","𝒫","𝒬","ℛ","𝒮","𝒯","𝒰","𝒱","𝒲","𝒳","𝒴","𝒵"], + "script-bold": ["0","1","2","3","4","5","6","7","8","9","𝓪","𝓫","𝓬","𝓭","𝓮","𝓯","𝓰","𝓱","𝓲","𝓳","𝓴","𝓵","𝓶","𝓷","𝓸","𝓹","𝓺","𝓻","𝓼","𝓽","𝓾","𝓿","𝔀","𝔁","𝔂","𝔃","𝓐","𝓑","𝓒","𝓓","𝓔","𝓕","𝓖","𝓗","𝓘","𝓙","𝓚","𝓛","𝓜","𝓝","𝓞","𝓟","𝓠","𝓡","𝓢","𝓣","𝓤","𝓥","𝓦","𝓧","𝓨","𝓩"], + "fraktur-regular": ["0","1","2","3","4","5","6","7","8","9","𝔞","𝔟","𝔠","𝔡","𝔢","𝔣","𝔤","𝔥","𝔦","𝔧","𝔨","𝔩","𝔪","𝔫","𝔬","𝔭","𝔮","𝔯","𝔰","𝔱","𝔲","𝔳","𝔴","𝔵","𝔶","𝔷","𝔄","𝔅","ℭ","𝔇","𝔈","𝔉","𝔊","ℌ","ℑ","𝔍","𝔎","𝔏","𝔐","𝔑","𝔒","𝔓","𝔔","ℜ","𝔖","𝔗","𝔘","𝔙","𝔚","𝔛","𝔜","ℨ"], + "fraktur-bold": ["0","1","2","3","4","5","6","7","8","9","𝖆","𝖇","𝖈","𝖉","𝖊","𝖋","𝖌","𝖍","𝖎","𝖏","𝖐","𝖑","𝖒","𝖓","𝖔","𝖕","𝖖","𝖗","𝖘","𝖙","𝖚","𝖛","𝖜","𝖝","𝖞","𝖟","𝕬","𝕭","𝕮","𝕯","𝕰","𝕱","𝕲","𝕳","𝕴","𝕵","𝕶","𝕷","𝕸","𝕹","𝕺","𝕻","𝕼","𝕽","𝕾","𝕿","𝖀","𝖁","𝖂","𝖃","𝖄","𝖅"], + "monospace-regular": ["𝟶","𝟷","𝟸","𝟹","𝟺","𝟻","𝟼","𝟽","𝟾","𝟿","𝚊","𝚋","𝚌","𝚍","𝚎","𝚏","𝚐","𝚑","𝚒","𝚓","𝚔","𝚕","𝚖","𝚗","𝚘","𝚙","𝚚","𝚛","𝚜","𝚝","𝚞","𝚟","𝚠","𝚡","𝚢","𝚣","𝙰","𝙱","𝙲","𝙳","𝙴","𝙵","𝙶","𝙷","𝙸","𝙹","𝙺","𝙻","𝙼","𝙽","𝙾","𝙿","𝚀","𝚁","𝚂","𝚃","𝚄","𝚅","𝚆","𝚇","𝚈","𝚉"], + "double-struck-bold": ["𝟘","𝟙","𝟚","𝟛","𝟜","𝟝","𝟞","𝟟","𝟠","𝟡","𝕒","𝕓","𝕔","𝕕","𝕖","𝕗","𝕘","𝕙","𝕚","𝕛","𝕜","𝕝","𝕞","𝕟","𝕠","𝕡","𝕢","𝕣","𝕤","𝕥","𝕦","𝕧","𝕨","𝕩","𝕪","𝕫","𝔸","𝔹","ℂ","𝔻","𝔼","𝔽","𝔾","ℍ","𝕀","𝕁","𝕂","𝕃","𝕄","ℕ","𝕆","ℙ","ℚ","ℝ","𝕊","𝕋","𝕌","𝕍","𝕎","𝕏","𝕐","ℤ"], + "circle-regular": ["⓪","①","②","③","④","⑤","⑥","⑦","⑧","⑨","ⓐ","ⓑ","ⓒ","ⓓ","ⓔ","ⓕ","ⓖ","ⓗ","ⓘ","ⓙ","ⓚ","ⓛ","ⓜ","ⓝ","ⓞ","ⓟ","ⓠ","ⓡ","ⓢ","ⓣ","ⓤ","ⓥ","ⓦ","ⓧ","ⓨ","ⓩ","Ⓐ","Ⓑ","Ⓒ","Ⓓ","Ⓔ","Ⓕ","Ⓖ","Ⓗ","Ⓘ","Ⓙ","Ⓚ","Ⓛ","Ⓜ","Ⓝ","Ⓞ","Ⓟ","Ⓠ","Ⓡ","Ⓢ","Ⓣ","Ⓤ","Ⓥ","Ⓦ","Ⓧ","Ⓨ","Ⓩ"], + "square-regular": ["0","1","2","3","4","5","6","7","8","9","🄰","🄱","🄲","🄳","🄴","🄵","🄶","🄷","🄸","🄹","🄺","🄻","🄼","🄽","🄾","🄿","🅀","🅁","🅂","🅃","🅄","🅅","🅆","🅇","🅈","🅉","🄰","🄱","🄲","🄳","🄴","🄵","🄶","🄷","🄸","🄹","🄺","🄻","🄼","🄽","🄾","🄿","🅀","🅁","🅂","🅃","🅄","🅅","🅆","🅇","🅈","🅉"], + "modifier-letter": ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹", "ᵃ", "ᵇ", "ᶜ", "ᵈ", "ᵉ", "ᶠ", "ᵍ", "ʰ", "ⁱ", "ʲ", "ᵏ", "ˡ", "ᵐ", "ⁿ", "ᵒ", "ᵖ", "ᵠ", "ʳ", "ˢ", "ᵗ", "ᵘ", "ᵛ", "ʷ", "ˣ", "ʸ", "ᶻ", "ᴬ", "ᴮ", "ᶜ", "ᴰ", "ᴱ", "ᶠ", "ᴳ", "ʰ", "ᴵ", "ᴶ", "ᴷ", "ᴸ", "ᴹ", "ᴺ", "ᴼ", "ᴾ", "ᵠ", "ᴿ", "ˢ", "ᵀ", "ᵁ", "ᵛ", "ᵂ", "ˣ", "ʸ", "ᶻ"], + }; + + // charCode => index in `TABLE` + const INDEX = { "48": 0, "49": 1, "50": 2, "51": 3, "52": 4, "53": 5, "54": 6, "55": 7, "56": 8, "57": 9, "65": 36, "66": 37, "67": 38, "68": 39, "69": 40, "70": 41, "71": 42, "72": 43, "73": 44, "74": 45, "75": 46, "76": 47, "77": 48, "78": 49, "79": 50, "80": 51, "81": 52, "82": 53, "83": 54, "84": 55, "85": 56, "86": 57, "87": 58, "88": 59, "89": 60, "90": 61, "97": 10, "98": 11, "99": 12, "100": 13, "101": 14, "102": 15, "103": 16, "104": 17, "105": 18, "106": 19, "107": 20, "108": 21, "109": 22, "110": 23, "111": 24, "112": 25, "113": 26, "114": 27, "115": 28, "116": 29, "117": 30, "118": 31, "119": 32, "120": 33, "121": 34, "122": 35 }; + + return proxies.map(p => { + p.name = [...p.name].map(c => { + if (/[a-zA-Z0-9]/.test(c)) { + const code = c.charCodeAt(0); + const index = INDEX[code]; + if (isNumber(code) && num) { + return TABLE[num][index]; + } else { + return TABLE[type][index]; + } + } + return c; + }).join(""); + return p; + }) +} + +function isNumber(code) { return code >= 48 && code <= 57; } \ No newline at end of file