diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..403c8ef104b8bf3476b7a5155be3158eae28734e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto +*.zig text eol=lf +zigmod.* text eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..fca76950e1542a6e4e13830388ac57078e055e03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.zig-cache +zig-out +.zigmod +deps.zig +files.zig +zigmod.lock +node_modules diff --git a/IdnaTestV2.json b/IdnaTestV2.json new file mode 100644 index 0000000000000000000000000000000000000000..e152e256996207145e6bcb4cfca271ae1dde9c9d --- /dev/null +++ b/IdnaTestV2.json @@ -0,0 +1,12810 @@ +[ + "THIS IS A GENERATED FILE. PLEASE DO NOT MODIFY DIRECTLY. See ../tools/IdnaTestV2-parser.py instead.", + "--exclude-ipv4-like: True; --exclude-std3: True; --exclude-bidi: True", + { + "input": "fass.de", + "output": "fass.de" + }, + { + "input": "fa\u00df.de", + "output": "xn--fa-hia.de" + }, + { + "input": "Fa\u00df.de", + "output": "xn--fa-hia.de" + }, + { + "input": "xn--fa-hia.de", + "output": "xn--fa-hia.de" + }, + { + "input": "\u00e0.\u05d0\u0308", + "output": "xn--0ca.xn--ssa73l" + }, + { + "input": "a\u0300.\u05d0\u0308", + "output": "xn--0ca.xn--ssa73l" + }, + { + "input": "A\u0300.\u05d0\u0308", + "output": "xn--0ca.xn--ssa73l" + }, + { + "input": "\u00c0.\u05d0\u0308", + "output": "xn--0ca.xn--ssa73l" + }, + { + "input": "xn--0ca.xn--ssa73l", + "output": "xn--0ca.xn--ssa73l" + }, + { + "input": "\u00e0\u0308.\u05d0", + "output": "xn--0ca81i.xn--4db" + }, + { + "input": "a\u0300\u0308.\u05d0", + "output": "xn--0ca81i.xn--4db" + }, + { + "input": "A\u0300\u0308.\u05d0", + "output": "xn--0ca81i.xn--4db" + }, + { + "input": "\u00c0\u0308.\u05d0", + "output": "xn--0ca81i.xn--4db" + }, + { + "input": "xn--0ca81i.xn--4db", + "output": "xn--0ca81i.xn--4db" + }, + { + "comment": "C1", + "input": "a\u200cb", + "output": null + }, + { + "comment": "C1", + "input": "A\u200cB", + "output": null + }, + { + "comment": "C1", + "input": "A\u200cb", + "output": null + }, + { + "input": "ab", + "output": "ab" + }, + { + "comment": "C1", + "input": "xn--ab-j1t", + "output": null + }, + { + "input": "a\u094d\u200cb", + "output": "xn--ab-fsf604u" + }, + { + "input": "A\u094d\u200cB", + "output": "xn--ab-fsf604u" + }, + { + "input": "A\u094d\u200cb", + "output": "xn--ab-fsf604u" + }, + { + "input": "xn--ab-fsf", + "output": "xn--ab-fsf" + }, + { + "input": "a\u094db", + "output": "xn--ab-fsf" + }, + { + "input": "A\u094dB", + "output": "xn--ab-fsf" + }, + { + "input": "A\u094db", + "output": "xn--ab-fsf" + }, + { + "input": "xn--ab-fsf604u", + "output": "xn--ab-fsf604u" + }, + { + "comment": "C2", + "input": "a\u200db", + "output": null + }, + { + "comment": "C2", + "input": "A\u200dB", + "output": null + }, + { + "comment": "C2", + "input": "A\u200db", + "output": null + }, + { + "comment": "C2", + "input": "xn--ab-m1t", + "output": null + }, + { + "input": "a\u094d\u200db", + "output": "xn--ab-fsf014u" + }, + { + "input": "A\u094d\u200dB", + "output": "xn--ab-fsf014u" + }, + { + "input": "A\u094d\u200db", + "output": "xn--ab-fsf014u" + }, + { + "input": "xn--ab-fsf014u", + "output": "xn--ab-fsf014u" + }, + { + "input": "\u00a1", + "output": "xn--7a" + }, + { + "input": "xn--7a", + "output": "xn--7a" + }, + { + "input": "\u19da", + "output": "xn--pkf" + }, + { + "input": "xn--pkf", + "output": "xn--pkf" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "", + "output": "" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "\u3002", + "output": "." + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": ".", + "output": "." + }, + { + "input": "\uab60", + "output": "xn--3y9a" + }, + { + "input": "xn--3y9a", + "output": "xn--3y9a" + }, + { + "comment": "A4_2 (ignored)", + "input": "1234567890\u00e41234567890123456789012345678901234567890123456", + "output": "xn--12345678901234567890123456789012345678901234567890123456-fxe" + }, + { + "comment": "A4_2 (ignored)", + "input": "1234567890a\u03081234567890123456789012345678901234567890123456", + "output": "xn--12345678901234567890123456789012345678901234567890123456-fxe" + }, + { + "comment": "A4_2 (ignored)", + "input": "1234567890A\u03081234567890123456789012345678901234567890123456", + "output": "xn--12345678901234567890123456789012345678901234567890123456-fxe" + }, + { + "comment": "A4_2 (ignored)", + "input": "1234567890\u00c41234567890123456789012345678901234567890123456", + "output": "xn--12345678901234567890123456789012345678901234567890123456-fxe" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--12345678901234567890123456789012345678901234567890123456-fxe", + "output": "xn--12345678901234567890123456789012345678901234567890123456-fxe" + }, + { + "input": "www.eXample.cOm", + "output": "www.example.com" + }, + { + "input": "B\u00fccher.de", + "output": "xn--bcher-kva.de" + }, + { + "input": "Bu\u0308cher.de", + "output": "xn--bcher-kva.de" + }, + { + "input": "bu\u0308cher.de", + "output": "xn--bcher-kva.de" + }, + { + "input": "b\u00fccher.de", + "output": "xn--bcher-kva.de" + }, + { + "input": "B\u00dcCHER.DE", + "output": "xn--bcher-kva.de" + }, + { + "input": "BU\u0308CHER.DE", + "output": "xn--bcher-kva.de" + }, + { + "input": "xn--bcher-kva.de", + "output": "xn--bcher-kva.de" + }, + { + "input": "\u00d6BB", + "output": "xn--bb-eka" + }, + { + "input": "O\u0308BB", + "output": "xn--bb-eka" + }, + { + "input": "o\u0308bb", + "output": "xn--bb-eka" + }, + { + "input": "\u00f6bb", + "output": "xn--bb-eka" + }, + { + "input": "\u00d6bb", + "output": "xn--bb-eka" + }, + { + "input": "O\u0308bb", + "output": "xn--bb-eka" + }, + { + "input": "xn--bb-eka", + "output": "xn--bb-eka" + }, + { + "input": "FA\u1e9e.de", + "output": "xn--fa-hia.de" + }, + { + "input": "FA\u1e9e.DE", + "output": "xn--fa-hia.de" + }, + { + "input": "\u03b2\u03cc\u03bb\u03bf\u03c2.com", + "output": "xn--nxasmm1c.com" + }, + { + "input": "\u03b2\u03bf\u0301\u03bb\u03bf\u03c2.com", + "output": "xn--nxasmm1c.com" + }, + { + "input": "\u0392\u039f\u0301\u039b\u039f\u03a3.COM", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u0392\u038c\u039b\u039f\u03a3.COM", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u03b2\u03cc\u03bb\u03bf\u03c3.com", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u03b2\u03bf\u0301\u03bb\u03bf\u03c3.com", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u0392\u03bf\u0301\u03bb\u03bf\u03c3.com", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u0392\u03cc\u03bb\u03bf\u03c3.com", + "output": "xn--nxasmq6b.com" + }, + { + "input": "xn--nxasmq6b.com", + "output": "xn--nxasmq6b.com" + }, + { + "input": "\u0392\u03bf\u0301\u03bb\u03bf\u03c2.com", + "output": "xn--nxasmm1c.com" + }, + { + "input": "\u0392\u03cc\u03bb\u03bf\u03c2.com", + "output": "xn--nxasmm1c.com" + }, + { + "input": "xn--nxasmm1c.com", + "output": "xn--nxasmm1c.com" + }, + { + "input": "xn--nxasmm1c", + "output": "xn--nxasmm1c" + }, + { + "input": "\u03b2\u03cc\u03bb\u03bf\u03c2", + "output": "xn--nxasmm1c" + }, + { + "input": "\u03b2\u03bf\u0301\u03bb\u03bf\u03c2", + "output": "xn--nxasmm1c" + }, + { + "input": "\u0392\u039f\u0301\u039b\u039f\u03a3", + "output": "xn--nxasmq6b" + }, + { + "input": "\u0392\u038c\u039b\u039f\u03a3", + "output": "xn--nxasmq6b" + }, + { + "input": "\u03b2\u03cc\u03bb\u03bf\u03c3", + "output": "xn--nxasmq6b" + }, + { + "input": "\u03b2\u03bf\u0301\u03bb\u03bf\u03c3", + "output": "xn--nxasmq6b" + }, + { + "input": "\u0392\u03bf\u0301\u03bb\u03bf\u03c3", + "output": "xn--nxasmq6b" + }, + { + "input": "\u0392\u03cc\u03bb\u03bf\u03c3", + "output": "xn--nxasmq6b" + }, + { + "input": "xn--nxasmq6b", + "output": "xn--nxasmq6b" + }, + { + "input": "\u0392\u03cc\u03bb\u03bf\u03c2", + "output": "xn--nxasmm1c" + }, + { + "input": "\u0392\u03bf\u0301\u03bb\u03bf\u03c2", + "output": "xn--nxasmm1c" + }, + { + "input": "www.\u0dc1\u0dca\u200d\u0dbb\u0dd3.com", + "output": "www.xn--10cl1a0b660p.com" + }, + { + "input": "WWW.\u0dc1\u0dca\u200d\u0dbb\u0dd3.COM", + "output": "www.xn--10cl1a0b660p.com" + }, + { + "input": "Www.\u0dc1\u0dca\u200d\u0dbb\u0dd3.com", + "output": "www.xn--10cl1a0b660p.com" + }, + { + "input": "www.xn--10cl1a0b.com", + "output": "www.xn--10cl1a0b.com" + }, + { + "input": "www.\u0dc1\u0dca\u0dbb\u0dd3.com", + "output": "www.xn--10cl1a0b.com" + }, + { + "input": "WWW.\u0dc1\u0dca\u0dbb\u0dd3.COM", + "output": "www.xn--10cl1a0b.com" + }, + { + "input": "Www.\u0dc1\u0dca\u0dbb\u0dd3.com", + "output": "www.xn--10cl1a0b.com" + }, + { + "input": "www.xn--10cl1a0b660p.com", + "output": "www.xn--10cl1a0b660p.com" + }, + { + "input": "\u0646\u0627\u0645\u0647\u200c\u0627\u06cc", + "output": "xn--mgba3gch31f060k" + }, + { + "input": "xn--mgba3gch31f", + "output": "xn--mgba3gch31f" + }, + { + "input": "\u0646\u0627\u0645\u0647\u0627\u06cc", + "output": "xn--mgba3gch31f" + }, + { + "input": "xn--mgba3gch31f060k", + "output": "xn--mgba3gch31f060k" + }, + { + "input": "xn--mgba3gch31f060k.com", + "output": "xn--mgba3gch31f060k.com" + }, + { + "input": "\u0646\u0627\u0645\u0647\u200c\u0627\u06cc.com", + "output": "xn--mgba3gch31f060k.com" + }, + { + "input": "\u0646\u0627\u0645\u0647\u200c\u0627\u06cc.COM", + "output": "xn--mgba3gch31f060k.com" + }, + { + "input": "xn--mgba3gch31f.com", + "output": "xn--mgba3gch31f.com" + }, + { + "input": "\u0646\u0627\u0645\u0647\u0627\u06cc.com", + "output": "xn--mgba3gch31f.com" + }, + { + "input": "\u0646\u0627\u0645\u0647\u0627\u06cc.COM", + "output": "xn--mgba3gch31f.com" + }, + { + "comment": "A4_2 (ignored)", + "input": "a.b\uff0ec\u3002d\uff61", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "a.b.c\u3002d\u3002", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "A.B.C\u3002D\u3002", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "A.b.c\u3002D\u3002", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "a.b.c.d.", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "A.B\uff0eC\u3002D\uff61", + "output": "a.b.c.d." + }, + { + "comment": "A4_2 (ignored)", + "input": "A.b\uff0ec\u3002D\uff61", + "output": "a.b.c.d." + }, + { + "input": "U\u0308.xn--tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00dc.xn--tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00fc.xn--tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "u\u0308.xn--tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "U\u0308.XN--TDA", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00dc.XN--TDA", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00dc.xn--Tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "U\u0308.xn--Tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "xn--tda.xn--tda", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00fc.\u00fc", + "output": "xn--tda.xn--tda" + }, + { + "input": "u\u0308.u\u0308", + "output": "xn--tda.xn--tda" + }, + { + "input": "U\u0308.U\u0308", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00dc.\u00dc", + "output": "xn--tda.xn--tda" + }, + { + "input": "\u00dc.\u00fc", + "output": "xn--tda.xn--tda" + }, + { + "input": "U\u0308.u\u0308", + "output": "xn--tda.xn--tda" + }, + { + "comment": "V1", + "input": "xn--u-ccb", + "output": null + }, + { + "comment": "V7", + "input": "a\u2488com", + "output": null + }, + { + "input": "a1.com", + "output": "a1.com" + }, + { + "comment": "V7", + "input": "A\u2488COM", + "output": null + }, + { + "comment": "V7", + "input": "A\u2488Com", + "output": null + }, + { + "comment": "V7", + "input": "xn--acom-0w1b", + "output": null + }, + { + "comment": "V7", + "input": "xn--a-ecp.ru", + "output": null + }, + { + "comment": "P4", + "input": "xn--0.pt", + "output": null + }, + { + "comment": "V7", + "input": "xn--a.pt", + "output": null + }, + { + "comment": "P4", + "input": "xn--a-\u00c4.pt", + "output": null + }, + { + "comment": "P4", + "input": "xn--a-A\u0308.pt", + "output": null + }, + { + "comment": "P4", + "input": "xn--a-a\u0308.pt", + "output": null + }, + { + "comment": "P4", + "input": "xn--a-\u00e4.pt", + "output": null + }, + { + "comment": "P4", + "input": "XN--A-\u00c4.PT", + "output": null + }, + { + "comment": "P4", + "input": "XN--A-A\u0308.PT", + "output": null + }, + { + "comment": "P4", + "input": "Xn--A-A\u0308.pt", + "output": null + }, + { + "comment": "P4", + "input": "Xn--A-\u00c4.pt", + "output": null + }, + { + "comment": "V4; V2 (ignored)", + "input": "xn--xn--a--gua.pt", + "output": null + }, + { + "input": "\u65e5\u672c\u8a9e\u3002\uff2a\uff30", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e\u3002JP", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e\u3002jp", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e\u3002Jp", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "xn--wgv71a119e.jp", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e.jp", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e.JP", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e.Jp", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e\u3002\uff4a\uff50", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u65e5\u672c\u8a9e\u3002\uff2a\uff50", + "output": "xn--wgv71a119e.jp" + }, + { + "input": "\u2615", + "output": "xn--53h" + }, + { + "input": "xn--53h", + "output": "xn--53h" + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.a\u00df\u200c\u200db\u200c\u200dc\u00df\u00df\u00df\u00dfd\u03c2\u03c3\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfe\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfx\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfy\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u0302\u00dfz", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.ASS\u200c\u200dB\u200c\u200dCSSSSSSSSD\u03a3\u03a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.ASS\u200c\u200dB\u200c\u200dCSSSSSSSSD\u03a3\u03a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSS\u015cSSZ", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.ass\u200c\u200db\u200c\u200dcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\u015dssz", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.ass\u200c\u200db\u200c\u200dcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.Ass\u200c\u200db\u200c\u200dcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.Ass\u200c\u200db\u200c\u200dcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\u015dssz", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.assbcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\u015dssz", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.assbcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.ASSBCSSSSSSSSD\u03a3\u03a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.ASSBCSSSSSSSSD\u03a3\u03a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSS\u015cSSZ", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.Assbcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\u015dssz", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "A4_2 (ignored)", + "input": "1.Assbcssssssssd\u03c3\u03c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz", + "output": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa" + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.A\u00df\u200c\u200db\u200c\u200dc\u00df\u00df\u00df\u00dfd\u03c2\u03c3\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfe\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfx\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00dfy\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u00df\u0302\u00dfz", + "output": null + }, + { + "comment": "C1; C2; A4_2 (ignored)", + "input": "1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200cx\u200dn\u200c-\u200d-b\u00df", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200cX\u200dN\u200c-\u200d-BSS", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200cx\u200dn\u200c-\u200d-bss", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200cX\u200dn\u200c-\u200d-Bss", + "output": null + }, + { + "input": "xn--bss", + "output": "xn--bss" + }, + { + "input": "\u5919", + "output": "xn--bss" + }, + { + "comment": "C1; C2", + "input": "xn--xn--bss-7z6ccid", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200cX\u200dn\u200c-\u200d-B\u00df", + "output": null + }, + { + "comment": "C1; C2", + "input": "xn--xn--b-pqa5796ccahd", + "output": null + }, + { + "input": "\u02e3\u034f\u2115\u200b\ufe63\u00ad\uff0d\u180c\u212c\ufe00\u017f\u2064\ud835\udd30\udb40\uddef\ufb04", + "output": "xn--bssffl" + }, + { + "input": "x\u034fN\u200b-\u00ad-\u180cB\ufe00s\u2064s\udb40\uddefffl", + "output": "xn--bssffl" + }, + { + "input": "x\u034fn\u200b-\u00ad-\u180cb\ufe00s\u2064s\udb40\uddefffl", + "output": "xn--bssffl" + }, + { + "input": "X\u034fN\u200b-\u00ad-\u180cB\ufe00S\u2064S\udb40\uddefFFL", + "output": "xn--bssffl" + }, + { + "input": "X\u034fn\u200b-\u00ad-\u180cB\ufe00s\u2064s\udb40\uddefffl", + "output": "xn--bssffl" + }, + { + "input": "xn--bssffl", + "output": "xn--bssffl" + }, + { + "input": "\u5921\u591e\u591c\u5919", + "output": "xn--bssffl" + }, + { + "input": "\u02e3\u034f\u2115\u200b\ufe63\u00ad\uff0d\u180c\u212c\ufe00S\u2064\ud835\udd30\udb40\uddefFFL", + "output": "xn--bssffl" + }, + { + "input": "x\u034fN\u200b-\u00ad-\u180cB\ufe00S\u2064s\udb40\uddefFFL", + "output": "xn--bssffl" + }, + { + "input": "\u02e3\u034f\u2115\u200b\ufe63\u00ad\uff0d\u180c\u212c\ufe00s\u2064\ud835\udd30\udb40\uddefffl", + "output": "xn--bssffl" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "\u00e41234567890123456789012345678901234567890123456789012345", + "output": "xn--1234567890123456789012345678901234567890123456789012345-9te" + }, + { + "input": "a\u03081234567890123456789012345678901234567890123456789012345", + "output": "xn--1234567890123456789012345678901234567890123456789012345-9te" + }, + { + "input": "A\u03081234567890123456789012345678901234567890123456789012345", + "output": "xn--1234567890123456789012345678901234567890123456789012345-9te" + }, + { + "input": "\u00c41234567890123456789012345678901234567890123456789012345", + "output": "xn--1234567890123456789012345678901234567890123456789012345-9te" + }, + { + "input": "xn--1234567890123456789012345678901234567890123456789012345-9te", + "output": "xn--1234567890123456789012345678901234567890123456789012345-9te" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00e41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "a.b..-q--a-.e", + "output": "a.b..-q--a-.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "a.b..-q--\u00e4-.e", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "a.b..-q--a\u0308-.e", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "A.B..-Q--A\u0308-.E", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "A.B..-Q--\u00c4-.E", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "A.b..-Q--\u00c4-.E", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "A.b..-Q--A\u0308-.E", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "V2 (ignored); V3 (ignored); A4_2 (ignored)", + "input": "a.b..xn---q----jra.e", + "output": "a.b..xn---q----jra.e" + }, + { + "comment": "A4_2 (ignored)", + "input": "a..c", + "output": "a..c" + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "a.-b.", + "output": "a.-b." + }, + { + "comment": "V3 (ignored)", + "input": "a.b-.c", + "output": "a.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "a.-.c", + "output": "a.-.c" + }, + { + "comment": "V2 (ignored)", + "input": "a.bc--de.f", + "output": "a.bc--de.f" + }, + { + "comment": "V4; V2 (ignored)", + "input": "xn--xn---epa", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u00e4.\u00ad.c", + "output": "xn--4ca..c" + }, + { + "comment": "A4_2 (ignored)", + "input": "a\u0308.\u00ad.c", + "output": "xn--4ca..c" + }, + { + "comment": "A4_2 (ignored)", + "input": "A\u0308.\u00ad.C", + "output": "xn--4ca..c" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u00c4.\u00ad.C", + "output": "xn--4ca..c" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--4ca..c", + "output": "xn--4ca..c" + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "\u00e4.-b.", + "output": "xn--4ca.-b." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "a\u0308.-b.", + "output": "xn--4ca.-b." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "A\u0308.-B.", + "output": "xn--4ca.-b." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "\u00c4.-B.", + "output": "xn--4ca.-b." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "xn--4ca.-b.", + "output": "xn--4ca.-b." + }, + { + "comment": "V3 (ignored)", + "input": "\u00e4.b-.c", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "a\u0308.b-.c", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "A\u0308.B-.C", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "\u00c4.B-.C", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "\u00c4.b-.C", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "A\u0308.b-.C", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "xn--4ca.b-.c", + "output": "xn--4ca.b-.c" + }, + { + "comment": "V3 (ignored)", + "input": "\u00e4.-.c", + "output": "xn--4ca.-.c" + }, + { + "comment": "V3 (ignored)", + "input": "a\u0308.-.c", + "output": "xn--4ca.-.c" + }, + { + "comment": "V3 (ignored)", + "input": "A\u0308.-.C", + "output": "xn--4ca.-.c" + }, + { + "comment": "V3 (ignored)", + "input": "\u00c4.-.C", + "output": "xn--4ca.-.c" + }, + { + "comment": "V3 (ignored)", + "input": "xn--4ca.-.c", + "output": "xn--4ca.-.c" + }, + { + "comment": "V2 (ignored)", + "input": "\u00e4.bc--de.f", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "a\u0308.bc--de.f", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "A\u0308.BC--DE.F", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "\u00c4.BC--DE.F", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "\u00c4.bc--De.f", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "A\u0308.bc--De.f", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V2 (ignored)", + "input": "xn--4ca.bc--de.f", + "output": "xn--4ca.bc--de.f" + }, + { + "comment": "V6", + "input": "a.b.\u0308c.d", + "output": null + }, + { + "comment": "V6", + "input": "A.B.\u0308C.D", + "output": null + }, + { + "comment": "V6", + "input": "A.b.\u0308c.d", + "output": null + }, + { + "comment": "V6", + "input": "a.b.xn--c-bcb.d", + "output": null + }, + { + "input": "A0", + "output": "a0" + }, + { + "input": "0A", + "output": "0a" + }, + { + "input": "\u05d0\u05c7", + "output": "xn--vdbr" + }, + { + "input": "xn--vdbr", + "output": "xn--vdbr" + }, + { + "input": "\u05d09\u05c7", + "output": "xn--9-ihcz" + }, + { + "input": "xn--9-ihcz", + "output": "xn--9-ihcz" + }, + { + "input": "\u05d0\u05ea", + "output": "xn--4db6c" + }, + { + "input": "xn--4db6c", + "output": "xn--4db6c" + }, + { + "input": "\u05d0\u05f3\u05ea", + "output": "xn--4db6c0a" + }, + { + "input": "xn--4db6c0a", + "output": "xn--4db6c0a" + }, + { + "input": "\u05d07\u05ea", + "output": "xn--7-zhc3f" + }, + { + "input": "xn--7-zhc3f", + "output": "xn--7-zhc3f" + }, + { + "input": "\u05d0\u0667\u05ea", + "output": "xn--4db6c6t" + }, + { + "input": "xn--4db6c6t", + "output": "xn--4db6c6t" + }, + { + "input": "\u0bb9\u0bcd\u200d", + "output": "xn--dmc4b194h" + }, + { + "input": "xn--dmc4b", + "output": "xn--dmc4b" + }, + { + "input": "\u0bb9\u0bcd", + "output": "xn--dmc4b" + }, + { + "input": "xn--dmc4b194h", + "output": "xn--dmc4b194h" + }, + { + "comment": "C2", + "input": "\u0bb9\u200d", + "output": null + }, + { + "input": "xn--dmc", + "output": "xn--dmc" + }, + { + "input": "\u0bb9", + "output": "xn--dmc" + }, + { + "comment": "C2", + "input": "xn--dmc225h", + "output": null + }, + { + "comment": "C2", + "input": "\u200d", + "output": null + }, + { + "comment": "C2", + "input": "xn--1ug", + "output": null + }, + { + "input": "\u0bb9\u0bcd\u200c", + "output": "xn--dmc4by94h" + }, + { + "input": "xn--dmc4by94h", + "output": "xn--dmc4by94h" + }, + { + "comment": "C1", + "input": "\u0bb9\u200c", + "output": null + }, + { + "comment": "C1", + "input": "xn--dmc025h", + "output": null + }, + { + "comment": "C1", + "input": "\u200c", + "output": null + }, + { + "comment": "C1", + "input": "xn--0ug", + "output": null + }, + { + "input": "\u0644\u0670\u200c\u06ed\u06ef", + "output": "xn--ghb2gxqia7523a" + }, + { + "input": "xn--ghb2gxqia", + "output": "xn--ghb2gxqia" + }, + { + "input": "\u0644\u0670\u06ed\u06ef", + "output": "xn--ghb2gxqia" + }, + { + "input": "xn--ghb2gxqia7523a", + "output": "xn--ghb2gxqia7523a" + }, + { + "input": "\u0644\u0670\u200c\u06ef", + "output": "xn--ghb2g3qq34f" + }, + { + "input": "xn--ghb2g3q", + "output": "xn--ghb2g3q" + }, + { + "input": "\u0644\u0670\u06ef", + "output": "xn--ghb2g3q" + }, + { + "input": "xn--ghb2g3qq34f", + "output": "xn--ghb2g3qq34f" + }, + { + "input": "\u0644\u200c\u06ed\u06ef", + "output": "xn--ghb25aga828w" + }, + { + "input": "xn--ghb25aga", + "output": "xn--ghb25aga" + }, + { + "input": "\u0644\u06ed\u06ef", + "output": "xn--ghb25aga" + }, + { + "input": "xn--ghb25aga828w", + "output": "xn--ghb25aga828w" + }, + { + "input": "\u0644\u200c\u06ef", + "output": "xn--ghb65a953d" + }, + { + "input": "xn--ghb65a", + "output": "xn--ghb65a" + }, + { + "input": "\u0644\u06ef", + "output": "xn--ghb65a" + }, + { + "input": "xn--ghb65a953d", + "output": "xn--ghb65a953d" + }, + { + "input": "xn--ghb2gxq", + "output": "xn--ghb2gxq" + }, + { + "input": "\u0644\u0670\u06ed", + "output": "xn--ghb2gxq" + }, + { + "comment": "C1", + "input": "\u06ef\u200c\u06ef", + "output": null + }, + { + "input": "xn--cmba", + "output": "xn--cmba" + }, + { + "input": "\u06ef\u06ef", + "output": "xn--cmba" + }, + { + "comment": "C1", + "input": "xn--cmba004q", + "output": null + }, + { + "input": "xn--ghb", + "output": "xn--ghb" + }, + { + "input": "\u0644", + "output": "xn--ghb" + }, + { + "comment": "A4_2 (ignored)", + "input": "a\u3002\u3002b", + "output": "a..b" + }, + { + "comment": "A4_2 (ignored)", + "input": "A\u3002\u3002B", + "output": "a..b" + }, + { + "comment": "A4_2 (ignored)", + "input": "a..b", + "output": "a..b" + }, + { + "comment": "A4_2 (ignored)", + "input": "..xn--skb", + "output": "..xn--skb" + }, + { + "comment": "U1 (ignored)", + "input": "$", + "output": "$" + }, + { + "comment": "U1 (ignored)", + "input": "\u2477.four", + "output": "(4).four" + }, + { + "comment": "U1 (ignored)", + "input": "(4).four", + "output": "(4).four" + }, + { + "comment": "U1 (ignored)", + "input": "\u2477.FOUR", + "output": "(4).four" + }, + { + "comment": "U1 (ignored)", + "input": "\u2477.Four", + "output": "(4).four" + }, + { + "comment": "V7; A3", + "input": "a\ud900z", + "output": null + }, + { + "comment": "V7; A3", + "input": "A\ud900Z", + "output": null + }, + { + "comment": "P4; A4_1 (ignored); A4_2 (ignored)", + "input": "xn--", + "output": null + }, + { + "comment": "P4", + "input": "xn---", + "output": null + }, + { + "comment": "P4", + "input": "xn--ASCII-", + "output": null + }, + { + "input": "ascii", + "output": "ascii" + }, + { + "comment": "P4", + "input": "xn--unicode-.org", + "output": null + }, + { + "input": "unicode.org", + "output": "unicode.org" + }, + { + "input": "\uf951\ud87e\udc68\ud87e\udc74\ud87e\udd1f\ud87e\udd5f\ud87e\uddbf", + "output": "xn--snl253bgitxhzwu2arn60c" + }, + { + "input": "\u964b\u36fc\u5f53\ud850\udfab\u7aee\u45d7", + "output": "xn--snl253bgitxhzwu2arn60c" + }, + { + "input": "xn--snl253bgitxhzwu2arn60c", + "output": "xn--snl253bgitxhzwu2arn60c" + }, + { + "input": "\u96fb\ud844\udf6a\u5f33\u43ab\u7aae\u4d57", + "output": "xn--kbo60w31ob3z6t3av9z5b" + }, + { + "input": "xn--kbo60w31ob3z6t3av9z5b", + "output": "xn--kbo60w31ob3z6t3av9z5b" + }, + { + "input": "xn--A-1ga", + "output": "xn--a-1ga" + }, + { + "input": "a\u00f6", + "output": "xn--a-1ga" + }, + { + "input": "ao\u0308", + "output": "xn--a-1ga" + }, + { + "input": "AO\u0308", + "output": "xn--a-1ga" + }, + { + "input": "A\u00d6", + "output": "xn--a-1ga" + }, + { + "input": "A\u00f6", + "output": "xn--a-1ga" + }, + { + "input": "Ao\u0308", + "output": "xn--a-1ga" + }, + { + "input": "\uff1d\u0338", + "output": "xn--1ch" + }, + { + "input": "\u2260", + "output": "xn--1ch" + }, + { + "input": "=\u0338", + "output": "xn--1ch" + }, + { + "input": "xn--1ch", + "output": "xn--1ch" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b." + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_1 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a" + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a." + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "A4_1 (ignored); A4_2 (ignored)", + "input": "123456789012345678901234567890123456789012345678901234567890123.1234567890\u00c41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", + "output": "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b" + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u2495\u221d\u065f\uda0e\udd26\uff0e-\udb40\udd2f", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "14.\u221d\u065f\uda0e\udd26.-\udb40\udd2f", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "14.xn--7hb713l3v90n.-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--7hb713lfwbi1311b.-", + "output": null + }, + { + "input": "\ua863.\u07cf", + "output": "xn--8c9a.xn--qsb" + }, + { + "input": "xn--8c9a.xn--qsb", + "output": "xn--8c9a.xn--qsb" + }, + { + "comment": "C2", + "input": "\u200d\u2260\u1899\u226f.\uc1a3-\u1874\u10a0", + "output": null + }, + { + "comment": "C2", + "input": "\u200d=\u0338\u1899>\u0338.\u1109\u1169\u11be-\u1874\u10a0", + "output": null + }, + { + "comment": "C2", + "input": "\u200d=\u0338\u1899>\u0338.\u1109\u1169\u11be-\u1874\u2d00", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u2260\u1899\u226f.\uc1a3-\u1874\u2d00", + "output": null + }, + { + "input": "xn--jbf911clb.xn----p9j493ivi4l", + "output": "xn--jbf911clb.xn----p9j493ivi4l" + }, + { + "input": "\u2260\u1899\u226f.\uc1a3-\u1874\u2d00", + "output": "xn--jbf911clb.xn----p9j493ivi4l" + }, + { + "input": "=\u0338\u1899>\u0338.\u1109\u1169\u11be-\u1874\u2d00", + "output": "xn--jbf911clb.xn----p9j493ivi4l" + }, + { + "input": "=\u0338\u1899>\u0338.\u1109\u1169\u11be-\u1874\u10a0", + "output": "xn--jbf911clb.xn----p9j493ivi4l" + }, + { + "input": "\u2260\u1899\u226f.\uc1a3-\u1874\u10a0", + "output": "xn--jbf911clb.xn----p9j493ivi4l" + }, + { + "comment": "C2", + "input": "xn--jbf929a90b0b.xn----p9j493ivi4l", + "output": null + }, + { + "comment": "V7", + "input": "xn--jbf911clb.xn----6zg521d196p", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--jbf929a90b0b.xn----6zg521d196p", + "output": null + }, + { + "comment": "V7", + "input": "\ud97d\udf9c\uff0e\ud803\udfc7\u0fa2\u077d\u0600", + "output": null + }, + { + "comment": "V7", + "input": "\ud97d\udf9c\uff0e\ud803\udfc7\u0fa1\u0fb7\u077d\u0600", + "output": null + }, + { + "comment": "V7", + "input": "\ud97d\udf9c.\ud803\udfc7\u0fa1\u0fb7\u077d\u0600", + "output": null + }, + { + "comment": "V7", + "input": "xn--gw68a.xn--ifb57ev2psc6027m", + "output": null + }, + { + "comment": "V6", + "input": "\ud84f\udcd4\u0303.\ud805\udcc2", + "output": null + }, + { + "comment": "V6", + "input": "xn--nsa95820a.xn--wz1d", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\ud9d4\udfad.\u10b2\ud804\uddc0", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\ud9d4\udfad.\u2d12\ud804\uddc0", + "output": null + }, + { + "comment": "V7", + "input": "xn--bn95b.xn--9kj2034e", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug15083f.xn--9kj2034e", + "output": null + }, + { + "comment": "V7", + "input": "xn--bn95b.xn--qnd6272k", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug15083f.xn--qnd6272k", + "output": null + }, + { + "comment": "V7", + "input": "\u7e71\ud805\uddbf\u200d.\uff18\ufe12", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--gl0as212a.i.", + "output": "xn--gl0as212a.i." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u7e71\ud805\uddbf.i.", + "output": "xn--gl0as212a.i." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u7e71\ud805\uddbf.I.", + "output": "xn--gl0as212a.i." + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--1ug6928ac48e.i.", + "output": "xn--1ug6928ac48e.i." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u7e71\ud805\uddbf\u200d.i.", + "output": "xn--1ug6928ac48e.i." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u7e71\ud805\uddbf\u200d.I.", + "output": "xn--1ug6928ac48e.i." + }, + { + "comment": "V7", + "input": "xn--gl0as212a.xn--8-o89h", + "output": null + }, + { + "comment": "V7", + "input": "xn--1ug6928ac48e.xn--8-o89h", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\udb40\uddbe\uff0e\ud838\udc08", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\udb40\uddbe.\ud838\udc08", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": ".xn--ph4h", + "output": null + }, + { + "comment": "C2", + "input": "\u00df\u06eb\u3002\u200d", + "output": null + }, + { + "comment": "C2", + "input": "SS\u06eb\u3002\u200d", + "output": null + }, + { + "comment": "C2", + "input": "ss\u06eb\u3002\u200d", + "output": null + }, + { + "comment": "C2", + "input": "Ss\u06eb\u3002\u200d", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--ss-59d.", + "output": "xn--ss-59d." + }, + { + "comment": "A4_2 (ignored)", + "input": "ss\u06eb.", + "output": "xn--ss-59d." + }, + { + "comment": "A4_2 (ignored)", + "input": "SS\u06eb.", + "output": "xn--ss-59d." + }, + { + "comment": "A4_2 (ignored)", + "input": "Ss\u06eb.", + "output": "xn--ss-59d." + }, + { + "comment": "C2", + "input": "xn--ss-59d.xn--1ug", + "output": null + }, + { + "comment": "C2", + "input": "xn--zca012a.xn--1ug", + "output": null + }, + { + "comment": "C1; V7", + "input": "\udb41\udc35\u200c\u2488\uff0e\udb40\udf87", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "\udb41\udc35\u200c1..\udb40\udf87", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--1-bs31m..xn--tv36e", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "xn--1-rgn37671n..xn--tv36e", + "output": null + }, + { + "comment": "V7", + "input": "xn--tshz2001k.xn--tv36e", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug88o47900b.xn--tv36e", + "output": null + }, + { + "comment": "V7", + "input": "\udb3c\ude23\u065f\uaab2\u00df\u3002\udaf1\udce7", + "output": null + }, + { + "comment": "V7", + "input": "\udb3c\ude23\u065f\uaab2SS\u3002\udaf1\udce7", + "output": null + }, + { + "comment": "V7", + "input": "\udb3c\ude23\u065f\uaab2ss\u3002\udaf1\udce7", + "output": null + }, + { + "comment": "V7", + "input": "\udb3c\ude23\u065f\uaab2Ss\u3002\udaf1\udce7", + "output": null + }, + { + "comment": "V7", + "input": "xn--ss-3xd2839nncy1m.xn--bb79d", + "output": null + }, + { + "comment": "V7", + "input": "xn--zca92z0t7n5w96j.xn--bb79d", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u0774\u200c\ud83a\udd3f\u3002\ud8b5\ude10\u425c\u200d\ud9be\udd3c", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u0774\u200c\ud83a\udd1d\u3002\ud8b5\ude10\u425c\u200d\ud9be\udd3c", + "output": null + }, + { + "comment": "V7", + "input": "xn--4pb2977v.xn--z0nt555ukbnv", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--4pb607jjt73a.xn--1ug236ke314donv1a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u3164\u094d\u10a0\u17d0.\u180b", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u1160\u094d\u10a0\u17d0.\u180b", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u1160\u094d\u2d00\u17d0.\u180b", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--n3b445e53p.", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u3164\u094d\u2d00\u17d0.\u180b", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--n3b742bkqf4ty.", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--n3b468aoqa89r.", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--n3b445e53po6d.", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--n3b468azngju2a.", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u2763\u200d\uff0e\u09cd\ud807\udc3d\u0612\ua929", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u2763\u200d.\u09cd\ud807\udc3d\u0612\ua929", + "output": null + }, + { + "comment": "V6", + "input": "xn--pei.xn--0fb32q3w7q2g4d", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--1ugy10a.xn--0fb32q3w7q2g4d", + "output": null + }, + { + "comment": "V6", + "input": "\u0349\u3002\ud85e\udc6b", + "output": null + }, + { + "comment": "V6", + "input": "xn--nua.xn--bc6k", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\ud807\udc3f\udb40\udd66\uff0e\u1160", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\ud807\udc3f\udb40\udd66.\u1160", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--ok3d.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ok3d.xn--psd", + "output": null + }, + { + "comment": "V6", + "input": "\u850f\uff61\ud807\udc3a", + "output": null + }, + { + "comment": "V6", + "input": "\u850f\u3002\ud807\udc3a", + "output": null + }, + { + "comment": "V6", + "input": "xn--uy1a.xn--jk3d", + "output": null + }, + { + "comment": "V7", + "input": "xn--8g1d12120a.xn--5l6h", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud804\udee7\ua9c02\uff61\u39c9\uda09\udd84", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud804\udee7\ua9c02\u3002\u39c9\uda09\udd84", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--2-5z4eu89y.xn--97l02706d", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03c2\ud8ab\udc40\uff61\uffa0", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03c2\ud8ab\udc40\u3002\u1160", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03a3\ud8ab\udc40\u3002\u1160", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03c3\ud8ab\udc40\u3002\u1160", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--4xa192qmp03d.", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--3xa392qmp03d.", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03a3\ud8ab\udc40\uff61\uffa0", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2938\u03c3\ud8ab\udc40\uff61\uffa0", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa192qmp03d.xn--psd", + "output": null + }, + { + "comment": "V7", + "input": "xn--3xa392qmp03d.xn--psd", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa192qmp03d.xn--cl7c", + "output": null + }, + { + "comment": "V7", + "input": "xn--3xa392qmp03d.xn--cl7c", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u200d\udb7d\udc56\udb40\udc50\uff0e\u05bd\ud826\udfb0\ua85d\ud800\udee1", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u200d\udb7d\udc56\udb40\udc50.\u05bd\ud826\udfb0\ua85d\ud800\udee1", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--b726ey18m.xn--ldb8734fg0qcyzzg", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u3002\udbcc\ude35\u03c2\ud8c2\udc07\u3002\ud802\udf88", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u3002\udbcc\ude35\u03a3\ud8c2\udc07\u3002\ud802\udf88", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u3002\udbcc\ude35\u03c3\ud8c2\udc07\u3002\ud802\udf88", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--4xa68573c7n64d.xn--f29c", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--3xa88573c7n64d.xn--f29c", + "output": null + }, + { + "comment": "V7", + "input": "\u2489\udb40\ude93\u2260\uff61\u10bf\u2b23\u10a8", + "output": null + }, + { + "comment": "V7", + "input": "\u2489\udb40\ude93=\u0338\uff61\u10bf\u2b23\u10a8", + "output": null + }, + { + "comment": "V7", + "input": "2.\udb40\ude93\u2260\u3002\u10bf\u2b23\u10a8", + "output": null + }, + { + "comment": "V7", + "input": "2.\udb40\ude93=\u0338\u3002\u10bf\u2b23\u10a8", + "output": null + }, + { + "comment": "V7", + "input": "2.\udb40\ude93=\u0338\u3002\u2d1f\u2b23\u2d08", + "output": null + }, + { + "comment": "V7", + "input": "2.\udb40\ude93\u2260\u3002\u2d1f\u2b23\u2d08", + "output": null + }, + { + "comment": "V7", + "input": "2.xn--1chz4101l.xn--45iz7d6b", + "output": null + }, + { + "comment": "V7", + "input": "\u2489\udb40\ude93=\u0338\uff61\u2d1f\u2b23\u2d08", + "output": null + }, + { + "comment": "V7", + "input": "\u2489\udb40\ude93\u2260\uff61\u2d1f\u2b23\u2d08", + "output": null + }, + { + "comment": "V7", + "input": "xn--1ch07f91401d.xn--45iz7d6b", + "output": null + }, + { + "comment": "V7", + "input": "2.xn--1chz4101l.xn--gnd9b297j", + "output": null + }, + { + "comment": "V7", + "input": "xn--1ch07f91401d.xn--gnd9b297j", + "output": null + }, + { + "input": "\ud83a\udd37.\ud802\udf90\ud83a\udc81\ud803\ude60\u0624", + "output": "xn--ve6h.xn--jgb1694kz0b2176a" + }, + { + "input": "\ud83a\udd37.\ud802\udf90\ud83a\udc81\ud803\ude60\u0648\u0654", + "output": "xn--ve6h.xn--jgb1694kz0b2176a" + }, + { + "input": "\ud83a\udd15.\ud802\udf90\ud83a\udc81\ud803\ude60\u0648\u0654", + "output": "xn--ve6h.xn--jgb1694kz0b2176a" + }, + { + "input": "\ud83a\udd15.\ud802\udf90\ud83a\udc81\ud803\ude60\u0624", + "output": "xn--ve6h.xn--jgb1694kz0b2176a" + }, + { + "input": "xn--ve6h.xn--jgb1694kz0b2176a", + "output": "xn--ve6h.xn--jgb1694kz0b2176a" + }, + { + "comment": "V7; V3 (ignored); U1 (ignored)", + "input": "-\udb40\ude56\ua867\uff0e\udb40\ude82\ud8dc\udd83\ud83c\udd09", + "output": null + }, + { + "comment": "V7; V3 (ignored); U1 (ignored)", + "input": "-\udb40\ude56\ua867.\udb40\ude82\ud8dc\udd838,", + "output": null + }, + { + "comment": "V7; V3 (ignored); U1 (ignored)", + "input": "xn----hg4ei0361g.xn--8,-k362evu488a", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----hg4ei0361g.xn--207ht163h7m94c", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u200c\uff61\u0354", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u200c\u3002\u0354", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": ".xn--yua", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--0ug.xn--yua", + "output": null + }, + { + "input": "\ud83a\udd25\udb40\udd6e\uff0e\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd25\udb40\udd6e.\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd25\udb40\udd6e.\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03\udb40\udd6e.\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03\udb40\udd6e.\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "xn--de6h.xn--37e857h", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd25.\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03.\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03.\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd25\udb40\udd6e\uff0e\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03\udb40\udd6e\uff0e\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "input": "\ud83a\udd03\udb40\udd6e\uff0e\u1844\u2d0e", + "output": "xn--de6h.xn--37e857h" + }, + { + "comment": "V7", + "input": "xn--de6h.xn--mnd799a", + "output": null + }, + { + "input": "\ud83a\udd25.\u1844\u10ae", + "output": "xn--de6h.xn--37e857h" + }, + { + "comment": "V6; V7", + "input": "\u0fa4\ud986\udd2f\uff0e\ud835\udfed\u10bb", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0fa4\ud986\udd2f.1\u10bb", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0fa4\ud986\udd2f.1\u2d1b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0fd40533g.xn--1-tws", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0fa4\ud986\udd2f\uff0e\ud835\udfed\u2d1b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0fd40533g.xn--1-q1g", + "output": null + }, + { + "comment": "V7", + "input": "\u03c2\ud9d5\udf0c\uff18.\ud83a\udf64", + "output": null + }, + { + "comment": "V7", + "input": "\u03c2\ud9d5\udf0c8.\ud83a\udf64", + "output": null + }, + { + "comment": "V7", + "input": "\u03a3\ud9d5\udf0c8.\ud83a\udf64", + "output": null + }, + { + "comment": "V7", + "input": "\u03c3\ud9d5\udf0c8.\ud83a\udf64", + "output": null + }, + { + "comment": "V7", + "input": "xn--8-zmb14974n.xn--su6h", + "output": null + }, + { + "comment": "V7", + "input": "xn--8-xmb44974n.xn--su6h", + "output": null + }, + { + "comment": "V7", + "input": "\u03a3\ud9d5\udf0c\uff18.\ud83a\udf64", + "output": null + }, + { + "comment": "V7", + "input": "\u03c3\ud9d5\udf0c\uff18.\ud83a\udf64", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c\uae03.\u69b6-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c\u1100\u1173\u11b2.\u69b6-", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "xn--ej0b.xn----d87b", + "output": "xn--ej0b.xn----d87b" + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn--0ug3307c.xn----d87b", + "output": null + }, + { + "comment": "V6", + "input": "\ub253\u6cd3\ud833\udd7d.\u09cd\u200d", + "output": null + }, + { + "comment": "V6", + "input": "\u1102\u1170\u11be\u6cd3\ud833\udd7d.\u09cd\u200d", + "output": null + }, + { + "comment": "V6", + "input": "xn--lwwp69lqs7m.xn--b7b", + "output": null + }, + { + "comment": "V6", + "input": "xn--lwwp69lqs7m.xn--b7b605i", + "output": null + }, + { + "comment": "V6", + "input": "\u1b44\uff0e\u1baa-\u226e\u2260", + "output": null + }, + { + "comment": "V6", + "input": "\u1b44\uff0e\u1baa-<\u0338=\u0338", + "output": null + }, + { + "comment": "V6", + "input": "\u1b44.\u1baa-\u226e\u2260", + "output": null + }, + { + "comment": "V6", + "input": "\u1b44.\u1baa-<\u0338=\u0338", + "output": null + }, + { + "comment": "V6", + "input": "xn--1uf.xn----nmlz65aub", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u10b1\u115f\uff0e\ud804\udd34\u2132", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u10b1\u115f.\ud804\udd34\u2132", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u2d11\u115f.\ud804\udd34\u214e", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u10b1\u115f.\ud804\udd34\u214e", + "output": null + }, + { + "comment": "V6", + "input": "xn--1zf224e.xn--73g3065g", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u2d11\u115f\uff0e\ud804\udd34\u214e", + "output": null + }, + { + "comment": "V6", + "input": "\u1bf3\u10b1\u115f\uff0e\ud804\udd34\u214e", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--pnd26a55x.xn--73g3065g", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--osd925cvyn.xn--73g3065g", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--pnd26a55x.xn--f3g7465g", + "output": null + }, + { + "comment": "V7", + "input": "\u10a9\u7315\udba5\udeeb\u226e\uff0e\ufe12", + "output": null + }, + { + "comment": "V7", + "input": "\u10a9\u7315\udba5\udeeb<\u0338\uff0e\ufe12", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u10a9\u7315\udba5\udeeb\u226e.\u3002", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u10a9\u7315\udba5\udeeb<\u0338.\u3002", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2d09\u7315\udba5\udeeb<\u0338.\u3002", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2d09\u7315\udba5\udeeb\u226e.\u3002", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--gdh892bbz0d5438s..", + "output": null + }, + { + "comment": "V7", + "input": "\u2d09\u7315\udba5\udeeb<\u0338\uff0e\ufe12", + "output": null + }, + { + "comment": "V7", + "input": "\u2d09\u7315\udba5\udeeb\u226e\uff0e\ufe12", + "output": null + }, + { + "comment": "V7", + "input": "xn--gdh892bbz0d5438s.xn--y86c", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--hnd212gz32d54x5r..", + "output": null + }, + { + "comment": "V7", + "input": "xn--hnd212gz32d54x5r.xn--y86c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u00c5\ub444-\uff0e\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "A\u030a\u1103\u116d\u11b7-\uff0e\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u00c5\ub444-.\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "A\u030a\u1103\u116d\u11b7-.\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "a\u030a\u1103\u116d\u11b7-.\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u00e5\ub444-.\u200c", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "xn----1fa1788k.", + "output": "xn----1fa1788k." + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn----1fa1788k.xn--0ug", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "a\u030a\u1103\u116d\u11b7-\uff0e\u200c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u00e5\ub444-\uff0e\u200c", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\ub8f1\u200d\ud880\udf68\u200c\u3002\ud836\ude16\ufe12", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\u1105\u116e\u11b0\u200d\ud880\udf68\u200c\u3002\ud836\ude16\ufe12", + "output": null + }, + { + "comment": "C1; C2; V6; A4_2 (ignored)", + "input": "\ub8f1\u200d\ud880\udf68\u200c\u3002\ud836\ude16\u3002", + "output": null + }, + { + "comment": "C1; C2; V6; A4_2 (ignored)", + "input": "\u1105\u116e\u11b0\u200d\ud880\udf68\u200c\u3002\ud836\ude16\u3002", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--ct2b0738h.xn--772h.", + "output": null + }, + { + "comment": "C1; C2; V6; A4_2 (ignored)", + "input": "xn--0ugb3358ili2v.xn--772h.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ct2b0738h.xn--y86cl899a", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "xn--0ugb3358ili2v.xn--y86cl899a", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "\ud83c\udd04\uff0e\u1cdc\u2488\u00df", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.\u1cdc1.\u00df", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.\u1cdc1.SS", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.\u1cdc1.ss", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.\u1cdc1.Ss", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.xn--1-43l.ss", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "3,.xn--1-43l.xn--zca", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "\ud83c\udd04\uff0e\u1cdc\u2488SS", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "\ud83c\udd04\uff0e\u1cdc\u2488ss", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "\ud83c\udd04\uff0e\u1cdc\u2488Ss", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "3,.xn--ss-k1r094b", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "3,.xn--zca344lmif", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--x07h.xn--ss-k1r094b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--x07h.xn--zca344lmif", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u1dfd\u103a\u094d\uff0e\u2260\u200d\u31db", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u103a\u094d\u1dfd\uff0e\u2260\u200d\u31db", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u103a\u094d\u1dfd\uff0e=\u0338\u200d\u31db", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u103a\u094d\u1dfd.\u2260\u200d\u31db", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u103a\u094d\u1dfd.=\u0338\u200d\u31db", + "output": null + }, + { + "comment": "V6", + "input": "xn--n3b956a9zm.xn--1ch912d", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--n3b956a9zm.xn--1ug63gz5w", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\u1bf3.-\u900b\ud98e\uddad\udb25\ude6e", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--1zf.xn----483d46987byr50b", + "output": null + }, + { + "input": "xn--9ob.xn--4xa", + "output": "xn--9ob.xn--4xa" + }, + { + "input": "\u0756.\u03c3", + "output": "xn--9ob.xn--4xa" + }, + { + "input": "\u0756.\u03a3", + "output": "xn--9ob.xn--4xa" + }, + { + "comment": "V7", + "input": "xn--9ob.xn--4xa380e", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--9ob.xn--4xa380ebol", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--9ob.xn--3xa580ebol", + "output": null + }, + { + "comment": "V7", + "input": "xn--9ob.xn--4xa574u", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--9ob.xn--4xa795lq2l", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--9ob.xn--3xa995lq2l", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1846\u10a3\uff61\udb3a\udca7\u0315\u200d\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1846\u10a3\u3002\udb3a\udca7\u0315\u200d\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1846\u2d03\u3002\udb3a\udca7\u0315\u200d\u200d", + "output": null + }, + { + "comment": "V7", + "input": "xn--57e237h.xn--5sa98523p", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--57e237h.xn--5sa649la993427a", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1846\u2d03\uff61\udb3a\udca7\u0315\u200d\u200d", + "output": null + }, + { + "comment": "V7", + "input": "xn--bnd320b.xn--5sa98523p", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--bnd320b.xn--5sa649la993427a", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud838\udc28\uff61\u1b44\uda45\udee8\ud838\udf87", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud838\udc28\u3002\u1b44\uda45\udee8\ud838\udf87", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--mi4h.xn--1uf6843smg20c", + "output": null + }, + { + "comment": "V7", + "input": "\u189b\udb60\udd5f\u00df.\u1327", + "output": null + }, + { + "comment": "V7", + "input": "\u189b\udb60\udd5fSS.\u1327", + "output": null + }, + { + "comment": "V7", + "input": "\u189b\udb60\udd5fss.\u1327", + "output": null + }, + { + "comment": "V7", + "input": "\u189b\udb60\udd5fSs.\u1327", + "output": null + }, + { + "comment": "V7", + "input": "xn--ss-7dp66033t.xn--p5d", + "output": null + }, + { + "comment": "V7", + "input": "xn--zca562jc642x.xn--p5d", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2b92\u200c.\ud909\ude97\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--b9i.xn--5p9y", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ugx66b.xn--0ugz2871c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u226f\ud805\udf2b\udb42\udf47.\u1734\ud909\udfa4\ud804\udf6c\u18a7", + "output": null + }, + { + "comment": "V6; V7", + "input": ">\u0338\ud805\udf2b\udb42\udf47.\u1734\ud909\udfa4\ud804\udf6c\u18a7", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--hdhx157g68o0g.xn--c0e65eu616c34o7a", + "output": null + }, + { + "input": "\u00df\uff61\ud800\udef3\u10ac\u0fb8", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "\u00df\u3002\ud800\udef3\u10ac\u0fb8", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "\u00df\u3002\ud800\udef3\u2d0c\u0fb8", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "SS\u3002\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "ss\u3002\ud800\udef3\u2d0c\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "Ss\u3002\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "ss.xn--lgd921mvv0m", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "ss.\ud800\udef3\u2d0c\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "SS.\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "Ss.\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "xn--zca.xn--lgd921mvv0m", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "\u00df.\ud800\udef3\u2d0c\u0fb8", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "\u00df\uff61\ud800\udef3\u2d0c\u0fb8", + "output": "xn--zca.xn--lgd921mvv0m" + }, + { + "input": "SS\uff61\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "ss\uff61\ud800\udef3\u2d0c\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "input": "Ss\uff61\ud800\udef3\u10ac\u0fb8", + "output": "ss.xn--lgd921mvv0m" + }, + { + "comment": "V7", + "input": "ss.xn--lgd10cu829c", + "output": null + }, + { + "comment": "V7", + "input": "xn--zca.xn--lgd10cu829c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1a5a\ud82e\udd9d\u0c4d\u3002\ud829\udf6c\ud835\udff5", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1a5a\ud82e\udd9d\u0c4d\u3002\ud829\udf6c9", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--lqc703ebm93a.xn--9-000p", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\u1856\uff61\u031f\ud91d\udee8\u0b82-", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\u1856\u3002\u031f\ud91d\udee8\u0b82-", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--m8e.xn----mdb555dkk71m", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0596\u10ab\uff0e\ud835\udff3\u226f\ufe12\ufe0a", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0596\u10ab\uff0e\ud835\udff3>\u0338\ufe12\ufe0a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u0596\u10ab.7\u226f\u3002\ufe0a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u0596\u10ab.7>\u0338\u3002\ufe0a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u0596\u2d0b.7>\u0338\u3002\ufe0a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u0596\u2d0b.7\u226f\u3002\ufe0a", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--hcb613r.xn--7-pgo.", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0596\u2d0b\uff0e\ud835\udff3>\u0338\ufe12\ufe0a", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0596\u2d0b\uff0e\ud835\udff3\u226f\ufe12\ufe0a", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--hcb613r.xn--7-pgoy530h", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "xn--hcb887c.xn--7-pgo.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--hcb887c.xn--7-pgoy530h", + "output": null + }, + { + "comment": "V7; U1 (ignored)", + "input": "\ud83c\udd07\u4f10\ufe12.\ud831\ude5a\ua8c4", + "output": null + }, + { + "comment": "V7; U1 (ignored); A4_2 (ignored)", + "input": "6,\u4f10\u3002.\ud831\ude5a\ua8c4", + "output": null + }, + { + "comment": "V7; U1 (ignored); A4_2 (ignored)", + "input": "xn--6,-7i3c..xn--0f9ao925c", + "output": null + }, + { + "comment": "V7; U1 (ignored)", + "input": "xn--6,-7i3cj157d.xn--0f9ao925c", + "output": null + }, + { + "comment": "V7", + "input": "xn--woqs083bel0g.xn--0f9ao925c", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\udb40\udda0\uff0e\ud99d\udc34\udaf1\udfc8", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\udb40\udda0.\ud99d\udc34\udaf1\udfc8", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--rx21bhv12i", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "-.\u1886\udb47\udca3-", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "-.xn----pbkx6497q", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0\uff0e-\ud835\udffb\u00df", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0.-5\u00df", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0.-5SS", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0.-5ss", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--t960e.-5ss", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--t960e.xn---5-hia", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0\uff0e-\ud835\udffbSS", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0\uff0e-\ud835\udffbss", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0\uff0e-\ud835\udffbSs", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udafd\udcb0.-5Ss", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\ud802\ude3f.\ud83e\udd12\u10c5\uda06\udfb6", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\ud802\ude3f.\ud83e\udd12\u2d25\uda06\udfb6", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0s9c.xn--tljz038l0gz4b", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug9533g.xn--tljz038l0gz4b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0s9c.xn--9nd3211w0gz4b", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug9533g.xn--9nd3211w0gz4b", + "output": null + }, + { + "comment": "C2; V7", + "input": "\ud894\udec5\u3002\u00df\ud873\udd69\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\ud894\udec5\u3002SS\ud873\udd69\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\ud894\udec5\u3002ss\ud873\udd69\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\ud894\udec5\u3002Ss\ud873\udd69\u200d", + "output": null + }, + { + "comment": "V7", + "input": "xn--ey1p.xn--ss-eq36b", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--ey1p.xn--ss-n1tx0508a", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--ey1p.xn--zca870nz438b", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03c2\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03c2=\u0338", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03c2\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03c2=\u0338", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03a3=\u0338", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03a3\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03c3\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\u3002\ud805\uddbf\u1abb\u03c3=\u0338", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--zb9h5968x.xn--4xa378i1mfjw7y", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03a3=\u0338", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03a3\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03c3\u2260", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\udb40\udd6f\ud9df\udf6d\u200c\ud83d\udf2d\uff61\ud805\uddbf\u1abb\u03c3=\u0338", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u248b\uff61\u2488\u200d\uda8f\udd22", + "output": null + }, + { + "comment": "C2; V7; A4_2 (ignored)", + "input": "4.\u30021.\u200d\uda8f\udd22", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "4..1.xn--sf51d", + "output": null + }, + { + "comment": "C2; V7; A4_2 (ignored)", + "input": "4..1.xn--1ug64613i", + "output": null + }, + { + "comment": "V7", + "input": "xn--wsh.xn--tsh07994h", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--wsh.xn--1ug58o74922a", + "output": null + }, + { + "comment": "V7", + "input": "\u10b3\ud805\udf2b\u200d\uda1e\udf53\uff0e\u06a7\ud807\udc36", + "output": null + }, + { + "comment": "V7", + "input": "\u10b3\ud805\udf2b\u200d\uda1e\udf53.\u06a7\ud807\udc36", + "output": null + }, + { + "comment": "V7", + "input": "\u2d13\ud805\udf2b\u200d\uda1e\udf53.\u06a7\ud807\udc36", + "output": null + }, + { + "comment": "V7", + "input": "xn--blj6306ey091d.xn--9jb4223l", + "output": null + }, + { + "comment": "V7", + "input": "xn--1ugy52cym7p7xu5e.xn--9jb4223l", + "output": null + }, + { + "comment": "V7", + "input": "\u2d13\ud805\udf2b\u200d\uda1e\udf53\uff0e\u06a7\ud807\udc36", + "output": null + }, + { + "comment": "V7", + "input": "xn--rnd8945ky009c.xn--9jb4223l", + "output": null + }, + { + "comment": "V7", + "input": "xn--rnd479ep20q7x12e.xn--9jb4223l", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "\ud802\ude3f.\ud83c\udd06\u2014", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "\ud802\ude3f.5,\u2014", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "xn--0s9c.xn--5,-81t", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0s9c.xn--8ug8324p", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\uda10\udeb1\ud8c6\uddae\u06f8\u3002\udb43\udfad-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--lmb18944c0g2z.xn----2k81m", + "output": null + }, + { + "comment": "V7", + "input": "\ud83d\udf85\udb43\udce1\udb30\udf59.\ud989\uddb7", + "output": null + }, + { + "comment": "V7", + "input": "xn--ie9hi1349bqdlb.xn--oj69a", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\u20e7\ud97e\udc4e-\uda6e\udcdd.4\u10a4\u200c", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\u20e7\ud97e\udc4e-\uda6e\udcdd.4\u2d04\u200c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----9snu5320fi76w.xn--4-ivs", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn----9snu5320fi76w.xn--4-sgn589c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----9snu5320fi76w.xn--4-f0g", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn----9snu5320fi76w.xn--4-f0g649i", + "output": null + }, + { + "input": "\u16ad\uff61\ud834\udf20\u00df\ud81a\udef1", + "output": "xn--hwe.xn--zca4946pblnc" + }, + { + "input": "\u16ad\u3002\ud834\udf20\u00df\ud81a\udef1", + "output": "xn--hwe.xn--zca4946pblnc" + }, + { + "input": "\u16ad\u3002\ud834\udf20SS\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad\u3002\ud834\udf20ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad\u3002\ud834\udf20Ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "xn--hwe.xn--ss-ci1ub261a", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad.\ud834\udf20ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad.\ud834\udf20SS\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad.\ud834\udf20Ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "xn--hwe.xn--zca4946pblnc", + "output": "xn--hwe.xn--zca4946pblnc" + }, + { + "input": "\u16ad.\ud834\udf20\u00df\ud81a\udef1", + "output": "xn--hwe.xn--zca4946pblnc" + }, + { + "input": "\u16ad\uff61\ud834\udf20SS\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad\uff61\ud834\udf20ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "input": "\u16ad\uff61\ud834\udf20Ss\ud81a\udef1", + "output": "xn--hwe.xn--ss-ci1ub261a" + }, + { + "comment": "V6", + "input": "\ud805\udc44\u226f\uff61\ud805\udf24", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udc44>\u0338\uff61\ud805\udf24", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udc44\u226f\u3002\ud805\udf24", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udc44>\u0338\u3002\ud805\udf24", + "output": null + }, + { + "comment": "V6", + "input": "xn--hdh5636g.xn--ci2d", + "output": null + }, + { + "comment": "C2", + "input": "\u10ab\u226e\ud887\udc86\u3002\u200d\u07a7\ud800\udee3", + "output": null + }, + { + "comment": "C2", + "input": "\u10ab<\u0338\ud887\udc86\u3002\u200d\u07a7\ud800\udee3", + "output": null + }, + { + "comment": "C2", + "input": "\u2d0b<\u0338\ud887\udc86\u3002\u200d\u07a7\ud800\udee3", + "output": null + }, + { + "comment": "C2", + "input": "\u2d0b\u226e\ud887\udc86\u3002\u200d\u07a7\ud800\udee3", + "output": null + }, + { + "comment": "V6", + "input": "xn--gdhz03bxt42d.xn--lrb6479j", + "output": null + }, + { + "comment": "C2", + "input": "xn--gdhz03bxt42d.xn--lrb506jqr4n", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--jnd802gsm17c.xn--lrb6479j", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--jnd802gsm17c.xn--lrb506jqr4n", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u17d2.\ud9db\udf52\u226f", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u17d2.\ud9db\udf52>\u0338", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--u4e.xn--hdhx0084f", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734\uff0e\ud802\ude3a\u00c9\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734\uff0e\ud802\ude3aE\u0301\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734.\ud802\ude3a\u00c9\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734.\ud802\ude3aE\u0301\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734.\ud802\ude3ae\u0301\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734.\ud802\ude3a\u00e9\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--c0e34564d.xn--9ca207st53lg3f", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734\uff0e\ud802\ude3ae\u0301\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud8fc\udc47\u1734\uff0e\ud802\ude3a\u00e9\u2b13\ud804\udd34", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--09e4694e..xn--ye6h", + "output": "xn--09e4694e..xn--ye6h" + }, + { + "comment": "V6", + "input": "\u10c3\uff0e\u0653\u18a4", + "output": null + }, + { + "comment": "V6", + "input": "\u10c3.\u0653\u18a4", + "output": null + }, + { + "comment": "V6", + "input": "\u2d23.\u0653\u18a4", + "output": null + }, + { + "comment": "V6", + "input": "xn--rlj.xn--vhb294g", + "output": null + }, + { + "comment": "V6", + "input": "\u2d23\uff0e\u0653\u18a4", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--7nd.xn--vhb294g", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813\uff0e\uc2c9\ud9d0\uddbb\u10c4\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813\uff0e\u1109\u1174\u11b0\ud9d0\uddbb\u10c4\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813.\uc2c9\ud9d0\uddbb\u10c4\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813.\u1109\u1174\u11b0\ud9d0\uddbb\u10c4\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813.\u1109\u1174\u11b0\ud9d0\uddbb\u2d24\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813.\uc2c9\ud9d0\uddbb\u2d24\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "xn--oub.xn--sljz109bpe25dviva", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813\uff0e\u1109\u1174\u11b0\ud9d0\uddbb\u2d24\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "\udb40\udd08\u0813\uff0e\uc2c9\ud9d0\uddbb\u2d24\ud9ca\udc50", + "output": null + }, + { + "comment": "V7", + "input": "xn--oub.xn--8nd9522gpe69cviva", + "output": null + }, + { + "comment": "V6", + "input": "\uaa2c\ud807\udcab\u226e\uff0e\u2902", + "output": null + }, + { + "comment": "V6", + "input": "\uaa2c\ud807\udcab<\u0338\uff0e\u2902", + "output": null + }, + { + "comment": "V6", + "input": "\uaa2c\ud807\udcab\u226e.\u2902", + "output": null + }, + { + "comment": "V6", + "input": "\uaa2c\ud807\udcab<\u0338.\u2902", + "output": null + }, + { + "comment": "V6", + "input": "xn--gdh1854cn19c.xn--kqi", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\ud804\udc45\u3002-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--210d.-", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\ua866\u1851\u200d\u2488\u3002\ud800\udee3-", + "output": null + }, + { + "comment": "C2; V3 (ignored); A4_2 (ignored)", + "input": "\ua866\u1851\u200d1.\u3002\ud800\udee3-", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "xn--1-o7j0610f..xn----381i", + "output": "xn--1-o7j0610f..xn----381i" + }, + { + "comment": "C2; V3 (ignored); A4_2 (ignored)", + "input": "xn--1-o7j663bdl7m..xn----381i", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--h8e863drj7h.xn----381i", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn--h8e470bl0d838o.xn----381i", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u2488\u4c39\u200d-\u3002\uc6c8", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u2488\u4c39\u200d-\u3002\u110b\u116e\u11bf", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "1.\u4c39\u200d-\u3002\uc6c8", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "1.\u4c39\u200d-\u3002\u110b\u116e\u11bf", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "1.xn----zw5a.xn--kp5b", + "output": "1.xn----zw5a.xn--kp5b" + }, + { + "comment": "C2; V3 (ignored)", + "input": "1.xn----tgnz80r.xn--kp5b", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----dcp160o.xn--kp5b", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----tgnx5rjr6c.xn--kp5b", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u3066\u3002\u200c\udb43\udcfd\u07f3", + "output": null + }, + { + "comment": "V7", + "input": "xn--m9j.xn--rtb10784p", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--m9j.xn--rtb154j9l73w", + "output": null + }, + { + "comment": "V6", + "input": "\u03c2\uff61\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6", + "input": "\u03c2\u3002\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6", + "input": "\u03a3\u3002\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6", + "input": "\u03c3\u3002\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6", + "input": "xn--4xa.xn--3lb1944f", + "output": null + }, + { + "comment": "V6", + "input": "xn--3xa.xn--3lb1944f", + "output": null + }, + { + "comment": "V6", + "input": "\u03a3\uff61\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6", + "input": "\u03c3\uff61\ua9c0\u06e7", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0bcd\udb56\udec5\ud9f0\ude51.\u10a2\u10b5", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0bcd\udb56\udec5\ud9f0\ude51.\u2d02\u2d15", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0bcd\udb56\udec5\ud9f0\ude51.\u10a2\u2d15", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--xmc83135idcxza.xn--tkjwb", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--xmc83135idcxza.xn--9md086l", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--xmc83135idcxza.xn--9md2b", + "output": null + }, + { + "comment": "C2; V6; V7; U1 (ignored)", + "input": "\u1c32\ud83c\udd08\u2f9b\u05a6\uff0e\u200d\uda7e\udd64\u07fd", + "output": null + }, + { + "comment": "C2; V6; V7; U1 (ignored)", + "input": "\u1c327,\u8d70\u05a6.\u200d\uda7e\udd64\u07fd", + "output": null + }, + { + "comment": "V6; V7; U1 (ignored)", + "input": "xn--7,-bid991urn3k.xn--1tb13454l", + "output": null + }, + { + "comment": "C2; V6; V7; U1 (ignored)", + "input": "xn--7,-bid991urn3k.xn--1tb334j1197q", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--xcb756i493fwi5o.xn--1tb13454l", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--xcb756i493fwi5o.xn--1tb334j1197q", + "output": null + }, + { + "comment": "V7", + "input": "\u1897\uff61\u04c0\ud934\udd3b", + "output": null + }, + { + "comment": "V7", + "input": "\u1897\u3002\u04c0\ud934\udd3b", + "output": null + }, + { + "comment": "V7", + "input": "\u1897\u3002\u04cf\ud934\udd3b", + "output": null + }, + { + "comment": "V7", + "input": "xn--hbf.xn--s5a83117e", + "output": null + }, + { + "comment": "V7", + "input": "\u1897\uff61\u04cf\ud934\udd3b", + "output": null + }, + { + "comment": "V7", + "input": "xn--hbf.xn--d5a86117e", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "-\ud800\udef7\ud81b\udf91\u3002\udb40\uddac", + "output": "xn----991iq40y." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "xn----991iq40y.", + "output": "xn----991iq40y." + }, + { + "comment": "V6", + "input": "\ud807\udc98\udb40\udd12\ud80d\udc61\uff61\ud835\udfea\u10bc", + "output": null + }, + { + "comment": "V6", + "input": "\ud807\udc98\udb40\udd12\ud80d\udc61\u30028\u10bc", + "output": null + }, + { + "comment": "V6", + "input": "\ud807\udc98\udb40\udd12\ud80d\udc61\u30028\u2d1c", + "output": null + }, + { + "comment": "V6", + "input": "xn--7m3d291b.xn--8-vws", + "output": null + }, + { + "comment": "V6", + "input": "\ud807\udc98\udb40\udd12\ud80d\udc61\uff61\ud835\udfea\u2d1c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--7m3d291b.xn--8-s1g", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1bab\uff61\ud83c\udc89\udb40\udc70", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1bab\u3002\ud83c\udc89\udb40\udc70", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--zxf.xn--fx7ho0250c", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb71\udeb6\udba0\uded6\uda1a\ude70-\u3002\u200c", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "xn----7i12hu122k9ire.", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn----7i12hu122k9ire.xn--0ug", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ufe12\uff0e\ufe2f\ud805\udc42", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ufe12\uff0e\ud805\udc42\ufe2f", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u3002.\ud805\udc42\ufe2f", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "..xn--s96cu30b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--y86c.xn--s96cu30b", + "output": null + }, + { + "comment": "C2; V6", + "input": "\ua92c\u3002\u200d", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--zi9a.", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--zi9a.xn--1ug", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udb58\ude04\u3002-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--xm38e.-", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee\uff0e\uda98\ude2e\u0f18\u00df\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee\uff0e\uda98\ude2e\u0f18\u00df>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee.\uda98\ude2e\u0f18\u00df\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee.\uda98\ude2e\u0f18\u00df>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee.\uda98\ude2e\u0f18SS>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee.\uda98\ude2e\u0f18SS\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee.\uda98\ude2e\u0f18ss\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee.\uda98\ude2e\u0f18ss>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee.\uda98\ude2e\u0f18Ss>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee.\uda98\ude2e\u0f18Ss\u226f", + "output": null + }, + { + "comment": "V7", + "input": "xn--pgh4639f.xn--ss-ifj426nle504a", + "output": null + }, + { + "comment": "V7", + "input": "xn--pgh4639f.xn--zca593eo6oc013y", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee\uff0e\uda98\ude2e\u0f18SS>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee\uff0e\uda98\ude2e\u0f18SS\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee\uff0e\uda98\ude2e\u0f18ss\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee\uff0e\uda98\ude2e\u0f18ss>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u227c\u0338\ud800\udeee\uff0e\uda98\ude2e\u0f18Ss>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\u22e0\ud800\udeee\uff0e\uda98\ude2e\u0f18Ss\u226f", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0330\uff0e\udb81\udf31\u8680", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0330.\udb81\udf31\u8680", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--xta.xn--e91aw9417e", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "\ud83e\udc9f\ud83c\udd08\u200d\ua84e\uff61\u0f84", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "\ud83e\udc9f7,\u200d\ua84e\u3002\u0f84", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "xn--7,-gh9hg322i.xn--3ed", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "xn--7,-n1t0654eqo3o.xn--3ed", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--nc9aq743ds0e.xn--3ed", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--1ug4874cfd0kbmg.xn--3ed", + "output": null + }, + { + "comment": "V6", + "input": "\ua854\u3002\u1039\u1887", + "output": null + }, + { + "comment": "V6", + "input": "xn--tc9a.xn--9jd663b", + "output": null + }, + { + "comment": "V6", + "input": "\u20eb\u226e.\ud836\ude16", + "output": null + }, + { + "comment": "V6", + "input": "\u20eb<\u0338.\ud836\ude16", + "output": null + }, + { + "comment": "V6", + "input": "xn--e1g71d.xn--772h", + "output": null + }, + { + "comment": "C1", + "input": "\u200c.\u226f", + "output": null + }, + { + "comment": "C1", + "input": "\u200c.>\u0338", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--hdh", + "output": ".xn--hdh" + }, + { + "comment": "C1", + "input": "xn--0ug.xn--hdh", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\ud880\udd67\ud94e\ude60-\uff0e\uabed-\u609c", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\ud880\udd67\ud94e\ude60-.\uabed-\u609c", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----7m53aj640l.xn----8f4br83t", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u1849\ud899\udce7\u2b1e\u189c.-\u200d\ud83a\udcd1\u202e", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--87e0ol04cdl39e.xn----qinu247r", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn--87e0ol04cdl39e.xn----ugn5e3763s", + "output": null + }, + { + "input": "\ud83a\udd53\uff0e\u0718", + "output": "xn--of6h.xn--inb" + }, + { + "input": "\ud83a\udd53.\u0718", + "output": "xn--of6h.xn--inb" + }, + { + "input": "xn--of6h.xn--inb", + "output": "xn--of6h.xn--inb" + }, + { + "comment": "V3 (ignored)", + "input": "\udb40\udd3d-\uff0e-\u0dca", + "output": "-.xn----ptf" + }, + { + "comment": "V3 (ignored)", + "input": "\udb40\udd3d-.-\u0dca", + "output": "-.xn----ptf" + }, + { + "comment": "V3 (ignored)", + "input": "-.xn----ptf", + "output": "-.xn----ptf" + }, + { + "input": "\u10ba\ud800\udef8\udb40\udd04\u3002\ud835\udfdd\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "\u10ba\ud800\udef8\udb40\udd04\u30025\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "\u2d1a\ud800\udef8\udb40\udd04\u30025\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "xn--ilj2659d.xn--5-dug9054m", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "\u2d1a\ud800\udef8.5\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "\u10ba\ud800\udef8.5\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "input": "\u2d1a\ud800\udef8\udb40\udd04\u3002\ud835\udfdd\ud7f6\u103a", + "output": "xn--ilj2659d.xn--5-dug9054m" + }, + { + "comment": "V7", + "input": "xn--ynd2415j.xn--5-dug9054m", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "\u200d-\u1839\ufe6a.\u1de1\u1922", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "\u200d-\u1839%.\u1de1\u1922", + "output": null + }, + { + "comment": "V6; V3 (ignored); U1 (ignored)", + "input": "xn---%-u4o.xn--gff52t", + "output": null + }, + { + "comment": "C2; V6; U1 (ignored)", + "input": "xn---%-u4oy48b.xn--gff52t", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----c6jx047j.xn--gff52t", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn----c6j614b1z4v.xn--gff52t", + "output": null + }, + { + "input": "\u2260.\u183f", + "output": "xn--1ch.xn--y7e" + }, + { + "input": "=\u0338.\u183f", + "output": "xn--1ch.xn--y7e" + }, + { + "input": "xn--1ch.xn--y7e", + "output": "xn--1ch.xn--y7e" + }, + { + "input": "\u0723\u05a3\uff61\u332a", + "output": "xn--ucb18e.xn--eck4c5a" + }, + { + "input": "\u0723\u05a3\u3002\u30cf\u30a4\u30c4", + "output": "xn--ucb18e.xn--eck4c5a" + }, + { + "input": "xn--ucb18e.xn--eck4c5a", + "output": "xn--ucb18e.xn--eck4c5a" + }, + { + "input": "\u0723\u05a3.\u30cf\u30a4\u30c4", + "output": "xn--ucb18e.xn--eck4c5a" + }, + { + "comment": "V7", + "input": "\ud84e\ude6b\uff0e\ud9f1\udc72", + "output": null + }, + { + "comment": "V7", + "input": "\ud84e\ude6b.\ud9f1\udc72", + "output": null + }, + { + "comment": "V7", + "input": "xn--td3j.xn--4628b", + "output": null + }, + { + "input": "xn--skb", + "output": "xn--skb" + }, + { + "input": "\u06b9", + "output": "xn--skb" + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0c4d\ud836\ude3e\u05a9\ud835\udfed\u3002-\ud805\udf28", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0c4d\ud836\ude3e\u05a91\u3002-\ud805\udf28", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--1-rfc312cdp45c.xn----nq0j", + "output": null + }, + { + "comment": "V7", + "input": "\uda4f\udfc8\u3002\ub64f", + "output": null + }, + { + "comment": "V7", + "input": "\uda4f\udfc8\u3002\u1104\u116b\u11ae", + "output": null + }, + { + "comment": "V7", + "input": "xn--ph26c.xn--281b", + "output": null + }, + { + "comment": "V7", + "input": "\ud916\ude1a\udb40\udd0c\udb07\udf40\u1840.\u08b6", + "output": null + }, + { + "comment": "V7", + "input": "xn--z7e98100evc01b.xn--czb", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\uff61\ud8d4\udc5b", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u3002\ud8d4\udc5b", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--6x4u", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug.xn--6x4u", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufff9\u200c\uff61\u66f3\u2f91\ud800\udef0\u226f", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufff9\u200c\uff61\u66f3\u2f91\ud800\udef0>\u0338", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufff9\u200c\u3002\u66f3\u897e\ud800\udef0\u226f", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufff9\u200c\u3002\u66f3\u897e\ud800\udef0>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "xn--vn7c.xn--hdh501y8wvfs5h", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug2139f.xn--hdh501y8wvfs5h", + "output": null + }, + { + "comment": "V7", + "input": "\u226f\u2488\u3002\u00df", + "output": null + }, + { + "comment": "V7", + "input": ">\u0338\u2488\u3002\u00df", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u226f1.\u3002\u00df", + "output": "xn--1-ogo..xn--zca" + }, + { + "comment": "A4_2 (ignored)", + "input": ">\u03381.\u3002\u00df", + "output": "xn--1-ogo..xn--zca" + }, + { + "comment": "A4_2 (ignored)", + "input": ">\u03381.\u3002SS", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u226f1.\u3002SS", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u226f1.\u3002ss", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": ">\u03381.\u3002ss", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": ">\u03381.\u3002Ss", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u226f1.\u3002Ss", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--1-ogo..ss", + "output": "xn--1-ogo..ss" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--1-ogo..xn--zca", + "output": "xn--1-ogo..xn--zca" + }, + { + "comment": "V7", + "input": ">\u0338\u2488\u3002SS", + "output": null + }, + { + "comment": "V7", + "input": "\u226f\u2488\u3002SS", + "output": null + }, + { + "comment": "V7", + "input": "\u226f\u2488\u3002ss", + "output": null + }, + { + "comment": "V7", + "input": ">\u0338\u2488\u3002ss", + "output": null + }, + { + "comment": "V7", + "input": ">\u0338\u2488\u3002Ss", + "output": null + }, + { + "comment": "V7", + "input": "\u226f\u2488\u3002Ss", + "output": null + }, + { + "comment": "V7", + "input": "xn--hdh84f.ss", + "output": null + }, + { + "comment": "V7", + "input": "xn--hdh84f.xn--zca", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\uff61\u2260", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\uff61=\u0338", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u3002\u2260", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u3002=\u0338", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--1ch", + "output": ".xn--1ch" + }, + { + "comment": "C1", + "input": "xn--0ug.xn--1ch", + "output": null + }, + { + "comment": "C1; V6", + "input": "\ud805\uddbf\ud836\ude14.\u185f\ud805\uddbf\u1b42\u200c", + "output": null + }, + { + "comment": "V6", + "input": "xn--461dw464a.xn--v8e29loy65a", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--461dw464a.xn--v8e29ldzfo952a", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "\uda12\udcf3\u200d\uda05\udf71.\ud81a\udf34\u2183\u2260-", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "\uda12\udcf3\u200d\uda05\udf71.\ud81a\udf34\u2183=\u0338-", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "\uda12\udcf3\u200d\uda05\udf71.\ud81a\udf34\u2184=\u0338-", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "\uda12\udcf3\u200d\uda05\udf71.\ud81a\udf34\u2184\u2260-", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--6j00chy9a.xn----81n51bt713h", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "xn--1ug15151gkb5a.xn----81n51bt713h", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--6j00chy9a.xn----61n81bt713h", + "output": null + }, + { + "comment": "C2; V6; V7; V3 (ignored)", + "input": "xn--1ug15151gkb5a.xn----61n81bt713h", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u252e\udb40\uddd0\uff0e\u0c00\u0c4d\u1734\u200d", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u252e\udb40\uddd0.\u0c00\u0c4d\u1734\u200d", + "output": null + }, + { + "comment": "V6", + "input": "xn--kxh.xn--eoc8m432a", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--1ug04r.xn--eoc8m432a40i", + "output": null + }, + { + "comment": "V7; U1 (ignored)", + "input": "\udaa5\udeaa\uff61\ud83c\udd02", + "output": null + }, + { + "comment": "V7; U1 (ignored)", + "input": "\udaa5\udeaa\u30021,", + "output": null + }, + { + "comment": "V7; U1 (ignored)", + "input": "xn--n433d.1,", + "output": null + }, + { + "comment": "V7", + "input": "xn--n433d.xn--v07h", + "output": null + }, + { + "comment": "V6", + "input": "\ud804\udf68\u520d.\ud83d\udee6", + "output": null + }, + { + "comment": "V6", + "input": "xn--rbry728b.xn--y88h", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb40\udf0f3\uff61\u1bf1\ud835\udfd2", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb40\udf0f3\u3002\u1bf14", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--3-ib31m.xn--4-pql", + "output": null + }, + { + "comment": "V7", + "input": "\ua87d\u226f\uff0e\udaaf\udc80\uda0b\udcc4", + "output": null + }, + { + "comment": "V7", + "input": "\ua87d>\u0338\uff0e\udaaf\udc80\uda0b\udcc4", + "output": null + }, + { + "comment": "V7", + "input": "\ua87d\u226f.\udaaf\udc80\uda0b\udcc4", + "output": null + }, + { + "comment": "V7", + "input": "\ua87d>\u0338.\udaaf\udc80\uda0b\udcc4", + "output": null + }, + { + "comment": "V7", + "input": "xn--hdh8193c.xn--5z40cp629b", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb\uff0e\u200d\u492b\u2260\u10be", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb\uff0e\u200d\u492b=\u0338\u10be", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb.\u200d\u492b\u2260\u10be", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb.\u200d\u492b=\u0338\u10be", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb.\u200d\u492b=\u0338\u2d1e", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb.\u200d\u492b\u2260\u2d1e", + "output": null + }, + { + "comment": "V7", + "input": "xn--1t56e.xn--1ch153bqvw", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1t56e.xn--1ug73gzzpwi3a", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb\uff0e\u200d\u492b=\u0338\u2d1e", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udb43\udcdb\uff0e\u200d\u492b\u2260\u2d1e", + "output": null + }, + { + "comment": "V7", + "input": "xn--1t56e.xn--2nd141ghl2a", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1t56e.xn--2nd159e9vb743e", + "output": null + }, + { + "comment": "V6", + "input": "3.1.xn--110d.j", + "output": null + }, + { + "comment": "V7", + "input": "xn--tshd3512p.j", + "output": null + }, + { + "comment": "V6", + "input": "\u034a\uff0e\ud802\ude0e", + "output": null + }, + { + "comment": "V6", + "input": "\u034a.\ud802\ude0e", + "output": null + }, + { + "comment": "V6", + "input": "xn--oua.xn--mr9c", + "output": null + }, + { + "comment": "V6", + "input": "\ud6c9\u226e\uff61\u0e34", + "output": null + }, + { + "comment": "V6", + "input": "\u1112\u116e\u11ac<\u0338\uff61\u0e34", + "output": null + }, + { + "comment": "V6", + "input": "\ud6c9\u226e\u3002\u0e34", + "output": null + }, + { + "comment": "V6", + "input": "\u1112\u116e\u11ac<\u0338\u3002\u0e34", + "output": null + }, + { + "comment": "V6", + "input": "xn--gdh2512e.xn--i4c", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "\ua846\u3002\u2183\u0fb5\ub1ae-", + "output": "xn--fc9a.xn----qmg097k469k" + }, + { + "comment": "V3 (ignored)", + "input": "\ua846\u3002\u2183\u0fb5\u1102\u116a\u11c1-", + "output": "xn--fc9a.xn----qmg097k469k" + }, + { + "comment": "V3 (ignored)", + "input": "\ua846\u3002\u2184\u0fb5\u1102\u116a\u11c1-", + "output": "xn--fc9a.xn----qmg097k469k" + }, + { + "comment": "V3 (ignored)", + "input": "\ua846\u3002\u2184\u0fb5\ub1ae-", + "output": "xn--fc9a.xn----qmg097k469k" + }, + { + "comment": "V3 (ignored)", + "input": "xn--fc9a.xn----qmg097k469k", + "output": "xn--fc9a.xn----qmg097k469k" + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--fc9a.xn----qmg787k869k", + "output": null + }, + { + "comment": "V7", + "input": "\u226e\ud834\udd76\uff0e\ud987\udc81\uaaec\u2e48\udb82\udd6d", + "output": null + }, + { + "comment": "V7", + "input": "<\u0338\ud834\udd76\uff0e\ud987\udc81\uaaec\u2e48\udb82\udd6d", + "output": null + }, + { + "comment": "V7", + "input": "\u226e\ud834\udd76.\ud987\udc81\uaaec\u2e48\udb82\udd6d", + "output": null + }, + { + "comment": "V7", + "input": "<\u0338\ud834\udd76.\ud987\udc81\uaaec\u2e48\udb82\udd6d", + "output": null + }, + { + "comment": "V7", + "input": "xn--gdh.xn--4tjx101bsg00ds9pyc", + "output": null + }, + { + "comment": "V7", + "input": "xn--gdh0880o.xn--4tjx101bsg00ds9pyc", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud805\udc42\uff61\u200d\udb55\udf80\ud83d\udf95\uda54\udc54", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud805\udc42\u3002\u200d\udb55\udf80\ud83d\udf95\uda54\udc54", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--8v1d.xn--ye9h41035a2qqs", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--8v1d.xn--1ug1386plvx1cd8vya", + "output": null + }, + { + "input": "\u00df\u09c1\u1ded\u3002\u06208\u2085", + "output": "xn--zca266bwrr.xn--85-psd" + }, + { + "input": "\u00df\u09c1\u1ded\u3002\u062085", + "output": "xn--zca266bwrr.xn--85-psd" + }, + { + "input": "SS\u09c1\u1ded\u3002\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "ss\u09c1\u1ded\u3002\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "Ss\u09c1\u1ded\u3002\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "xn--ss-e2f077r.xn--85-psd", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "ss\u09c1\u1ded.\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "SS\u09c1\u1ded.\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "Ss\u09c1\u1ded.\u062085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "xn--zca266bwrr.xn--85-psd", + "output": "xn--zca266bwrr.xn--85-psd" + }, + { + "input": "\u00df\u09c1\u1ded.\u062085", + "output": "xn--zca266bwrr.xn--85-psd" + }, + { + "input": "SS\u09c1\u1ded\u3002\u06208\u2085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "ss\u09c1\u1ded\u3002\u06208\u2085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "Ss\u09c1\u1ded\u3002\u06208\u2085", + "output": "xn--ss-e2f077r.xn--85-psd" + }, + { + "input": "\ufe0d\u0a9b\u3002\u5d68", + "output": "xn--6dc.xn--tot" + }, + { + "input": "xn--6dc.xn--tot", + "output": "xn--6dc.xn--tot" + }, + { + "input": "\u0a9b.\u5d68", + "output": "xn--6dc.xn--tot" + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "-\u200c\u2499\ud802\udee5\uff61\ud836\ude35", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored)", + "input": "-\u200c18.\ud802\udee5\u3002\ud836\ude35", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-18.xn--rx9c.xn--382h", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored)", + "input": "xn---18-9m0a.xn--rx9c.xn--382h", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----ddps939g.xn--382h", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "xn----sgn18r3191a.xn--382h", + "output": null + }, + { + "comment": "V7", + "input": "\ufe05\ufe12\u3002\ud858\udc3e\u1ce0", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\ufe05\u3002\u3002\ud858\udc3e\u1ce0", + "output": "..xn--t6f5138v" + }, + { + "comment": "A4_2 (ignored)", + "input": "..xn--t6f5138v", + "output": "..xn--t6f5138v" + }, + { + "comment": "V7", + "input": "xn--y86c.xn--t6f5138v", + "output": null + }, + { + "input": "xn--t6f5138v", + "output": "xn--t6f5138v" + }, + { + "input": "\ud858\udc3e\u1ce0", + "output": "xn--t6f5138v" + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-\u00df\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-\u00df\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-\u00df\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-\u00df\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-SS\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-SS\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-ss\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-ss\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-Ss\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f.-Ss\u200c\u2260", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--u836e.xn---ss-gl2a", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn--u836e.xn---ss-cn0at5l", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn--u836e.xn----qfa750ve7b", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-SS\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-SS\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-ss\u200c\u2260", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-ss\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-Ss\u200c=\u0338", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\udb41\udd4f\uff0e-Ss\u200c\u2260", + "output": null + }, + { + "comment": "C1", + "input": "\u1859\u200c\uff61\u226f\ud800\udef2\u2260", + "output": null + }, + { + "comment": "C1", + "input": "\u1859\u200c\uff61>\u0338\ud800\udef2=\u0338", + "output": null + }, + { + "comment": "C1", + "input": "\u1859\u200c\u3002\u226f\ud800\udef2\u2260", + "output": null + }, + { + "comment": "C1", + "input": "\u1859\u200c\u3002>\u0338\ud800\udef2=\u0338", + "output": null + }, + { + "input": "xn--p8e.xn--1ch3a7084l", + "output": "xn--p8e.xn--1ch3a7084l" + }, + { + "input": "\u1859.\u226f\ud800\udef2\u2260", + "output": "xn--p8e.xn--1ch3a7084l" + }, + { + "input": "\u1859.>\u0338\ud800\udef2=\u0338", + "output": "xn--p8e.xn--1ch3a7084l" + }, + { + "comment": "C1", + "input": "xn--p8e650b.xn--1ch3a7084l", + "output": null + }, + { + "comment": "V7", + "input": "\uda7b\udd5b\u0613.\u10b5", + "output": null + }, + { + "comment": "V7", + "input": "\uda7b\udd5b\u0613.\u2d15", + "output": null + }, + { + "comment": "V7", + "input": "xn--1fb94204l.xn--dlj", + "output": null + }, + { + "comment": "V7", + "input": "xn--1fb94204l.xn--tnd", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\udb40\udd37\uff61\uda09\udc41", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\udb40\udd37\u3002\uda09\udc41", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--w720c", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug.xn--w720c", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2488\u0dd6\u7105.\udb1e\udc59\u200d\ua85f", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "1.\u0dd6\u7105.\udb1e\udc59\u200d\ua85f", + "output": null + }, + { + "comment": "V6; V7", + "input": "1.xn--t1c6981c.xn--4c9a21133d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "1.xn--t1c6981c.xn--1ugz184c9lw7i", + "output": null + }, + { + "comment": "V7", + "input": "xn--t1c337io97c.xn--4c9a21133d", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--t1c337io97c.xn--1ugz184c9lw7i", + "output": null + }, + { + "comment": "V6", + "input": "\ud804\uddc0\u258d.\u205e\u1830", + "output": null + }, + { + "comment": "V6", + "input": "xn--9zh3057f.xn--j7e103b", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "-3.\u200d\u30cc\u1895", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "-3.xn--fbf115j", + "output": "-3.xn--fbf115j" + }, + { + "comment": "C2; V3 (ignored)", + "input": "-3.xn--fbf739aq5o", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u2132\u17d2\u200d\uff61\u2260\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u2132\u17d2\u200d\uff61=\u0338\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u2132\u17d2\u200d\u3002\u2260\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u2132\u17d2\u200d\u3002=\u0338\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u214e\u17d2\u200d\u3002=\u0338\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u214e\u17d2\u200d\u3002\u2260\u200d\u200c", + "output": null + }, + { + "input": "xn--u4e969b.xn--1ch", + "output": "xn--u4e969b.xn--1ch" + }, + { + "input": "\u214e\u17d2.\u2260", + "output": "xn--u4e969b.xn--1ch" + }, + { + "input": "\u214e\u17d2.=\u0338", + "output": "xn--u4e969b.xn--1ch" + }, + { + "input": "\u2132\u17d2.=\u0338", + "output": "xn--u4e969b.xn--1ch" + }, + { + "input": "\u2132\u17d2.\u2260", + "output": "xn--u4e969b.xn--1ch" + }, + { + "comment": "C1; C2", + "input": "xn--u4e823bq1a.xn--0ugb89o", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u214e\u17d2\u200d\uff61=\u0338\u200d\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u214e\u17d2\u200d\uff61\u2260\u200d\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--u4e319b.xn--1ch", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--u4e823bcza.xn--0ugb89o", + "output": null + }, + { + "comment": "V7", + "input": "\ud9a9\udd2f\u0fa8\uff0e\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\ud9a9\udd2f\u0fa8\uff0e>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\ud9a9\udd2f\u0fa8.\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\ud9a9\udd2f\u0fa8.>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "xn--4fd57150h.xn--hdh", + "output": null + }, + { + "comment": "V6", + "input": "\ud802\ude3f\udb40\udd8c\u9e2e\ud805\udeb6.\u03c2", + "output": null + }, + { + "comment": "V6", + "input": "\ud802\ude3f\udb40\udd8c\u9e2e\ud805\udeb6.\u03a3", + "output": null + }, + { + "comment": "V6", + "input": "\ud802\ude3f\udb40\udd8c\u9e2e\ud805\udeb6.\u03c3", + "output": null + }, + { + "comment": "V6", + "input": "xn--l76a726rt2h.xn--4xa", + "output": null + }, + { + "comment": "V6", + "input": "xn--l76a726rt2h.xn--3xa", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03c2-\u3002\u200c\ud835\udfed-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03c2-\u3002\u200c1-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03a3-\u3002\u200c1-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03c3-\u3002\u200c1-", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "xn----zmb.1-", + "output": "xn----zmb.1-" + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn----zmb.xn--1--i1t", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn----xmb.xn--1--i1t", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03a3-\u3002\u200c\ud835\udfed-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u03c3-\u3002\u200c\ud835\udfed-", + "output": null + }, + { + "comment": "V6", + "input": "\u1734-\u0ce2\uff0e\udb40\udd29\u10a4", + "output": null + }, + { + "comment": "V6", + "input": "\u1734-\u0ce2.\udb40\udd29\u10a4", + "output": null + }, + { + "comment": "V6", + "input": "\u1734-\u0ce2.\udb40\udd29\u2d04", + "output": null + }, + { + "comment": "V6", + "input": "xn----ggf830f.xn--vkj", + "output": null + }, + { + "comment": "V6", + "input": "\u1734-\u0ce2\uff0e\udb40\udd29\u2d04", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----ggf830f.xn--cnd", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u200d\u3002\ud838\udc18\u2488\ua84d\u64c9", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u3002\ud838\udc181.\ua84d\u64c9", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": ".xn--1-1p4r.xn--s7uv61m", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--1ug.xn--1-1p4r.xn--s7uv61m", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": ".xn--tsh026uql4bew9p", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--1ug.xn--tsh026uql4bew9p", + "output": null + }, + { + "comment": "V7", + "input": "\u2ad0\uff61\u10c0-\udacd\udc22", + "output": null + }, + { + "comment": "V7", + "input": "\u2ad0\u3002\u10c0-\udacd\udc22", + "output": null + }, + { + "comment": "V7", + "input": "\u2ad0\u3002\u2d20-\udacd\udc22", + "output": null + }, + { + "comment": "V7", + "input": "xn--r3i.xn----2wst7439i", + "output": null + }, + { + "comment": "V7", + "input": "\u2ad0\uff61\u2d20-\udacd\udc22", + "output": null + }, + { + "comment": "V7", + "input": "xn--r3i.xn----z1g58579u", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udc42\u25ca\uff0e\u299f\u2220", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udc42\u25ca.\u299f\u2220", + "output": null + }, + { + "comment": "V6", + "input": "xn--01h3338f.xn--79g270a", + "output": null + }, + { + "comment": "V7", + "input": "\ud5c1\udb21\udd99\u0e3a\udb28\udf5a\u3002\u06ba\ud835\udfdc", + "output": null + }, + { + "comment": "V7", + "input": "\u1112\u1164\u11bc\udb21\udd99\u0e3a\udb28\udf5a\u3002\u06ba\ud835\udfdc", + "output": null + }, + { + "comment": "V7", + "input": "\ud5c1\udb21\udd99\u0e3a\udb28\udf5a\u3002\u06ba4", + "output": null + }, + { + "comment": "V7", + "input": "\u1112\u1164\u11bc\udb21\udd99\u0e3a\udb28\udf5a\u3002\u06ba4", + "output": null + }, + { + "comment": "V7", + "input": "xn--o4c1723h8g85gt4ya.xn--4-dvc", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua953.\u033d\ud804\udcbd\u998b", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--3j9a.xn--bua0708eqzrd", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udae2\udedd\uda69\udef8\u200d\uff61\u4716", + "output": null + }, + { + "comment": "C2; V7", + "input": "\udae2\udedd\uda69\udef8\u200d\u3002\u4716", + "output": null + }, + { + "comment": "V7", + "input": "xn--g138cxw05a.xn--k0o", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug30527h9mxi.xn--k0o", + "output": null + }, + { + "comment": "C2; U1 (ignored)", + "input": "\u186f\u2689\u59f6\ud83c\udd09\uff0e\u06f7\u200d\ud83c\udfaa\u200d", + "output": null + }, + { + "comment": "C2; U1 (ignored)", + "input": "\u186f\u2689\u59f68,.\u06f7\u200d\ud83c\udfaa\u200d", + "output": null + }, + { + "comment": "U1 (ignored)", + "input": "xn--8,-g9oy26fzu4d.xn--kmb6733w", + "output": "xn--8,-g9oy26fzu4d.xn--kmb6733w" + }, + { + "comment": "C2; U1 (ignored)", + "input": "xn--8,-g9oy26fzu4d.xn--kmb859ja94998b", + "output": null + }, + { + "comment": "V7", + "input": "xn--c9e433epi4b3j20a.xn--kmb6733w", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--c9e433epi4b3j20a.xn--kmb859ja94998b", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "\u135f\u1848\u200c\uff0e\ufe12-\ud81b\udf90-", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored); A4_2 (ignored)", + "input": "\u135f\u1848\u200c.\u3002-\ud81b\udf90-", + "output": null + }, + { + "comment": "V6; V3 (ignored); A4_2 (ignored)", + "input": "xn--b7d82w..xn-----pe4u", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored); A4_2 (ignored)", + "input": "xn--b7d82wo4h..xn-----pe4u", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--b7d82w.xn-----c82nz547a", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "xn--b7d82wo4h.xn-----c82nz547a", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\ud836\ude5c\u3002-\u0b4d\u10ab", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\ud836\ude5c\u3002-\u0b4d\u2d0b", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--792h.xn----bse820x", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--792h.xn----bse632b", + "output": null + }, + { + "comment": "C1", + "input": "\ud835\udff5\u9681\u2bee\uff0e\u180d\u200c", + "output": null + }, + { + "comment": "C1", + "input": "9\u9681\u2bee.\u180d\u200c", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--9-mfs8024b.", + "output": "xn--9-mfs8024b." + }, + { + "comment": "A4_2 (ignored)", + "input": "9\u9681\u2bee.", + "output": "xn--9-mfs8024b." + }, + { + "comment": "C1", + "input": "xn--9-mfs8024b.xn--0ug", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u1bac\u10ac\u200c\u0325\u3002\ud835\udff8", + "output": null + }, + { + "comment": "V6", + "input": "xn--mta176jjjm.c", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--mta176j97cl2q.c", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u1bac\u2d0c\u200c\u0325\u3002\ud835\udff8", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--mta930emri.c", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--mta930emribme.c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb40\udd01\u035f\u2fb6\uff61\u2087\ufe12\ub207\u226e", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb40\udd01\u035f\u2fb6\uff61\u2087\ufe12\u1102\u116e\u11aa<\u0338", + "output": null + }, + { + "comment": "V6", + "input": "\udb40\udd01\u035f\u98db\u30027\u3002\ub207\u226e", + "output": null + }, + { + "comment": "V6", + "input": "\udb40\udd01\u035f\u98db\u30027\u3002\u1102\u116e\u11aa<\u0338", + "output": null + }, + { + "comment": "V6", + "input": "xn--9ua0567e.7.xn--gdh6767c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--9ua0567e.xn--7-ngou006d1ttc", + "output": null + }, + { + "input": "xn--2ib43l.xn--te6h", + "output": "xn--2ib43l.xn--te6h" + }, + { + "input": "\u067d\u0943.\ud83a\udd35", + "output": "xn--2ib43l.xn--te6h" + }, + { + "input": "\u067d\u0943.\ud83a\udd13", + "output": "xn--2ib43l.xn--te6h" + }, + { + "comment": "C1; V6", + "input": "\u200c\u3002\uffa0\u0f84\u0f96", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u200c\u3002\u1160\u0f84\u0f96", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": ".xn--3ed0b", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--0ug.xn--3ed0b", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--3ed0b20h", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug.xn--3ed0b20h", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--3ed0by082k", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug.xn--3ed0by082k", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u226f\ud9f5\ude05\uff0e\u200d\ud800\udd7c\uda88\udddb", + "output": null + }, + { + "comment": "C2; V7", + "input": ">\u0338\ud9f5\ude05\uff0e\u200d\ud800\udd7c\uda88\udddb", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u226f\ud9f5\ude05.\u200d\ud800\udd7c\uda88\udddb", + "output": null + }, + { + "comment": "C2; V7", + "input": ">\u0338\ud9f5\ude05.\u200d\ud800\udd7c\uda88\udddb", + "output": null + }, + { + "comment": "V7", + "input": "xn--hdh84488f.xn--xy7cw2886b", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--hdh84488f.xn--1ug8099fbjp4e", + "output": null + }, + { + "input": "\ua9d0\u04c0\u1baa\u08f6\uff0e\ub235", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04c0\u1baa\u08f6\uff0e\u1102\u116f\u11bc", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04c0\u1baa\u08f6.\ub235", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04c0\u1baa\u08f6.\u1102\u116f\u11bc", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04cf\u1baa\u08f6.\u1102\u116f\u11bc", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04cf\u1baa\u08f6.\ub235", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "xn--s5a04sn4u297k.xn--2e1b", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04cf\u1baa\u08f6\uff0e\u1102\u116f\u11bc", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "input": "\ua9d0\u04cf\u1baa\u08f6\uff0e\ub235", + "output": "xn--s5a04sn4u297k.xn--2e1b" + }, + { + "comment": "V7", + "input": "xn--d5a07sn4u297k.xn--2e1b", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua8ea\uff61\ud818\udd3f\ud804\uddbe\udb40\uddd7", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua8ea\u3002\ud818\udd3f\ud804\uddbe\udb40\uddd7", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--3g9a.xn--ud1dz07k", + "output": null + }, + { + "comment": "V7", + "input": "\udadd\udcd3\ud805\udeb3\u3002\ud903\uddff\u226f\u2f87", + "output": null + }, + { + "comment": "V7", + "input": "\udadd\udcd3\ud805\udeb3\u3002\ud903\uddff>\u0338\u2f87", + "output": null + }, + { + "comment": "V7", + "input": "\udadd\udcd3\ud805\udeb3\u3002\ud903\uddff\u226f\u821b", + "output": null + }, + { + "comment": "V7", + "input": "\udadd\udcd3\ud805\udeb3\u3002\ud903\uddff>\u0338\u821b", + "output": null + }, + { + "comment": "V7", + "input": "xn--3e2d79770c.xn--hdh0088abyy1c", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--9hb7344k.", + "output": "xn--9hb7344k." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud802\udec7\u0661.", + "output": "xn--9hb7344k." + }, + { + "comment": "C1; V7", + "input": "\ud944\udd48\u782a\u226f\u1891\uff61\u226f\ud836\ude5a\uda0f\udd14\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ud944\udd48\u782a>\u0338\u1891\uff61>\u0338\ud836\ude5a\uda0f\udd14\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ud944\udd48\u782a\u226f\u1891\u3002\u226f\ud836\ude5a\uda0f\udd14\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ud944\udd48\u782a>\u0338\u1891\u3002>\u0338\ud836\ude5a\uda0f\udd14\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c", + "output": null + }, + { + "comment": "V6", + "input": "\u10c5.\ud804\udd33\u32b8", + "output": null + }, + { + "comment": "V6", + "input": "\u10c5.\ud804\udd3343", + "output": null + }, + { + "comment": "V6", + "input": "\u2d25.\ud804\udd3343", + "output": null + }, + { + "comment": "V6", + "input": "xn--tlj.xn--43-274o", + "output": null + }, + { + "comment": "V6", + "input": "\u2d25.\ud804\udd33\u32b8", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--9nd.xn--43-274o", + "output": null + }, + { + "comment": "V7", + "input": "\ud91e\udea8\udb40\udd09\uffa0\u0fb7.\ud9a1\udfb0\ua953", + "output": null + }, + { + "comment": "V7", + "input": "\ud91e\udea8\udb40\udd09\u1160\u0fb7.\ud9a1\udfb0\ua953", + "output": null + }, + { + "comment": "V7", + "input": "xn--kgd72212e.xn--3j9au7544a", + "output": null + }, + { + "comment": "V7", + "input": "xn--kgd36f9z57y.xn--3j9au7544a", + "output": null + }, + { + "comment": "V7", + "input": "xn--kgd7493jee34a.xn--3j9au7544a", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u0618.\u06f3\u200c\ua953", + "output": null + }, + { + "comment": "V6", + "input": "xn--6fb.xn--gmb0524f", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--6fb.xn--gmb469jjf1h", + "output": null + }, + { + "comment": "V7", + "input": "\u184c\uff0e\ufe12\u1891", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u184c.\u3002\u1891", + "output": "xn--c8e..xn--bbf" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--c8e..xn--bbf", + "output": "xn--c8e..xn--bbf" + }, + { + "comment": "V7", + "input": "xn--c8e.xn--bbf9168i", + "output": null + }, + { + "comment": "V7", + "input": "\ud83b\uddcf\u3002\u1822\uda0d\ude06", + "output": null + }, + { + "comment": "V7", + "input": "xn--hd7h.xn--46e66060j", + "output": null + }, + { + "comment": "V7", + "input": "\ud9f0\uded4\udb40\udd8e\udb40\udd97\ud807\udc95\u3002\u226e", + "output": null + }, + { + "comment": "V7", + "input": "\ud9f0\uded4\udb40\udd8e\udb40\udd97\ud807\udc95\u3002<\u0338", + "output": null + }, + { + "comment": "V7", + "input": "xn--4m3dv4354a.xn--gdh", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\udb40\udda6.\u08e3\u6680\u2260", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\udb40\udda6.\u08e3\u6680=\u0338", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": ".xn--m0b461k3g2c", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u40b9\udbb9\udd85\ud800\udee6\uff0e\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u40b9\udbb9\udd85\ud800\udee6.\u200d", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--0on3543c5981i.", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--0on3543c5981i.xn--1ug", + "output": null + }, + { + "comment": "V7", + "input": "\ufe12\uff61\u10a3\u226f", + "output": null + }, + { + "comment": "V7", + "input": "\ufe12\uff61\u10a3>\u0338", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u3002\u3002\u10a3\u226f", + "output": "..xn--hdh782b" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u3002\u3002\u10a3>\u0338", + "output": "..xn--hdh782b" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u3002\u3002\u2d03>\u0338", + "output": "..xn--hdh782b" + }, + { + "comment": "A4_2 (ignored)", + "input": "\u3002\u3002\u2d03\u226f", + "output": "..xn--hdh782b" + }, + { + "comment": "A4_2 (ignored)", + "input": "..xn--hdh782b", + "output": "..xn--hdh782b" + }, + { + "comment": "V7", + "input": "\ufe12\uff61\u2d03>\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\ufe12\uff61\u2d03\u226f", + "output": null + }, + { + "comment": "V7", + "input": "xn--y86c.xn--hdh782b", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "..xn--bnd622g", + "output": null + }, + { + "comment": "V7", + "input": "xn--y86c.xn--bnd622g", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u10c1-\udb40\udc5d\uff61\u2260-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u10c1-\udb40\udc5d\uff61=\u0338-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u10c1-\udb40\udc5d\u3002\u2260-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u10c1-\udb40\udc5d\u3002=\u0338-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u2d21-\udb40\udc5d\u3002=\u0338-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u2d21-\udb40\udc5d\u3002\u2260-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "xn----4wsr321ay823p.xn----tfot873s", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u2d21-\udb40\udc5d\uff61=\u0338-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "\u7b83\u2d21-\udb40\udc5d\uff61\u2260-\ud83e\udd16", + "output": null + }, + { + "comment": "V7", + "input": "xn----11g3013fy8x5m.xn----tfot873s", + "output": null + }, + { + "input": "\u07e5.\u06b5", + "output": "xn--dtb.xn--okb" + }, + { + "input": "xn--dtb.xn--okb", + "output": "xn--dtb.xn--okb" + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--3e6h", + "output": ".xn--3e6h" + }, + { + "input": "xn--3e6h", + "output": "xn--3e6h" + }, + { + "input": "\ud83a\udd3f", + "output": "xn--3e6h" + }, + { + "input": "\ud83a\udd1d", + "output": "xn--3e6h" + }, + { + "comment": "C1; V6; V3 (ignored)", + "input": "\u103a\u200d\u200c\u3002-\u200c", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--bkd.-", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored)", + "input": "xn--bkd412fca.xn----sgn", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ufe12\uff61\u1b44\u1849", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\u3002\u3002\u1b44\u1849", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "..xn--87e93m", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--y86c.xn--87e93m", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "-\u1bab\ufe12\u200d.\ud90b\udd88\ud957\ude53", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "-\u1bab\u3002\u200d.\ud90b\udd88\ud957\ude53", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "xn----qml..xn--x50zy803a", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----qml.xn--1ug.xn--x50zy803a", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----qml1407i.xn--x50zy803a", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----qmlv7tw180a.xn--x50zy803a", + "output": null + }, + { + "comment": "V7", + "input": "\udb42\uddae.\u226f\ud838\udc06", + "output": null + }, + { + "comment": "V7", + "input": "\udb42\uddae.>\u0338\ud838\udc06", + "output": null + }, + { + "comment": "V7", + "input": "xn--t546e.xn--hdh5166o", + "output": null + }, + { + "input": "\u06b9\uff0e\u1873\u115f", + "output": "xn--skb.xn--g9e" + }, + { + "input": "\u06b9.\u1873\u115f", + "output": "xn--skb.xn--g9e" + }, + { + "input": "xn--skb.xn--g9e", + "output": "xn--skb.xn--g9e" + }, + { + "input": "\u06b9.\u1873", + "output": "xn--skb.xn--g9e" + }, + { + "comment": "V7", + "input": "xn--skb.xn--osd737a", + "output": null + }, + { + "comment": "V7", + "input": "\u3a1b\ud823\udc4e.\ufe12\ud835\udfd5\u0d01", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u3a1b\ud823\udc4e.\u30027\u0d01", + "output": "xn--mbm8237g..xn--7-7hf" + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--mbm8237g..xn--7-7hf", + "output": "xn--mbm8237g..xn--7-7hf" + }, + { + "comment": "V7", + "input": "xn--mbm8237g.xn--7-7hf1526p", + "output": null + }, + { + "comment": "C1", + "input": "\u00df\u200c\uaaf6\u18a5\uff0e\u22b6\u10c1\u10b6", + "output": null + }, + { + "comment": "C1", + "input": "\u00df\u200c\uaaf6\u18a5.\u22b6\u10c1\u10b6", + "output": null + }, + { + "comment": "C1", + "input": "\u00df\u200c\uaaf6\u18a5.\u22b6\u2d21\u2d16", + "output": null + }, + { + "comment": "C1", + "input": "SS\u200c\uaaf6\u18a5.\u22b6\u10c1\u10b6", + "output": null + }, + { + "comment": "C1", + "input": "ss\u200c\uaaf6\u18a5.\u22b6\u2d21\u2d16", + "output": null + }, + { + "comment": "C1", + "input": "Ss\u200c\uaaf6\u18a5.\u22b6\u10c1\u2d16", + "output": null + }, + { + "input": "xn--ss-4epx629f.xn--ifh802b6a", + "output": "xn--ss-4epx629f.xn--ifh802b6a" + }, + { + "input": "ss\uaaf6\u18a5.\u22b6\u2d21\u2d16", + "output": "xn--ss-4epx629f.xn--ifh802b6a" + }, + { + "input": "SS\uaaf6\u18a5.\u22b6\u10c1\u10b6", + "output": "xn--ss-4epx629f.xn--ifh802b6a" + }, + { + "input": "Ss\uaaf6\u18a5.\u22b6\u10c1\u2d16", + "output": "xn--ss-4epx629f.xn--ifh802b6a" + }, + { + "comment": "C1", + "input": "xn--ss-4ep585bkm5p.xn--ifh802b6a", + "output": null + }, + { + "comment": "C1", + "input": "xn--zca682johfi89m.xn--ifh802b6a", + "output": null + }, + { + "comment": "C1", + "input": "\u00df\u200c\uaaf6\u18a5\uff0e\u22b6\u2d21\u2d16", + "output": null + }, + { + "comment": "C1", + "input": "SS\u200c\uaaf6\u18a5\uff0e\u22b6\u10c1\u10b6", + "output": null + }, + { + "comment": "C1", + "input": "ss\u200c\uaaf6\u18a5\uff0e\u22b6\u2d21\u2d16", + "output": null + }, + { + "comment": "C1", + "input": "Ss\u200c\uaaf6\u18a5\uff0e\u22b6\u10c1\u2d16", + "output": null + }, + { + "comment": "V7", + "input": "xn--ss-4epx629f.xn--5nd703gyrh", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--ss-4ep585bkm5p.xn--5nd703gyrh", + "output": null + }, + { + "comment": "V7", + "input": "xn--ss-4epx629f.xn--undv409k", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--ss-4ep585bkm5p.xn--undv409k", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--zca682johfi89m.xn--undv409k", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u3002\u03c2\udb40\udc49", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u3002\u03a3\udb40\udc49", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u3002\u03c3\udb40\udc49", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--4xa24344p", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug.xn--4xa24344p", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug.xn--3xa44344p", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u2492\uda61\ude19\uda8f\udce0\ud805\udcc0.-\udb3a\udc4a", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "11.\uda61\ude19\uda8f\udce0\ud805\udcc0.-\udb3a\udc4a", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "11.xn--uz1d59632bxujd.xn----x310m", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--3shy698frsu9dt1me.xn----x310m", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "-\uff61\u200d", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "-\u3002\u200d", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "-.", + "output": "-." + }, + { + "comment": "C2; V3 (ignored)", + "input": "-.xn--1ug", + "output": null + }, + { + "comment": "V7", + "input": "\u126c\uda12\udc3c\ud8c5\uddf6\uff61\ud802\ude2c\ud835\udfe0", + "output": null + }, + { + "comment": "V7", + "input": "\u126c\uda12\udc3c\ud8c5\uddf6\u3002\ud802\ude2c8", + "output": null + }, + { + "comment": "V7", + "input": "xn--d0d41273c887z.xn--8-ob5i", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u03c2\u200d-.\u10c3\ud859\udfd9", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u03c2\u200d-.\u2d23\ud859\udfd9", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u03a3\u200d-.\u10c3\ud859\udfd9", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u03c3\u200d-.\u2d23\ud859\udfd9", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "xn----zmb.xn--rlj2573p", + "output": "xn----zmb.xn--rlj2573p" + }, + { + "comment": "C2; V3 (ignored)", + "input": "xn----zmb048s.xn--rlj2573p", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "xn----xmb348s.xn--rlj2573p", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----zmb.xn--7nd64871a", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----zmb048s.xn--7nd64871a", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----xmb348s.xn--7nd64871a", + "output": null + }, + { + "input": "\u2260\u3002\ud83d\udfb3\ud835\udff2", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "=\u0338\u3002\ud83d\udfb3\ud835\udff2", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "\u2260\u3002\ud83d\udfb36", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "=\u0338\u3002\ud83d\udfb36", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "xn--1ch.xn--6-dl4s", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "\u2260.\ud83d\udfb36", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "input": "=\u0338.\ud83d\udfb36", + "output": "xn--1ch.xn--6-dl4s" + }, + { + "comment": "V7", + "input": "\udad6\udf3d.\u8814", + "output": null + }, + { + "comment": "V7", + "input": "xn--g747d.xn--xl2a", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u08e6\u200d\uff0e\ubf3d", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u08e6\u200d\uff0e\u1108\u1168\u11c0", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u08e6\u200d.\ubf3d", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u08e6\u200d.\u1108\u1168\u11c0", + "output": null + }, + { + "comment": "V6", + "input": "xn--p0b.xn--e43b", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--p0b869i.xn--e43b", + "output": null + }, + { + "comment": "V7", + "input": "\ud8f6\ude3d\uff0e\ud8ef\ude15", + "output": null + }, + { + "comment": "V7", + "input": "\ud8f6\ude3d.\ud8ef\ude15", + "output": null + }, + { + "comment": "V7", + "input": "xn--pr3x.xn--rv7w", + "output": null + }, + { + "comment": "V7", + "input": "\ud802\udfc0\ud803\ude09\ud83a\uddcf\u3002\ud949\udea7\u2084\u10ab\ud8cb\ude6b", + "output": null + }, + { + "comment": "V7", + "input": "\ud802\udfc0\ud803\ude09\ud83a\uddcf\u3002\ud949\udea74\u10ab\ud8cb\ude6b", + "output": null + }, + { + "comment": "V7", + "input": "\ud802\udfc0\ud803\ude09\ud83a\uddcf\u3002\ud949\udea74\u2d0b\ud8cb\ude6b", + "output": null + }, + { + "comment": "V7", + "input": "xn--039c42bq865a.xn--4-wvs27840bnrzm", + "output": null + }, + { + "comment": "V7", + "input": "\ud802\udfc0\ud803\ude09\ud83a\uddcf\u3002\ud949\udea7\u2084\u2d0b\ud8cb\ude6b", + "output": null + }, + { + "comment": "V7", + "input": "xn--039c42bq865a.xn--4-t0g49302fnrzm", + "output": null + }, + { + "comment": "V6", + "input": "\ud835\udfd3\u3002\u06d7", + "output": null + }, + { + "comment": "V6", + "input": "5\u3002\u06d7", + "output": null + }, + { + "comment": "V6", + "input": "5.xn--nlb", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\udaab\ude29.\u2f95", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\udaab\ude29.\u8c37", + "output": null + }, + { + "comment": "V7", + "input": "xn--i183d.xn--6g3a", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug26167i.xn--6g3a", + "output": null + }, + { + "comment": "C1; C2; V7; V3 (ignored)", + "input": "\ufe12\udafb\udc07\u200d.-\u073c\u200c", + "output": null + }, + { + "comment": "C1; C2; V7; V3 (ignored); A4_2 (ignored)", + "input": "\u3002\udafb\udc07\u200d.-\u073c\u200c", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": ".xn--hh50e.xn----t2c", + "output": null + }, + { + "comment": "C1; C2; V7; V3 (ignored); A4_2 (ignored)", + "input": ".xn--1ug05310k.xn----t2c071q", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--y86c71305c.xn----t2c", + "output": null + }, + { + "comment": "C1; C2; V7; V3 (ignored)", + "input": "xn--1ug1658ftw26f.xn----t2c071q", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\uff0e\ud835\udfd7", + "output": null + }, + { + "comment": "C2", + "input": "\u200d.j", + "output": null + }, + { + "comment": "C2", + "input": "\u200d.J", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".j", + "output": ".j" + }, + { + "comment": "C2", + "input": "xn--1ug.j", + "output": null + }, + { + "input": "j", + "output": "j" + }, + { + "comment": "C1; V7", + "input": "\u10ad\ud8be\udccd\ua868\u05ae\u3002\u10be\u200c\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2d0d\ud8be\udccd\ua868\u05ae\u3002\u2d1e\u200c\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--5cb172r175fug38a.xn--mlj", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--5cb172r175fug38a.xn--0uga051h", + "output": null + }, + { + "comment": "V7", + "input": "xn--5cb347co96jug15a.xn--2nd", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--5cb347co96jug15a.xn--2nd059ea", + "output": null + }, + { + "comment": "V7", + "input": "\ud800\udef0\u3002\udb05\udcf1", + "output": null + }, + { + "comment": "V7", + "input": "xn--k97c.xn--q031e", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u10ab\ud89b\udff8\uade4\uff0e\uda40\udd7c\ud835\udfe2\ud72a\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u10ab\ud89b\udff8\u1100\u1172\u11af\uff0e\uda40\udd7c\ud835\udfe2\u1112\u1171\u11b9\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u10ab\ud89b\udff8\uade4.\uda40\udd7c0\ud72a\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u10ab\ud89b\udff8\u1100\u1172\u11af.\uda40\udd7c0\u1112\u1171\u11b9\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u2d0b\ud89b\udff8\u1100\u1172\u11af.\uda40\udd7c0\u1112\u1171\u11b9\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u2d0b\ud89b\udff8\uade4.\uda40\udd7c0\ud72a\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u2d0b\ud89b\udff8\u1100\u1172\u11af\uff0e\uda40\udd7c\ud835\udfe2\u1112\u1171\u11b9\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u08df\u2d0b\ud89b\udff8\uade4\uff0e\uda40\udd7c\ud835\udfe2\ud72a\u0ae3", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f", + "output": null + }, + { + "comment": "V7", + "input": "\u0784\uff0e\ud83a\udc5d\u0601", + "output": null + }, + { + "comment": "V7", + "input": "\u0784.\ud83a\udc5d\u0601", + "output": null + }, + { + "comment": "V7", + "input": "xn--lqb.xn--jfb1808v", + "output": null + }, + { + "comment": "V6", + "input": "\u0acd\u2083.8\ua8c4\u200d\ud83c\udce4", + "output": null + }, + { + "comment": "V6", + "input": "\u0acd3.8\ua8c4\u200d\ud83c\udce4", + "output": null + }, + { + "comment": "V6", + "input": "xn--3-yke.xn--8-sl4et308f", + "output": null + }, + { + "comment": "V6", + "input": "xn--3-yke.xn--8-ugnv982dbkwm", + "output": null + }, + { + "comment": "V7", + "input": "\ua855\u2260\u105e\udb7b\udff1\uff61\ud803\udd67\udb40\udd2b\uffa0", + "output": null + }, + { + "comment": "V7", + "input": "\ua855=\u0338\u105e\udb7b\udff1\uff61\ud803\udd67\udb40\udd2b\uffa0", + "output": null + }, + { + "comment": "V7", + "input": "\ua855\u2260\u105e\udb7b\udff1\u3002\ud803\udd67\udb40\udd2b\u1160", + "output": null + }, + { + "comment": "V7", + "input": "\ua855=\u0338\u105e\udb7b\udff1\u3002\ud803\udd67\udb40\udd2b\u1160", + "output": null + }, + { + "comment": "V7", + "input": "xn--cld333gn31h0158l.xn--3g0d", + "output": null + }, + { + "comment": "C1", + "input": "\u9c4a\u3002\u200c", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--rt6a.", + "output": "xn--rt6a." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u9c4a.", + "output": "xn--rt6a." + }, + { + "comment": "C1", + "input": "xn--rt6a.xn--0ug", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--4-0bd15808a.", + "output": "xn--4-0bd15808a." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud83a\udd3a\u07cc4.", + "output": "xn--4-0bd15808a." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud83a\udd18\u07cc4.", + "output": "xn--4-0bd15808a." + }, + { + "comment": "V3 (ignored)", + "input": "-\uff61\u43db", + "output": "-.xn--xco" + }, + { + "comment": "V3 (ignored)", + "input": "-\u3002\u43db", + "output": "-.xn--xco" + }, + { + "comment": "V3 (ignored)", + "input": "-.xn--xco", + "output": "-.xn--xco" + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\ud908\udce0\uff0e\u200d", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\ud908\udce0.\u200d", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--dj8y.", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--0ugz7551c.xn--1ug", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud804\uddc0.\udb42\ude31", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--wd1d.xn--k946e", + "output": null + }, + { + "input": "\u2f86\uff0e\ua848\uff15\u226f\u00df", + "output": "xn--tc1a.xn--5-qfa988w745i" + }, + { + "input": "\u2f86\uff0e\ua848\uff15>\u0338\u00df", + "output": "xn--tc1a.xn--5-qfa988w745i" + }, + { + "input": "\u820c.\ua8485\u226f\u00df", + "output": "xn--tc1a.xn--5-qfa988w745i" + }, + { + "input": "\u820c.\ua8485>\u0338\u00df", + "output": "xn--tc1a.xn--5-qfa988w745i" + }, + { + "input": "\u820c.\ua8485>\u0338SS", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u820c.\ua8485\u226fSS", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u820c.\ua8485\u226fss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u820c.\ua8485>\u0338ss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u820c.\ua8485>\u0338Ss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u820c.\ua8485\u226fSs", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "xn--tc1a.xn--5ss-3m2a5009e", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "xn--tc1a.xn--5-qfa988w745i", + "output": "xn--tc1a.xn--5-qfa988w745i" + }, + { + "input": "\u2f86\uff0e\ua848\uff15>\u0338SS", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u2f86\uff0e\ua848\uff15\u226fSS", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u2f86\uff0e\ua848\uff15\u226fss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u2f86\uff0e\ua848\uff15>\u0338ss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u2f86\uff0e\ua848\uff15>\u0338Ss", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\u2f86\uff0e\ua848\uff15\u226fSs", + "output": "xn--tc1a.xn--5ss-3m2a5009e" + }, + { + "input": "\ud83a\udd2a.\u03c2", + "output": "xn--ie6h.xn--3xa" + }, + { + "input": "\ud83a\udd08.\u03a3", + "output": "xn--ie6h.xn--4xa" + }, + { + "input": "\ud83a\udd2a.\u03c3", + "output": "xn--ie6h.xn--4xa" + }, + { + "input": "\ud83a\udd08.\u03c3", + "output": "xn--ie6h.xn--4xa" + }, + { + "input": "xn--ie6h.xn--4xa", + "output": "xn--ie6h.xn--4xa" + }, + { + "input": "\ud83a\udd08.\u03c2", + "output": "xn--ie6h.xn--3xa" + }, + { + "input": "xn--ie6h.xn--3xa", + "output": "xn--ie6h.xn--3xa" + }, + { + "input": "\ud83a\udd2a.\u03a3", + "output": "xn--ie6h.xn--4xa" + }, + { + "comment": "C1", + "input": "\u200c\u10ba\uff61\u03c2", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u10ba\u3002\u03c2", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u2d1a\u3002\u03c2", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u10ba\u3002\u03a3", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u2d1a\u3002\u03c3", + "output": null + }, + { + "input": "xn--ilj.xn--4xa", + "output": "xn--ilj.xn--4xa" + }, + { + "input": "\u2d1a.\u03c3", + "output": "xn--ilj.xn--4xa" + }, + { + "input": "\u10ba.\u03a3", + "output": "xn--ilj.xn--4xa" + }, + { + "input": "\u2d1a.\u03c2", + "output": "xn--ilj.xn--3xa" + }, + { + "input": "\u10ba.\u03c2", + "output": "xn--ilj.xn--3xa" + }, + { + "input": "xn--ilj.xn--3xa", + "output": "xn--ilj.xn--3xa" + }, + { + "input": "\u10ba.\u03c3", + "output": "xn--ilj.xn--4xa" + }, + { + "comment": "C1", + "input": "xn--0ug262c.xn--4xa", + "output": null + }, + { + "comment": "C1", + "input": "xn--0ug262c.xn--3xa", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u2d1a\uff61\u03c2", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u10ba\uff61\u03a3", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u2d1a\uff61\u03c3", + "output": null + }, + { + "comment": "V7", + "input": "xn--ynd.xn--4xa", + "output": null + }, + { + "comment": "V7", + "input": "xn--ynd.xn--3xa", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--ynd759e.xn--4xa", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--ynd759e.xn--3xa", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u2f95\u3002\u200c\u0310\ua953\ua84e", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u2f95\u3002\u200c\ua953\u0310\ua84e", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u8c37\u3002\u200c\ua953\u0310\ua84e", + "output": null + }, + { + "comment": "V6", + "input": "xn--6g3a.xn--0sa8175flwa", + "output": null + }, + { + "comment": "C1; C2", + "input": "xn--1ug0273b.xn--0sa359l6n7g13a", + "output": null + }, + { + "input": "\u6dfd\u3002\u183e", + "output": "xn--34w.xn--x7e" + }, + { + "input": "xn--34w.xn--x7e", + "output": "xn--34w.xn--x7e" + }, + { + "input": "\u6dfd.\u183e", + "output": "xn--34w.xn--x7e" + }, + { + "comment": "V6; V7", + "input": "\uda72\ude29\u10b3\u2753\uff61\ud804\udd28", + "output": null + }, + { + "comment": "V6; V7", + "input": "\uda72\ude29\u10b3\u2753\u3002\ud804\udd28", + "output": null + }, + { + "comment": "V6; V7", + "input": "\uda72\ude29\u2d13\u2753\u3002\ud804\udd28", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--8di78qvw32y.xn--k80d", + "output": null + }, + { + "comment": "V6; V7", + "input": "\uda72\ude29\u2d13\u2753\uff61\ud804\udd28", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--rnd896i0j14q.xn--k80d", + "output": null + }, + { + "comment": "V7", + "input": "\u17ff\uff61\ud83a\udf33", + "output": null + }, + { + "comment": "V7", + "input": "\u17ff\u3002\ud83a\udf33", + "output": null + }, + { + "comment": "V7", + "input": "xn--45e.xn--et6h", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u0652\u200d\uff61\u0ccd\ud805\udeb3", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u0652\u200d\u3002\u0ccd\ud805\udeb3", + "output": null + }, + { + "comment": "V6", + "input": "xn--uhb.xn--8tc4527k", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--uhb882k.xn--8tc4527k", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u00df\ud880\udc3b\ud8da\udf17\uff61\ud836\ude68\ud83d\udd6e\u00df", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u00df\ud880\udc3b\ud8da\udf17\u3002\ud836\ude68\ud83d\udd6e\u00df", + "output": null + }, + { + "comment": "V6; V7", + "input": "SS\ud880\udc3b\ud8da\udf17\u3002\ud836\ude68\ud83d\udd6eSS", + "output": null + }, + { + "comment": "V6; V7", + "input": "ss\ud880\udc3b\ud8da\udf17\u3002\ud836\ude68\ud83d\udd6ess", + "output": null + }, + { + "comment": "V6; V7", + "input": "Ss\ud880\udc3b\ud8da\udf17\u3002\ud836\ude68\ud83d\udd6eSs", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ss-jl59biy67d.xn--ss-4d11aw87d", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--zca20040bgrkh.xn--zca3653v86qa", + "output": null + }, + { + "comment": "V6; V7", + "input": "SS\ud880\udc3b\ud8da\udf17\uff61\ud836\ude68\ud83d\udd6eSS", + "output": null + }, + { + "comment": "V6; V7", + "input": "ss\ud880\udc3b\ud8da\udf17\uff61\ud836\ude68\ud83d\udd6ess", + "output": null + }, + { + "comment": "V6; V7", + "input": "Ss\ud880\udc3b\ud8da\udf17\uff61\ud836\ude68\ud83d\udd6eSs", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u3002\u200c", + "output": null + }, + { + "comment": "C1; C2", + "input": "xn--1ug.xn--0ug", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\udb41\udc58\uff0e\udb40\udd2e", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\udb41\udc58.\udb40\udd2e", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--s136e.", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua9b7\udb37\udd59\uba79\u3002\u249b\udb42\ude07", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua9b7\udb37\udd59\u1106\u1167\u11b0\u3002\u249b\udb42\ude07", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua9b7\udb37\udd59\uba79\u300220.\udb42\ude07", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua9b7\udb37\udd59\u1106\u1167\u11b0\u300220.\udb42\ude07", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ym9av13acp85w.20.xn--d846e", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ym9av13acp85w.xn--dth22121k", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\uff61\ufe12", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\u200c\u3002\u3002", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "..", + "output": ".." + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "xn--0ug..", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--y86c", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug.xn--y86c", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-\ud835\udff9.\u00df-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-3.\u00df-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-3.SS-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-3.ss-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-3.Ss-\u200c-", + "output": null + }, + { + "comment": "V2 (ignored); V3 (ignored)", + "input": "xn---3-p9o.ss--", + "output": "xn---3-p9o.ss--" + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn---3-p9o.xn--ss---276a", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn---3-p9o.xn-----fia9303a", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-\ud835\udff9.SS-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-\ud835\udff9.ss-\u200c-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u1872-\ud835\udff9.Ss-\u200c-", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb27\udd9c\u1898\u3002\u1a7f\u2ea2", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ibf35138o.xn--fpfz94g", + "output": null + }, + { + "comment": "V7", + "input": "\uda1c\udda7\ud835\udfef\u3002\u2488\u1a76\ud835\udfda\uda41\ude0c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\uda1c\udda73\u30021.\u1a762\uda41\ude0c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--3-rj42h.1.xn--2-13k96240l", + "output": null + }, + { + "comment": "V7", + "input": "xn--3-rj42h.xn--2-13k746cq465x", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u2085\u2488\u3002\u226f\ud835\udff4\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u2085\u2488\u3002>\u0338\ud835\udff4\u200d", + "output": null + }, + { + "comment": "C2; A4_2 (ignored)", + "input": "\u200d51.\u3002\u226f8\u200d", + "output": null + }, + { + "comment": "C2; A4_2 (ignored)", + "input": "\u200d51.\u3002>\u03388\u200d", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "51..xn--8-ogo", + "output": "51..xn--8-ogo" + }, + { + "comment": "C2; A4_2 (ignored)", + "input": "xn--51-l1t..xn--8-ugn00i", + "output": null + }, + { + "comment": "V7", + "input": "xn--5-ecp.xn--8-ogo", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--5-tgnz5r.xn--8-ugn00i", + "output": null + }, + { + "comment": "V7", + "input": "\ud8bb\uddc2\u0a42\u10aa\ud8c8\udc9f.\u226e", + "output": null + }, + { + "comment": "V7", + "input": "\ud8bb\uddc2\u0a42\u10aa\ud8c8\udc9f.<\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\ud8bb\uddc2\u0a42\u2d0a\ud8c8\udc9f.<\u0338", + "output": null + }, + { + "comment": "V7", + "input": "\ud8bb\uddc2\u0a42\u2d0a\ud8c8\udc9f.\u226e", + "output": null + }, + { + "comment": "V7", + "input": "xn--nbc229o4y27dgskb.xn--gdh", + "output": null + }, + { + "comment": "V7", + "input": "xn--nbc493aro75ggskb.xn--gdh", + "output": null + }, + { + "input": "\ua860\uff0e\u06f2", + "output": "xn--5c9a.xn--fmb" + }, + { + "input": "\ua860.\u06f2", + "output": "xn--5c9a.xn--fmb" + }, + { + "input": "xn--5c9a.xn--fmb", + "output": "xn--5c9a.xn--fmb" + }, + { + "comment": "C1; V6; U1 (ignored)", + "input": "\ua67d\u200c\ud87e\uddf5\ud83c\udd06\uff61\u200c\ud804\udc42\u1b01", + "output": null + }, + { + "comment": "C1; V6; U1 (ignored)", + "input": "\ua67d\u200c\u9723\ud83c\udd06\uff61\u200c\ud804\udc42\u1b01", + "output": null + }, + { + "comment": "C1; V6; U1 (ignored)", + "input": "\ua67d\u200c\u97235,\u3002\u200c\ud804\udc42\u1b01", + "output": null + }, + { + "comment": "V6; U1 (ignored)", + "input": "xn--5,-op8g373c.xn--4sf0725i", + "output": null + }, + { + "comment": "C1; V6; U1 (ignored)", + "input": "xn--5,-i1tz135dnbqa.xn--4sf36u6u4w", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--2q5a751a653w.xn--4sf0725i", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--0ug4208b2vjuk63a.xn--4sf36u6u4w", + "output": null + }, + { + "comment": "V7", + "input": "\u514e\uff61\u183c\udb43\udd1c\ud805\udeb6\ud807\udc3f", + "output": null + }, + { + "comment": "V7", + "input": "\u514e\u3002\u183c\udb43\udd1c\ud805\udeb6\ud807\udc3f", + "output": null + }, + { + "comment": "V7", + "input": "xn--b5q.xn--v7e6041kqqd4m251b", + "output": null + }, + { + "comment": "C2", + "input": "\ud835\udfd9\uff61\u200d\ud835\udff8\u200d\u2077", + "output": null + }, + { + "comment": "C2", + "input": "1\u3002\u200d2\u200d7", + "output": null + }, + { + "input": "1.2h", + "output": "1.2h" + }, + { + "comment": "C2", + "input": "1.xn--27-l1tb", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u1868-\uff61\udb43\udecb\ud835\udff7", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u1868-\u3002\udb43\udecb1", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----z8j.xn--1-5671m", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u10bc\ud9e3\udded\u0f80\u2f87\u3002\u10af\u2640\u200c\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u10bc\ud9e3\udded\u0f80\u821b\u3002\u10af\u2640\u200c\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2d1c\ud9e3\udded\u0f80\u821b\u3002\u2d0f\u2640\u200c\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--zed372mdj2do3v4h.xn--e5h11w", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--zed372mdj2do3v4h.xn--0uga678bgyh", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2d1c\ud9e3\udded\u0f80\u2f87\u3002\u2d0f\u2640\u200c\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--zed54dz10wo343g.xn--nnd651i", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--zed54dz10wo343g.xn--nnd089ea464d", + "output": null + }, + { + "comment": "C2; V6", + "input": "\ud804\udc46\ud835\udff0.\u200d", + "output": null + }, + { + "comment": "C2; V6", + "input": "\ud804\udc464.\u200d", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--4-xu7i.", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--4-xu7i.xn--1ug", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u10be\u7640\uff61\ud805\ude3f\u200d\u200c\ubdbc", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u10be\u7640\uff61\ud805\ude3f\u200d\u200c\u1107\u1170\u11ab", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u10be\u7640\u3002\ud805\ude3f\u200d\u200c\ubdbc", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u10be\u7640\u3002\ud805\ude3f\u200d\u200c\u1107\u1170\u11ab", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u2d1e\u7640\u3002\ud805\ude3f\u200d\u200c\u1107\u1170\u11ab", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u2d1e\u7640\u3002\ud805\ude3f\u200d\u200c\ubdbc", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--mlju35u7qx2f.xn--et3bn23n", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--mlju35u7qx2f.xn--0ugb6122js83c", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u2d1e\u7640\uff61\ud805\ude3f\u200d\u200c\u1107\u1170\u11ab", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud97b\udd18\u2d1e\u7640\uff61\ud805\ude3f\u200d\u200c\ubdbc", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--2nd6803c7q37d.xn--et3bn23n", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--2nd6803c7q37d.xn--0ugb6122js83c", + "output": null + }, + { + "comment": "V7", + "input": "\u1843\ud835\udfe7\u226f\u1823\uff0e\u6c01\ud960\udff1\ua06b", + "output": null + }, + { + "comment": "V7", + "input": "\u1843\ud835\udfe7>\u0338\u1823\uff0e\u6c01\ud960\udff1\ua06b", + "output": null + }, + { + "comment": "V7", + "input": "\u18435\u226f\u1823.\u6c01\ud960\udff1\ua06b", + "output": null + }, + { + "comment": "V7", + "input": "\u18435>\u0338\u1823.\u6c01\ud960\udff1\ua06b", + "output": null + }, + { + "comment": "V7", + "input": "xn--5-24jyf768b.xn--lqw213ime95g", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-\ud804\ude36\u248f\uff0e\u248e\ud881\udee2\udb40\udfad", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "-\ud804\ude368..7.\ud881\udee2\udb40\udfad", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "xn---8-bv5o..7.xn--c35nf1622b", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----scp6252h.xn--zshy411yzpx2d", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u10a1\u755d\u200d\uff0e\u226e", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u10a1\u755d\u200d\uff0e<\u0338", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u10a1\u755d\u200d.\u226e", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u10a1\u755d\u200d.<\u0338", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u2d01\u755d\u200d.<\u0338", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u2d01\u755d\u200d.\u226e", + "output": null + }, + { + "input": "xn--skjy82u.xn--gdh", + "output": "xn--skjy82u.xn--gdh" + }, + { + "input": "\u2d01\u755d.\u226e", + "output": "xn--skjy82u.xn--gdh" + }, + { + "input": "\u2d01\u755d.<\u0338", + "output": "xn--skjy82u.xn--gdh" + }, + { + "input": "\u10a1\u755d.<\u0338", + "output": "xn--skjy82u.xn--gdh" + }, + { + "input": "\u10a1\u755d.\u226e", + "output": "xn--skjy82u.xn--gdh" + }, + { + "comment": "C1; C2", + "input": "xn--0ugc160hb36e.xn--gdh", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u2d01\u755d\u200d\uff0e<\u0338", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200c\u2d01\u755d\u200d\uff0e\u226e", + "output": null + }, + { + "comment": "V7", + "input": "xn--8md0962c.xn--gdh", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--8md700fea3748f.xn--gdh", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u0ecb\u200d\uff0e\u9381\udb43\udc11", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u0ecb\u200d.\u9381\udb43\udc11", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--t8c.xn--iz4a43209d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--t8c059f.xn--iz4a43209d", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\ud9e5\udef4.-\u1862\u0592\ud836\ude20", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--ep37b.xn----hec165lho83b", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b\uff0e\u1baa\u03c2\u10a6\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b.\u1baa\u03c2\u10a6\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b.\u1baa\u03c2\u2d06\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b.\u1baa\u03a3\u10a6\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b.\u1baa\u03c3\u2d06\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b.\u1baa\u03a3\u2d06\u200d", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--nu4s.xn--4xa153j7im", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--nu4s.xn--4xa153jk8cs1q", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--nu4s.xn--3xa353jk8cs1q", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b\uff0e\u1baa\u03c2\u2d06\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b\uff0e\u1baa\u03a3\u10a6\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b\uff0e\u1baa\u03c3\u2d06\u200d", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ud8bc\udc2b\uff0e\u1baa\u03a3\u2d06\u200d", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--nu4s.xn--4xa217dxri", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--nu4s.xn--4xa217dxriome", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--nu4s.xn--3xa417dxriome", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\u2488\u200c\uaaec\ufe12\uff0e\u0acd", + "output": null + }, + { + "comment": "C1; V6; A4_2 (ignored)", + "input": "1.\u200c\uaaec\u3002.\u0acd", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "1.xn--sv9a..xn--mfc", + "output": null + }, + { + "comment": "C1; V6; A4_2 (ignored)", + "input": "1.xn--0ug7185c..xn--mfc", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--tsh0720cse8b.xn--mfc", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--0ug78o720myr1c.xn--mfc", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u00df\u200d.\u1bf2\ud8d3\udfbc", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "SS\u200d.\u1bf2\ud8d3\udfbc", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "ss\u200d.\u1bf2\ud8d3\udfbc", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "Ss\u200d.\u1bf2\ud8d3\udfbc", + "output": null + }, + { + "comment": "V6; V7", + "input": "ss.xn--0zf22107b", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--ss-n1t.xn--0zf22107b", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--zca870n.xn--0zf22107b", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udcc2\u200c\u226e.\u226e", + "output": null + }, + { + "comment": "V6", + "input": "\ud805\udcc2\u200c<\u0338.<\u0338", + "output": null + }, + { + "comment": "V6", + "input": "xn--gdhz656g.xn--gdh", + "output": null + }, + { + "comment": "V6", + "input": "xn--0ugy6glz29a.xn--gdh", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud83d\udd7c\uff0e\uffa0", + "output": "xn--my8h." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud83d\udd7c.\u1160", + "output": "xn--my8h." + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--my8h.", + "output": "xn--my8h." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud83d\udd7c.", + "output": "xn--my8h." + }, + { + "comment": "V7", + "input": "xn--my8h.xn--psd", + "output": null + }, + { + "comment": "V7", + "input": "xn--my8h.xn--cl7c", + "output": null + }, + { + "comment": "V7", + "input": "\u7215\uda8d\ude51\uff0e\ud835\udff0\u6c17", + "output": null + }, + { + "comment": "V7", + "input": "\u7215\uda8d\ude51.4\u6c17", + "output": null + }, + { + "comment": "V7", + "input": "xn--1zxq3199c.xn--4-678b", + "output": null + }, + { + "comment": "V7; V2 (ignored); V3 (ignored)", + "input": "\udb39\udf43\u3002\uda04\udd83\ud8e6\udc97--", + "output": null + }, + { + "comment": "V7; V2 (ignored); V3 (ignored)", + "input": "xn--2y75e.xn-----1l15eer88n", + "output": null + }, + { + "comment": "V7", + "input": "\u8530\u3002\udb40\udc79\u08dd-\ud804\ude35", + "output": null + }, + { + "comment": "V7", + "input": "xn--sz1a.xn----mrd9984r3dl0i", + "output": null + }, + { + "input": "\u03c2\u10c5\u3002\u075a", + "output": "xn--3xa403s.xn--epb" + }, + { + "input": "\u03c2\u2d25\u3002\u075a", + "output": "xn--3xa403s.xn--epb" + }, + { + "input": "\u03a3\u10c5\u3002\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "\u03c3\u2d25\u3002\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "\u03a3\u2d25\u3002\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "xn--4xa203s.xn--epb", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "\u03c3\u2d25.\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "\u03a3\u10c5.\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "\u03a3\u2d25.\u075a", + "output": "xn--4xa203s.xn--epb" + }, + { + "input": "xn--3xa403s.xn--epb", + "output": "xn--3xa403s.xn--epb" + }, + { + "input": "\u03c2\u2d25.\u075a", + "output": "xn--3xa403s.xn--epb" + }, + { + "comment": "V7", + "input": "xn--4xa477d.xn--epb", + "output": null + }, + { + "comment": "V7", + "input": "xn--3xa677d.xn--epb", + "output": null + }, + { + "input": "xn--vkb.xn--08e172a", + "output": "xn--vkb.xn--08e172a" + }, + { + "input": "\u06bc.\u1e8f\u1864", + "output": "xn--vkb.xn--08e172a" + }, + { + "input": "\u06bc.y\u0307\u1864", + "output": "xn--vkb.xn--08e172a" + }, + { + "input": "\u06bc.Y\u0307\u1864", + "output": "xn--vkb.xn--08e172a" + }, + { + "input": "\u06bc.\u1e8e\u1864", + "output": "xn--vkb.xn--08e172a" + }, + { + "input": "xn--pt9c.xn--0kjya", + "output": "xn--pt9c.xn--0kjya" + }, + { + "input": "\ud802\ude57.\u2d09\u2d15", + "output": "xn--pt9c.xn--0kjya" + }, + { + "input": "\ud802\ude57.\u10a9\u10b5", + "output": "xn--pt9c.xn--0kjya" + }, + { + "input": "\ud802\ude57.\u10a9\u2d15", + "output": "xn--pt9c.xn--0kjya" + }, + { + "comment": "V7", + "input": "xn--pt9c.xn--hnd666l", + "output": null + }, + { + "comment": "V7", + "input": "xn--pt9c.xn--hndy", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\u200c\u200c\u3124\uff0e\u032e\udb16\ude11\u09c2", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\u200c\u200c\u3124.\u032e\udb16\ude11\u09c2", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--1fk.xn--vta284a9o563a", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--0uga242k.xn--vta284a9o563a", + "output": null + }, + { + "comment": "V7", + "input": "\u10b4\ud836\ude28\u2083\udb40\udc66\uff0e\ud835\udff3\ud804\udcb9\u0b82", + "output": null + }, + { + "comment": "V7", + "input": "\u10b4\ud836\ude283\udb40\udc66.7\ud804\udcb9\u0b82", + "output": null + }, + { + "comment": "V7", + "input": "\u2d14\ud836\ude283\udb40\udc66.7\ud804\udcb9\u0b82", + "output": null + }, + { + "comment": "V7", + "input": "xn--3-ews6985n35s3g.xn--7-cve6271r", + "output": null + }, + { + "comment": "V7", + "input": "\u2d14\ud836\ude28\u2083\udb40\udc66\uff0e\ud835\udff3\ud804\udcb9\u0b82", + "output": null + }, + { + "comment": "V7", + "input": "xn--3-b1g83426a35t0g.xn--7-cve6271r", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u43c8\u200c\u3002\u200c\u2488\ud986\udc95", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u43c8\u200c\u3002\u200c1.\ud986\udc95", + "output": null + }, + { + "comment": "V7", + "input": "xn--eco.1.xn--ms39a", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug491l.xn--1-rgn.xn--ms39a", + "output": null + }, + { + "comment": "V7", + "input": "xn--eco.xn--tsh21126d", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug491l.xn--0ug88oot66q", + "output": null + }, + { + "comment": "V6", + "input": "\uff11\uaaf6\u00df\ud807\udca5\uff61\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "1\uaaf6\u00df\ud807\udca5\u3002\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "1\uaaf6SS\ud807\udca5\u3002\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "1\uaaf6ss\ud807\udca5\u3002\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "xn--1ss-ir6ln166b.xn--weg", + "output": null + }, + { + "comment": "V6", + "input": "xn--1-qfa2471kdb0d.xn--weg", + "output": null + }, + { + "comment": "V6", + "input": "\uff11\uaaf6SS\ud807\udca5\uff61\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "\uff11\uaaf6ss\ud807\udca5\uff61\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "1\uaaf6Ss\ud807\udca5\u3002\u1dd8", + "output": null + }, + { + "comment": "V6", + "input": "\uff11\uaaf6Ss\ud807\udca5\uff61\u1dd8", + "output": null + }, + { + "comment": "V7", + "input": "xn--3j78f.xn--mkb20b", + "output": null + }, + { + "comment": "V7", + "input": "\ud88a\udd31\u249b\u2fb3\uff0e\ua866\u2488", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud88a\udd3120.\u97f3.\ua8661.", + "output": "xn--20-9802c.xn--0w5a.xn--1-eg4e." + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--20-9802c.xn--0w5a.xn--1-eg4e.", + "output": "xn--20-9802c.xn--0w5a.xn--1-eg4e." + }, + { + "comment": "V7", + "input": "xn--dth6033bzbvx.xn--tsh9439b", + "output": null + }, + { + "input": "\u10b5\u3002\u06f0\u226e\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u10b5\u3002\u06f0<\u0338\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u2d15\u3002\u06f0<\u0338\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u2d15\u3002\u06f0\u226e\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u10b5\u3002\u06f0\u226eSS\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5\u3002\u06f0<\u0338SS\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u2d15\u3002\u06f0<\u0338ss\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u2d15\u3002\u06f0\u226ess\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5\u3002\u06f0\u226eSs\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5\u3002\u06f0<\u0338Ss\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "xn--dlj.xn--ss-jbe65aw27i", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u2d15.\u06f0\u226ess\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u2d15.\u06f0<\u0338ss\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5.\u06f0<\u0338SS\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5.\u06f0\u226eSS\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5.\u06f0\u226eSs\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "\u10b5.\u06f0<\u0338Ss\u0745", + "output": "xn--dlj.xn--ss-jbe65aw27i" + }, + { + "input": "xn--dlj.xn--zca912alh227g", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u2d15.\u06f0\u226e\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "input": "\u2d15.\u06f0<\u0338\u00df\u0745", + "output": "xn--dlj.xn--zca912alh227g" + }, + { + "comment": "V7", + "input": "xn--tnd.xn--ss-jbe65aw27i", + "output": null + }, + { + "comment": "V7", + "input": "xn--tnd.xn--zca912alh227g", + "output": null + }, + { + "input": "xn--ge6h.xn--oc9a", + "output": "xn--ge6h.xn--oc9a" + }, + { + "input": "\ud83a\udd28.\ua84f", + "output": "xn--ge6h.xn--oc9a" + }, + { + "input": "\ud83a\udd06.\ua84f", + "output": "xn--ge6h.xn--oc9a" + }, + { + "comment": "V7", + "input": "\u2132\udb40\udd7a\ud937\udd52\u3002\u226f\u2f91", + "output": null + }, + { + "comment": "V7", + "input": "\u2132\udb40\udd7a\ud937\udd52\u3002>\u0338\u2f91", + "output": null + }, + { + "comment": "V7", + "input": "\u2132\udb40\udd7a\ud937\udd52\u3002\u226f\u897e", + "output": null + }, + { + "comment": "V7", + "input": "\u2132\udb40\udd7a\ud937\udd52\u3002>\u0338\u897e", + "output": null + }, + { + "comment": "V7", + "input": "\u214e\udb40\udd7a\ud937\udd52\u3002>\u0338\u897e", + "output": null + }, + { + "comment": "V7", + "input": "\u214e\udb40\udd7a\ud937\udd52\u3002\u226f\u897e", + "output": null + }, + { + "comment": "V7", + "input": "xn--73g39298c.xn--hdhz171b", + "output": null + }, + { + "comment": "V7", + "input": "\u214e\udb40\udd7a\ud937\udd52\u3002>\u0338\u2f91", + "output": null + }, + { + "comment": "V7", + "input": "\u214e\udb40\udd7a\ud937\udd52\u3002\u226f\u2f91", + "output": null + }, + { + "comment": "V7", + "input": "xn--f3g73398c.xn--hdhz171b", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c.\u00df\u10a9-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c.\u00df\u2d09-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c.SS\u10a9-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c.ss\u2d09-", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "\u200c.Ss\u2d09-", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": ".xn--ss--bi1b", + "output": ".xn--ss--bi1b" + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn--0ug.xn--ss--bi1b", + "output": null + }, + { + "comment": "C1; V3 (ignored)", + "input": "xn--0ug.xn----pfa2305a", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": ".xn--ss--4rn", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn--0ug.xn--ss--4rn", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn--0ug.xn----pfa042j", + "output": null + }, + { + "input": "\u9f59--\ud835\udff0.\u00df", + "output": "xn----4-p16k.xn--zca" + }, + { + "input": "\u9f59--4.\u00df", + "output": "xn----4-p16k.xn--zca" + }, + { + "input": "\u9f59--4.SS", + "output": "xn----4-p16k.ss" + }, + { + "input": "\u9f59--4.ss", + "output": "xn----4-p16k.ss" + }, + { + "input": "\u9f59--4.Ss", + "output": "xn----4-p16k.ss" + }, + { + "input": "xn----4-p16k.ss", + "output": "xn----4-p16k.ss" + }, + { + "input": "xn----4-p16k.xn--zca", + "output": "xn----4-p16k.xn--zca" + }, + { + "input": "\u9f59--\ud835\udff0.SS", + "output": "xn----4-p16k.ss" + }, + { + "input": "\u9f59--\ud835\udff0.ss", + "output": "xn----4-p16k.ss" + }, + { + "input": "\u9f59--\ud835\udff0.Ss", + "output": "xn----4-p16k.ss" + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udb42\udea2-\u3002\uda2c\udc8f\u226e\ud805\udf2b", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\udb42\udea2-\u3002\uda2c\udc8f<\u0338\ud805\udf2b", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----bh61m.xn--gdhz157g0em1d", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\udb40\ude79\u200d\u3002\ud9f3\udfe7\u226e\u10a9", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\udb40\ude79\u200d\u3002\ud9f3\udfe7<\u0338\u10a9", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\udb40\ude79\u200d\u3002\ud9f3\udfe7<\u0338\u2d09", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200c\udb40\ude79\u200d\u3002\ud9f3\udfe7\u226e\u2d09", + "output": null + }, + { + "comment": "V7", + "input": "xn--3n36e.xn--gdh992byu01p", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--0ugc90904y.xn--gdh992byu01p", + "output": null + }, + { + "comment": "V7", + "input": "xn--3n36e.xn--hnd112gpz83n", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--0ugc90904y.xn--hnd112gpz83n", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u10b0\uff61\ucaa1", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u10b0\uff61\u110d\u1168\u11a8", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u10b0\u3002\ucaa1", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u10b0\u3002\u110d\u1168\u11a8", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u2d10\u3002\u110d\u1168\u11a8", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u2d10\u3002\ucaa1", + "output": null + }, + { + "comment": "V6", + "input": "xn--7kj1858k.xn--pi6b", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u2d10\uff61\u110d\u1168\u11a8", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude9e\u2d10\uff61\ucaa1", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ond3755u.xn--pi6b", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u1845\uff10\u200c\uff61\u23a2\udb52\ude04", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u18450\u200c\u3002\u23a2\udb52\ude04", + "output": null + }, + { + "comment": "V7", + "input": "xn--0-z6j.xn--8lh28773l", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0-z6jy93b.xn--8lh28773l", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a\uff19\ua369\u17d3\uff0e\u200d\u00df", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a9\ua369\u17d3.\u200d\u00df", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a9\ua369\u17d3.\u200dSS", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a9\ua369\u17d3.\u200dss", + "output": null + }, + { + "input": "xn--9-i0j5967eg3qz.ss", + "output": "xn--9-i0j5967eg3qz.ss" + }, + { + "input": "\ud88a\udf9a9\ua369\u17d3.ss", + "output": "xn--9-i0j5967eg3qz.ss" + }, + { + "input": "\ud88a\udf9a9\ua369\u17d3.SS", + "output": "xn--9-i0j5967eg3qz.ss" + }, + { + "comment": "C2", + "input": "xn--9-i0j5967eg3qz.xn--ss-l1t", + "output": null + }, + { + "comment": "C2", + "input": "xn--9-i0j5967eg3qz.xn--zca770n", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a\uff19\ua369\u17d3\uff0e\u200dSS", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a\uff19\ua369\u17d3\uff0e\u200dss", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a9\ua369\u17d3.\u200dSs", + "output": null + }, + { + "comment": "C2", + "input": "\ud88a\udf9a\uff19\ua369\u17d3\uff0e\u200dSs", + "output": null + }, + { + "input": "\ua5f7\ud804\udd80.\u075d\ud802\ude52", + "output": "xn--ju8a625r.xn--hpb0073k" + }, + { + "input": "xn--ju8a625r.xn--hpb0073k", + "output": "xn--ju8a625r.xn--hpb0073k" + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u2490\u226f-\u3002\ufe12\uda65\udc63-\ud939\udee0", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u2490>\u0338-\u3002\ufe12\uda65\udc63-\ud939\udee0", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "9.\u226f-\u3002\u3002\uda65\udc63-\ud939\udee0", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "9.>\u0338-\u3002\u3002\uda65\udc63-\ud939\udee0", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "9.xn----ogo..xn----xj54d1s69k", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----ogot9g.xn----n89hl0522az9u2a", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u10af\udb40\udd4b-\uff0e\u200d\u10a9", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u10af\udb40\udd4b-.\u200d\u10a9", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u2d0f\udb40\udd4b-.\u200d\u2d09", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "xn----3vs.xn--0kj", + "output": "xn----3vs.xn--0kj" + }, + { + "comment": "C2; V3 (ignored)", + "input": "xn----3vs.xn--1ug532c", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "\u2d0f\udb40\udd4b-\uff0e\u200d\u2d09", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----00g.xn--hnd", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----00g.xn--hnd399e", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u1714\u3002\udb40\udda3-\ud804\udeea", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--fze.xn----ly8i", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-\uff0e\uda60\udfdc\u05bd\u00df", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-.\uda60\udfdc\u05bd\u00df", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-.\uda60\udfdc\u05bdSS", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-.\uda60\udfdc\u05bdss", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-.\uda60\udfdc\u05bdSs", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----pw5e.xn--ss-7jd10716y", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----pw5e.xn--zca50wfv060a", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-\uff0e\uda60\udfdc\u05bdSS", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-\uff0e\uda60\udfdc\u05bdss", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\uabe8-\uff0e\uda60\udfdc\u05bdSs", + "output": null + }, + { + "comment": "V6", + "input": "\ud835\udfe5\u266e\ud805\udf2b\u08ed\uff0e\u17d2\ud805\udf2b8\udb40\udd8f", + "output": null + }, + { + "comment": "V6", + "input": "3\u266e\ud805\udf2b\u08ed.\u17d2\ud805\udf2b8\udb40\udd8f", + "output": null + }, + { + "comment": "V6", + "input": "xn--3-ksd277tlo7s.xn--8-f0jx021l", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "-\uff61\uda14\udf00\u200d\u2761", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "-\u3002\uda14\udf00\u200d\u2761", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-.xn--nei54421f", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "-.xn--1ug800aq795s", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ud835\udfd3\u2631\ud835\udfd0\uda57\udc35\uff61\ud836\udeae\ud902\udc73", + "output": null + }, + { + "comment": "V6; V7", + "input": "5\u26312\uda57\udc35\u3002\ud836\udeae\ud902\udc73", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--52-dwx47758j.xn--kd3hk431k", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-.-\u251c\uda1a\udda3", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-.xn----ukp70432h", + "output": null + }, + { + "comment": "V7", + "input": "\u03c2\uff0e\ufdc1\ud83d\udf9b\u2488", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\u03c2.\u0641\u0645\u064a\ud83d\udf9b1.", + "output": "xn--3xa.xn--1-gocmu97674d." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u03a3.\u0641\u0645\u064a\ud83d\udf9b1.", + "output": "xn--4xa.xn--1-gocmu97674d." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u03c3.\u0641\u0645\u064a\ud83d\udf9b1.", + "output": "xn--4xa.xn--1-gocmu97674d." + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--4xa.xn--1-gocmu97674d.", + "output": "xn--4xa.xn--1-gocmu97674d." + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--3xa.xn--1-gocmu97674d.", + "output": "xn--3xa.xn--1-gocmu97674d." + }, + { + "comment": "V7", + "input": "\u03a3\uff0e\ufdc1\ud83d\udf9b\u2488", + "output": null + }, + { + "comment": "V7", + "input": "\u03c3\uff0e\ufdc1\ud83d\udf9b\u2488", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa.xn--dhbip2802atb20c", + "output": null + }, + { + "comment": "V7", + "input": "xn--3xa.xn--dhbip2802atb20c", + "output": null + }, + { + "comment": "V7", + "input": "9\udb40\udde5\uff0e\udb6b\udd34\u1893", + "output": null + }, + { + "comment": "V7", + "input": "9\udb40\udde5.\udb6b\udd34\u1893", + "output": null + }, + { + "comment": "V7", + "input": "9.xn--dbf91222q", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufe12\u10b6\u0366\uff0e\u200c", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\u3002\u10b6\u0366.\u200c", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\u3002\u2d16\u0366.\u200c", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--hva754s.", + "output": ".xn--hva754s." + }, + { + "comment": "C1; A4_2 (ignored)", + "input": ".xn--hva754s.xn--0ug", + "output": null + }, + { + "comment": "C1; V7", + "input": "\ufe12\u2d16\u0366\uff0e\u200c", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--hva754sy94k.", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--hva754sy94k.xn--0ug", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--hva929d.", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": ".xn--hva929d.xn--0ug", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--hva929dl29p.", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--hva929dl29p.xn--0ug", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--hva754s.", + "output": "xn--hva754s." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u2d16\u0366.", + "output": "xn--hva754s." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u10b6\u0366.", + "output": "xn--hva754s." + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--hva929d.", + "output": null + }, + { + "input": "xn--hzb.xn--ukj4430l", + "output": "xn--hzb.xn--ukj4430l" + }, + { + "input": "\u08bb.\u2d03\ud838\udc12", + "output": "xn--hzb.xn--ukj4430l" + }, + { + "input": "\u08bb.\u10a3\ud838\udc12", + "output": "xn--hzb.xn--ukj4430l" + }, + { + "comment": "V7", + "input": "xn--hzb.xn--bnd2938u", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200d\u200c\u3002\uff12\u4af7\udb42\uddf7", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "\u200d\u200c\u30022\u4af7\udb42\uddf7", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--2-me5ay1273i", + "output": null + }, + { + "comment": "C1; C2; V7", + "input": "xn--0ugb.xn--2-me5ay1273i", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-\ud838\udc24\udb32\udc10\u3002\ud9e2\udf16", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----rq4re4997d.xn--l707b", + "output": null + }, + { + "comment": "C1; V7", + "input": "\udb8d\udec2\ufe12\u200c\u37c0\uff0e\u0624\u2488", + "output": null + }, + { + "comment": "C1; V7", + "input": "\udb8d\udec2\ufe12\u200c\u37c0\uff0e\u0648\u0654\u2488", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--z272f.xn--etl.xn--1-smc.", + "output": null + }, + { + "comment": "V7", + "input": "xn--etlt457ccrq7h.xn--jgb476m", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug754gxl4ldlt0k.xn--jgb476m", + "output": null + }, + { + "comment": "V7", + "input": "\u07fc\ud803\ude06.\ud80d\udd8f\ufe12\ud8ea\ude29\u10b0", + "output": null + }, + { + "comment": "V7", + "input": "\u07fc\ud803\ude06.\ud80d\udd8f\u3002\ud8ea\ude29\u10b0", + "output": null + }, + { + "comment": "V7", + "input": "\u07fc\ud803\ude06.\ud80d\udd8f\u3002\ud8ea\ude29\u2d10", + "output": null + }, + { + "comment": "V7", + "input": "xn--0tb8725k.xn--tu8d.xn--7kj73887a", + "output": null + }, + { + "comment": "V7", + "input": "\u07fc\ud803\ude06.\ud80d\udd8f\ufe12\ud8ea\ude29\u2d10", + "output": null + }, + { + "comment": "V7", + "input": "xn--0tb8725k.xn--7kj9008dt18a7py9c", + "output": null + }, + { + "comment": "V7", + "input": "xn--0tb8725k.xn--tu8d.xn--ond97931d", + "output": null + }, + { + "comment": "V7", + "input": "xn--0tb8725k.xn--ond3562jt18a7py9c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u10c5\u26ad\udb41\uddab\u22c3\uff61\ud804\udf3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u10c5\u26ad\udb41\uddab\u22c3\u3002\ud804\udf3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2d25\u26ad\udb41\uddab\u22c3\u3002\ud804\udf3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--vfh16m67gx1162b.xn--ro1d", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2d25\u26ad\udb41\uddab\u22c3\uff61\ud804\udf3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--9nd623g4zc5z060c.xn--ro1d", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "\udb40\udd93\u26cf-\u3002\ua852", + "output": "xn----o9p.xn--rc9a" + }, + { + "comment": "V3 (ignored)", + "input": "xn----o9p.xn--rc9a", + "output": "xn----o9p.xn--rc9a" + }, + { + "comment": "V7; V3 (ignored)", + "input": "\ud8c8\ude26\u5e37\uff61\u226f\u843a\u1dc8-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\ud8c8\ude26\u5e37\uff61>\u0338\u843a\u1dc8-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\ud8c8\ude26\u5e37\u3002\u226f\u843a\u1dc8-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "\ud8c8\ude26\u5e37\u3002>\u0338\u843a\u1dc8-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--qutw175s.xn----mimu6tf67j", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u650c\uabed\u3002\u1896-\u10b8", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u650c\uabed\u3002\u1896-\u2d18", + "output": null + }, + { + "input": "xn--p9ut19m.xn----mck373i", + "output": "xn--p9ut19m.xn----mck373i" + }, + { + "input": "\u650c\uabed.\u1896-\u2d18", + "output": "xn--p9ut19m.xn----mck373i" + }, + { + "input": "\u650c\uabed.\u1896-\u10b8", + "output": "xn--p9ut19m.xn----mck373i" + }, + { + "comment": "C2", + "input": "xn--1ug592ykp6b.xn----mck373i", + "output": null + }, + { + "comment": "V7", + "input": "xn--p9ut19m.xn----k1g451d", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug592ykp6b.xn----k1g451d", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\ua5a8\uff0e\u2497\uff13\ud212\u06f3", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\ua5a8\uff0e\u2497\uff13\u1110\u116d\u11a9\u06f3", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\ua5a8.16.3\ud212\u06f3", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\ua5a8.16.3\u1110\u116d\u11a9\u06f3", + "output": null + }, + { + "input": "xn--9r8a.16.xn--3-nyc0117m", + "output": "xn--9r8a.16.xn--3-nyc0117m" + }, + { + "input": "\ua5a8.16.3\ud212\u06f3", + "output": "xn--9r8a.16.xn--3-nyc0117m" + }, + { + "input": "\ua5a8.16.3\u1110\u116d\u11a9\u06f3", + "output": "xn--9r8a.16.xn--3-nyc0117m" + }, + { + "comment": "C1", + "input": "xn--0ug2473c.16.xn--3-nyc0117m", + "output": null + }, + { + "comment": "V7", + "input": "xn--9r8a.xn--3-nyc678tu07m", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug2473c.xn--3-nyc678tu07m", + "output": null + }, + { + "comment": "C2", + "input": "\ud835\udfcf\ud836\ude19\u2e16.\u200d", + "output": null + }, + { + "comment": "C2", + "input": "1\ud836\ude19\u2e16.\u200d", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--1-5bt6845n.", + "output": "xn--1-5bt6845n." + }, + { + "comment": "A4_2 (ignored)", + "input": "1\ud836\ude19\u2e16.", + "output": "xn--1-5bt6845n." + }, + { + "comment": "C2", + "input": "xn--1-5bt6845n.xn--1ug", + "output": null + }, + { + "comment": "V7", + "input": "F\udb40\udd5f\uff61\ud9fd\uddc5\u265a", + "output": null + }, + { + "comment": "V7", + "input": "F\udb40\udd5f\u3002\ud9fd\uddc5\u265a", + "output": null + }, + { + "comment": "V7", + "input": "f\udb40\udd5f\u3002\ud9fd\uddc5\u265a", + "output": null + }, + { + "comment": "V7", + "input": "f.xn--45hz6953f", + "output": null + }, + { + "comment": "V7", + "input": "f\udb40\udd5f\uff61\ud9fd\uddc5\u265a", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0b4d\ud804\udd34\u1de9\u3002\ud835\udfee\u10b8\ud838\udc28\ud8ce\udd47", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0b4d\ud804\udd34\u1de9\u30022\u10b8\ud838\udc28\ud8ce\udd47", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0b4d\ud804\udd34\u1de9\u30022\u2d18\ud838\udc28\ud8ce\udd47", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--9ic246gs21p.xn--2-nws2918ndrjr", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u0b4d\ud804\udd34\u1de9\u3002\ud835\udfee\u2d18\ud838\udc28\ud8ce\udd47", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--9ic246gs21p.xn--2-k1g43076adrwq", + "output": null + }, + { + "comment": "C1; V7", + "input": "\uda0e\udc2d\u200c\u200c\u2488\u3002\u52c9\ud804\udc45", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "\uda0e\udc2d\u200c\u200c1.\u3002\u52c9\ud804\udc45", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--1-yi00h..xn--4grs325b", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "xn--1-rgna61159u..xn--4grs325b", + "output": null + }, + { + "comment": "V7", + "input": "xn--tsh11906f.xn--4grs325b", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0uga855aez302a.xn--4grs325b", + "output": null + }, + { + "comment": "V7", + "input": "\u1843.\u73bf\ud96c\ude1c\udb15\udf90", + "output": null + }, + { + "comment": "V7", + "input": "xn--27e.xn--7cy81125a0yq4a", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\u200c\uff61\u2488\u226f\ud835\udff5", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\u200c\uff61\u2488>\u0338\ud835\udff5", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u200c\u30021.\u226f9", + "output": null + }, + { + "comment": "C1", + "input": "\u200c\u200c\u30021.>\u03389", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".1.xn--9-ogo", + "output": ".1.xn--9-ogo" + }, + { + "comment": "C1", + "input": "xn--0uga.1.xn--9-ogo", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--9-ogo37g", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0uga.xn--9-ogo37g", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u20da\uff0e\ud805\ude3f-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u20da.\ud805\ude3f-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--w0g.xn----bd0j", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u1082-\u200d\ua8ea\uff0e\ua84a\u200d\ud9b3\ude33", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\u1082-\u200d\ua8ea.\ua84a\u200d\ud9b3\ude33", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----gyg3618i.xn--jc9ao4185a", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn----gyg250jio7k.xn--1ug8774cri56d", + "output": null + }, + { + "comment": "V6", + "input": "\ud804\ude35\u5eca.\ud802\udc0d", + "output": null + }, + { + "comment": "V6", + "input": "xn--xytw701b.xn--yc9c", + "output": null + }, + { + "comment": "V7", + "input": "\u10be\ud899\udec0\ud82d\uddfb\uff0e\u1897\ub9ab", + "output": null + }, + { + "comment": "V7", + "input": "\u10be\ud899\udec0\ud82d\uddfb\uff0e\u1897\u1105\u1174\u11c2", + "output": null + }, + { + "comment": "V7", + "input": "\u10be\ud899\udec0\ud82d\uddfb.\u1897\ub9ab", + "output": null + }, + { + "comment": "V7", + "input": "\u10be\ud899\udec0\ud82d\uddfb.\u1897\u1105\u1174\u11c2", + "output": null + }, + { + "comment": "V7", + "input": "\u2d1e\ud899\udec0\ud82d\uddfb.\u1897\u1105\u1174\u11c2", + "output": null + }, + { + "comment": "V7", + "input": "\u2d1e\ud899\udec0\ud82d\uddfb.\u1897\ub9ab", + "output": null + }, + { + "comment": "V7", + "input": "xn--mlj0486jgl2j.xn--hbf6853f", + "output": null + }, + { + "comment": "V7", + "input": "\u2d1e\ud899\udec0\ud82d\uddfb\uff0e\u1897\u1105\u1174\u11c2", + "output": null + }, + { + "comment": "V7", + "input": "\u2d1e\ud899\udec0\ud82d\uddfb\uff0e\u1897\ub9ab", + "output": null + }, + { + "comment": "V7", + "input": "xn--2nd8876sgl2j.xn--hbf6853f", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u00df\u200d\u103a\uff61\u2488", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--ss-f4j.b.", + "output": "xn--ss-f4j.b." + }, + { + "comment": "A4_2 (ignored)", + "input": "ss\u103a.b.", + "output": "xn--ss-f4j.b." + }, + { + "comment": "A4_2 (ignored)", + "input": "SS\u103a.B.", + "output": "xn--ss-f4j.b." + }, + { + "comment": "A4_2 (ignored)", + "input": "Ss\u103a.b.", + "output": "xn--ss-f4j.b." + }, + { + "comment": "C2; A4_2 (ignored)", + "input": "xn--ss-f4j585j.b.", + "output": null + }, + { + "comment": "C2; A4_2 (ignored)", + "input": "xn--zca679eh2l.b.", + "output": null + }, + { + "comment": "C2; V7", + "input": "SS\u200d\u103a\uff61\u2488", + "output": null + }, + { + "comment": "C2; V7", + "input": "ss\u200d\u103a\uff61\u2488", + "output": null + }, + { + "comment": "C2; V7", + "input": "Ss\u200d\u103a\uff61\u2488", + "output": null + }, + { + "comment": "V7", + "input": "xn--ss-f4j.xn--tsh", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--ss-f4j585j.xn--tsh", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--zca679eh2l.xn--tsh", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "SS\u103a.b.", + "output": "xn--ss-f4j.b." + }, + { + "input": "\u06cc\ud802\ude3f\uff0e\u00df\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--zca216edt0r" + }, + { + "input": "\u06cc\ud802\ude3f.\u00df\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--zca216edt0r" + }, + { + "input": "\u06cc\ud802\ude3f.SS\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "\u06cc\ud802\ude3f.ss\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "xn--clb2593k.xn--ss-toj6092t", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "xn--clb2593k.xn--zca216edt0r", + "output": "xn--clb2593k.xn--zca216edt0r" + }, + { + "input": "\u06cc\ud802\ude3f\uff0eSS\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "\u06cc\ud802\ude3f\uff0ess\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "\u06cc\ud802\ude3f.Ss\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "input": "\u06cc\ud802\ude3f\uff0eSs\u0f84\ud804\udf6c", + "output": "xn--clb2593k.xn--ss-toj6092t" + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\ud835\udfe0\u226e\u200c\uff61\udb40\udd71\u17b4", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\ud835\udfe0<\u0338\u200c\uff61\udb40\udd71\u17b4", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "8\u226e\u200c\u3002\udb40\udd71\u17b4", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "8<\u0338\u200c\u3002\udb40\udd71\u17b4", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--8-ngo.", + "output": "xn--8-ngo." + }, + { + "comment": "A4_2 (ignored)", + "input": "8\u226e.", + "output": "xn--8-ngo." + }, + { + "comment": "A4_2 (ignored)", + "input": "8<\u0338.", + "output": "xn--8-ngo." + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "xn--8-sgn10i.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--8-ngo.xn--z3e", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--8-sgn10i.xn--z3e", + "output": null + }, + { + "comment": "V7", + "input": "\u1895\u226f\ufe12\ud8d0\udcaf\uff0e\u10a0", + "output": null + }, + { + "comment": "V7", + "input": "\u1895>\u0338\ufe12\ud8d0\udcaf\uff0e\u10a0", + "output": null + }, + { + "comment": "V7", + "input": "\u1895\u226f\u3002\ud8d0\udcaf.\u10a0", + "output": null + }, + { + "comment": "V7", + "input": "\u1895>\u0338\u3002\ud8d0\udcaf.\u10a0", + "output": null + }, + { + "comment": "V7", + "input": "\u1895>\u0338\u3002\ud8d0\udcaf.\u2d00", + "output": null + }, + { + "comment": "V7", + "input": "\u1895\u226f\u3002\ud8d0\udcaf.\u2d00", + "output": null + }, + { + "comment": "V7", + "input": "xn--fbf851c.xn--ko1u.xn--rkj", + "output": null + }, + { + "comment": "V7", + "input": "\u1895>\u0338\ufe12\ud8d0\udcaf\uff0e\u2d00", + "output": null + }, + { + "comment": "V7", + "input": "\u1895\u226f\ufe12\ud8d0\udcaf\uff0e\u2d00", + "output": null + }, + { + "comment": "V7", + "input": "xn--fbf851cq98poxw1a.xn--rkj", + "output": null + }, + { + "comment": "V7", + "input": "xn--fbf851c.xn--ko1u.xn--7md", + "output": null + }, + { + "comment": "V7", + "input": "xn--fbf851cq98poxw1a.xn--7md", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0f9f\uff0e-\u082a", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0f9f.-\u082a", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--vfd.xn----fhd", + "output": null + }, + { + "comment": "V7", + "input": "\u1d6c\udb40\udda0\uff0e\ud552\u2492\u2488\udbe0\udd26", + "output": null + }, + { + "comment": "V7", + "input": "\u1d6c\udb40\udda0\uff0e\u1111\u1175\u11bd\u2492\u2488\udbe0\udd26", + "output": null + }, + { + "comment": "V7", + "input": "\u1d6c\udb40\udda0.\ud55211.1.\udbe0\udd26", + "output": null + }, + { + "comment": "V7", + "input": "\u1d6c\udb40\udda0.\u1111\u1175\u11bd11.1.\udbe0\udd26", + "output": null + }, + { + "comment": "V7", + "input": "xn--tbg.xn--11-5o7k.1.xn--k469f", + "output": null + }, + { + "comment": "V7", + "input": "xn--tbg.xn--tsht7586kyts9l", + "output": null + }, + { + "comment": "V7", + "input": "\u2488\u270c\uda3e\udf1f\uff0e\ud835\udfe1\ud943\udc63", + "output": null + }, + { + "comment": "V7", + "input": "1.\u270c\uda3e\udf1f.9\ud943\udc63", + "output": null + }, + { + "comment": "V7", + "input": "1.xn--7bi44996f.xn--9-o706d", + "output": null + }, + { + "comment": "V7", + "input": "xn--tsh24g49550b.xn--9-o706d", + "output": null + }, + { + "comment": "V6", + "input": "\u03c2\uff0e\ua9c0\ua8c4", + "output": null + }, + { + "comment": "V6", + "input": "\u03c2.\ua9c0\ua8c4", + "output": null + }, + { + "comment": "V6", + "input": "\u03a3.\ua9c0\ua8c4", + "output": null + }, + { + "comment": "V6", + "input": "\u03c3.\ua9c0\ua8c4", + "output": null + }, + { + "comment": "V6", + "input": "xn--4xa.xn--0f9ars", + "output": null + }, + { + "comment": "V6", + "input": "xn--3xa.xn--0f9ars", + "output": null + }, + { + "comment": "V6", + "input": "\u03a3\uff0e\ua9c0\ua8c4", + "output": null + }, + { + "comment": "V6", + "input": "\u03c3\uff0e\ua9c0\ua8c4", + "output": null + }, + { + "input": "\u7f9a\uff61\u226f", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "\u7f9a\uff61>\u0338", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "\u7f9a\u3002\u226f", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "\u7f9a\u3002>\u0338", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "xn--xt0a.xn--hdh", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "\u7f9a.\u226f", + "output": "xn--xt0a.xn--hdh" + }, + { + "input": "\u7f9a.>\u0338", + "output": "xn--xt0a.xn--hdh" + }, + { + "comment": "V7", + "input": "\u2786\ud99e\uddd5\u1ed7\u2488\uff0e\uda06\udf12\ud945\ude2e\u085b\ud835\udfeb", + "output": null + }, + { + "comment": "V7", + "input": "\u2786\ud99e\uddd5o\u0302\u0303\u2488\uff0e\uda06\udf12\ud945\ude2e\u085b\ud835\udfeb", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2786\ud99e\uddd5\u1ed71..\uda06\udf12\ud945\ude2e\u085b9", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2786\ud99e\uddd5o\u0302\u03031..\uda06\udf12\ud945\ude2e\u085b9", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2786\ud99e\uddd5O\u0302\u03031..\uda06\udf12\ud945\ude2e\u085b9", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u2786\ud99e\uddd5\u1ed61..\uda06\udf12\ud945\ude2e\u085b9", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--1-3xm292b6044r..xn--9-6jd87310jtcqs", + "output": null + }, + { + "comment": "V7", + "input": "\u2786\ud99e\uddd5O\u0302\u0303\u2488\uff0e\uda06\udf12\ud945\ude2e\u085b\ud835\udfeb", + "output": null + }, + { + "comment": "V7", + "input": "\u2786\ud99e\uddd5\u1ed6\u2488\uff0e\uda06\udf12\ud945\ude2e\u085b\ud835\udfeb", + "output": null + }, + { + "comment": "V7", + "input": "xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--ye6h", + "output": ".xn--ye6h" + }, + { + "input": "xn--ye6h", + "output": "xn--ye6h" + }, + { + "input": "\ud83a\udd3a", + "output": "xn--ye6h" + }, + { + "input": "\ud83a\udd18", + "output": "xn--ye6h" + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "\u073c\u200c-\u3002\ud80d\udc3e\u00df", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "\u073c\u200c-\u3002\ud80d\udc3eSS", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "\u073c\u200c-\u3002\ud80d\udc3ess", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "\u073c\u200c-\u3002\ud80d\udc3eSs", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----s2c.xn--ss-066q", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "xn----s2c071q.xn--ss-066q", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "xn----s2c071q.xn--zca7848m", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "-\uda9d\udf6c\u135e\ud805\udf27.\u1deb-\ufe12", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored); A4_2 (ignored)", + "input": "-\uda9d\udf6c\u135e\ud805\udf27.\u1deb-\u3002", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored); A4_2 (ignored)", + "input": "xn----b5h1837n2ok9f.xn----mkm.", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----b5h1837n2ok9f.xn----mkmw278h", + "output": null + }, + { + "comment": "V7", + "input": "\ufe12.\uda2a\udc21\u1a59", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u3002.\uda2a\udc21\u1a59", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "..xn--cof61594i", + "output": null + }, + { + "comment": "V7", + "input": "xn--y86c.xn--cof61594i", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "\ud807\udc3a.-\uda05\udfcf", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--jk3d.xn----iz68g", + "output": null + }, + { + "comment": "V7", + "input": "\udb43\udee9\uff0e\u8d4f", + "output": null + }, + { + "comment": "V7", + "input": "\udb43\udee9.\u8d4f", + "output": null + }, + { + "comment": "V7", + "input": "xn--2856e.xn--6o3a", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u10ad\uff0e\ud8f4\udde6\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u10ad.\ud8f4\udde6\u200c", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2d0d.\ud8f4\udde6\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--4kj.xn--p01x", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--4kj.xn--0ug56448b", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u2d0d\uff0e\ud8f4\udde6\u200c", + "output": null + }, + { + "comment": "V7", + "input": "xn--lnd.xn--p01x", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--lnd.xn--0ug56448b", + "output": null + }, + { + "input": "\ud835\udfdb\uff0e\uf9f8", + "output": "3.xn--6vz" + }, + { + "input": "\ud835\udfdb\uff0e\u7b20", + "output": "3.xn--6vz" + }, + { + "input": "3.\u7b20", + "output": "3.xn--6vz" + }, + { + "input": "3.xn--6vz", + "output": "3.xn--6vz" + }, + { + "comment": "C2; V3 (ignored)", + "input": "-\u200d.\u10be\ud800\udef7", + "output": null + }, + { + "comment": "C2; V3 (ignored)", + "input": "-\u200d.\u2d1e\ud800\udef7", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "-.xn--mlj8559d", + "output": "-.xn--mlj8559d" + }, + { + "comment": "C2; V3 (ignored)", + "input": "xn----ugn.xn--mlj8559d", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-.xn--2nd2315j", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn----ugn.xn--2nd2315j", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c2\u00df\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c2\u00df\u0731.\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3SS\u0731.\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c3ss\u0731.\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3ss\u0731.\u0bcd", + "output": null + }, + { + "comment": "V6", + "input": "xn--ss-ubc826a.xn--xmc", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--ss-ubc826ab34b.xn--xmc", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3\u00df\u0731.\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c3\u00df\u0731.\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--zca39lk1di19a.xn--xmc", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--zca19ln1di19a.xn--xmc", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3SS\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c3ss\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3ss\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03a3\u00df\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u200d\u03c3\u00df\u0731\uff0e\u0bcd", + "output": null + }, + { + "comment": "C2", + "input": "\u2260\uff0e\u200d", + "output": null + }, + { + "comment": "C2", + "input": "=\u0338\uff0e\u200d", + "output": null + }, + { + "comment": "C2", + "input": "\u2260.\u200d", + "output": null + }, + { + "comment": "C2", + "input": "=\u0338.\u200d", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--1ch.", + "output": "xn--1ch." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u2260.", + "output": "xn--1ch." + }, + { + "comment": "A4_2 (ignored)", + "input": "=\u0338.", + "output": "xn--1ch." + }, + { + "comment": "C2", + "input": "xn--1ch.xn--1ug", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c2\uff0e\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c2.\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3.\u03a3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c3.\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c3.\u03c3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3.\u03c3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa502av8297a.xn--4xa6055k", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3.\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa502av8297a.xn--3xa8055k", + "output": null + }, + { + "comment": "V7", + "input": "xn--3xa702av8297a.xn--3xa8055k", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3\uff0e\u03a3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c3\uff0e\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03c3\uff0e\u03c3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3\uff0e\u03c3\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\udb5c\udef5\u09cd\u03a3\uff0e\u03c2\ud802\ude3f", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udd12\uff61\ub967", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udd12\uff61\u1105\u1172\u11b6", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udd12\u3002\ub967", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udd12\u3002\u1105\u1172\u11b6", + "output": null + }, + { + "comment": "V7", + "input": "xn--s264a.xn--pw2b", + "output": null + }, + { + "comment": "V7", + "input": "\u1846\ud805\udcdd\uff0e\ud83b\udd46", + "output": null + }, + { + "comment": "V7", + "input": "\u1846\ud805\udcdd.\ud83b\udd46", + "output": null + }, + { + "comment": "V7", + "input": "xn--57e0440k.xn--k86h", + "output": null + }, + { + "comment": "V7", + "input": "\udbef\udfe6\uff61\u183d", + "output": null + }, + { + "comment": "V7", + "input": "\udbef\udfe6\u3002\u183d", + "output": null + }, + { + "comment": "V7", + "input": "xn--j890g.xn--w7e", + "output": null + }, + { + "comment": "C2", + "input": "\u5b03\ud834\udf4c\uff0e\u200d\u0b44", + "output": null + }, + { + "comment": "C2", + "input": "\u5b03\ud834\udf4c.\u200d\u0b44", + "output": null + }, + { + "comment": "V6", + "input": "xn--b6s0078f.xn--0ic", + "output": null + }, + { + "comment": "C2", + "input": "xn--b6s0078f.xn--0ic557h", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c.\ud93d\udee4", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--q823a", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug.xn--q823a", + "output": null + }, + { + "comment": "V7", + "input": "\udaa9\uded5\u10a3\u4805\uff0e\ud803\ude11", + "output": null + }, + { + "comment": "V7", + "input": "\udaa9\uded5\u10a3\u4805.\ud803\ude11", + "output": null + }, + { + "comment": "V7", + "input": "\udaa9\uded5\u2d03\u4805.\ud803\ude11", + "output": null + }, + { + "comment": "V7", + "input": "xn--ukju77frl47r.xn--yl0d", + "output": null + }, + { + "comment": "V7", + "input": "\udaa9\uded5\u2d03\u4805\uff0e\ud803\ude11", + "output": null + }, + { + "comment": "V7", + "input": "xn--bnd074zr557n.xn--yl0d", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "-\uff61\ufe12", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "-\u3002\u3002", + "output": "-.." + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "-..", + "output": "-.." + }, + { + "comment": "V7; V3 (ignored)", + "input": "-.xn--y86c", + "output": null + }, + { + "comment": "C2", + "input": "\u200d.F", + "output": null + }, + { + "comment": "C2", + "input": "\u200d.f", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".f", + "output": ".f" + }, + { + "comment": "C2", + "input": "xn--1ug.f", + "output": null + }, + { + "input": "f", + "output": "f" + }, + { + "comment": "C2", + "input": "\u200d\u3a32\uff61\u00df", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\u3002\u00df", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\u3002SS", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\u3002ss", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\u3002Ss", + "output": null + }, + { + "input": "xn--9bm.ss", + "output": "xn--9bm.ss" + }, + { + "input": "\u3a32.ss", + "output": "xn--9bm.ss" + }, + { + "input": "\u3a32.SS", + "output": "xn--9bm.ss" + }, + { + "input": "\u3a32.Ss", + "output": "xn--9bm.ss" + }, + { + "comment": "C2", + "input": "xn--1ug914h.ss", + "output": null + }, + { + "comment": "C2", + "input": "xn--1ug914h.xn--zca", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\uff61SS", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\uff61ss", + "output": null + }, + { + "comment": "C2", + "input": "\u200d\u3a32\uff61Ss", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\uff0e\udbc3\ude28", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d.\udbc3\ude28", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--h327f", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1ug.xn--h327f", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udf7b\ud8f2\udd41\uff61\u2260\ud835\udff2", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udf7b\ud8f2\udd41\uff61=\u0338\ud835\udff2", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udf7b\ud8f2\udd41\u3002\u22606", + "output": null + }, + { + "comment": "V7", + "input": "\ud94e\udf7b\ud8f2\udd41\u3002=\u03386", + "output": null + }, + { + "comment": "V7", + "input": "xn--h79w4z99a.xn--6-tfo", + "output": null + }, + { + "comment": "V7", + "input": "xn--98e.xn--om9c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\uaaf6\u188f\u0e3a\uff12.\ud800\udee2\u0745\u0f9f\ufe12", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "\uaaf6\u188f\u0e3a2.\ud800\udee2\u0745\u0f9f\u3002", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "xn--2-2zf840fk16m.xn--sob093b2m7s.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--2-2zf840fk16m.xn--sob093bj62sz9d", + "output": null + }, + { + "comment": "V7", + "input": "\udad7\udd27\uff61\u2260-\udb41\ude44\u2f9b", + "output": null + }, + { + "comment": "V7", + "input": "\udad7\udd27\uff61=\u0338-\udb41\ude44\u2f9b", + "output": null + }, + { + "comment": "V7", + "input": "\udad7\udd27\u3002\u2260-\udb41\ude44\u8d70", + "output": null + }, + { + "comment": "V7", + "input": "\udad7\udd27\u3002=\u0338-\udb41\ude44\u8d70", + "output": null + }, + { + "comment": "V7", + "input": "xn--gm57d.xn----tfo4949b3664m", + "output": null + }, + { + "input": "\ud835\udfce\u3002\u752f", + "output": "0.xn--qny" + }, + { + "input": "0\u3002\u752f", + "output": "0.xn--qny" + }, + { + "input": "0.xn--qny", + "output": "0.xn--qny" + }, + { + "input": "0.\u752f", + "output": "0.xn--qny" + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\u2f86\uff0e\uaaf6", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\u820c.\uaaf6", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn----ef8c.xn--2v9a", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "-\uff61\u1898", + "output": "-.xn--ibf" + }, + { + "comment": "V3 (ignored)", + "input": "-\u3002\u1898", + "output": "-.xn--ibf" + }, + { + "comment": "V3 (ignored)", + "input": "-.xn--ibf", + "output": "-.xn--ibf" + }, + { + "input": "\ud83c\udcb4\u10ab.\u226e", + "output": "xn--2kj7565l.xn--gdh" + }, + { + "input": "\ud83c\udcb4\u10ab.<\u0338", + "output": "xn--2kj7565l.xn--gdh" + }, + { + "input": "\ud83c\udcb4\u2d0b.<\u0338", + "output": "xn--2kj7565l.xn--gdh" + }, + { + "input": "\ud83c\udcb4\u2d0b.\u226e", + "output": "xn--2kj7565l.xn--gdh" + }, + { + "input": "xn--2kj7565l.xn--gdh", + "output": "xn--2kj7565l.xn--gdh" + }, + { + "comment": "V7", + "input": "xn--jnd1986v.xn--gdh", + "output": null + }, + { + "comment": "C1", + "input": "\u74bc\ud836\ude2d\uff61\u200c\udb40\udddf", + "output": null + }, + { + "comment": "C1", + "input": "\u74bc\ud836\ude2d\u3002\u200c\udb40\udddf", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--gky8837e.", + "output": "xn--gky8837e." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u74bc\ud836\ude2d.", + "output": "xn--gky8837e." + }, + { + "comment": "C1", + "input": "xn--gky8837e.xn--0ug", + "output": null + }, + { + "comment": "C1", + "input": "\u200c.\u200c", + "output": null + }, + { + "comment": "C1", + "input": "xn--0ug.xn--0ug", + "output": null + }, + { + "input": "xn--157b.xn--gnb", + "output": "xn--157b.xn--gnb" + }, + { + "input": "\ud29b.\u0716", + "output": "xn--157b.xn--gnb" + }, + { + "input": "\u1110\u1171\u11c2.\u0716", + "output": "xn--157b.xn--gnb" + }, + { + "comment": "V6; V7", + "input": "\u10b7\uff0e\u05c2\ud804\udd34\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u10b7\uff0e\ud804\udd34\u05c2\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u10b7.\ud804\udd34\u05c2\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2d17.\ud804\udd34\u05c2\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--flj.xn--qdb0605f14ycrms3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2d17\uff0e\ud804\udd34\u05c2\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2d17\uff0e\u05c2\ud804\udd34\ua9b7\ud920\udce8", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--vnd.xn--qdb0605f14ycrms3c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u2488\u916b\ufe12\u3002\u08d6", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "1.\u916b\u3002\u3002\u08d6", + "output": null + }, + { + "comment": "V6; A4_2 (ignored)", + "input": "1.xn--8j4a..xn--8zb", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--tsh4490bfe8c.xn--8zb", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u2de3\u200c\u226e\u1a6b.\u200c\u0e3a", + "output": null + }, + { + "comment": "C1; V6", + "input": "\u2de3\u200c<\u0338\u1a6b.\u200c\u0e3a", + "output": null + }, + { + "comment": "V6", + "input": "xn--uof548an0j.xn--o4c", + "output": null + }, + { + "comment": "C1; V6", + "input": "xn--uof63xk4bf3s.xn--o4c732g", + "output": null + }, + { + "comment": "V7", + "input": "xn--co6h.xn--1-kwssa", + "output": null + }, + { + "comment": "V7", + "input": "xn--co6h.xn--1-h1g429s", + "output": null + }, + { + "comment": "V7", + "input": "xn--co6h.xn--1-h1gs", + "output": null + }, + { + "comment": "V6; V7", + "input": "\ua806\u3002\ud8ad\ude8f\u0fb0\u2495", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "\ua806\u3002\ud8ad\ude8f\u0fb014.", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "xn--l98a.xn--14-jsj57880f.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--l98a.xn--dgd218hhp28d", + "output": null + }, + { + "comment": "C2", + "input": "\ud835\udfe04\udb40\uddd7\ud834\ude3b\uff0e\u200d\ud800\udef5\u26e7\u200d", + "output": null + }, + { + "comment": "C2", + "input": "84\udb40\uddd7\ud834\ude3b.\u200d\ud800\udef5\u26e7\u200d", + "output": null + }, + { + "input": "xn--84-s850a.xn--59h6326e", + "output": "xn--84-s850a.xn--59h6326e" + }, + { + "input": "84\ud834\ude3b.\ud800\udef5\u26e7", + "output": "xn--84-s850a.xn--59h6326e" + }, + { + "comment": "C2", + "input": "xn--84-s850a.xn--1uga573cfq1w", + "output": null + }, + { + "input": "\u226e\ud835\udfd5\uff0e\u8b16\u00df\u226f", + "output": "xn--7-mgo.xn--zca892oly5e" + }, + { + "input": "<\u0338\ud835\udfd5\uff0e\u8b16\u00df>\u0338", + "output": "xn--7-mgo.xn--zca892oly5e" + }, + { + "input": "\u226e7.\u8b16\u00df\u226f", + "output": "xn--7-mgo.xn--zca892oly5e" + }, + { + "input": "<\u03387.\u8b16\u00df>\u0338", + "output": "xn--7-mgo.xn--zca892oly5e" + }, + { + "input": "<\u03387.\u8b16SS>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e7.\u8b16SS\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e7.\u8b16ss\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "<\u03387.\u8b16ss>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "<\u03387.\u8b16Ss>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e7.\u8b16Ss\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "xn--7-mgo.xn--ss-xjvv174c", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "xn--7-mgo.xn--zca892oly5e", + "output": "xn--7-mgo.xn--zca892oly5e" + }, + { + "input": "<\u0338\ud835\udfd5\uff0e\u8b16SS>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e\ud835\udfd5\uff0e\u8b16SS\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e\ud835\udfd5\uff0e\u8b16ss\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "<\u0338\ud835\udfd5\uff0e\u8b16ss>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "<\u0338\ud835\udfd5\uff0e\u8b16Ss>\u0338", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "input": "\u226e\ud835\udfd5\uff0e\u8b16Ss\u226f", + "output": "xn--7-mgo.xn--ss-xjvv174c" + }, + { + "comment": "C1; V7", + "input": "\ud975\udf0e\u2488\uff61\u200c\ud835\udfe4", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "\ud975\udf0e1.\u3002\u200c2", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--1-ex54e..c", + "output": null + }, + { + "comment": "C1; V7; A4_2 (ignored)", + "input": "xn--1-ex54e..xn--2-rgn", + "output": null + }, + { + "comment": "V7", + "input": "xn--tsh94183d.c", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--tsh94183d.xn--2-rgn", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\uff61\u00df\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\u3002\u00df\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\u3002SS\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\u3002ss\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\u3002Ss\ud805\udcc3", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--ss-bh7o", + "output": ".xn--ss-bh7o" + }, + { + "comment": "C1; C2", + "input": "xn--0ugb.xn--ss-bh7o", + "output": null + }, + { + "comment": "C1; C2", + "input": "xn--0ugb.xn--zca0732l", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\uff61SS\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\uff61ss\ud805\udcc3", + "output": null + }, + { + "comment": "C1; C2", + "input": "\u200d\u200c\udb40\uddaa\uff61Ss\ud805\udcc3", + "output": null + }, + { + "input": "xn--ss-bh7o", + "output": "xn--ss-bh7o" + }, + { + "input": "ss\ud805\udcc3", + "output": "xn--ss-bh7o" + }, + { + "input": "SS\ud805\udcc3", + "output": "xn--ss-bh7o" + }, + { + "input": "Ss\ud805\udcc3", + "output": "xn--ss-bh7o" + }, + { + "comment": "C1; V7", + "input": "\ufe12\u200c\u30f6\u44a9.\ua86a", + "output": null + }, + { + "comment": "C1; A4_2 (ignored)", + "input": "\u3002\u200c\u30f6\u44a9.\ua86a", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--qekw60d.xn--gd9a", + "output": ".xn--qekw60d.xn--gd9a" + }, + { + "comment": "C1; A4_2 (ignored)", + "input": ".xn--0ug287dj0o.xn--gd9a", + "output": null + }, + { + "comment": "V7", + "input": "xn--qekw60dns9k.xn--gd9a", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug287dj0or48o.xn--gd9a", + "output": null + }, + { + "input": "xn--qekw60d.xn--gd9a", + "output": "xn--qekw60d.xn--gd9a" + }, + { + "input": "\u30f6\u44a9.\ua86a", + "output": "xn--qekw60d.xn--gd9a" + }, + { + "comment": "C1; V7", + "input": "\u200c\u2488\ud852\udf8d.\udb49\udccb\u1a60", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c1.\ud852\udf8d.\udb49\udccb\u1a60", + "output": null + }, + { + "comment": "V7", + "input": "1.xn--4x6j.xn--jof45148n", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--1-rgn.xn--4x6j.xn--jof45148n", + "output": null + }, + { + "comment": "V7", + "input": "xn--tshw462r.xn--jof45148n", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ug88o7471d.xn--jof45148n", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\ud834\udd75\uff61\ud835\udfeb\ud838\udc08\u4b3a\u2488", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud834\udd75\u30029\ud838\udc08\u4b3a1.", + "output": ".xn--91-030c1650n." + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--91-030c1650n.", + "output": ".xn--91-030c1650n." + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--9-ecp936non25a", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "xn--3f1h.xn--91-030c1650n.", + "output": null + }, + { + "comment": "V7", + "input": "xn--3f1h.xn--9-ecp936non25a", + "output": null + }, + { + "input": "xn--8c1a.xn--2ib8jn539l", + "output": "xn--8c1a.xn--2ib8jn539l" + }, + { + "input": "\u821b.\u067d\ud83a\udd34\u06bb", + "output": "xn--8c1a.xn--2ib8jn539l" + }, + { + "input": "\u821b.\u067d\ud83a\udd12\u06bb", + "output": "xn--8c1a.xn--2ib8jn539l" + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\udb40\udd710\uff61\u17cf\u1dfd\ud187\uc2ed", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\udb40\udd710\uff61\u17cf\u1dfd\u1110\u1168\u11aa\u1109\u1175\u11b8", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\udb40\udd710\u3002\u17cf\u1dfd\ud187\uc2ed", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-\udb40\udd710\u3002\u17cf\u1dfd\u1110\u1168\u11aa\u1109\u1175\u11b8", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "-0.xn--r4e872ah77nghm", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u10b5\u10e0\uff61\u0b4d", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u10b5\u10e0\u3002\u0b4d", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u2d1f\u2d15\u10e0\u3002\u0b4d", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u10b5\u1ca0\u3002\u0b4d", + "output": null + }, + { + "comment": "V6", + "input": "xn--1od555l3a.xn--9ic", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u2d1f\u2d15\u10e0\uff61\u0b4d", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u10b5\u1ca0\uff61\u0b4d", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--tndt4hvw.xn--9ic", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--1od7wz74eeb.xn--9ic", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u2d15\u10e0\u3002\u0b4d", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--3nd0etsm92g.xn--9ic", + "output": null + }, + { + "comment": "V6", + "input": "\u115f\u10bf\u2d15\u10e0\uff61\u0b4d", + "output": null + }, + { + "comment": "V7", + "input": "xn--l96h.xn--o8e4044k", + "output": null + }, + { + "comment": "V7", + "input": "xn--l96h.xn--03e93aq365d", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\ud835\udfdb\ud834\uddaa\ua8c4\uff61\ua8ea-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\ud835\udfdb\ua8c4\ud834\uddaa\uff61\ua8ea-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "3\ua8c4\ud834\uddaa\u3002\ua8ea-", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn--3-sl4eu679e.xn----xn4e", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1139\uff61\u0eca\uda42\udfe4\udb40\udd1e", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1139\u3002\u0eca\uda42\udfe4\udb40\udd1e", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--lrd.xn--s8c05302k", + "output": null + }, + { + "comment": "V7", + "input": "\u10a6\udaae\udca9\uff0e\udb40\udda1\ufe09\ud83a\udd0d", + "output": null + }, + { + "comment": "V7", + "input": "\u10a6\udaae\udca9.\udb40\udda1\ufe09\ud83a\udd0d", + "output": null + }, + { + "comment": "V7", + "input": "\u2d06\udaae\udca9.\udb40\udda1\ufe09\ud83a\udd2f", + "output": null + }, + { + "comment": "V7", + "input": "xn--xkjw3965g.xn--ne6h", + "output": null + }, + { + "comment": "V7", + "input": "\u2d06\udaae\udca9\uff0e\udb40\udda1\ufe09\ud83a\udd2f", + "output": null + }, + { + "comment": "V7", + "input": "xn--end82983m.xn--ne6h", + "output": null + }, + { + "comment": "V7", + "input": "\u2d06\udaae\udca9.\udb40\udda1\ufe09\ud83a\udd0d", + "output": null + }, + { + "comment": "V7", + "input": "\u2d06\udaae\udca9\uff0e\udb40\udda1\ufe09\ud83a\udd0d", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udee8.\ud9d5\udfe2\ud835\udfe8\ua8c4", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udee8.\ud9d5\udfe26\ua8c4", + "output": null + }, + { + "comment": "V7", + "input": "xn--mi60a.xn--6-sl4es8023c", + "output": null + }, + { + "comment": "V7", + "input": "\ud800\udef8\udb79\ude0b\u10c2.\u10a1", + "output": null + }, + { + "comment": "V7", + "input": "\ud800\udef8\udb79\ude0b\u2d22.\u2d01", + "output": null + }, + { + "comment": "V7", + "input": "\ud800\udef8\udb79\ude0b\u10c2.\u2d01", + "output": null + }, + { + "comment": "V7", + "input": "xn--qlj1559dr224h.xn--skj", + "output": null + }, + { + "comment": "V7", + "input": "xn--6nd5215jr2u0h.xn--skj", + "output": null + }, + { + "comment": "V7", + "input": "xn--6nd5215jr2u0h.xn--8md", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua806\u2084\uda65\udf86\uff61\ud88a\ude67\udb41\udcb9\u03c2", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua8064\uda65\udf86\u3002\ud88a\ude67\udb41\udcb9\u03c2", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua8064\uda65\udf86\u3002\ud88a\ude67\udb41\udcb9\u03a3", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua8064\uda65\udf86\u3002\ud88a\ude67\udb41\udcb9\u03c3", + "output": null + }, + { + "comment": "V7", + "input": "xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d", + "output": null + }, + { + "comment": "V7", + "input": "xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua806\u2084\uda65\udf86\uff61\ud88a\ude67\udb41\udcb9\u03a3", + "output": null + }, + { + "comment": "V7", + "input": "\ud91d\udc7f\ua806\u2084\uda65\udf86\uff61\ud88a\ude67\udb41\udcb9\u03c3", + "output": null + }, + { + "comment": "V7", + "input": "\ud8ba\udcac\u3002\u0729\u3002\ucbd95", + "output": null + }, + { + "comment": "V7", + "input": "\ud8ba\udcac\u3002\u0729\u3002\u110d\u1173\u11ac5", + "output": null + }, + { + "comment": "V7", + "input": "xn--t92s.xn--znb.xn--5-y88f", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u17ca.\u200d\ud835\udfee\ud804\udc3f", + "output": null + }, + { + "comment": "C2; V6", + "input": "\u17ca.\u200d2\ud804\udc3f", + "output": null + }, + { + "comment": "V6", + "input": "xn--m4e.xn--2-ku7i", + "output": null + }, + { + "comment": "C2; V6", + "input": "xn--m4e.xn--2-tgnv469h", + "output": null + }, + { + "comment": "V6", + "input": "\uaaf6\u3002\u5b36\u00df\u847d", + "output": null + }, + { + "comment": "V6", + "input": "\uaaf6\u3002\u5b36SS\u847d", + "output": null + }, + { + "comment": "V6", + "input": "\uaaf6\u3002\u5b36ss\u847d", + "output": null + }, + { + "comment": "V6", + "input": "\uaaf6\u3002\u5b36Ss\u847d", + "output": null + }, + { + "comment": "V6", + "input": "xn--2v9a.xn--ss-q40dp97m", + "output": null + }, + { + "comment": "V6", + "input": "xn--2v9a.xn--zca7637b14za", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03c2\ud805\udc3d\ud896\udc88\ud805\udf2b\uff61\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03c2\ud805\udc3d\ud896\udc88\ud805\udf2b\u3002\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03a3\ud805\udc3d\ud896\udc88\ud805\udf2b\u3002\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03c3\ud805\udc3d\ud896\udc88\ud805\udf2b\u3002\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "V7", + "input": "xn--4xa2260lk3b8z15g.xn--tw9ct349a", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03a3\ud805\udc3d\ud896\udc88\ud805\udf2b\uff61\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u03c3\ud805\udc3d\ud896\udc88\ud805\udf2b\uff61\ud83a\udf29\u200c\ud802\udec4", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2ea2\ud9df\ude85\ud835\udfe4\uff61\u200d\ud83d\udeb7", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2ea2\ud9df\ude852\u3002\u200d\ud83d\udeb7", + "output": null + }, + { + "comment": "V7", + "input": "xn--2-4jtr4282f.xn--m78h", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--2-4jtr4282f.xn--1ugz946p", + "output": null + }, + { + "comment": "V6", + "input": "\ud836\ude25\u3002\u2adf\ud804\ude3e", + "output": null + }, + { + "comment": "V6", + "input": "xn--n82h.xn--63iw010f", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored); U1 (ignored)", + "input": "-\u1897\u200c\ud83c\udd04.\ud805\udf22", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored); U1 (ignored)", + "input": "-\u1897\u200c3,.\ud805\udf22", + "output": null + }, + { + "comment": "V6; V3 (ignored); U1 (ignored)", + "input": "xn---3,-3eu.xn--9h2d", + "output": null + }, + { + "comment": "C1; V6; V3 (ignored); U1 (ignored)", + "input": "xn---3,-3eu051c.xn--9h2d", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----pck1820x.xn--9h2d", + "output": null + }, + { + "comment": "C1; V6; V7; V3 (ignored)", + "input": "xn----pck312bx563c.xn--9h2d", + "output": null + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "\u17b4.\ucb87-", + "output": ".xn----938f" + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": "\u17b4.\u110d\u1170\u11ae-", + "output": ".xn----938f" + }, + { + "comment": "V3 (ignored); A4_2 (ignored)", + "input": ".xn----938f", + "output": ".xn----938f" + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--z3e.xn----938f", + "output": null + }, + { + "comment": "C1; V7", + "input": "\u200c\ud805\udcc2\u3002\u2488-\udbc2\ude9b", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\u200c\ud805\udcc2\u30021.-\udbc2\ude9b", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn--wz1d.1.xn----rg03o", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn--0ugy057g.1.xn----rg03o", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--wz1d.xn----dcp29674o", + "output": null + }, + { + "comment": "C1; V7", + "input": "xn--0ugy057g.xn----dcp29674o", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": ".xn--hcb32bni", + "output": ".xn--hcb32bni" + }, + { + "input": "xn--hcb32bni", + "output": "xn--hcb32bni" + }, + { + "input": "\u06bd\u0663\u0596", + "output": "xn--hcb32bni" + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0f94\ua84b-\uff0e-\ud81a\udf34", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "\u0f94\ua84b-.-\ud81a\udf34", + "output": null + }, + { + "comment": "V6; V3 (ignored)", + "input": "xn----ukg9938i.xn----4u5m", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\ud9bd\udcb3-\u22e2\u200c\uff0e\u6807-", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\ud9bd\udcb3-\u2291\u0338\u200c\uff0e\u6807-", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\ud9bd\udcb3-\u22e2\u200c.\u6807-", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "\ud9bd\udcb3-\u2291\u0338\u200c.\u6807-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----9mo67451g.xn----qj7b", + "output": null + }, + { + "comment": "C1; V7; V3 (ignored)", + "input": "xn----sgn90kn5663a.xn----qj7b", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "-\ud914\ude74.\u06e0\u189a-", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----qi38c.xn----jxc827k", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": "\u3002\u0635\u0649\u0e37\u0644\u0627\u3002\u5c93\u1bf2\udb43\udf83\u1842", + "output": null + }, + { + "comment": "V7; A4_2 (ignored)", + "input": ".xn--mgb1a7bt462h.xn--17e10qe61f9r71s", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "\u188c\uff0e-\u085a", + "output": "xn--59e.xn----5jd" + }, + { + "comment": "V3 (ignored)", + "input": "\u188c.-\u085a", + "output": "xn--59e.xn----5jd" + }, + { + "comment": "V3 (ignored)", + "input": "xn--59e.xn----5jd", + "output": "xn--59e.xn----5jd" + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2\uff0e\u00df", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2.\u00df", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2.SS", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2.ss", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2.Ss", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----9tg11172akr8b.ss", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn----9tg11172akr8b.xn--zca", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2\uff0eSS", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2\uff0ess", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u1039-\ud82a\udfad\ud83d\udfa2\uff0eSs", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\u0d4d-\u200d\u200c\uff61\ud955\udfa7\u2085\u2260", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\u0d4d-\u200d\u200c\uff61\ud955\udfa7\u2085=\u0338", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\u0d4d-\u200d\u200c\u3002\ud955\udfa75\u2260", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "\u0d4d-\u200d\u200c\u3002\ud955\udfa75=\u0338", + "output": null + }, + { + "comment": "V6; V7; V3 (ignored)", + "input": "xn----jmf.xn--5-ufo50192e", + "output": null + }, + { + "comment": "C1; C2; V6; V7", + "input": "xn----jmf215lda.xn--5-ufo50192e", + "output": null + }, + { + "comment": "V6; V7", + "input": "\u9523\u3002\u0a4d\udb41\ude3b\udb41\ude86", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--gc5a.xn--ybc83044ppga", + "output": null + }, + { + "input": "xn--8gb2338k.xn--lhb0154f", + "output": "xn--8gb2338k.xn--lhb0154f" + }, + { + "input": "\u063d\ud804\ude3e.\u0649\ua92b", + "output": "xn--8gb2338k.xn--lhb0154f" + }, + { + "input": "\u10c1\u10b16\u0318\u3002\u00df\u1b03", + "output": "xn--6-8cb7433a2ba.xn--zca894k" + }, + { + "input": "\u2d21\u2d116\u0318\u3002\u00df\u1b03", + "output": "xn--6-8cb7433a2ba.xn--zca894k" + }, + { + "input": "\u10c1\u10b16\u0318\u3002SS\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "\u2d21\u2d116\u0318\u3002ss\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "\u10c1\u2d116\u0318\u3002Ss\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "xn--6-8cb7433a2ba.xn--ss-2vq", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "\u2d21\u2d116\u0318.ss\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "\u10c1\u10b16\u0318.SS\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "\u10c1\u2d116\u0318.Ss\u1b03", + "output": "xn--6-8cb7433a2ba.xn--ss-2vq" + }, + { + "input": "xn--6-8cb7433a2ba.xn--zca894k", + "output": "xn--6-8cb7433a2ba.xn--zca894k" + }, + { + "input": "\u2d21\u2d116\u0318.\u00df\u1b03", + "output": "xn--6-8cb7433a2ba.xn--zca894k" + }, + { + "comment": "V7", + "input": "xn--6-8cb306hms1a.xn--ss-2vq", + "output": null + }, + { + "comment": "V7", + "input": "xn--6-8cb555h2b.xn--ss-2vq", + "output": null + }, + { + "comment": "V7", + "input": "xn--6-8cb555h2b.xn--zca894k", + "output": null + }, + { + "comment": "V7", + "input": "\ud9ee\udc50\uff61\u226f\ud804\udeea", + "output": null + }, + { + "comment": "V7", + "input": "\ud9ee\udc50\uff61>\u0338\ud804\udeea", + "output": null + }, + { + "comment": "V7", + "input": "\ud9ee\udc50\u3002\u226f\ud804\udeea", + "output": null + }, + { + "comment": "V7", + "input": "\ud9ee\udc50\u3002>\u0338\ud804\udeea", + "output": null + }, + { + "comment": "V7", + "input": "xn--eo08b.xn--hdh3385g", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "\udb40\udd0f\ud81a\udf34\udb43\udcbd\uff61\uffa0", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "\udb40\udd0f\ud81a\udf34\udb43\udcbd\u3002\u1160", + "output": null + }, + { + "comment": "V6; V7; A4_2 (ignored)", + "input": "xn--619ep9154c.", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--619ep9154c.xn--psd", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--619ep9154c.xn--cl7c", + "output": null + }, + { + "comment": "V7", + "input": "\udb42\udf54.\ud800\udef1\u2082", + "output": null + }, + { + "comment": "V7", + "input": "\udb42\udf54.\ud800\udef12", + "output": null + }, + { + "comment": "V7", + "input": "xn--vi56e.xn--2-w91i", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2dbf.\u00df\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2dbf.SS\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2dbf.ss\u200d", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u2dbf.Ss\u200d", + "output": null + }, + { + "comment": "V7", + "input": "xn--7pj.ss", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--7pj.xn--ss-n1t", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--7pj.xn--zca870n", + "output": null + }, + { + "comment": "C1", + "input": "\u6889\u3002\u200c", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--7zv.", + "output": "xn--7zv." + }, + { + "comment": "A4_2 (ignored)", + "input": "\u6889.", + "output": "xn--7zv." + }, + { + "comment": "C1", + "input": "xn--7zv.xn--0ug", + "output": null + }, + { + "input": "xn--iwb.ss", + "output": "xn--iwb.ss" + }, + { + "input": "\u0853.ss", + "output": "xn--iwb.ss" + }, + { + "input": "\u0853.SS", + "output": "xn--iwb.ss" + }, + { + "comment": "V7; V3 (ignored)", + "input": "\u40da\u87e5-\u3002-\ud9b5\udc98\u2488", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "\u40da\u87e5-\u3002-\ud9b5\udc981.", + "output": null + }, + { + "comment": "V7; V3 (ignored); A4_2 (ignored)", + "input": "xn----n50a258u.xn---1-up07j.", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn----n50a258u.xn----ecp33805f", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1894\u2260\udbec\ude42.\u200d\ud800\udee2", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u1894=\u0338\udbec\ude42.\u200d\ud800\udee2", + "output": null + }, + { + "comment": "V7", + "input": "xn--ebf031cf7196a.xn--587c", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--ebf031cf7196a.xn--1ug9540g", + "output": null + }, + { + "comment": "V3 (ignored)", + "input": "-\uff61\u2e90", + "output": "-.xn--6vj" + }, + { + "comment": "V3 (ignored)", + "input": "-\u3002\u2e90", + "output": "-.xn--6vj" + }, + { + "comment": "V3 (ignored)", + "input": "-.xn--6vj", + "output": "-.xn--6vj" + }, + { + "comment": "V6; V7", + "input": "\udb43\udc29\ud807\udcac\uff0e\u065c", + "output": null + }, + { + "comment": "V6; V7", + "input": "\udb43\udc29\ud807\udcac.\u065c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--sn3d59267c.xn--4hb", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud800\udf7a.\ud928\uddc3\u200c", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--ie8c.xn--2g51a", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--ie8c.xn--0ug03366c", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u200d\u226e\uff0e\udb41\udfea\ud8a6\udecf-", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u200d<\u0338\uff0e\udb41\udfea\ud8a6\udecf-", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u200d\u226e.\udb41\udfea\ud8a6\udecf-", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "\u200d<\u0338.\udb41\udfea\ud8a6\udecf-", + "output": null + }, + { + "comment": "V7; V3 (ignored)", + "input": "xn--gdh.xn----cr99a1w710b", + "output": null + }, + { + "comment": "C2; V7; V3 (ignored)", + "input": "xn--1ug95g.xn----cr99a1w710b", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u200d\u8954\u3002\u10bc5\ua86e\ud995\udf4f", + "output": null + }, + { + "comment": "C2; V7", + "input": "\u200d\u200d\u8954\u3002\u2d1c5\ua86e\ud995\udf4f", + "output": null + }, + { + "comment": "V7", + "input": "xn--2u2a.xn--5-uws5848bpf44e", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1uga7691f.xn--5-uws5848bpf44e", + "output": null + }, + { + "comment": "V7", + "input": "xn--2u2a.xn--5-r1g7167ipfw8d", + "output": null + }, + { + "comment": "C2; V7", + "input": "xn--1uga7691f.xn--5-r1g7167ipfw8d", + "output": null + }, + { + "input": "xn--ix9c26l.xn--q0s", + "output": "xn--ix9c26l.xn--q0s" + }, + { + "input": "\ud802\udedc\ud804\udf3c.\u5a40", + "output": "xn--ix9c26l.xn--q0s" + }, + { + "comment": "C2; V6; V7", + "input": "\ua9b9\u200d\ud077\ud8af\udda1\uff61\u2082", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "\ua9b9\u200d\u110f\u1173\u11b2\ud8af\udda1\uff61\u2082", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--0m9as84e2e21c.c", + "output": null + }, + { + "comment": "C2; V6; V7", + "input": "xn--1ug1435cfkyaoi04d.c", + "output": null + }, + { + "input": "\ud802\udec0\uff0e\u0689\ud804\udf00", + "output": "xn--pw9c.xn--fjb8658k" + }, + { + "input": "\ud802\udec0.\u0689\ud804\udf00", + "output": "xn--pw9c.xn--fjb8658k" + }, + { + "input": "xn--pw9c.xn--fjb8658k", + "output": "xn--pw9c.xn--fjb8658k" + }, + { + "comment": "V6", + "input": "\u2260\u81a3\u3002\u0f83", + "output": null + }, + { + "comment": "V6", + "input": "=\u0338\u81a3\u3002\u0f83", + "output": null + }, + { + "comment": "V6", + "input": "xn--1chy468a.xn--2ed", + "output": null + }, + { + "comment": "C2", + "input": "\ud800\udef7\u3002\u200d", + "output": null + }, + { + "comment": "A4_2 (ignored)", + "input": "xn--r97c.", + "output": "xn--r97c." + }, + { + "comment": "A4_2 (ignored)", + "input": "\ud800\udef7.", + "output": "xn--r97c." + }, + { + "comment": "C2", + "input": "xn--r97c.xn--1ug", + "output": null + }, + { + "comment": "V6", + "input": "\ud807\udc33\ud804\ude2f\u3002\u296a", + "output": null + }, + { + "comment": "V6", + "input": "xn--2g1d14o.xn--jti", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud804\udd80\u4074\ud952\udde3\uff0e\u10b5\ud835\udfdc\u200c\u0348", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud804\udd80\u4074\ud952\udde3.\u10b54\u200c\u0348", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud804\udd80\u4074\ud952\udde3.\u2d154\u200c\u0348", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--1mnx647cg3x1b.xn--4-zfb5123a", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--1mnx647cg3x1b.xn--4-zfb502tlsl", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "\ud804\udd80\u4074\ud952\udde3\uff0e\u2d15\ud835\udfdc\u200c\u0348", + "output": null + }, + { + "comment": "V6; V7", + "input": "xn--1mnx647cg3x1b.xn--4-zfb324h", + "output": null + }, + { + "comment": "C1; V6; V7", + "input": "xn--1mnx647cg3x1b.xn--4-zfb324h32o", + "output": null + } +] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..c3c054f8a15f0007a70eab1ddf01bf95c0858bed --- /dev/null +++ b/LICENSE @@ -0,0 +1,307 @@ +Mozilla Public License Version 2.0 + +1. Definitions + + 1.1. "Contributor" means each individual or legal entity that creates, +contributes to the creation of, or owns Covered Software. + + 1.2. "Contributor Version" means the combination of the Contributions of +others (if any) used by a Contributor and that particular Contributor's +Contribution. + + 1.3. "Contribution" means Covered Software of a particular Contributor. + + 1.4. "Covered Software" means Source Code Form to which the initial +Contributor has attached the notice in Exhibit A, the Executable Form of such +Source Code Form, and Modifications of such Source Code Form, in each case +including portions thereof. + + 1.5. "Incompatible With Secondary Licenses" means + + (a) that the initial Contributor has attached the notice described +in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of +version 1.1 or earlier of the License, but not also under the terms of a +Secondary License. + + 1.6. "Executable Form" means any form of the work other than Source Code +Form. + + 1.7. "Larger Work" means a work that combines Covered Software with other +material, in a separate file or files, that is not Covered Software. + + 1.8. "License" means this document. + + 1.9. "Licensable" means having the right to grant, to the maximum extent +possible, whether at the time of the initial grant or subsequently, any and +all of the rights conveyed by this License. + + 1.10. "Modifications" means any of the following: + + (a) any file in Source Code Form that results from an addition to, +deletion from, or modification of the contents of Covered Software; or + + (b) any new file in Source Code Form that contains any Covered +Software. + + 1.11. "Patent Claims" of a Contributor means any patent claim(s), +including without limitation, method, process, and apparatus claims, in any +patent Licensable by such Contributor that would be infringed, but for the +grant of the License, by the making, using, selling, offering for sale, having +made, import, or transfer of either its Contributions or its Contributor +Version. + + 1.12. "Secondary License" means either the GNU General Public License, +Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU +Affero General Public License, Version 3.0, or any later versions of those +licenses. + + 1.13. "Source Code Form" means the form of the work preferred for making +modifications. + + 1.14. "You" (or "Your") means an individual or a legal entity exercising +rights under this License. For legal entities, "You" includes any entity that +controls, is controlled by, or is under common control with You. For purposes +of this definition, "control" means (a) the power, direct or indirect, to +cause the direction or management of such entity, whether by contract or +otherwise, or (b) ownership of more than fifty percent (50%) of the +outstanding shares or beneficial ownership of such entity. + +2. License Grants and Conditions + + 2.1. Grants + Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + + (a) under intellectual property rights (other than patent or +trademark) Licensable by such Contributor to use, reproduce, make available, +modify, display, perform, distribute, and otherwise exploit its Contributions, +either on an unmodified basis, with Modifications, or as part of a Larger +Work; and + + (b) under Patent Claims of such Contributor to make, use, sell, +offer for sale, have made, import, and otherwise transfer either its +Contributions or its Contributor Version. + + 2.2. Effective Date + The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + + 2.3. Limitations on Grant Scope + The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + + (a) for any code that a Contributor has removed from Covered +Software; or + + (b) for infringements caused by: (i) Your and any other third +party's modifications of Covered Software, or (ii) the combination of its +Contributions with other software (except as part of its Contributor Version); +or + + (c) under Patent Claims infringed by Covered Software in the absence +of its Contributions. + + This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with the +notice requirements in Section 3.4). + + 2.4. Subsequent Licenses + No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this License +(see Section 10.2) or under the terms of a Secondary License (if permitted +under the terms of Section 3.3). + + 2.5. Representation + Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights to +grant the rights to its Contributions conveyed by this License. + + 2.6. Fair Use + This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + + 2.7. Conditions + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in +Section 2.1. + +3. Responsibilities + + 3.1. Distribution of Source Form + All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under the +terms of this License. You must inform recipients that the Source Code Form of +the Covered Software is governed by the terms of this License, and how they +can obtain a copy of this License. You may not attempt to alter or restrict +the recipients' rights in the Source Code Form. + + 3.2. Distribution of Executable Form + If You distribute Covered Software in Executable Form then: + + (a) such Covered Software must also be made available in Source Code +Form, as described in Section 3.1, and You must inform recipients of the +Executable Form how they can obtain a copy of such Source Code Form by +reasonable means in a timely manner, at a charge no more than the cost of +distribution to the recipient; and + + (b) You may distribute such Executable Form under the terms of this +License, or sublicense it under different terms, provided that the license for +the Executable Form does not attempt to limit or alter the recipients' rights +in the Source Code Form under this License. + + 3.3. Distribution of a Larger Work + You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for the +Covered Software. If the Larger Work is a combination of Covered Software with +a work governed by one or more Secondary Licenses, and the Covered Software is +not Incompatible With Secondary Licenses, this License permits You to +additionally distribute such Covered Software under the terms of such +Secondary License(s), so that the recipient of the Larger Work may, at their +option, further distribute the Covered Software under the terms of either this +License or such Secondary License(s). + + 3.4. Notices + You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, or +limitations of liability) contained within the Source Code Form of the Covered +Software, except that You may alter any license notices to the extent required +to remedy known factual inaccuracies. + + 3.5. Application of Additional Terms + You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on behalf of +any Contributor. You must make it absolutely clear that any such warranty, +support, indemnity, or liability obligation is offered by You alone, and You +hereby agree to indemnify every Contributor for any liability incurred by such +Contributor as a result of warranty, support, indemnity or liability terms You +offer. You may include additional disclaimers of warranty and limitations of +liability specific to any jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +If it is impossible for You to comply with any of the terms of this License +with respect to some or all of the Covered Software due to statute, judicial +order, or regulation then You must: (a) comply with the terms of this License +to the maximum extent possible; and (b) describe the limitations and the code +they affect. Such description must be placed in a text file included with all +distributions of the Covered Software under this License. Except to the extent +prohibited by statute or regulation, such description must be sufficiently +detailed for a recipient of ordinary skill to be able to understand it. + +5. Termination + + 5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become compliant, +then the rights granted under this License from a particular Contributor are +reinstated (a) provisionally, unless and until such Contributor explicitly and +finally terminates Your grants, and (b) on an ongoing basis, if such +Contributor fails to notify You of the non-compliance by some reasonable means +prior to 60 days after You have come back into compliance. Moreover, Your +grants from a particular Contributor are reinstated on an ongoing basis if +such Contributor notifies You of the non-compliance by some reasonable means, +this is the first time You have received notice of non-compliance with this +License from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + + 5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, counter-claims, +and cross-claims) alleging that a Contributor Version directly or indirectly +infringes any patent, then the rights granted to You by any and all +Contributors for the Covered Software under Section 2.1 of this License shall +terminate. + + 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end +user license agreements (excluding distributors and resellers) which have been +validly granted by You or Your distributors under this License prior to +termination shall survive termination. + +6. Disclaimer of Warranty +Covered Software is provided under this License on an "as is" basis, without +warranty of any kind, either expressed, implied, or statutory, including, +without limitation, warranties that the Covered Software is free of defects, +merchantable, fit for a particular purpose or non-infringing. The entire risk +as to the quality and performance of the Covered Software is with You. Should +any Covered Software prove defective in any respect, You (not any Contributor) +assume the cost of any necessary servicing, repair, or correction. This +disclaimer of warranty constitutes an essential part of this License. No use +of any Covered Software is authorized under this License except under this +disclaimer. + +7. Limitation of Liability +Under no circumstances and under no legal theory, whether tort (including +negligence), contract, or otherwise, shall any Contributor, or anyone who +distributes Covered Software as permitted above, be liable to You for any +direct, indirect, special, incidental, or consequential damages of any +character including, without limitation, damages for lost profits, loss of +goodwill, work stoppage, computer failure or malfunction, or any and all other +commercial damages or losses, even if such party shall have been informed of +the possibility of such damages. This limitation of liability shall not apply +to liability for death or personal injury resulting from such party's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation +Any litigation relating to this License may be brought only in the courts of a +jurisdiction where the defendant maintains its principal place of business and +such litigation shall be governed by laws of that jurisdiction, without +reference to its conflict-of-law provisions. Nothing in this Section shall +prevent a party's ability to bring cross-claims or counter-claims. + +9. Miscellaneous +This License represents the complete agreement concerning the subject matter +hereof. If any provision of this License is held to be unenforceable, such +provision shall be reformed only to the extent necessary to make it +enforceable. Any law or regulation which provides that the language of a +contract shall be construed against the drafter shall not be used to construe +this License against a Contributor. + +10. Versions of the License + + 10.1. New Versions + Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or publish +new versions of this License. Each version will be given a distinguishing +version number. + + 10.2. Effect of New Versions + You may distribute the Covered Software under the terms of the version of +the License under which You originally received the Covered Software, or under +the terms of any subsequent version published by the license steward. + + 10.3. Modified Versions + If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a modified +version of this License if you rename the license and remove any references to +the name of the license steward (except to note that such modified license +differs from this License). + + 10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the notice +described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this file, You +can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as +defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..94cb5d98540b9ef7c894cd500a3193a5e6ebab8a --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# zig-net-url + +![loc](https://sloc.xyz/github/nektro/zig-net-url) +[![license](https://img.shields.io/github/license/nektro/zig-net-url.svg)](https://github.com/nektro/zig-net-url/blob/master/LICENSE) +[![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro) +[![Zig](https://img.shields.io/badge/Zig-0.14-f7a41d)](https://ziglang.org/) +[![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod) + +A WHATWG URL-compatible parser for Zig. + +`urltestdata.json` is from https://github.com/web-platform-tests/wpt/blob/master/url/resources/urltestdata.json. +Last fetched at `048018b5af85f8d47b8a704b48cf6f9c0a461876`. + +`IdnaTestV2.json` is from https://github.com/web-platform-tests/wpt/blob/master/url/resources/IdnaTestV2.json. +Last fetched at `40fc257a28faf7c378f59185235685ea8684e8f4`. diff --git a/build.zig b/build.zig new file mode 100644 index 0000000000000000000000000000000000000000..f9ffeeac66f66074b0a7bbaee04d2452b06067c5 --- /dev/null +++ b/build.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const deps = @import("./deps.zig"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const mode = b.option(std.builtin.Mode, "mode", "") orelse .Debug; + + const tests = b.addTest(.{ + .root_source_file = b.path("test.zig"), + .target = target, + .optimize = mode, + }); + deps.addAllTo(tests); + + const test_step = b.step("test", "Run all library tests"); + const tests_run = b.addRunArtifact(tests); + tests_run.setCwd(b.path(".")); + tests_run.has_side_effects = true; + test_step.dependOn(&tests_run.step); +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000000000000000000000000000000000000..c4cf66b3dfc4c562391019c2b0d6841a514b0f66 --- /dev/null +++ b/bun.lock @@ -0,0 +1,26 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "zig-net-url", + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.3.5", "", { "dependencies": { "bun-types": "1.3.5" } }, "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w=="], + + "@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], + + "bun-types": ["bun-types@1.3.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + } +} diff --git a/generate.ts b/generate.ts new file mode 100644 index 0000000000000000000000000000000000000000..839efdc0299ced09f2522e476a198161a024d8ce --- /dev/null +++ b/generate.ts @@ -0,0 +1,110 @@ +import { closeSync, openSync } from "node:fs"; +import casesraw from "./urltestdata.json"; +import casesidna from "./IdnaTestV2.json"; + +const cases = casesraw.filter((v) => typeof v !== "string"); +closeSync(openSync("./test.generated.zig", "w", 0o777)); +const f = Bun.file("./test.generated.zig"); +const w = f.writer(); + +w.write(`const std = @import("std");\n`); +w.write(`const url = @import("url");\n`); +w.write(`const expect = @import("expect").expect;\n`); +w.write(`\n`); +w.write(`// zig fmt: off\n`); + +function stringEscape(s?: string) { + if (!s) return ""; + return s + .split("") + .map((x) => { + if (x === "\n") return "\\n"; + if (x === "\r") return "\\r"; + if (x === "\t") return "\\t"; + if (x === "\\") return "\\\\"; + if (x === '"') return `\\"`; + if (x === "'") return x; + if (x === " ") return x; + if (x === "!") return x; + if (x.codePointAt(0)! >= "#".codePointAt(0)! && x.codePointAt(0)! <= "&".codePointAt(0)!) return x; + if (x.codePointAt(0)! >= "(".codePointAt(0)! && x.codePointAt(0)! <= "[".codePointAt(0)!) return x; + if (x.codePointAt(0)! >= "]".codePointAt(0)! && x.codePointAt(0)! <= "~".codePointAt(0)!) return x; + return `\\x${x.codePointAt(0)!.toString(16).padStart(2, "0")}`; + }) + .join(""); +} +const E = stringEscape; + +w.write(` +pub fn parseFail(input: []const u8, base: ?[]const u8) !void { + const allocator = std.testing.allocator; + _ = url.URL.parse(allocator, input, base) catch return; + return error.SkipZigTest; + // return error.FailZigTest; +} + +pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin: []const u8, protocol: []const u8, username: []const u8, password: []const u8, host: []const u8, hostname: []const u8, port: []const u8, pathname: []const u8, search: []const u8, hash: []const u8) !void { + const allocator = std.testing.allocator; + const u = try url.URL.parse(allocator, input, base); + try expect(u.href).toEqualString(href); + try expect(u.origin).toEqualString(origin); + try expect(u.protocol).toEqualString(protocol); + try expect(u.username).toEqualString(username); + try expect(u.password).toEqualString(password); + try expect(u.host).toEqualString(host); + try expect(u.hostname).toEqualString(hostname); + try expect(u.port).toEqualString(port); + try expect(u.pathname).toEqualString(pathname); + try expect(u.search).toEqualString(search); + try expect(u.hash).toEqualString(hash); +} + +pub fn parseIDNAFail(input: []const u8) !void { + _ = input; + // new URL('https://{idnaTest.input}/x') + return error.SkipZigTest; +} + +pub fn parseIDNAPass(input: []const u8, output: []const u8) !void { + _ = input; + _ = output; + // new URL('https://{idnaTest.input}/x'); + // assert_equals(url.host, idnaTest.output); + // assert_equals(url.hostname, idnaTest.output); + // assert_equals(url.pathname, "/x"); + // assert_equals(url.href, 'https://{idnaTest.output}/x'); + return error.SkipZigTest; +} +`); + +w.write(`\n`); +for (const c of cases.filter((v) => v.base == null && !!v.failure)) { + w.write(`test { try parseFail("${stringEscape(c.input)}", null); }\n`); +} + +w.write(`\n`); +for (const c of cases.filter((v) => v.base != null && !!v.failure)) { + w.write(`test { try parseFail("${stringEscape(c.input)}", "${stringEscape(c.base!)}"); }\n`); +} + +w.write(`\n`); +for (const c of cases.filter((v) => v.base == null && !v.failure)) { + w.write(`test { try parsePass("${E(c.input)}", null, "${E(c.href)}", "${E(c.origin)}", "${E(c.protocol)}", "${E(c.username)}", "${E(c.password)}", "${E(c.host)}", "${E(c.hostname)}", "${E(c.port)}", "${E(c.pathname)}", "${E(c.search)}", "${E(c.hash)}"); }\n`); +} + +w.write(`\n`); +for (const c of cases.filter((v) => v.base != null && !v.failure)) { + w.write(`test { try parsePass("${E(c.input)}", "${E(c.base!)}", "${E(c.href)}", "${E(c.origin)}", "${E(c.protocol)}", "${E(c.username)}", "${E(c.password)}", "${E(c.host)}", "${E(c.hostname)}", "${E(c.port)}", "${E(c.pathname)}", "${E(c.search)}", "${E(c.hash)}"); }\n`); +} + +w.write(`\n`); +for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => !v.output)) { + w.write(`test { try parseIDNAFail("${stringEscape(c.input)}"); }\n`); +} + +w.write(`\n`); +for (const c of casesidna.filter((v) => typeof v !== "string").filter((v) => !!v.output)) { + w.write(`test { try parseIDNAPass("${stringEscape(c.input)}", "${stringEscape(c.output!)}"); }\n`); +} + +w.flush(); diff --git a/licenses.txt b/licenses.txt new file mode 100644 index 0000000000000000000000000000000000000000..7b6c3ae99a6248529a11c066cbe3ceb802461965 --- /dev/null +++ b/licenses.txt @@ -0,0 +1,16 @@ +MPL-2.0: += https://spdx.org/licenses/MPL-2.0 +- This +- git https://github.com/nektro/zig-intrusive-parser +- git https://github.com/nektro/zig-nio + +MIT: += https://spdx.org/licenses/MIT +- git https://github.com/nektro/zig-expect +- git https://github.com/nektro/zig-extras +- git https://github.com/nektro/zig-json +- git https://github.com/nektro/zig-sys-linux +- git https://github.com/nektro/zig-tracer + +Unspecified: +- system_lib c diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..2be8878b83cf184c7046e17286d2661d05cddcfd --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "name": "zig-net-url", + "private": true, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + } +} diff --git a/test.generated.zig b/test.generated.zig new file mode 100644 index 0000000000000000000000000000000000000000..0a72f9c045d7db472fdce42ba333c7f727f93ebe --- /dev/null +++ b/test.generated.zig @@ -0,0 +1,3591 @@ +const std = @import("std"); +const url = @import("url"); +const expect = @import("expect").expect; + +// zig fmt: off + +pub fn parseFail(input: []const u8, base: ?[]const u8) !void { + const allocator = std.testing.allocator; + _ = url.URL.parse(allocator, input, base) catch return; + return error.SkipZigTest; + // return error.FailZigTest; +} + +pub fn parsePass(input: []const u8, base: ?[]const u8, href: []const u8, origin: []const u8, protocol: []const u8, username: []const u8, password: []const u8, host: []const u8, hostname: []const u8, port: []const u8, pathname: []const u8, search: []const u8, hash: []const u8) !void { + const allocator = std.testing.allocator; + const u = try url.URL.parse(allocator, input, base); + try expect(u.href).toEqualString(href); + try expect(u.origin).toEqualString(origin); + try expect(u.protocol).toEqualString(protocol); + try expect(u.username).toEqualString(username); + try expect(u.password).toEqualString(password); + try expect(u.host).toEqualString(host); + try expect(u.hostname).toEqualString(hostname); + try expect(u.port).toEqualString(port); + try expect(u.pathname).toEqualString(pathname); + try expect(u.search).toEqualString(search); + try expect(u.hash).toEqualString(hash); +} + +pub fn parseIDNAFail(input: []const u8) !void { + _ = input; + // new URL('https://{idnaTest.input}/x') + return error.SkipZigTest; +} + +pub fn parseIDNAPass(input: []const u8, output: []const u8) !void { + _ = input; + _ = output; + // new URL('https://{idnaTest.input}/x'); + // assert_equals(url.host, idnaTest.output); + // assert_equals(url.hostname, idnaTest.output); + // assert_equals(url.pathname, "/x"); + // assert_equals(url.href, 'https://{idnaTest.output}/x'); + return error.SkipZigTest; +} + +test { try parseFail("file://example:1/", null); } +test { try parseFail("file://example:test/", null); } +test { try parseFail("file://example%/", null); } +test { try parseFail("file://[example]/", null); } +test { try parseFail("http://user:pass@/", null); } +test { try parseFail("http://foo:-80/", null); } +test { try parseFail("http:/:@/www.example.com", null); } +test { try parseFail("http://user@/www.example.com", null); } +test { try parseFail("http:@/www.example.com", null); } +test { try parseFail("http:/@/www.example.com", null); } +test { try parseFail("http://@/www.example.com", null); } +test { try parseFail("https:@/www.example.com", null); } +test { try parseFail("http:a:b@/www.example.com", null); } +test { try parseFail("http:/a:b@/www.example.com", null); } +test { try parseFail("http://a:b@/www.example.com", null); } +test { try parseFail("http::@/www.example.com", null); } +test { try parseFail("http:@:www.example.com", null); } +test { try parseFail("http:/@:www.example.com", null); } +test { try parseFail("http://@:www.example.com", null); } +test { try parseFail("https://\xfffd", null); } +test { try parseFail("https://%EF%BF%BD", null); } +test { try parseFail("http://a.b.c.xn--pokxncvks", null); } +test { try parseFail("http://10.0.0.xn--pokxncvks", null); } +test { try parseFail("http://a.b.c.XN--pokxncvks", null); } +test { try parseFail("http://a.b.c.Xn--pokxncvks", null); } +test { try parseFail("http://10.0.0.XN--pokxncvks", null); } +test { try parseFail("http://10.0.0.xN--pokxncvks", null); } +test { try parseFail("https://x x:12", null); } +test { try parseFail("http://[www.google.com]/", null); } +test { try parseFail("sc://@/", null); } +test { try parseFail("sc://te@s:t@/", null); } +test { try parseFail("sc://:/", null); } +test { try parseFail("sc://:12/", null); } +test { try parseFail("sc://a\x00b/", null); } +test { try parseFail("sc://a b/", null); } +test { try parseFail("sc://ab", null); } +test { try parseFail("sc://a[b/", null); } +test { try parseFail("sc://a\\b/", null); } +test { try parseFail("sc://a]b/", null); } +test { try parseFail("sc://a^b", null); } +test { try parseFail("sc://a|b/", null); } +test { try parseFail("http://a\x00b/", null); } +test { try parseFail("http://a\x01b/", null); } +test { try parseFail("http://a\x02b/", null); } +test { try parseFail("http://a\x03b/", null); } +test { try parseFail("http://a\x04b/", null); } +test { try parseFail("http://a\x05b/", null); } +test { try parseFail("http://a\x06b/", null); } +test { try parseFail("http://a\x07b/", null); } +test { try parseFail("http://a\x08b/", null); } +test { try parseFail("http://a\x0bb/", null); } +test { try parseFail("http://a\x0cb/", null); } +test { try parseFail("http://a\x0eb/", null); } +test { try parseFail("http://a\x0fb/", null); } +test { try parseFail("http://a\x10b/", null); } +test { try parseFail("http://a\x11b/", null); } +test { try parseFail("http://a\x12b/", null); } +test { try parseFail("http://a\x13b/", null); } +test { try parseFail("http://a\x14b/", null); } +test { try parseFail("http://a\x15b/", null); } +test { try parseFail("http://a\x16b/", null); } +test { try parseFail("http://a\x17b/", null); } +test { try parseFail("http://a\x18b/", null); } +test { try parseFail("http://a\x19b/", null); } +test { try parseFail("http://a\x1ab/", null); } +test { try parseFail("http://a\x1bb/", null); } +test { try parseFail("http://a\x1cb/", null); } +test { try parseFail("http://a\x1db/", null); } +test { try parseFail("http://a\x1eb/", null); } +test { try parseFail("http://a\x1fb/", null); } +test { try parseFail("http://a b/", null); } +test { try parseFail("http://a%b/", null); } +test { try parseFail("http://ab", null); } +test { try parseFail("http://a[b/", null); } +test { try parseFail("http://a]b/", null); } +test { try parseFail("http://a^b", null); } +test { try parseFail("http://a|b/", null); } +test { try parseFail("http://a\x7fb/", null); } +test { try parseFail("http://ho%00st/", null); } +test { try parseFail("http://ho%01st/", null); } +test { try parseFail("http://ho%02st/", null); } +test { try parseFail("http://ho%03st/", null); } +test { try parseFail("http://ho%04st/", null); } +test { try parseFail("http://ho%05st/", null); } +test { try parseFail("http://ho%06st/", null); } +test { try parseFail("http://ho%07st/", null); } +test { try parseFail("http://ho%08st/", null); } +test { try parseFail("http://ho%09st/", null); } +test { try parseFail("http://ho%0Ast/", null); } +test { try parseFail("http://ho%0Bst/", null); } +test { try parseFail("http://ho%0Cst/", null); } +test { try parseFail("http://ho%0Dst/", null); } +test { try parseFail("http://ho%0Est/", null); } +test { try parseFail("http://ho%0Fst/", null); } +test { try parseFail("http://ho%10st/", null); } +test { try parseFail("http://ho%11st/", null); } +test { try parseFail("http://ho%12st/", null); } +test { try parseFail("http://ho%13st/", null); } +test { try parseFail("http://ho%14st/", null); } +test { try parseFail("http://ho%15st/", null); } +test { try parseFail("http://ho%16st/", null); } +test { try parseFail("http://ho%17st/", null); } +test { try parseFail("http://ho%18st/", null); } +test { try parseFail("http://ho%19st/", null); } +test { try parseFail("http://ho%1Ast/", null); } +test { try parseFail("http://ho%1Bst/", null); } +test { try parseFail("http://ho%1Cst/", null); } +test { try parseFail("http://ho%1Dst/", null); } +test { try parseFail("http://ho%1Est/", null); } +test { try parseFail("http://ho%1Fst/", null); } +test { try parseFail("http://ho%20st/", null); } +test { try parseFail("http://ho%23st/", null); } +test { try parseFail("http://ho%25st/", null); } +test { try parseFail("http://ho%2Fst/", null); } +test { try parseFail("http://ho%3Ast/", null); } +test { try parseFail("http://ho%3Cst/", null); } +test { try parseFail("http://ho%3Est/", null); } +test { try parseFail("http://ho%3Fst/", null); } +test { try parseFail("http://ho%40st/", null); } +test { try parseFail("http://ho%5Bst/", null); } +test { try parseFail("http://ho%5Cst/", null); } +test { try parseFail("http://ho%5Dst/", null); } +test { try parseFail("http://ho%7Cst/", null); } +test { try parseFail("http://ho%7Fst/", null); } +test { try parseFail("ftp://example.com%80/", null); } +test { try parseFail("ftp://example.com%A0/", null); } +test { try parseFail("https://example.com%80/", null); } +test { try parseFail("https://example.com%A0/", null); } +test { try parseFail("https://0x100000000/test", null); } +test { try parseFail("https://256.0.0.1/test", null); } +test { try parseFail("file://%43%3A", null); } +test { try parseFail("file://%43%7C", null); } +test { try parseFail("file://%43|", null); } +test { try parseFail("file://C%7C", null); } +test { try parseFail("file://%43%7C/", null); } +test { try parseFail("https://%43%7C/", null); } +test { try parseFail("asdf://%43|/", null); } +test { try parseFail("\\\\\\.\\Y:", null); } +test { try parseFail("\\\\\\.\\y:", null); } +test { try parseFail("https://[0::0::0]", null); } +test { try parseFail("https://[0:.0]", null); } +test { try parseFail("https://[0:0:]", null); } +test { try parseFail("https://[0:1:2:3:4:5:6:7.0.0.0.1]", null); } +test { try parseFail("https://[0:1.00.0.0.0]", null); } +test { try parseFail("https://[0:1.290.0.0.0]", null); } +test { try parseFail("https://[0:1.23.23]", null); } +test { try parseFail("http://?", null); } +test { try parseFail("http://#", null); } +test { try parseFail("non-special://[:80/", null); } +test { try parseFail("http://[::127.0.0.0.1]", null); } +test { try parseFail("a", null); } +test { try parseFail("a/", null); } +test { try parseFail("a//", null); } +test { try parseFail("file://\xad/p", null); } +test { try parseFail("file://%C2%AD/p", null); } +test { try parseFail("file://xn--/p", null); } +test { try parseFail("#", null); } +test { try parseFail("?", null); } +test { try parseFail("http://0..0x300/", null); } +test { try parseFail("http://0..0x300./", null); } +test { try parseFail("http://1.2.3.08", null); } +test { try parseFail("http://1.2.3.08.", null); } +test { try parseFail("http://1.2.3.09", null); } +test { try parseFail("http://09.2.3.4", null); } +test { try parseFail("http://09.2.3.4.", null); } +test { try parseFail("http://01.2.3.4.5", null); } +test { try parseFail("http://01.2.3.4.5.", null); } +test { try parseFail("http://0x100.2.3.4", null); } +test { try parseFail("http://0x100.2.3.4.", null); } +test { try parseFail("http://0x1.2.3.4.5", null); } +test { try parseFail("http://0x1.2.3.4.5.", null); } +test { try parseFail("http://foo.1.2.3.4", null); } +test { try parseFail("http://foo.1.2.3.4.", null); } +test { try parseFail("http://foo.2.3.4", null); } +test { try parseFail("http://foo.2.3.4.", null); } +test { try parseFail("http://foo.09", null); } +test { try parseFail("http://foo.09.", null); } +test { try parseFail("http://foo.0x4", null); } +test { try parseFail("http://foo.0x4.", null); } +test { try parseFail("http://0999999999999999999/", null); } +test { try parseFail("http://foo.0x", null); } +test { try parseFail("http://foo.0XFfFfFfFfFfFfFfFfFfAcE123", null); } +test { try parseFail("http://\xd83d\xdca9.123/", null); } +test { try parseFail("https://\x00y", null); } +test { try parseFail("https://\xffffy", null); } +test { try parseFail("", null); } +test { try parseFail("https://\xad/", null); } +test { try parseFail("https://%C2%AD/", null); } +test { try parseFail("https://xn--/", null); } +test { try parseFail("data://:443", null); } +test { try parseFail("data://test:test", null); } +test { try parseFail("data://[:1]", null); } +test { try parseFail("javascript://:443", null); } +test { try parseFail("javascript://test:test", null); } +test { try parseFail("javascript://[:1]", null); } +test { try parseFail("mailto://:443", null); } +test { try parseFail("mailto://test:test", null); } +test { try parseFail("mailto://[:1]", null); } +test { try parseFail("intent://:443", null); } +test { try parseFail("intent://test:test", null); } +test { try parseFail("intent://[:1]", null); } +test { try parseFail("urn://:443", null); } +test { try parseFail("urn://test:test", null); } +test { try parseFail("urn://[:1]", null); } +test { try parseFail("turn://:443", null); } +test { try parseFail("turn://test:test", null); } +test { try parseFail("turn://[:1]", null); } +test { try parseFail("stun://:443", null); } +test { try parseFail("stun://test:test", null); } +test { try parseFail("stun://[:1]", null); } +test { try parseFail("non-special://host\\a", null); } + +test { try parseFail("http://f:b/c", "http://example.org/foo/bar"); } +test { try parseFail("http://f: /c", "http://example.org/foo/bar"); } +test { try parseFail("http://f:fifty-two/c", "http://example.org/foo/bar"); } +test { try parseFail("http://f:999999/c", "http://example.org/foo/bar"); } +test { try parseFail("non-special://f:999999/c", "http://example.org/foo/bar"); } +test { try parseFail("http://f: 21 / b ? d # e ", "http://example.org/foo/bar"); } +test { try parseFail("http://[1::2]:3:4", "http://example.org/foo/bar"); } +test { try parseFail("http://2001::1", "http://example.org/foo/bar"); } +test { try parseFail("http://2001::1]", "http://example.org/foo/bar"); } +test { try parseFail("http://2001::1]:80", "http://example.org/foo/bar"); } +test { try parseFail("http://[::127.0.0.1.]", "http://example.org/foo/bar"); } +test { try parseFail("http://example example.com", "http://other.com/"); } +test { try parseFail("http://Goo%20 goo%7C|.com", "http://other.com/"); } +test { try parseFail("http://[]", "http://other.com/"); } +test { try parseFail("http://[:]", "http://other.com/"); } +test { try parseFail("http://GOO\xa0\x3000goo.com", "http://other.com/"); } +test { try parseFail("http://\xfdd0zyx.com", "http://other.com/"); } +test { try parseFail("http://%ef%b7%90zyx.com", "http://other.com/"); } +test { try parseFail("http://\xff05\xff14\xff11.com", "http://other.com/"); } +test { try parseFail("http://%ef%bc%85%ef%bc%94%ef%bc%91.com", "http://other.com/"); } +test { try parseFail("http://\xff05\xff10\xff10.com", "http://other.com/"); } +test { try parseFail("http://%ef%bc%85%ef%bc%90%ef%bc%90.com", "http://other.com/"); } +test { try parseFail("http://%zz%66%a.com", "http://other.com/"); } +test { try parseFail("http://%25", "http://other.com/"); } +test { try parseFail("http://hello%00", "http://other.com/"); } +test { try parseFail("http://192.168.0.257", "http://other.com/"); } +test { try parseFail("http://%3g%78%63%30%2e%30%32%35%30%2E.01", "http://other.com/"); } +test { try parseFail("http://192.168.0.1 hello", "http://other.com/"); } +test { try parseFail("http://[google.com]", "http://other.com/"); } +test { try parseFail("http://[::1.2.3.4x]", "http://other.com/"); } +test { try parseFail("http://[::1.2.3.]", "http://other.com/"); } +test { try parseFail("http://[::1.2.]", "http://other.com/"); } +test { try parseFail("http://[::.1.2]", "http://other.com/"); } +test { try parseFail("http://[::1.]", "http://other.com/"); } +test { try parseFail("http://[::.1]", "http://other.com/"); } +test { try parseFail("http://[::%31]", "http://other.com/"); } +test { try parseFail("http://%5B::1]", "http://other.com/"); } +test { try parseFail("i", "sc:sd"); } +test { try parseFail("i", "sc:sd/sd"); } +test { try parseFail("../i", "sc:sd"); } +test { try parseFail("../i", "sc:sd/sd"); } +test { try parseFail("/i", "sc:sd"); } +test { try parseFail("/i", "sc:sd/sd"); } +test { try parseFail("?i", "sc:sd"); } +test { try parseFail("?i", "sc:sd/sd"); } +test { try parseFail("http:", "https://example.org/foo/bar"); } +test { try parseFail("http://10000000000", "http://other.com/"); } +test { try parseFail("http://4294967296", "http://other.com/"); } +test { try parseFail("http://0xffffffff1", "http://other.com/"); } +test { try parseFail("http://256.256.256.256", "http://other.com/"); } +test { try parseFail("http://[0:1:2:3:4:5:6:7:8]", "http://example.net/"); } +test { try parseFail("http://f:4294967377/c", "http://example.org/"); } +test { try parseFail("http://f:18446744073709551697/c", "http://example.org/"); } +test { try parseFail("http://f:340282366920938463463374607431768211537/c", "http://example.org/"); } +test { try parseFail("test-a-colon.html", "a:"); } +test { try parseFail("test-a-colon-b.html", "a:b"); } +test { try parseFail("http://1.2.3.4.5", "http://other.com/"); } +test { try parseFail("http://1.2.3.4.5.", "http://other.com/"); } +test { try parseFail("http://256.256.256.256.256", "http://other.com/"); } +test { try parseFail("http://256.256.256.256.256.", "http://other.com/"); } + +test { try parsePass("https://test:@test", null, "https://test@test/", "https://test", "https:", "test", "", "test", "test", "", "/", "", ""); } +test { try parsePass("https://:@test", null, "https://test/", "https://test", "https:", "", "", "test", "test", "", "/", "", ""); } +test { try parsePass("non-special://test:@test/x", null, "non-special://test@test/x", "null", "non-special:", "test", "", "test", "test", "", "/x", "", ""); } +test { try parsePass("non-special://:@test/x", null, "non-special://test/x", "null", "non-special:", "", "", "test", "test", "", "/x", "", ""); } +test { try parsePass("lolscheme:x x#x x", null, "lolscheme:x x#x%20x", "", "lolscheme:", "", "", "", "", "", "x x", "", "#x%20x"); } +test { try parsePass("http://a:b@c\\", null, "http://a:b@c/", "http://c", "http:", "a", "b", "c", "c", "", "/", "", ""); } +test { try parsePass("ws://a@b\\c", null, "ws://a@b/c", "ws://b", "ws:", "a", "", "b", "b", "", "/c", "", ""); } +test { try parsePass("file:///w|m", null, "file:///w|m", "", "file:", "", "", "", "", "", "/w|m", "", ""); } +test { try parsePass("file:///w||m", null, "file:///w||m", "", "file:", "", "", "", "", "", "/w||m", "", ""); } +test { try parsePass("file:///w|/m", null, "file:///w:/m", "", "file:", "", "", "", "", "", "/w:/m", "", ""); } +test { try parsePass("file:C|/m/", null, "file:///C:/m/", "", "file:", "", "", "", "", "", "/C:/m/", "", ""); } +test { try parsePass("file:C||/m/", null, "file:///C||/m/", "", "file:", "", "", "", "", "", "/C||/m/", "", ""); } +test { try parsePass("http://example.com/././foo", null, "http://example.com/foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo", "", ""); } +test { try parsePass("http://example.com/./.foo", null, "http://example.com/.foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/.foo", "", ""); } +test { try parsePass("http://example.com/foo/.", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/./", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/bar/..", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/bar/../", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/..bar", null, "http://example.com/foo/..bar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/..bar", "", ""); } +test { try parsePass("http://example.com/foo/bar/../ton", null, "http://example.com/foo/ton", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/ton", "", ""); } +test { try parsePass("http://example.com/foo/bar/../ton/../../a", null, "http://example.com/a", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/a", "", ""); } +test { try parsePass("http://example.com/foo/../../..", null, "http://example.com/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("http://example.com/foo/../../../ton", null, "http://example.com/ton", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/ton", "", ""); } +test { try parsePass("http://example.com/foo/%2e", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/%2e%2", null, "http://example.com/foo/%2e%2", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/%2e%2", "", ""); } +test { try parsePass("http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar", null, "http://example.com/%2e.bar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%2e.bar", "", ""); } +test { try parsePass("http://example.com////../..", null, "http://example.com//", "http://example.com", "http:", "", "", "example.com", "example.com", "", "//", "", ""); } +test { try parsePass("http://example.com/foo/bar//../..", null, "http://example.com/foo/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/", "", ""); } +test { try parsePass("http://example.com/foo/bar//..", null, "http://example.com/foo/bar/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo/bar/", "", ""); } +test { try parsePass("http://example.com/foo", null, "http://example.com/foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo", "", ""); } +test { try parsePass("http://example.com/%20foo", null, "http://example.com/%20foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%20foo", "", ""); } +test { try parsePass("http://example.com/foo%", null, "http://example.com/foo%", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%", "", ""); } +test { try parsePass("http://example.com/foo%2", null, "http://example.com/foo%2", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%2", "", ""); } +test { try parsePass("http://example.com/foo%2zbar", null, "http://example.com/foo%2zbar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%2zbar", "", ""); } +test { try parsePass("http://example.com/foo%2\xc2\xa9zbar", null, "http://example.com/foo%2%C3%82%C2%A9zbar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%2%C3%82%C2%A9zbar", "", ""); } +test { try parsePass("http://example.com/foo%41%7a", null, "http://example.com/foo%41%7a", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%41%7a", "", ""); } +test { try parsePass("http://example.com/foo\t\x91%91", null, "http://example.com/foo%C2%91%91", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%C2%91%91", "", ""); } +test { try parsePass("http://example.com/foo%00%51", null, "http://example.com/foo%00%51", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foo%00%51", "", ""); } +test { try parsePass("http://example.com/(%28:%3A%29)", null, "http://example.com/(%28:%3A%29)", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/(%28:%3A%29)", "", ""); } +test { try parsePass("http://example.com/%3A%3a%3C%3c", null, "http://example.com/%3A%3a%3C%3c", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%3A%3a%3C%3c", "", ""); } +test { try parsePass("http://example.com/foo\tbar", null, "http://example.com/foobar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/foobar", "", ""); } +test { try parsePass("http://example.com\\\\foo\\\\bar", null, "http://example.com//foo//bar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "//foo//bar", "", ""); } +test { try parsePass("http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", null, "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%7Ffp3%3Eju%3Dduvgw%3Dd", "", ""); } +test { try parsePass("http://example.com/@asdf%40", null, "http://example.com/@asdf%40", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/@asdf%40", "", ""); } +test { try parsePass("http://example.com/\x4f60\x597d\x4f60\x597d", null, "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", "", ""); } +test { try parsePass("http://example.com/\x2025/foo", null, "http://example.com/%E2%80%A5/foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%E2%80%A5/foo", "", ""); } +test { try parsePass("http://example.com/\xfeff/foo", null, "http://example.com/%EF%BB%BF/foo", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%EF%BB%BF/foo", "", ""); } +test { try parsePass("http://example.com/\x202e/foo/\x202d/bar", null, "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/%E2%80%AE/foo/%E2%80%AD/bar", "", ""); } +test { try parsePass("http://www.google.com/foo?bar=baz#", null, "http://www.google.com/foo?bar=baz#", "http://www.google.com", "http:", "", "", "www.google.com", "www.google.com", "", "/foo", "?bar=baz", ""); } +test { try parsePass("http://www.google.com/foo?bar=baz# \xbb", null, "http://www.google.com/foo?bar=baz#%20%C2%BB", "http://www.google.com", "http:", "", "", "www.google.com", "www.google.com", "", "/foo", "?bar=baz", "#%20%C2%BB"); } +test { try parsePass("data:test# \xbb", null, "data:test#%20%C2%BB", "null", "data:", "", "", "", "", "", "test", "", "#%20%C2%BB"); } +test { try parsePass("http://www.google.com", null, "http://www.google.com/", "http://www.google.com", "http:", "", "", "www.google.com", "www.google.com", "", "/", "", ""); } +test { try parsePass("http://192.0x00A80001", null, "http://192.168.0.1/", "http://192.168.0.1", "http:", "", "", "192.168.0.1", "192.168.0.1", "", "/", "", ""); } +test { try parsePass("http://www/foo%2Ehtml", null, "http://www/foo%2Ehtml", "http://www", "http:", "", "", "www", "www", "", "/foo%2Ehtml", "", ""); } +test { try parsePass("http://www/foo/%2E/html", null, "http://www/foo/html", "http://www", "http:", "", "", "www", "www", "", "/foo/html", "", ""); } +test { try parsePass("http://%25DOMAIN:foobar@foodomain.com/", null, "http://%25DOMAIN:foobar@foodomain.com/", "http://foodomain.com", "http:", "%25DOMAIN", "foobar", "foodomain.com", "foodomain.com", "", "/", "", ""); } +test { try parsePass("http:\\\\www.google.com\\foo", null, "http://www.google.com/foo", "http://www.google.com", "http:", "", "", "www.google.com", "www.google.com", "", "/foo", "", ""); } +test { try parsePass("http://foo:80/", null, "http://foo/", "http://foo", "http:", "", "", "foo", "foo", "", "/", "", ""); } +test { try parsePass("http://foo:81/", null, "http://foo:81/", "http://foo:81", "http:", "", "", "foo:81", "foo", "81", "/", "", ""); } +test { try parsePass("httpa://foo:80/", null, "httpa://foo:80/", "null", "httpa:", "", "", "foo:80", "foo", "80", "/", "", ""); } +test { try parsePass("https://foo:443/", null, "https://foo/", "https://foo", "https:", "", "", "foo", "foo", "", "/", "", ""); } +test { try parsePass("https://foo:80/", null, "https://foo:80/", "https://foo:80", "https:", "", "", "foo:80", "foo", "80", "/", "", ""); } +test { try parsePass("ftp://foo:21/", null, "ftp://foo/", "ftp://foo", "ftp:", "", "", "foo", "foo", "", "/", "", ""); } +test { try parsePass("ftp://foo:80/", null, "ftp://foo:80/", "ftp://foo:80", "ftp:", "", "", "foo:80", "foo", "80", "/", "", ""); } +test { try parsePass("gopher://foo:70/", null, "gopher://foo:70/", "null", "gopher:", "", "", "foo:70", "foo", "70", "/", "", ""); } +test { try parsePass("gopher://foo:443/", null, "gopher://foo:443/", "null", "gopher:", "", "", "foo:443", "foo", "443", "/", "", ""); } +test { try parsePass("ws://foo:80/", null, "ws://foo/", "ws://foo", "ws:", "", "", "foo", "foo", "", "/", "", ""); } +test { try parsePass("ws://foo:81/", null, "ws://foo:81/", "ws://foo:81", "ws:", "", "", "foo:81", "foo", "81", "/", "", ""); } +test { try parsePass("ws://foo:443/", null, "ws://foo:443/", "ws://foo:443", "ws:", "", "", "foo:443", "foo", "443", "/", "", ""); } +test { try parsePass("ws://foo:815/", null, "ws://foo:815/", "ws://foo:815", "ws:", "", "", "foo:815", "foo", "815", "/", "", ""); } +test { try parsePass("wss://foo:80/", null, "wss://foo:80/", "wss://foo:80", "wss:", "", "", "foo:80", "foo", "80", "/", "", ""); } +test { try parsePass("wss://foo:81/", null, "wss://foo:81/", "wss://foo:81", "wss:", "", "", "foo:81", "foo", "81", "/", "", ""); } +test { try parsePass("wss://foo:443/", null, "wss://foo/", "wss://foo", "wss:", "", "", "foo", "foo", "", "/", "", ""); } +test { try parsePass("wss://foo:815/", null, "wss://foo:815/", "wss://foo:815", "wss:", "", "", "foo:815", "foo", "815", "/", "", ""); } +test { try parsePass("http:/example.com/", null, "http://example.com/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("ftp:/example.com/", null, "ftp://example.com/", "ftp://example.com", "ftp:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("https:/example.com/", null, "https://example.com/", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("madeupscheme:/example.com/", null, "madeupscheme:/example.com/", "null", "madeupscheme:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("file:/example.com/", null, "file:///example.com/", "", "file:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("ftps:/example.com/", null, "ftps:/example.com/", "null", "ftps:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("gopher:/example.com/", null, "gopher:/example.com/", "null", "gopher:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("ws:/example.com/", null, "ws://example.com/", "ws://example.com", "ws:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("wss:/example.com/", null, "wss://example.com/", "wss://example.com", "wss:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("data:/example.com/", null, "data:/example.com/", "null", "data:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("javascript:/example.com/", null, "javascript:/example.com/", "null", "javascript:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("mailto:/example.com/", null, "mailto:/example.com/", "null", "mailto:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("http:example.com/", null, "http://example.com/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("ftp:example.com/", null, "ftp://example.com/", "ftp://example.com", "ftp:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("https:example.com/", null, "https://example.com/", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("madeupscheme:example.com/", null, "madeupscheme:example.com/", "null", "madeupscheme:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("ftps:example.com/", null, "ftps:example.com/", "null", "ftps:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("gopher:example.com/", null, "gopher:example.com/", "null", "gopher:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("ws:example.com/", null, "ws://example.com/", "ws://example.com", "ws:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("wss:example.com/", null, "wss://example.com/", "wss://example.com", "wss:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("data:example.com/", null, "data:example.com/", "null", "data:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("javascript:example.com/", null, "javascript:example.com/", "null", "javascript:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("mailto:example.com/", null, "mailto:example.com/", "null", "mailto:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("https://example.com/aaa/bbb/%2e%2e?query", null, "https://example.com/aaa/?query", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/aaa/", "?query", ""); } +test { try parsePass("http:@www.example.com", null, "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:/@www.example.com", null, "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://@www.example.com", null, "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:a:b@www.example.com", null, "http://a:b@www.example.com/", "http://www.example.com", "http:", "a", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:/a:b@www.example.com", null, "http://a:b@www.example.com/", "http://www.example.com", "http:", "a", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://a:b@www.example.com", null, "http://a:b@www.example.com/", "http://www.example.com", "http:", "a", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://@pple.com", null, "http://pple.com/", "http://pple.com", "http:", "", "", "pple.com", "pple.com", "", "/", "", ""); } +test { try parsePass("http::b@www.example.com", null, "http://:b@www.example.com/", "http://www.example.com", "http:", "", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:/:b@www.example.com", null, "http://:b@www.example.com/", "http://www.example.com", "http:", "", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://:b@www.example.com", null, "http://:b@www.example.com/", "http://www.example.com", "http:", "", "b", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:a:@www.example.com", null, "http://a@www.example.com/", "http://www.example.com", "http:", "a", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http:/a:@www.example.com", null, "http://a@www.example.com/", "http://www.example.com", "http:", "a", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://a:@www.example.com", null, "http://a@www.example.com/", "http://www.example.com", "http:", "a", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("http://www.@pple.com", null, "http://www.@pple.com/", "http://pple.com", "http:", "www.", "", "pple.com", "pple.com", "", "/", "", ""); } +test { try parsePass("http://:@www.example.com", null, "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("file:.", null, "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("\x00\x1b\x04\x12 http://example.com/\x1f \r ", null, "http://example.com/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("non-special:opaque ", null, "non-special:opaque", "null", "non-special:", "", "", "", "", "", "opaque", "", ""); } +test { try parsePass("non-special:opaque ?hi", null, "non-special:opaque %20?hi", "null", "non-special:", "", "", "", "", "", "opaque %20", "?hi", ""); } +test { try parsePass("non-special:opaque #hi", null, "non-special:opaque %20#hi", "null", "non-special:", "", "", "", "", "", "opaque %20", "", "#hi"); } +test { try parsePass("non-special:opaque x?hi", null, "non-special:opaque x?hi", "null", "non-special:", "", "", "", "", "", "opaque x", "?hi", ""); } +test { try parsePass("non-special:opaque x#hi", null, "non-special:opaque x#hi", "null", "non-special:", "", "", "", "", "", "opaque x", "", "#hi"); } +test { try parsePass("non-special:opaque \t\t \t#hi", null, "non-special:opaque %20#hi", "null", "non-special:", "", "", "", "", "", "opaque %20", "", "#hi"); } +test { try parsePass("non-special:opaque \t\t #hi", null, "non-special:opaque %20#hi", "null", "non-special:", "", "", "", "", "", "opaque %20", "", "#hi"); } +test { try parsePass("non-special:opaque\t\t \r #hi", null, "non-special:opaque %20#hi", "null", "non-special:", "", "", "", "", "", "opaque %20", "", "#hi"); } +test { try parsePass("https://x/\xfffd?\xfffd#\xfffd", null, "https://x/%EF%BF%BD?%EF%BF%BD#%EF%BF%BD", "https://x", "https:", "", "", "x", "x", "", "/%EF%BF%BD", "?%EF%BF%BD", "#%EF%BF%BD"); } +test { try parsePass("https://fa\xdf.ExAmPlE/", null, "https://xn--fa-hia.example/", "https://xn--fa-hia.example", "https:", "", "", "xn--fa-hia.example", "xn--fa-hia.example", "", "/", "", ""); } +test { try parsePass("sc://fa\xdf.ExAmPlE/", null, "sc://fa%C3%9F.ExAmPlE/", "null", "sc:", "", "", "fa%C3%9F.ExAmPlE", "fa%C3%9F.ExAmPlE", "", "/", "", ""); } +test { try parsePass("http://./", null, "http://./", "http://.", "http:", "", "", ".", ".", "", "/", "", ""); } +test { try parsePass("http://../", null, "http://../", "http://..", "http:", "", "", "..", "..", "", "/", "", ""); } +test { try parsePass("h://.", null, "h://.", "null", "h:", "", "", ".", ".", "", "", "", ""); } +test { try parsePass("http://host/?'", null, "http://host/?%27", "http://host", "http:", "", "", "host", "host", "", "/", "?%27", ""); } +test { try parsePass("notspecial://host/?'", null, "notspecial://host/?'", "null", "notspecial:", "", "", "host", "host", "", "/", "?'", ""); } +test { try parsePass("about:/../", null, "about:/", "null", "about:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("data:/../", null, "data:/", "null", "data:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("javascript:/../", null, "javascript:/", "null", "javascript:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("mailto:/../", null, "mailto:/", "null", "mailto:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("sc://\xf1.test/", null, "sc://%C3%B1.test/", "null", "sc:", "", "", "%C3%B1.test", "%C3%B1.test", "", "/", "", ""); } +test { try parsePass("sc://%/", null, "sc://%/", "", "sc:", "", "", "%", "%", "", "/", "", ""); } +test { try parsePass("sc:\\../", null, "sc:\\../", "null", "sc:", "", "", "", "", "", "\\../", "", ""); } +test { try parsePass("sc::a@example.net", null, "sc::a@example.net", "null", "sc:", "", "", "", "", "", ":a@example.net", "", ""); } +test { try parsePass("wow:%NBD", null, "wow:%NBD", "null", "wow:", "", "", "", "", "", "%NBD", "", ""); } +test { try parsePass("wow:%1G", null, "wow:%1G", "null", "wow:", "", "", "", "", "", "%1G", "", ""); } +test { try parsePass("wow:\xffff", null, "wow:%EF%BF%BF", "null", "wow:", "", "", "", "", "", "%EF%BF%BF", "", ""); } +test { try parsePass("foo://ho\tst/", null, "foo://host/", "", "foo:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("foo://ho\nst/", null, "foo://host/", "", "foo:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("foo://ho\rst/", null, "foo://host/", "", "foo:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("http://ho\tst/", null, "http://host/", "", "http:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("http://ho\nst/", null, "http://host/", "", "http:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("http://ho\rst/", null, "http://host/", "", "http:", "", "", "host", "host", "", "/", "", ""); } +test { try parsePass("http://!\"$&'()*+,-.;=_`{}~/", null, "http://!\"$&'()*+,-.;=_`{}~/", "http://!\"$&'()*+,-.;=_`{}~", "http:", "", "", "!\"$&'()*+,-.;=_`{}~", "!\"$&'()*+,-.;=_`{}~", "", "/", "", ""); } +test { try parsePass("sc://\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x7f!\"$%&'()*+,-.;=_`{}~/", null, "sc://%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~/", "null", "sc:", "", "", "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", "", "/", "", ""); } +test { try parsePass("ftp://%e2%98%83", null, "ftp://xn--n3h/", "ftp://xn--n3h", "ftp:", "", "", "xn--n3h", "xn--n3h", "", "/", "", ""); } +test { try parsePass("https://%e2%98%83", null, "https://xn--n3h/", "https://xn--n3h", "https:", "", "", "xn--n3h", "xn--n3h", "", "/", "", ""); } +test { try parsePass("http://127.0.0.1:10100/relative_import.html", null, "http://127.0.0.1:10100/relative_import.html", "http://127.0.0.1:10100", "http:", "", "", "127.0.0.1:10100", "127.0.0.1", "10100", "/relative_import.html", "", ""); } +test { try parsePass("http://facebook.com/?foo=%7B%22abc%22", null, "http://facebook.com/?foo=%7B%22abc%22", "http://facebook.com", "http:", "", "", "facebook.com", "facebook.com", "", "/", "?foo=%7B%22abc%22", ""); } +test { try parsePass("https://localhost:3000/jqueryui@1.2.3", null, "https://localhost:3000/jqueryui@1.2.3", "https://localhost:3000", "https:", "", "", "localhost:3000", "localhost", "3000", "/jqueryui@1.2.3", "", ""); } +test { try parsePass("h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg", null, "http://host:9000/path?query#frag", "http://host:9000", "http:", "", "", "host:9000", "host", "9000", "/path", "?query", "#frag"); } +test { try parsePass("http://foo.bar/baz?qux#foo\x08bar", null, "http://foo.bar/baz?qux#foo%08bar", "http://foo.bar", "http:", "", "", "foo.bar", "foo.bar", "", "/baz", "?qux", "#foo%08bar"); } +test { try parsePass("http://foo.bar/baz?qux#foo\"bar", null, "http://foo.bar/baz?qux#foo%22bar", "http://foo.bar", "http:", "", "", "foo.bar", "foo.bar", "", "/baz", "?qux", "#foo%22bar"); } +test { try parsePass("http://foo.bar/baz?qux#foobar", null, "http://foo.bar/baz?qux#foo%3Ebar", "http://foo.bar", "http:", "", "", "foo.bar", "foo.bar", "", "/baz", "?qux", "#foo%3Ebar"); } +test { try parsePass("http://foo.bar/baz?qux#foo`bar", null, "http://foo.bar/baz?qux#foo%60bar", "http://foo.bar", "http:", "", "", "foo.bar", "foo.bar", "", "/baz", "?qux", "#foo%60bar"); } +test { try parsePass("https://0x.0x.0", null, "https://0.0.0.0/", "https://0.0.0.0", "https:", "", "", "0.0.0.0", "0.0.0.0", "", "/", "", ""); } +test { try parsePass("file:///C%3A/", null, "file:///C%3A/", "", "file:", "", "", "", "", "", "/C%3A/", "", ""); } +test { try parsePass("file:///C%7C/", null, "file:///C%7C/", "", "file:", "", "", "", "", "", "/C%7C/", "", ""); } +test { try parsePass("asdf://%43%7C/", null, "asdf://%43%7C/", "null", "asdf:", "", "", "%43%7C", "%43%7C", "", "/", "", ""); } +test { try parsePass("file:\\\\//", null, "file:////", "", "file:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("file:\\\\\\\\", null, "file:////", "", "file:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("file:\\\\\\\\?fox", null, "file:////?fox", "", "file:", "", "", "", "", "", "//", "?fox", ""); } +test { try parsePass("file:\\\\\\\\#guppy", null, "file:////#guppy", "", "file:", "", "", "", "", "", "//", "", "#guppy"); } +test { try parsePass("file://spider///", null, "file://spider///", "", "file:", "", "", "spider", "spider", "", "///", "", ""); } +test { try parsePass("file:\\\\localhost//", null, "file:////", "", "file:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("file:///localhost//cat", null, "file:///localhost//cat", "", "file:", "", "", "", "", "", "/localhost//cat", "", ""); } +test { try parsePass("file://\\/localhost//cat", null, "file:////localhost//cat", "", "file:", "", "", "", "", "", "//localhost//cat", "", ""); } +test { try parsePass("file://localhost//a//../..//", null, "file://///", "", "file:", "", "", "", "", "", "///", "", ""); } +test { try parsePass("file://example.net/C:/", null, "file://example.net/C:/", "", "file:", "", "", "example.net", "example.net", "", "/C:/", "", ""); } +test { try parsePass("file://1.2.3.4/C:/", null, "file://1.2.3.4/C:/", "", "file:", "", "", "1.2.3.4", "1.2.3.4", "", "/C:/", "", ""); } +test { try parsePass("file://[1::8]/C:/", null, "file://[1::8]/C:/", "", "file:", "", "", "[1::8]", "[1::8]", "", "/C:/", "", ""); } +test { try parsePass("file:/C|/", null, "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("file://C|/", null, "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("file:", null, "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("file:?q=v", null, "file:///?q=v", "", "file:", "", "", "", "", "", "/", "?q=v", ""); } +test { try parsePass("file:#frag", null, "file:///#frag", "", "file:", "", "", "", "", "", "/", "", "#frag"); } +test { try parsePass("file:///Y:", null, "file:///Y:", "", "file:", "", "", "", "", "", "/Y:", "", ""); } +test { try parsePass("file:///Y:/", null, "file:///Y:/", "", "file:", "", "", "", "", "", "/Y:/", "", ""); } +test { try parsePass("file:///./Y", null, "file:///Y", "", "file:", "", "", "", "", "", "/Y", "", ""); } +test { try parsePass("file:///./Y:", null, "file:///Y:", "", "file:", "", "", "", "", "", "/Y:", "", ""); } +test { try parsePass("file:///y:", null, "file:///y:", "", "file:", "", "", "", "", "", "/y:", "", ""); } +test { try parsePass("file:///y:/", null, "file:///y:/", "", "file:", "", "", "", "", "", "/y:/", "", ""); } +test { try parsePass("file:///./y", null, "file:///y", "", "file:", "", "", "", "", "", "/y", "", ""); } +test { try parsePass("file:///./y:", null, "file:///y:", "", "file:", "", "", "", "", "", "/y:", "", ""); } +test { try parsePass("file://localhost//a//../..//foo", null, "file://///foo", "", "file:", "", "", "", "", "", "///foo", "", ""); } +test { try parsePass("file://localhost////foo", null, "file://////foo", "", "file:", "", "", "", "", "", "////foo", "", ""); } +test { try parsePass("file:////foo", null, "file:////foo", "", "file:", "", "", "", "", "", "//foo", "", ""); } +test { try parsePass("file:.//p", null, "file:////p", "", "file:", "", "", "", "", "", "//p", "", ""); } +test { try parsePass("file:/.//p", null, "file:////p", "", "file:", "", "", "", "", "", "//p", "", ""); } +test { try parsePass("sc://\xf1", null, "sc://%C3%B1", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "", "", ""); } +test { try parsePass("sc://\xf1?x", null, "sc://%C3%B1?x", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "", "?x", ""); } +test { try parsePass("sc://\xf1#x", null, "sc://%C3%B1#x", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "", "", "#x"); } +test { try parsePass("sc://?", null, "sc://?", "", "sc:", "", "", "", "", "", "", "", ""); } +test { try parsePass("sc://#", null, "sc://#", "", "sc:", "", "", "", "", "", "", "", ""); } +test { try parsePass("tftp://foobar.com/someconfig;mode=netascii", null, "tftp://foobar.com/someconfig;mode=netascii", "null", "tftp:", "", "", "foobar.com", "foobar.com", "", "/someconfig;mode=netascii", "", ""); } +test { try parsePass("telnet://user:pass@foobar.com:23/", null, "telnet://user:pass@foobar.com:23/", "null", "telnet:", "user", "pass", "foobar.com:23", "foobar.com", "23", "/", "", ""); } +test { try parsePass("ut2004://10.10.10.10:7777/Index.ut2", null, "ut2004://10.10.10.10:7777/Index.ut2", "null", "ut2004:", "", "", "10.10.10.10:7777", "10.10.10.10", "7777", "/Index.ut2", "", ""); } +test { try parsePass("redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", null, "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", "null", "redis:", "foo", "bar", "somehost:6379", "somehost", "6379", "/0", "?baz=bam&qux=baz", ""); } +test { try parsePass("rsync://foo@host:911/sup", null, "rsync://foo@host:911/sup", "null", "rsync:", "foo", "", "host:911", "host", "911", "/sup", "", ""); } +test { try parsePass("git://github.com/foo/bar.git", null, "git://github.com/foo/bar.git", "null", "git:", "", "", "github.com", "github.com", "", "/foo/bar.git", "", ""); } +test { try parsePass("irc://myserver.com:6999/channel?passwd", null, "irc://myserver.com:6999/channel?passwd", "null", "irc:", "", "", "myserver.com:6999", "myserver.com", "6999", "/channel", "?passwd", ""); } +test { try parsePass("dns://fw.example.org:9999/foo.bar.org?type=TXT", null, "dns://fw.example.org:9999/foo.bar.org?type=TXT", "null", "dns:", "", "", "fw.example.org:9999", "fw.example.org", "9999", "/foo.bar.org", "?type=TXT", ""); } +test { try parsePass("ldap://localhost:389/ou=People,o=JNDITutorial", null, "ldap://localhost:389/ou=People,o=JNDITutorial", "null", "ldap:", "", "", "localhost:389", "localhost", "389", "/ou=People,o=JNDITutorial", "", ""); } +test { try parsePass("git+https://github.com/foo/bar", null, "git+https://github.com/foo/bar", "null", "git+https:", "", "", "github.com", "github.com", "", "/foo/bar", "", ""); } +test { try parsePass("urn:ietf:rfc:2648", null, "urn:ietf:rfc:2648", "null", "urn:", "", "", "", "", "", "ietf:rfc:2648", "", ""); } +test { try parsePass("tag:joe@example.org,2001:foo/bar", null, "tag:joe@example.org,2001:foo/bar", "null", "tag:", "", "", "", "", "", "joe@example.org,2001:foo/bar", "", ""); } +test { try parsePass("non-spec:/.//", null, "non-spec:/.//", "", "non-spec:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("non-spec:/..//", null, "non-spec:/.//", "", "non-spec:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("non-spec:/a/..//", null, "non-spec:/.//", "", "non-spec:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("non-spec:/.//path", null, "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("non-spec:/..//path", null, "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("non-spec:/a/..//path", null, "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("non-special://%E2%80%A0/", null, "non-special://%E2%80%A0/", "", "non-special:", "", "", "%E2%80%A0", "%E2%80%A0", "", "/", "", ""); } +test { try parsePass("non-special://H%4fSt/path", null, "non-special://H%4fSt/path", "", "non-special:", "", "", "H%4fSt", "H%4fSt", "", "/path", "", ""); } +test { try parsePass("non-special://[1:2:0:0:5:0:0:0]/", null, "non-special://[1:2:0:0:5::]/", "", "non-special:", "", "", "[1:2:0:0:5::]", "[1:2:0:0:5::]", "", "/", "", ""); } +test { try parsePass("non-special://[1:2:0:0:0:0:0:3]/", null, "non-special://[1:2::3]/", "", "non-special:", "", "", "[1:2::3]", "[1:2::3]", "", "/", "", ""); } +test { try parsePass("non-special://[1:2::3]:80/", null, "non-special://[1:2::3]:80/", "", "non-special:", "", "", "[1:2::3]:80", "[1:2::3]", "80", "/", "", ""); } +test { try parsePass("blob:https://example.com:443/", null, "blob:https://example.com:443/", "https://example.com", "blob:", "", "", "", "", "", "https://example.com:443/", "", ""); } +test { try parsePass("blob:http://example.org:88/", null, "blob:http://example.org:88/", "http://example.org:88", "blob:", "", "", "", "", "", "http://example.org:88/", "", ""); } +test { try parsePass("blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", null, "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", "null", "blob:", "", "", "", "", "", "d3958f5c-0777-0845-9dcf-2cb28783acaf", "", ""); } +test { try parsePass("blob:", null, "blob:", "null", "blob:", "", "", "", "", "", "", "", ""); } +test { try parsePass("blob:blob:", null, "blob:blob:", "null", "blob:", "", "", "", "", "", "blob:", "", ""); } +test { try parsePass("blob:blob:https://example.org/", null, "blob:blob:https://example.org/", "null", "blob:", "", "", "", "", "", "blob:https://example.org/", "", ""); } +test { try parsePass("blob:about:blank", null, "blob:about:blank", "null", "blob:", "", "", "", "", "", "about:blank", "", ""); } +test { try parsePass("blob:file://host/path", null, "blob:file://host/path", "", "blob:", "", "", "", "", "", "file://host/path", "", ""); } +test { try parsePass("blob:ftp://host/path", null, "blob:ftp://host/path", "null", "blob:", "", "", "", "", "", "ftp://host/path", "", ""); } +test { try parsePass("blob:ws://example.org/", null, "blob:ws://example.org/", "null", "blob:", "", "", "", "", "", "ws://example.org/", "", ""); } +test { try parsePass("blob:wss://example.org/", null, "blob:wss://example.org/", "null", "blob:", "", "", "", "", "", "wss://example.org/", "", ""); } +test { try parsePass("blob:http%3a//example.org/", null, "blob:http%3a//example.org/", "null", "blob:", "", "", "", "", "", "http%3a//example.org/", "", ""); } +test { try parsePass("http://0x7f.0.0.0x7g", null, "http://0x7f.0.0.0x7g/", "", "http:", "", "", "0x7f.0.0.0x7g", "0x7f.0.0.0x7g", "", "/", "", ""); } +test { try parsePass("http://0X7F.0.0.0X7G", null, "http://0x7f.0.0.0x7g/", "", "http:", "", "", "0x7f.0.0.0x7g", "0x7f.0.0.0x7g", "", "/", "", ""); } +test { try parsePass("http://[0:1:0:1:0:1:0:1]", null, "http://[0:1:0:1:0:1:0:1]/", "", "http:", "", "", "[0:1:0:1:0:1:0:1]", "[0:1:0:1:0:1:0:1]", "", "/", "", ""); } +test { try parsePass("http://[1:0:1:0:1:0:1:0]", null, "http://[1:0:1:0:1:0:1:0]/", "", "http:", "", "", "[1:0:1:0:1:0:1:0]", "[1:0:1:0:1:0:1:0]", "", "/", "", ""); } +test { try parsePass("http://example.org/test?\"", null, "http://example.org/test?%22", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%22", ""); } +test { try parsePass("http://example.org/test?#", null, "http://example.org/test?#", "", "http:", "", "", "example.org", "example.org", "", "/test", "", ""); } +test { try parsePass("http://example.org/test?<", null, "http://example.org/test?%3C", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%3C", ""); } +test { try parsePass("http://example.org/test?>", null, "http://example.org/test?%3E", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%3E", ""); } +test { try parsePass("http://example.org/test?\x2323", null, "http://example.org/test?%E2%8C%A3", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%E2%8C%A3", ""); } +test { try parsePass("http://example.org/test?%23%23", null, "http://example.org/test?%23%23", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%23%23", ""); } +test { try parsePass("http://example.org/test?%GH", null, "http://example.org/test?%GH", "", "http:", "", "", "example.org", "example.org", "", "/test", "?%GH", ""); } +test { try parsePass("http://example.org/test?a#%EF", null, "http://example.org/test?a#%EF", "", "http:", "", "", "example.org", "example.org", "", "/test", "?a", "#%EF"); } +test { try parsePass("http://example.org/test?a#%GH", null, "http://example.org/test?a#%GH", "", "http:", "", "", "example.org", "example.org", "", "/test", "?a", "#%GH"); } +test { try parsePass("http://example.org/test?a#b\x00c", null, "http://example.org/test?a#b%00c", "", "http:", "", "", "example.org", "example.org", "", "/test", "?a", "#b%00c"); } +test { try parsePass("non-spec://example.org/test?a#b\x00c", null, "non-spec://example.org/test?a#b%00c", "", "non-spec:", "", "", "example.org", "example.org", "", "/test", "?a", "#b%00c"); } +test { try parsePass("non-spec:/test?a#b\x00c", null, "non-spec:/test?a#b%00c", "", "non-spec:", "", "", "", "", "", "/test", "?a", "#b%00c"); } +test { try parsePass("file://a\xadb/p", null, "file://ab/p", "", "file:", "", "", "ab", "ab", "", "/p", "", ""); } +test { try parsePass("file://a%C2%ADb/p", null, "file://ab/p", "", "file:", "", "", "ab", "ab", "", "/p", "", ""); } +test { try parsePass("file://loC\xd835\xdc00\xd835\xdc0b\xd835\xdc07\xd835\xdc28\xd835\xdc2c\xd835\xdc2d/usr/bin", null, "file:///usr/bin", "", "file:", "", "", "", "", "", "/usr/bin", "", ""); } +test { try parsePass("non-special:cannot-be-a-base-url-\x00\x01\x1f\x1e~\x7f\x80", null, "non-special:cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", "null", "non-special:", "", "", "", "", "", "cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", "", ""); } +test { try parsePass("non-special:cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", null, "non-special:cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", "null", "non-special:", "", "", "", "", "", "cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", "", ""); } +test { try parsePass("https://www.example.com/path{\x7fpath.html?query'\x7f=query#fragment<\x7ffragment", null, "https://www.example.com/path%7B%7Fpath.html?query%27%7F=query#fragment%3C%7Ffragment", "https://www.example.com", "https:", "", "", "www.example.com", "www.example.com", "", "/path%7B%7Fpath.html", "?query%27%7F=query", "#fragment%3C%7Ffragment"); } +test { try parsePass("foo:// !\"$%&'()*+,-.;<=>@[\\]^_`{|}~@host/", null, "foo://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", "null", "foo:", "%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~", "", "host", "host", "", "/", "", ""); } +test { try parsePass("wss:// !\"$%&'()*+,-.;<=>@[]^_`{|}~@host/", null, "wss://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/", "wss://host", "wss:", "%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~", "", "host", "host", "", "/", "", ""); } +test { try parsePass("foo://joe: !\"$%&'()*+,-.:;<=>@[\\]^_`{|}~@host/", null, "foo://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", "null", "foo:", "joe", "%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~", "host", "host", "", "/", "", ""); } +test { try parsePass("wss://joe: !\"$%&'()*+,-.:;<=>@[]^_`{|}~@host/", null, "wss://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/", "wss://host", "wss:", "joe", "%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~", "host", "host", "", "/", "", ""); } +test { try parsePass("foo://!\"$%&'()*+,-.;=_`{}~/", null, "foo://!\"$%&'()*+,-.;=_`{}~/", "null", "foo:", "", "", "!\"$%&'()*+,-.;=_`{}~", "!\"$%&'()*+,-.;=_`{}~", "", "/", "", ""); } +test { try parsePass("wss://!\"$&'()*+,-.;=_`{}~/", null, "wss://!\"$&'()*+,-.;=_`{}~/", "wss://!\"$&'()*+,-.;=_`{}~", "wss:", "", "", "!\"$&'()*+,-.;=_`{}~", "!\"$&'()*+,-.;=_`{}~", "", "/", "", ""); } +test { try parsePass("foo://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~", null, "foo://host/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]%5E_%60%7B|%7D~", "null", "foo:", "", "", "host", "host", "", "/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]%5E_%60%7B|%7D~", "", ""); } +test { try parsePass("wss://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~", null, "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B|%7D~", "wss://host", "wss:", "", "", "host", "host", "", "/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B|%7D~", "", ""); } +test { try parsePass("foo://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", null, "foo://host/dir/?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", "null", "foo:", "", "", "host", "host", "", "/dir/", "?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", ""); } +test { try parsePass("wss://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", null, "wss://host/dir/?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", "wss://host", "wss:", "", "", "host", "host", "", "/dir/", "?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", ""); } +test { try parsePass("foo://host/dir/# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", null, "foo://host/dir/#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", "null", "foo:", "", "", "host", "host", "", "/dir/", "", "#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~"); } +test { try parsePass("wss://host/dir/# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", null, "wss://host/dir/#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", "wss://host", "wss:", "", "", "host", "host", "", "/dir/", "", "#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~"); } +test { try parsePass("http://foo.09..", null, "http://foo.09../", "", "http:", "", "", "foo.09..", "foo.09..", "", "/", "", ""); } +test { try parsePass("https://x/\x00y", null, "https://x/%00y", "", "https:", "", "", "x", "x", "", "/%00y", "", ""); } +test { try parsePass("https://x/?\x00y", null, "https://x/?%00y", "", "https:", "", "", "x", "x", "", "/", "?%00y", ""); } +test { try parsePass("https://x/?#\x00y", null, "https://x/?#%00y", "", "https:", "", "", "x", "x", "", "/", "", "#%00y"); } +test { try parsePass("https://x/\xffffy", null, "https://x/%EF%BF%BFy", "", "https:", "", "", "x", "x", "", "/%EF%BF%BFy", "", ""); } +test { try parsePass("https://x/?\xffffy", null, "https://x/?%EF%BF%BFy", "", "https:", "", "", "x", "x", "", "/", "?%EF%BF%BFy", ""); } +test { try parsePass("https://x/?#\xffffy", null, "https://x/?#%EF%BF%BFy", "", "https:", "", "", "x", "x", "", "/", "", "#%EF%BF%BFy"); } +test { try parsePass("non-special:\x00y", null, "non-special:%00y", "", "non-special:", "", "", "", "", "", "%00y", "", ""); } +test { try parsePass("non-special:x/\x00y", null, "non-special:x/%00y", "", "non-special:", "", "", "", "", "", "x/%00y", "", ""); } +test { try parsePass("non-special:x/?\x00y", null, "non-special:x/?%00y", "", "non-special:", "", "", "", "", "", "x/", "?%00y", ""); } +test { try parsePass("non-special:x/?#\x00y", null, "non-special:x/?#%00y", "", "non-special:", "", "", "", "", "", "x/", "", "#%00y"); } +test { try parsePass("non-special:\xffffy", null, "non-special:%EF%BF%BFy", "", "non-special:", "", "", "", "", "", "%EF%BF%BFy", "", ""); } +test { try parsePass("non-special:x/\xffffy", null, "non-special:x/%EF%BF%BFy", "", "non-special:", "", "", "", "", "", "x/%EF%BF%BFy", "", ""); } +test { try parsePass("non-special:x/?\xffffy", null, "non-special:x/?%EF%BF%BFy", "", "non-special:", "", "", "", "", "", "x/", "?%EF%BF%BFy", ""); } +test { try parsePass("non-special:x/?#\xffffy", null, "non-special:x/?#%EF%BF%BFy", "", "non-special:", "", "", "", "", "", "x/", "", "#%EF%BF%BFy"); } +test { try parsePass("https://example.com/\"quoted\"", null, "https://example.com/%22quoted%22", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/%22quoted%22", "", ""); } +test { try parsePass("https://a%C2%ADb/", null, "https://ab/", "https://ab", "https:", "", "", "ab", "ab", "", "/", "", ""); } +test { try parsePass("data://example.com:8080/pathname?search#hash", null, "data://example.com:8080/pathname?search#hash", "null", "data:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("data:///test", null, "data:///test", "null", "data:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("data://test/a/../b", null, "data://test/b", "null", "data:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("javascript://example.com:8080/pathname?search#hash", null, "javascript://example.com:8080/pathname?search#hash", "null", "javascript:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("javascript:///test", null, "javascript:///test", "null", "javascript:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("javascript://test/a/../b", null, "javascript://test/b", "null", "javascript:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("mailto://example.com:8080/pathname?search#hash", null, "mailto://example.com:8080/pathname?search#hash", "null", "mailto:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("mailto:///test", null, "mailto:///test", "null", "mailto:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("mailto://test/a/../b", null, "mailto://test/b", "null", "mailto:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("intent://example.com:8080/pathname?search#hash", null, "intent://example.com:8080/pathname?search#hash", "null", "intent:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("intent:///test", null, "intent:///test", "null", "intent:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("intent://test/a/../b", null, "intent://test/b", "null", "intent:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("urn://example.com:8080/pathname?search#hash", null, "urn://example.com:8080/pathname?search#hash", "null", "urn:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("urn:///test", null, "urn:///test", "null", "urn:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("urn://test/a/../b", null, "urn://test/b", "null", "urn:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("turn://example.com:8080/pathname?search#hash", null, "turn://example.com:8080/pathname?search#hash", "null", "turn:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("turn:///test", null, "turn:///test", "null", "turn:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("turn://test/a/../b", null, "turn://test/b", "null", "turn:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("stun://example.com:8080/pathname?search#hash", null, "stun://example.com:8080/pathname?search#hash", "null", "stun:", "", "", "example.com:8080", "example.com", "8080", "/pathname", "?search", "#hash"); } +test { try parsePass("stun:///test", null, "stun:///test", "null", "stun:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("stun://test/a/../b", null, "stun://test/b", "null", "stun:", "", "", "test", "test", "", "/b", "", ""); } +test { try parsePass("w://x:0", null, "w://x:0", "null", "w:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("west://x:0", null, "west://x:0", "null", "west:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("android://x:0/a", null, "android://x:0/a", "null", "android:", "", "", "x:0", "x", "0", "/a", "", ""); } +test { try parsePass("drivefs://x:0/a", null, "drivefs://x:0/a", "null", "drivefs:", "", "", "x:0", "x", "0", "/a", "", ""); } +test { try parsePass("chromeos-steam://x:0/a", null, "chromeos-steam://x:0/a", "null", "chromeos-steam:", "", "", "x:0", "x", "0", "/a", "", ""); } +test { try parsePass("steam://x:0/a", null, "steam://x:0/a", "null", "steam:", "", "", "x:0", "x", "0", "/a", "", ""); } +test { try parsePass("materialized-view://x:0/a", null, "materialized-view://x:0/a", "null", "materialized-view:", "", "", "x:0", "x", "0", "/a", "", ""); } +test { try parsePass("android-app://x:0", null, "android-app://x:0", "null", "android-app:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("chrome-distiller://x:0", null, "chrome-distiller://x:0", "null", "chrome-distiller:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("chrome-extension://x:0", null, "chrome-extension://x:0", "null", "chrome-extension:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("chrome-native://x:0", null, "chrome-native://x:0", "null", "chrome-native:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("chrome-resource://x:0", null, "chrome-resource://x:0", "null", "chrome-resource:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("chrome-search://x:0", null, "chrome-search://x:0", "null", "chrome-search:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("fuchsia-dir://x:0", null, "fuchsia-dir://x:0", "null", "fuchsia-dir:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("isolated-app://x:0", null, "isolated-app://x:0", "null", "isolated-app:", "", "", "x:0", "x", "0", "", "", ""); } +test { try parsePass("non-special:\\\\opaque", null, "non-special:\\\\opaque", "null", "non-special:", "", "", "", "", "", "\\\\opaque", "", ""); } +test { try parsePass("non-special:\\\\opaque/path", null, "non-special:\\\\opaque/path", "null", "non-special:", "", "", "", "", "", "\\\\opaque/path", "", ""); } +test { try parsePass("non-special:\\\\opaque\\path", null, "non-special:\\\\opaque\\path", "null", "non-special:", "", "", "", "", "", "\\\\opaque\\path", "", ""); } +test { try parsePass("non-special:\\/opaque", null, "non-special:\\/opaque", "null", "non-special:", "", "", "", "", "", "\\/opaque", "", ""); } +test { try parsePass("non-special:/\\path", null, "non-special:/\\path", "null", "non-special:", "", "", "", "", "", "/\\path", "", ""); } +test { try parsePass("non-special://host/a\\b", null, "non-special://host/a\\b", "null", "non-special:", "", "", "host", "host", "", "/a\\b", "", ""); } + +test { try parsePass("http://example\t.\norg", "http://example.org/foo/bar", "http://example.org/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/", "", ""); } +test { try parsePass("http://user:pass@foo:21/bar;par?b#c", "http://example.org/foo/bar", "http://user:pass@foo:21/bar;par?b#c", "http://foo:21", "http:", "user", "pass", "foo:21", "foo", "21", "/bar;par", "?b", "#c"); } +test { try parsePass("http:foo.com", "http://example.org/foo/bar", "http://example.org/foo/foo.com", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/foo.com", "", ""); } +test { try parsePass("\t :foo.com \n", "http://example.org/foo/bar", "http://example.org/foo/:foo.com", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:foo.com", "", ""); } +test { try parsePass(" foo.com ", "http://example.org/foo/bar", "http://example.org/foo/foo.com", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/foo.com", "", ""); } +test { try parsePass("a:\t foo.com", "http://example.org/foo/bar", "a: foo.com", "null", "a:", "", "", "", "", "", " foo.com", "", ""); } +test { try parsePass("http://f:21/ b ? d # e ", "http://example.org/foo/bar", "http://f:21/%20b%20?%20d%20#%20e", "http://f:21", "http:", "", "", "f:21", "f", "21", "/%20b%20", "?%20d%20", "#%20e"); } +test { try parsePass("http://f:/c", "http://example.org/foo/bar", "http://f/c", "http://f", "http:", "", "", "f", "f", "", "/c", "", ""); } +test { try parsePass("http://f:0/c", "http://example.org/foo/bar", "http://f:0/c", "http://f:0", "http:", "", "", "f:0", "f", "0", "/c", "", ""); } +test { try parsePass("http://f:00000000000000/c", "http://example.org/foo/bar", "http://f:0/c", "http://f:0", "http:", "", "", "f:0", "f", "0", "/c", "", ""); } +test { try parsePass("http://f:00000000000000000000080/c", "http://example.org/foo/bar", "http://f/c", "http://f", "http:", "", "", "f", "f", "", "/c", "", ""); } +test { try parsePass("http://f:\n/c", "http://example.org/foo/bar", "http://f/c", "http://f", "http:", "", "", "f", "f", "", "/c", "", ""); } +test { try parsePass("", "http://example.org/foo/bar", "http://example.org/foo/bar", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", ""); } +test { try parsePass(" \t", "http://example.org/foo/bar", "http://example.org/foo/bar", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", ""); } +test { try parsePass(":foo.com/", "http://example.org/foo/bar", "http://example.org/foo/:foo.com/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:foo.com/", "", ""); } +test { try parsePass(":foo.com\\", "http://example.org/foo/bar", "http://example.org/foo/:foo.com/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:foo.com/", "", ""); } +test { try parsePass(":", "http://example.org/foo/bar", "http://example.org/foo/:", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:", "", ""); } +test { try parsePass(":a", "http://example.org/foo/bar", "http://example.org/foo/:a", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:a", "", ""); } +test { try parsePass(":/", "http://example.org/foo/bar", "http://example.org/foo/:/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:/", "", ""); } +test { try parsePass(":\\", "http://example.org/foo/bar", "http://example.org/foo/:/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:/", "", ""); } +test { try parsePass(":#", "http://example.org/foo/bar", "http://example.org/foo/:#", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:", "", ""); } +test { try parsePass("#", "http://example.org/foo/bar", "http://example.org/foo/bar#", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", ""); } +test { try parsePass("#/", "http://example.org/foo/bar", "http://example.org/foo/bar#/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", "#/"); } +test { try parsePass("#\\", "http://example.org/foo/bar", "http://example.org/foo/bar#\\", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", "#\\"); } +test { try parsePass("#;?", "http://example.org/foo/bar", "http://example.org/foo/bar#;?", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", "#;?"); } +test { try parsePass("?", "http://example.org/foo/bar", "http://example.org/foo/bar?", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", ""); } +test { try parsePass("/", "http://example.org/foo/bar", "http://example.org/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/", "", ""); } +test { try parsePass(":23", "http://example.org/foo/bar", "http://example.org/foo/:23", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:23", "", ""); } +test { try parsePass("/:23", "http://example.org/foo/bar", "http://example.org/:23", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/:23", "", ""); } +test { try parsePass("\\x", "http://example.org/foo/bar", "http://example.org/x", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/x", "", ""); } +test { try parsePass("\\\\x\\hello", "http://example.org/foo/bar", "http://x/hello", "http://x", "http:", "", "", "x", "x", "", "/hello", "", ""); } +test { try parsePass("::", "http://example.org/foo/bar", "http://example.org/foo/::", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/::", "", ""); } +test { try parsePass("::23", "http://example.org/foo/bar", "http://example.org/foo/::23", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/::23", "", ""); } +test { try parsePass("foo://", "http://example.org/foo/bar", "foo://", "null", "foo:", "", "", "", "", "", "", "", ""); } +test { try parsePass("http://a:b@c:29/d", "http://example.org/foo/bar", "http://a:b@c:29/d", "http://c:29", "http:", "a", "b", "c:29", "c", "29", "/d", "", ""); } +test { try parsePass("http::@c:29", "http://example.org/foo/bar", "http://example.org/foo/:@c:29", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/:@c:29", "", ""); } +test { try parsePass("http://&a:foo(b]c@d:2/", "http://example.org/foo/bar", "http://&a:foo(b%5Dc@d:2/", "http://d:2", "http:", "&a", "foo(b%5Dc", "d:2", "d", "2", "/", "", ""); } +test { try parsePass("http://::@c@d:2", "http://example.org/foo/bar", "http://:%3A%40c@d:2/", "http://d:2", "http:", "", "%3A%40c", "d:2", "d", "2", "/", "", ""); } +test { try parsePass("http://foo.com:b@d/", "http://example.org/foo/bar", "http://foo.com:b@d/", "http://d", "http:", "foo.com", "b", "d", "d", "", "/", "", ""); } +test { try parsePass("http://foo.com/\\@", "http://example.org/foo/bar", "http://foo.com//@", "http://foo.com", "http:", "", "", "foo.com", "foo.com", "", "//@", "", ""); } +test { try parsePass("http:\\\\foo.com\\", "http://example.org/foo/bar", "http://foo.com/", "http://foo.com", "http:", "", "", "foo.com", "foo.com", "", "/", "", ""); } +test { try parsePass("http:\\\\a\\b:c\\d@foo.com\\", "http://example.org/foo/bar", "http://a/b:c/d@foo.com/", "http://a", "http:", "", "", "a", "a", "", "/b:c/d@foo.com/", "", ""); } +test { try parsePass("foo:/", "http://example.org/foo/bar", "foo:/", "null", "foo:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("foo:/bar.com/", "http://example.org/foo/bar", "foo:/bar.com/", "null", "foo:", "", "", "", "", "", "/bar.com/", "", ""); } +test { try parsePass("foo://///////", "http://example.org/foo/bar", "foo://///////", "null", "foo:", "", "", "", "", "", "///////", "", ""); } +test { try parsePass("foo://///////bar.com/", "http://example.org/foo/bar", "foo://///////bar.com/", "null", "foo:", "", "", "", "", "", "///////bar.com/", "", ""); } +test { try parsePass("foo:////://///", "http://example.org/foo/bar", "foo:////://///", "null", "foo:", "", "", "", "", "", "//://///", "", ""); } +test { try parsePass("c:/foo", "http://example.org/foo/bar", "c:/foo", "null", "c:", "", "", "", "", "", "/foo", "", ""); } +test { try parsePass("//foo/bar", "http://example.org/foo/bar", "http://foo/bar", "http://foo", "http:", "", "", "foo", "foo", "", "/bar", "", ""); } +test { try parsePass("http://foo/path;a??e#f#g", "http://example.org/foo/bar", "http://foo/path;a??e#f#g", "http://foo", "http:", "", "", "foo", "foo", "", "/path;a", "??e", "#f#g"); } +test { try parsePass("http://foo/abcd?efgh?ijkl", "http://example.org/foo/bar", "http://foo/abcd?efgh?ijkl", "http://foo", "http:", "", "", "foo", "foo", "", "/abcd", "?efgh?ijkl", ""); } +test { try parsePass("http://foo/abcd#foo?bar", "http://example.org/foo/bar", "http://foo/abcd#foo?bar", "http://foo", "http:", "", "", "foo", "foo", "", "/abcd", "", "#foo?bar"); } +test { try parsePass("[61:24:74]:98", "http://example.org/foo/bar", "http://example.org/foo/[61:24:74]:98", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/[61:24:74]:98", "", ""); } +test { try parsePass("http:[61:27]/:foo", "http://example.org/foo/bar", "http://example.org/foo/[61:27]/:foo", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/[61:27]/:foo", "", ""); } +test { try parsePass("http://[2001::1]", "http://example.org/foo/bar", "http://[2001::1]/", "http://[2001::1]", "http:", "", "", "[2001::1]", "[2001::1]", "", "/", "", ""); } +test { try parsePass("http://[::127.0.0.1]", "http://example.org/foo/bar", "http://[::7f00:1]/", "http://[::7f00:1]", "http:", "", "", "[::7f00:1]", "[::7f00:1]", "", "/", "", ""); } +test { try parsePass("http://[0:0:0:0:0:0:13.1.68.3]", "http://example.org/foo/bar", "http://[::d01:4403]/", "http://[::d01:4403]", "http:", "", "", "[::d01:4403]", "[::d01:4403]", "", "/", "", ""); } +test { try parsePass("http://[2001::1]:80", "http://example.org/foo/bar", "http://[2001::1]/", "http://[2001::1]", "http:", "", "", "[2001::1]", "[2001::1]", "", "/", "", ""); } +test { try parsePass("http:/example.com/", "http://example.org/foo/bar", "http://example.org/example.com/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/example.com/", "", ""); } +test { try parsePass("ftp:/example.com/", "http://example.org/foo/bar", "ftp://example.com/", "ftp://example.com", "ftp:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("https:/example.com/", "http://example.org/foo/bar", "https://example.com/", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("madeupscheme:/example.com/", "http://example.org/foo/bar", "madeupscheme:/example.com/", "null", "madeupscheme:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("file:/example.com/", "http://example.org/foo/bar", "file:///example.com/", "", "file:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("ftps:/example.com/", "http://example.org/foo/bar", "ftps:/example.com/", "null", "ftps:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("gopher:/example.com/", "http://example.org/foo/bar", "gopher:/example.com/", "null", "gopher:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("ws:/example.com/", "http://example.org/foo/bar", "ws://example.com/", "ws://example.com", "ws:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("wss:/example.com/", "http://example.org/foo/bar", "wss://example.com/", "wss://example.com", "wss:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("data:/example.com/", "http://example.org/foo/bar", "data:/example.com/", "null", "data:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("javascript:/example.com/", "http://example.org/foo/bar", "javascript:/example.com/", "null", "javascript:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("mailto:/example.com/", "http://example.org/foo/bar", "mailto:/example.com/", "null", "mailto:", "", "", "", "", "", "/example.com/", "", ""); } +test { try parsePass("http:example.com/", "http://example.org/foo/bar", "http://example.org/foo/example.com/", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/example.com/", "", ""); } +test { try parsePass("ftp:example.com/", "http://example.org/foo/bar", "ftp://example.com/", "ftp://example.com", "ftp:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("https:example.com/", "http://example.org/foo/bar", "https://example.com/", "https://example.com", "https:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("madeupscheme:example.com/", "http://example.org/foo/bar", "madeupscheme:example.com/", "null", "madeupscheme:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("ftps:example.com/", "http://example.org/foo/bar", "ftps:example.com/", "null", "ftps:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("gopher:example.com/", "http://example.org/foo/bar", "gopher:example.com/", "null", "gopher:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("ws:example.com/", "http://example.org/foo/bar", "ws://example.com/", "ws://example.com", "ws:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("wss:example.com/", "http://example.org/foo/bar", "wss://example.com/", "wss://example.com", "wss:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("data:example.com/", "http://example.org/foo/bar", "data:example.com/", "null", "data:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("javascript:example.com/", "http://example.org/foo/bar", "javascript:example.com/", "null", "javascript:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("mailto:example.com/", "http://example.org/foo/bar", "mailto:example.com/", "null", "mailto:", "", "", "", "", "", "example.com/", "", ""); } +test { try parsePass("/a/b/c", "http://example.org/foo/bar", "http://example.org/a/b/c", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/a/b/c", "", ""); } +test { try parsePass("/a/ /c", "http://example.org/foo/bar", "http://example.org/a/%20/c", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/a/%20/c", "", ""); } +test { try parsePass("/a%2fc", "http://example.org/foo/bar", "http://example.org/a%2fc", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/a%2fc", "", ""); } +test { try parsePass("/a/%2f/c", "http://example.org/foo/bar", "http://example.org/a/%2f/c", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/a/%2f/c", "", ""); } +test { try parsePass("#\x3b2", "http://example.org/foo/bar", "http://example.org/foo/bar#%CE%B2", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", "#%CE%B2"); } +test { try parsePass("data:text/html,test#test", "http://example.org/foo/bar", "data:text/html,test#test", "null", "data:", "", "", "", "", "", "text/html,test", "", "#test"); } +test { try parsePass("tel:1234567890", "http://example.org/foo/bar", "tel:1234567890", "null", "tel:", "", "", "", "", "", "1234567890", "", ""); } +test { try parsePass("ssh://example.com/foo/bar.git", "http://example.org/", "ssh://example.com/foo/bar.git", "null", "ssh:", "", "", "example.com", "example.com", "", "/foo/bar.git", "", ""); } +test { try parsePass("file:c:\\foo\\bar.html", "file:///tmp/mock/path", "file:///c:/foo/bar.html", "", "file:", "", "", "", "", "", "/c:/foo/bar.html", "", ""); } +test { try parsePass(" File:c|////foo\\bar.html", "file:///tmp/mock/path", "file:///c:////foo/bar.html", "", "file:", "", "", "", "", "", "/c:////foo/bar.html", "", ""); } +test { try parsePass("C|/foo/bar", "file:///tmp/mock/path", "file:///C:/foo/bar", "", "file:", "", "", "", "", "", "/C:/foo/bar", "", ""); } +test { try parsePass("/C|\\foo\\bar", "file:///tmp/mock/path", "file:///C:/foo/bar", "", "file:", "", "", "", "", "", "/C:/foo/bar", "", ""); } +test { try parsePass("//C|/foo/bar", "file:///tmp/mock/path", "file:///C:/foo/bar", "", "file:", "", "", "", "", "", "/C:/foo/bar", "", ""); } +test { try parsePass("//server/file", "file:///tmp/mock/path", "file://server/file", "", "file:", "", "", "server", "server", "", "/file", "", ""); } +test { try parsePass("\\\\server\\file", "file:///tmp/mock/path", "file://server/file", "", "file:", "", "", "server", "server", "", "/file", "", ""); } +test { try parsePass("/\\server/file", "file:///tmp/mock/path", "file://server/file", "", "file:", "", "", "server", "server", "", "/file", "", ""); } +test { try parsePass("file:///foo/bar.txt", "file:///tmp/mock/path", "file:///foo/bar.txt", "", "file:", "", "", "", "", "", "/foo/bar.txt", "", ""); } +test { try parsePass("file:///home/me", "file:///tmp/mock/path", "file:///home/me", "", "file:", "", "", "", "", "", "/home/me", "", ""); } +test { try parsePass("//", "file:///tmp/mock/path", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("///", "file:///tmp/mock/path", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("///test", "file:///tmp/mock/path", "file:///test", "", "file:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("file://test", "file:///tmp/mock/path", "file://test/", "", "file:", "", "", "test", "test", "", "/", "", ""); } +test { try parsePass("file://localhost", "file:///tmp/mock/path", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("file://localhost/", "file:///tmp/mock/path", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("file://localhost/test", "file:///tmp/mock/path", "file:///test", "", "file:", "", "", "", "", "", "/test", "", ""); } +test { try parsePass("test", "file:///tmp/mock/path", "file:///tmp/mock/test", "", "file:", "", "", "", "", "", "/tmp/mock/test", "", ""); } +test { try parsePass("file:test", "file:///tmp/mock/path", "file:///tmp/mock/test", "", "file:", "", "", "", "", "", "/tmp/mock/test", "", ""); } +test { try parsePass("/", "http://www.example.com/test", "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("/test.txt", "http://www.example.com/test", "http://www.example.com/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/test.txt", "", ""); } +test { try parsePass(".", "http://www.example.com/test", "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("..", "http://www.example.com/test", "http://www.example.com/", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/", "", ""); } +test { try parsePass("test.txt", "http://www.example.com/test", "http://www.example.com/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/test.txt", "", ""); } +test { try parsePass("./test.txt", "http://www.example.com/test", "http://www.example.com/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/test.txt", "", ""); } +test { try parsePass("../test.txt", "http://www.example.com/test", "http://www.example.com/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/test.txt", "", ""); } +test { try parsePass("../aaa/test.txt", "http://www.example.com/test", "http://www.example.com/aaa/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/aaa/test.txt", "", ""); } +test { try parsePass("../../test.txt", "http://www.example.com/test", "http://www.example.com/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/test.txt", "", ""); } +test { try parsePass("\x4e2d/test.txt", "http://www.example.com/test", "http://www.example.com/%E4%B8%AD/test.txt", "http://www.example.com", "http:", "", "", "www.example.com", "www.example.com", "", "/%E4%B8%AD/test.txt", "", ""); } +test { try parsePass("http://www.example2.com", "http://www.example.com/test", "http://www.example2.com/", "http://www.example2.com", "http:", "", "", "www.example2.com", "www.example2.com", "", "/", "", ""); } +test { try parsePass("//www.example2.com", "http://www.example.com/test", "http://www.example2.com/", "http://www.example2.com", "http:", "", "", "www.example2.com", "www.example2.com", "", "/", "", ""); } +test { try parsePass("file:...", "http://www.example.com/test", "file:///...", "", "file:", "", "", "", "", "", "/...", "", ""); } +test { try parsePass("file:..", "http://www.example.com/test", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("file:a", "http://www.example.com/test", "file:///a", "", "file:", "", "", "", "", "", "/a", "", ""); } +test { try parsePass("file:.", "http://www.example.com/test", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("http://ExAmPlE.CoM", "http://other.com/", "http://example.com/", "http://example.com", "http:", "", "", "example.com", "example.com", "", "/", "", ""); } +test { try parsePass("http://GOO\x200b\x2060\xfeffgoo.com", "http://other.com/", "http://googoo.com/", "http://googoo.com", "http:", "", "", "googoo.com", "googoo.com", "", "/", "", ""); } +test { try parsePass("http://www.foo\x3002bar.com", "http://other.com/", "http://www.foo.bar.com/", "http://www.foo.bar.com", "http:", "", "", "www.foo.bar.com", "www.foo.bar.com", "", "/", "", ""); } +test { try parsePass("http://\xff27\xff4f.com", "http://other.com/", "http://go.com/", "http://go.com", "http:", "", "", "go.com", "go.com", "", "/", "", ""); } +test { try parsePass("http://\x4f60\x597d\x4f60\x597d", "http://other.com/", "http://xn--6qqa088eba/", "http://xn--6qqa088eba", "http:", "", "", "xn--6qqa088eba", "xn--6qqa088eba", "", "/", "", ""); } +test { try parsePass("http://%30%78%63%30%2e%30%32%35%30.01", "http://other.com/", "http://192.168.0.1/", "http://192.168.0.1", "http:", "", "", "192.168.0.1", "192.168.0.1", "", "/", "", ""); } +test { try parsePass("http://%30%78%63%30%2e%30%32%35%30.01%2e", "http://other.com/", "http://192.168.0.1/", "http://192.168.0.1", "http:", "", "", "192.168.0.1", "192.168.0.1", "", "/", "", ""); } +test { try parsePass("http://\xff10\xff38\xff43\xff10\xff0e\xff10\xff12\xff15\xff10\xff0e\xff10\xff11", "http://other.com/", "http://192.168.0.1/", "http://192.168.0.1", "http:", "", "", "192.168.0.1", "192.168.0.1", "", "/", "", ""); } +test { try parsePass("http://foo:\xd83d\xdca9@example.com/bar", "http://other.com/", "http://foo:%F0%9F%92%A9@example.com/bar", "http://example.com", "http:", "foo", "%F0%9F%92%A9", "example.com", "example.com", "", "/bar", "", ""); } +test { try parsePass("#", "test:test", "test:test#", "null", "test:", "", "", "", "", "", "test", "", ""); } +test { try parsePass("#x", "mailto:x@x.com", "mailto:x@x.com#x", "null", "mailto:", "", "", "", "", "", "x@x.com", "", "#x"); } +test { try parsePass("#x", "data:,", "data:,#x", "null", "data:", "", "", "", "", "", ",", "", "#x"); } +test { try parsePass("#x", "about:blank", "about:blank#x", "null", "about:", "", "", "", "", "", "blank", "", "#x"); } +test { try parsePass("#x:y", "about:blank", "about:blank#x:y", "null", "about:", "", "", "", "", "", "blank", "", "#x:y"); } +test { try parsePass("#", "test:test?test", "test:test?test#", "null", "test:", "", "", "", "", "", "test", "?test", ""); } +test { try parsePass("https://@test@test@example:800/", "http://doesnotmatter/", "https://%40test%40test@example:800/", "https://example:800", "https:", "%40test%40test", "", "example:800", "example", "800", "/", "", ""); } +test { try parsePass("https://@@@example", "http://doesnotmatter/", "https://%40%40@example/", "https://example", "https:", "%40%40", "", "example", "example", "", "/", "", ""); } +test { try parsePass("http://`{}:`{}@h/`{}?`{}", "http://doesnotmatter/", "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}", "http://h", "http:", "%60%7B%7D", "%60%7B%7D", "h", "h", "", "/%60%7B%7D", "?`{}", ""); } +test { try parsePass("/some/path", "http://user@example.org/smth", "http://user@example.org/some/path", "http://example.org", "http:", "user", "", "example.org", "example.org", "", "/some/path", "", ""); } +test { try parsePass("", "http://user:pass@example.org:21/smth", "http://user:pass@example.org:21/smth", "http://example.org:21", "http:", "user", "pass", "example.org:21", "example.org", "21", "/smth", "", ""); } +test { try parsePass("/some/path", "http://user:pass@example.org:21/smth", "http://user:pass@example.org:21/some/path", "http://example.org:21", "http:", "user", "pass", "example.org:21", "example.org", "21", "/some/path", "", ""); } +test { try parsePass("i", "sc:/pa/pa", "sc:/pa/i", "null", "sc:", "", "", "", "", "", "/pa/i", "", ""); } +test { try parsePass("i", "sc://ho/pa", "sc://ho/i", "null", "sc:", "", "", "ho", "ho", "", "/i", "", ""); } +test { try parsePass("i", "sc:///pa/pa", "sc:///pa/i", "null", "sc:", "", "", "", "", "", "/pa/i", "", ""); } +test { try parsePass("../i", "sc:/pa/pa", "sc:/i", "null", "sc:", "", "", "", "", "", "/i", "", ""); } +test { try parsePass("../i", "sc://ho/pa", "sc://ho/i", "null", "sc:", "", "", "ho", "ho", "", "/i", "", ""); } +test { try parsePass("../i", "sc:///pa/pa", "sc:///i", "null", "sc:", "", "", "", "", "", "/i", "", ""); } +test { try parsePass("/i", "sc:/pa/pa", "sc:/i", "null", "sc:", "", "", "", "", "", "/i", "", ""); } +test { try parsePass("/i", "sc://ho/pa", "sc://ho/i", "null", "sc:", "", "", "ho", "ho", "", "/i", "", ""); } +test { try parsePass("/i", "sc:///pa/pa", "sc:///i", "null", "sc:", "", "", "", "", "", "/i", "", ""); } +test { try parsePass("?i", "sc:/pa/pa", "sc:/pa/pa?i", "null", "sc:", "", "", "", "", "", "/pa/pa", "?i", ""); } +test { try parsePass("?i", "sc://ho/pa", "sc://ho/pa?i", "null", "sc:", "", "", "ho", "ho", "", "/pa", "?i", ""); } +test { try parsePass("?i", "sc:///pa/pa", "sc:///pa/pa?i", "null", "sc:", "", "", "", "", "", "/pa/pa", "?i", ""); } +test { try parsePass("#i", "sc:sd", "sc:sd#i", "null", "sc:", "", "", "", "", "", "sd", "", "#i"); } +test { try parsePass("#i", "sc:sd/sd", "sc:sd/sd#i", "null", "sc:", "", "", "", "", "", "sd/sd", "", "#i"); } +test { try parsePass("#i", "sc:/pa/pa", "sc:/pa/pa#i", "null", "sc:", "", "", "", "", "", "/pa/pa", "", "#i"); } +test { try parsePass("#i", "sc://ho/pa", "sc://ho/pa#i", "null", "sc:", "", "", "ho", "ho", "", "/pa", "", "#i"); } +test { try parsePass("#i", "sc:///pa/pa", "sc:///pa/pa#i", "null", "sc:", "", "", "", "", "", "/pa/pa", "", "#i"); } +test { try parsePass("x", "sc://\xf1", "sc://%C3%B1/x", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "/x", "", ""); } +test { try parsePass("?a=b&c=d", "http://example.org/foo/bar", "http://example.org/foo/bar?a=b&c=d", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "?a=b&c=d", ""); } +test { try parsePass("??a=b&c=d", "http://example.org/foo/bar", "http://example.org/foo/bar??a=b&c=d", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "??a=b&c=d", ""); } +test { try parsePass("http:", "http://example.org/foo/bar", "http://example.org/foo/bar", "http://example.org", "http:", "", "", "example.org", "example.org", "", "/foo/bar", "", ""); } +test { try parsePass("sc:", "https://example.org/foo/bar", "sc:", "null", "sc:", "", "", "", "", "", "", "", ""); } +test { try parsePass("http://1.2.3.4/", "http://other.com/", "http://1.2.3.4/", "http://1.2.3.4", "http:", "", "", "1.2.3.4", "1.2.3.4", "", "/", "", ""); } +test { try parsePass("http://1.2.3.4./", "http://other.com/", "http://1.2.3.4/", "http://1.2.3.4", "http:", "", "", "1.2.3.4", "1.2.3.4", "", "/", "", ""); } +test { try parsePass("http://192.168.257", "http://other.com/", "http://192.168.1.1/", "http://192.168.1.1", "http:", "", "", "192.168.1.1", "192.168.1.1", "", "/", "", ""); } +test { try parsePass("http://192.168.257.", "http://other.com/", "http://192.168.1.1/", "http://192.168.1.1", "http:", "", "", "192.168.1.1", "192.168.1.1", "", "/", "", ""); } +test { try parsePass("http://192.168.257.com", "http://other.com/", "http://192.168.257.com/", "http://192.168.257.com", "http:", "", "", "192.168.257.com", "192.168.257.com", "", "/", "", ""); } +test { try parsePass("http://256", "http://other.com/", "http://0.0.1.0/", "http://0.0.1.0", "http:", "", "", "0.0.1.0", "0.0.1.0", "", "/", "", ""); } +test { try parsePass("http://256.com", "http://other.com/", "http://256.com/", "http://256.com", "http:", "", "", "256.com", "256.com", "", "/", "", ""); } +test { try parsePass("http://999999999", "http://other.com/", "http://59.154.201.255/", "http://59.154.201.255", "http:", "", "", "59.154.201.255", "59.154.201.255", "", "/", "", ""); } +test { try parsePass("http://999999999.", "http://other.com/", "http://59.154.201.255/", "http://59.154.201.255", "http:", "", "", "59.154.201.255", "59.154.201.255", "", "/", "", ""); } +test { try parsePass("http://999999999.com", "http://other.com/", "http://999999999.com/", "http://999999999.com", "http:", "", "", "999999999.com", "999999999.com", "", "/", "", ""); } +test { try parsePass("http://10000000000.com", "http://other.com/", "http://10000000000.com/", "http://10000000000.com", "http:", "", "", "10000000000.com", "10000000000.com", "", "/", "", ""); } +test { try parsePass("http://4294967295", "http://other.com/", "http://255.255.255.255/", "http://255.255.255.255", "http:", "", "", "255.255.255.255", "255.255.255.255", "", "/", "", ""); } +test { try parsePass("http://0xffffffff", "http://other.com/", "http://255.255.255.255/", "http://255.255.255.255", "http:", "", "", "255.255.255.255", "255.255.255.255", "", "/", "", ""); } +test { try parsePass("pix/submit.gif", "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html", "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", "", "file:", "", "", "", "", "", "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", "", ""); } +test { try parsePass("..", "file:///C:/", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("..", "file:///", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("/", "file:///C:/a/b", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("/", "file://h/C:/a/b", "file://h/C:/", "", "file:", "", "", "h", "h", "", "/C:/", "", ""); } +test { try parsePass("/", "file://h/a/b", "file://h/", "", "file:", "", "", "h", "h", "", "/", "", ""); } +test { try parsePass("//d:", "file:///C:/a/b", "file:///d:", "", "file:", "", "", "", "", "", "/d:", "", ""); } +test { try parsePass("//d:/..", "file:///C:/a/b", "file:///d:/", "", "file:", "", "", "", "", "", "/d:/", "", ""); } +test { try parsePass("..", "file:///ab:/", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("..", "file:///1:/", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("", "file:///test?test#test", "file:///test?test", "", "file:", "", "", "", "", "", "/test", "?test", ""); } +test { try parsePass("file:", "file:///test?test#test", "file:///test?test", "", "file:", "", "", "", "", "", "/test", "?test", ""); } +test { try parsePass("?x", "file:///test?test#test", "file:///test?x", "", "file:", "", "", "", "", "", "/test", "?x", ""); } +test { try parsePass("file:?x", "file:///test?test#test", "file:///test?x", "", "file:", "", "", "", "", "", "/test", "?x", ""); } +test { try parsePass("#x", "file:///test?test#test", "file:///test?test#x", "", "file:", "", "", "", "", "", "/test", "?test", "#x"); } +test { try parsePass("file:#x", "file:///test?test#test", "file:///test?test#x", "", "file:", "", "", "", "", "", "/test", "?test", "#x"); } +test { try parsePass("/////mouse", "file:///elephant", "file://///mouse", "", "file:", "", "", "", "", "", "///mouse", "", ""); } +test { try parsePass("\\//pig", "file://lion/", "file:///pig", "", "file:", "", "", "", "", "", "/pig", "", ""); } +test { try parsePass("\\/localhost//pig", "file://lion/", "file:////pig", "", "file:", "", "", "", "", "", "//pig", "", ""); } +test { try parsePass("//localhost//pig", "file://lion/", "file:////pig", "", "file:", "", "", "", "", "", "//pig", "", ""); } +test { try parsePass("/..//localhost//pig", "file://lion/", "file://lion//localhost//pig", "", "file:", "", "", "lion", "lion", "", "//localhost//pig", "", ""); } +test { try parsePass("file://", "file://ape/", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("/rooibos", "file://tea/", "file://tea/rooibos", "", "file:", "", "", "tea", "tea", "", "/rooibos", "", ""); } +test { try parsePass("/?chai", "file://tea/", "file://tea/?chai", "", "file:", "", "", "tea", "tea", "", "/", "?chai", ""); } +test { try parsePass("C|", "file://host/dir/file", "file://host/C:", "", "file:", "", "", "host", "host", "", "/C:", "", ""); } +test { try parsePass("C|", "file://host/D:/dir1/dir2/file", "file://host/C:", "", "file:", "", "", "host", "host", "", "/C:", "", ""); } +test { try parsePass("C|#", "file://host/dir/file", "file://host/C:#", "", "file:", "", "", "host", "host", "", "/C:", "", ""); } +test { try parsePass("C|?", "file://host/dir/file", "file://host/C:?", "", "file:", "", "", "host", "host", "", "/C:", "", ""); } +test { try parsePass("C|/", "file://host/dir/file", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("C|\n/", "file://host/dir/file", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("C|\\", "file://host/dir/file", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("C", "file://host/dir/file", "file://host/dir/C", "", "file:", "", "", "host", "host", "", "/dir/C", "", ""); } +test { try parsePass("C|a", "file://host/dir/file", "file://host/dir/C|a", "", "file:", "", "", "host", "host", "", "/dir/C|a", "", ""); } +test { try parsePass("/c:/foo/bar", "file:///c:/baz/qux", "file:///c:/foo/bar", "", "file:", "", "", "", "", "", "/c:/foo/bar", "", ""); } +test { try parsePass("/c|/foo/bar", "file:///c:/baz/qux", "file:///c:/foo/bar", "", "file:", "", "", "", "", "", "/c:/foo/bar", "", ""); } +test { try parsePass("file:\\c:\\foo\\bar", "file:///c:/baz/qux", "file:///c:/foo/bar", "", "file:", "", "", "", "", "", "/c:/foo/bar", "", ""); } +test { try parsePass("/c:/foo/bar", "file://host/path", "file://host/c:/foo/bar", "", "file:", "", "", "host", "host", "", "/c:/foo/bar", "", ""); } +test { try parsePass("C|/", "file://host/", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("/C:/", "file://host/", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("file:C:/", "file://host/", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("file:/C:/", "file://host/", "file://host/C:/", "", "file:", "", "", "host", "host", "", "/C:/", "", ""); } +test { try parsePass("//C:/", "file://host/", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("file://C:/", "file://host/", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("///C:/", "file://host/", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("file:///C:/", "file://host/", "file:///C:/", "", "file:", "", "", "", "", "", "/C:/", "", ""); } +test { try parsePass("file:///one/two", "file:///", "file:///one/two", "", "file:", "", "", "", "", "", "/one/two", "", ""); } +test { try parsePass("file:////one/two", "file:///", "file:////one/two", "", "file:", "", "", "", "", "", "//one/two", "", ""); } +test { try parsePass("//one/two", "file:///", "file://one/two", "", "file:", "", "", "one", "one", "", "/two", "", ""); } +test { try parsePass("///one/two", "file:///", "file:///one/two", "", "file:", "", "", "", "", "", "/one/two", "", ""); } +test { try parsePass("////one/two", "file:///", "file:////one/two", "", "file:", "", "", "", "", "", "//one/two", "", ""); } +test { try parsePass("file:///.//", "file:////", "file:////", "", "file:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("http://[1:0::]", "http://example.net/", "http://[1::]/", "http://[1::]", "http:", "", "", "[1::]", "[1::]", "", "/", "", ""); } +test { try parsePass("#x", "sc://\xf1", "sc://%C3%B1#x", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "", "", "#x"); } +test { try parsePass("?x", "sc://\xf1", "sc://%C3%B1?x", "null", "sc:", "", "", "%C3%B1", "%C3%B1", "", "", "?x", ""); } +test { try parsePass("///", "sc://x/", "sc:///", "", "sc:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("////", "sc://x/", "sc:////", "", "sc:", "", "", "", "", "", "//", "", ""); } +test { try parsePass("////x/", "sc://x/", "sc:////x/", "", "sc:", "", "", "", "", "", "//x/", "", ""); } +test { try parsePass("/.//path", "non-spec:/p", "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("/..//path", "non-spec:/p", "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("..//path", "non-spec:/p", "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("a/..//path", "non-spec:/p", "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("", "non-spec:/..//p", "non-spec:/.//p", "", "non-spec:", "", "", "", "", "", "//p", "", ""); } +test { try parsePass("path", "non-spec:/..//p", "non-spec:/.//path", "", "non-spec:", "", "", "", "", "", "//path", "", ""); } +test { try parsePass("../path", "non-spec:/.//p", "non-spec:/path", "", "non-spec:", "", "", "", "", "", "/path", "", ""); } +test { try parsePass("test-a-colon-slash.html", "a:/", "a:/test-a-colon-slash.html", "", "a:", "", "", "", "", "", "/test-a-colon-slash.html", "", ""); } +test { try parsePass("test-a-colon-slash-slash.html", "a://", "a:///test-a-colon-slash-slash.html", "", "a:", "", "", "", "", "", "/test-a-colon-slash-slash.html", "", ""); } +test { try parsePass("test-a-colon-slash-b.html", "a:/b", "a:/test-a-colon-slash-b.html", "", "a:", "", "", "", "", "", "/test-a-colon-slash-b.html", "", ""); } +test { try parsePass("test-a-colon-slash-slash-b.html", "a://b", "a://b/test-a-colon-slash-slash-b.html", "", "a:", "", "", "b", "b", "", "/test-a-colon-slash-slash-b.html", "", ""); } +test { try parsePass("10.0.0.7:8080/foo.html", "file:///some/dir/bar.html", "file:///some/dir/10.0.0.7:8080/foo.html", "", "file:", "", "", "", "", "", "/some/dir/10.0.0.7:8080/foo.html", "", ""); } +test { try parsePass("a!@$*=/foo.html", "file:///some/dir/bar.html", "file:///some/dir/a!@$*=/foo.html", "", "file:", "", "", "", "", "", "/some/dir/a!@$*=/foo.html", "", ""); } +test { try parsePass("a1234567890-+.:foo/bar", "http://example.com/dir/file", "a1234567890-+.:foo/bar", "", "a1234567890-+.:", "", "", "", "", "", "foo/bar", "", ""); } +test { try parsePass("#link", "https://example.org/##link", "https://example.org/#link", "", "https:", "", "", "example.org", "example.org", "", "/", "", "#link"); } +test { try parsePass("https://user:pass[\x7f@foo/bar", "http://example.org", "https://user:pass%5B%7F@foo/bar", "https://foo", "https:", "user", "pass%5B%7F", "foo", "foo", "", "/bar", "", ""); } +test { try parsePass("abc:rootless", "abc://host/path", "abc:rootless", "", "abc:", "", "", "", "", "", "rootless", "", ""); } +test { try parsePass("abc:rootless", "abc:/path", "abc:rootless", "", "abc:", "", "", "", "", "", "rootless", "", ""); } +test { try parsePass("abc:rootless", "abc:path", "abc:rootless", "", "abc:", "", "", "", "", "", "rootless", "", ""); } +test { try parsePass("abc:/rooted", "abc://host/path", "abc:/rooted", "", "abc:", "", "", "", "", "", "/rooted", "", ""); } +test { try parsePass("///test", "http://example.org/", "http://test/", "", "http:", "", "", "test", "test", "", "/", "", ""); } +test { try parsePass("///\\//\\//test", "http://example.org/", "http://test/", "", "http:", "", "", "test", "test", "", "/", "", ""); } +test { try parsePass("///example.org/path", "http://example.org/", "http://example.org/path", "", "http:", "", "", "example.org", "example.org", "", "/path", "", ""); } +test { try parsePass("///example.org/../path", "http://example.org/", "http://example.org/path", "", "http:", "", "", "example.org", "example.org", "", "/path", "", ""); } +test { try parsePass("///example.org/../../", "http://example.org/", "http://example.org/", "", "http:", "", "", "example.org", "example.org", "", "/", "", ""); } +test { try parsePass("///example.org/../path/../../", "http://example.org/", "http://example.org/", "", "http:", "", "", "example.org", "example.org", "", "/", "", ""); } +test { try parsePass("///example.org/../path/../../path", "http://example.org/", "http://example.org/path", "", "http:", "", "", "example.org", "example.org", "", "/path", "", ""); } +test { try parsePass("/\\/\\//example.org/../path", "http://example.org/", "http://example.org/path", "", "http:", "", "", "example.org", "example.org", "", "/path", "", ""); } +test { try parsePass("///abcdef/../", "file:///", "file:///", "", "file:", "", "", "", "", "", "/", "", ""); } +test { try parsePass("/\\//\\/a/../", "file:///", "file://////", "", "file:", "", "", "", "", "", "////", "", ""); } +test { try parsePass("//a/../", "file:///", "file://a/", "", "file:", "", "", "a", "a", "", "/", "", ""); } + +test { try parseIDNAFail("a\x200cb"); } +test { try parseIDNAFail("A\x200cB"); } +test { try parseIDNAFail("A\x200cb"); } +test { try parseIDNAFail("xn--ab-j1t"); } +test { try parseIDNAFail("a\x200db"); } +test { try parseIDNAFail("A\x200dB"); } +test { try parseIDNAFail("A\x200db"); } +test { try parseIDNAFail("xn--ab-m1t"); } +test { try parseIDNAFail(""); } +test { try parseIDNAFail("xn--u-ccb"); } +test { try parseIDNAFail("a\x2488com"); } +test { try parseIDNAFail("A\x2488COM"); } +test { try parseIDNAFail("A\x2488Com"); } +test { try parseIDNAFail("xn--acom-0w1b"); } +test { try parseIDNAFail("xn--a-ecp.ru"); } +test { try parseIDNAFail("xn--0.pt"); } +test { try parseIDNAFail("xn--a.pt"); } +test { try parseIDNAFail("xn--a-\xc4.pt"); } +test { try parseIDNAFail("xn--a-A\x308.pt"); } +test { try parseIDNAFail("xn--a-a\x308.pt"); } +test { try parseIDNAFail("xn--a-\xe4.pt"); } +test { try parseIDNAFail("XN--A-\xc4.PT"); } +test { try parseIDNAFail("XN--A-A\x308.PT"); } +test { try parseIDNAFail("Xn--A-A\x308.pt"); } +test { try parseIDNAFail("Xn--A-\xc4.pt"); } +test { try parseIDNAFail("xn--xn--a--gua.pt"); } +test { try parseIDNAFail("1.a\xdf\x200c\x200db\x200c\x200dc\xdf\xdf\xdf\xdfd\x3c2\x3c3\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfe\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfx\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfy\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\x302\xdfz"); } +test { try parseIDNAFail("1.ASS\x200c\x200dB\x200c\x200dCSSSSSSSSD\x3a3\x3a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\x302SSZ"); } +test { try parseIDNAFail("1.ASS\x200c\x200dB\x200c\x200dCSSSSSSSSD\x3a3\x3a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSS\x15cSSZ"); } +test { try parseIDNAFail("1.ass\x200c\x200db\x200c\x200dcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\x15dssz"); } +test { try parseIDNAFail("1.ass\x200c\x200db\x200c\x200dcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\x302ssz"); } +test { try parseIDNAFail("1.Ass\x200c\x200db\x200c\x200dcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\x302ssz"); } +test { try parseIDNAFail("1.Ass\x200c\x200db\x200c\x200dcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\x15dssz"); } +test { try parseIDNAFail("1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc"); } +test { try parseIDNAFail("1.A\xdf\x200c\x200db\x200c\x200dc\xdf\xdf\xdf\xdfd\x3c2\x3c3\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfe\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfx\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdfy\xdf\xdf\xdf\xdf\xdf\xdf\xdf\xdf\x302\xdfz"); } +test { try parseIDNAFail("1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc"); } +test { try parseIDNAFail("\x200cx\x200dn\x200c-\x200d-b\xdf"); } +test { try parseIDNAFail("\x200cX\x200dN\x200c-\x200d-BSS"); } +test { try parseIDNAFail("\x200cx\x200dn\x200c-\x200d-bss"); } +test { try parseIDNAFail("\x200cX\x200dn\x200c-\x200d-Bss"); } +test { try parseIDNAFail("xn--xn--bss-7z6ccid"); } +test { try parseIDNAFail("\x200cX\x200dn\x200c-\x200d-B\xdf"); } +test { try parseIDNAFail("xn--xn--b-pqa5796ccahd"); } +test { try parseIDNAFail("xn--xn---epa"); } +test { try parseIDNAFail("a.b.\x308c.d"); } +test { try parseIDNAFail("A.B.\x308C.D"); } +test { try parseIDNAFail("A.b.\x308c.d"); } +test { try parseIDNAFail("a.b.xn--c-bcb.d"); } +test { try parseIDNAFail("\xbb9\x200d"); } +test { try parseIDNAFail("xn--dmc225h"); } +test { try parseIDNAFail("\x200d"); } +test { try parseIDNAFail("xn--1ug"); } +test { try parseIDNAFail("\xbb9\x200c"); } +test { try parseIDNAFail("xn--dmc025h"); } +test { try parseIDNAFail("\x200c"); } +test { try parseIDNAFail("xn--0ug"); } +test { try parseIDNAFail("\x6ef\x200c\x6ef"); } +test { try parseIDNAFail("xn--cmba004q"); } +test { try parseIDNAFail("a\xd900z"); } +test { try parseIDNAFail("A\xd900Z"); } +test { try parseIDNAFail("xn--"); } +test { try parseIDNAFail("xn---"); } +test { try parseIDNAFail("xn--ASCII-"); } +test { try parseIDNAFail("xn--unicode-.org"); } +test { try parseIDNAFail("\x2495\x221d\x65f\xda0e\xdd26\xff0e-\xdb40\xdd2f"); } +test { try parseIDNAFail("14.\x221d\x65f\xda0e\xdd26.-\xdb40\xdd2f"); } +test { try parseIDNAFail("14.xn--7hb713l3v90n.-"); } +test { try parseIDNAFail("xn--7hb713lfwbi1311b.-"); } +test { try parseIDNAFail("\x200d\x2260\x1899\x226f.\xc1a3-\x1874\x10a0"); } +test { try parseIDNAFail("\x200d=\x338\x1899>\x338.\x1109\x1169\x11be-\x1874\x10a0"); } +test { try parseIDNAFail("\x200d=\x338\x1899>\x338.\x1109\x1169\x11be-\x1874\x2d00"); } +test { try parseIDNAFail("\x200d\x2260\x1899\x226f.\xc1a3-\x1874\x2d00"); } +test { try parseIDNAFail("xn--jbf929a90b0b.xn----p9j493ivi4l"); } +test { try parseIDNAFail("xn--jbf911clb.xn----6zg521d196p"); } +test { try parseIDNAFail("xn--jbf929a90b0b.xn----6zg521d196p"); } +test { try parseIDNAFail("\xd97d\xdf9c\xff0e\xd803\xdfc7\xfa2\x77d\x600"); } +test { try parseIDNAFail("\xd97d\xdf9c\xff0e\xd803\xdfc7\xfa1\xfb7\x77d\x600"); } +test { try parseIDNAFail("\xd97d\xdf9c.\xd803\xdfc7\xfa1\xfb7\x77d\x600"); } +test { try parseIDNAFail("xn--gw68a.xn--ifb57ev2psc6027m"); } +test { try parseIDNAFail("\xd84f\xdcd4\x303.\xd805\xdcc2"); } +test { try parseIDNAFail("xn--nsa95820a.xn--wz1d"); } +test { try parseIDNAFail("\x200c\xd9d4\xdfad.\x10b2\xd804\xddc0"); } +test { try parseIDNAFail("\x200c\xd9d4\xdfad.\x2d12\xd804\xddc0"); } +test { try parseIDNAFail("xn--bn95b.xn--9kj2034e"); } +test { try parseIDNAFail("xn--0ug15083f.xn--9kj2034e"); } +test { try parseIDNAFail("xn--bn95b.xn--qnd6272k"); } +test { try parseIDNAFail("xn--0ug15083f.xn--qnd6272k"); } +test { try parseIDNAFail("\x7e71\xd805\xddbf\x200d.\xff18\xfe12"); } +test { try parseIDNAFail("xn--gl0as212a.xn--8-o89h"); } +test { try parseIDNAFail("xn--1ug6928ac48e.xn--8-o89h"); } +test { try parseIDNAFail("\xdb40\xddbe\xff0e\xd838\xdc08"); } +test { try parseIDNAFail("\xdb40\xddbe.\xd838\xdc08"); } +test { try parseIDNAFail(".xn--ph4h"); } +test { try parseIDNAFail("\xdf\x6eb\x3002\x200d"); } +test { try parseIDNAFail("SS\x6eb\x3002\x200d"); } +test { try parseIDNAFail("ss\x6eb\x3002\x200d"); } +test { try parseIDNAFail("Ss\x6eb\x3002\x200d"); } +test { try parseIDNAFail("xn--ss-59d.xn--1ug"); } +test { try parseIDNAFail("xn--zca012a.xn--1ug"); } +test { try parseIDNAFail("\xdb41\xdc35\x200c\x2488\xff0e\xdb40\xdf87"); } +test { try parseIDNAFail("\xdb41\xdc35\x200c1..\xdb40\xdf87"); } +test { try parseIDNAFail("xn--1-bs31m..xn--tv36e"); } +test { try parseIDNAFail("xn--1-rgn37671n..xn--tv36e"); } +test { try parseIDNAFail("xn--tshz2001k.xn--tv36e"); } +test { try parseIDNAFail("xn--0ug88o47900b.xn--tv36e"); } +test { try parseIDNAFail("\xdb3c\xde23\x65f\xaab2\xdf\x3002\xdaf1\xdce7"); } +test { try parseIDNAFail("\xdb3c\xde23\x65f\xaab2SS\x3002\xdaf1\xdce7"); } +test { try parseIDNAFail("\xdb3c\xde23\x65f\xaab2ss\x3002\xdaf1\xdce7"); } +test { try parseIDNAFail("\xdb3c\xde23\x65f\xaab2Ss\x3002\xdaf1\xdce7"); } +test { try parseIDNAFail("xn--ss-3xd2839nncy1m.xn--bb79d"); } +test { try parseIDNAFail("xn--zca92z0t7n5w96j.xn--bb79d"); } +test { try parseIDNAFail("\x774\x200c\xd83a\xdd3f\x3002\xd8b5\xde10\x425c\x200d\xd9be\xdd3c"); } +test { try parseIDNAFail("\x774\x200c\xd83a\xdd1d\x3002\xd8b5\xde10\x425c\x200d\xd9be\xdd3c"); } +test { try parseIDNAFail("xn--4pb2977v.xn--z0nt555ukbnv"); } +test { try parseIDNAFail("xn--4pb607jjt73a.xn--1ug236ke314donv1a"); } +test { try parseIDNAFail("\x3164\x94d\x10a0\x17d0.\x180b"); } +test { try parseIDNAFail("\x1160\x94d\x10a0\x17d0.\x180b"); } +test { try parseIDNAFail("\x1160\x94d\x2d00\x17d0.\x180b"); } +test { try parseIDNAFail("xn--n3b445e53p."); } +test { try parseIDNAFail("\x3164\x94d\x2d00\x17d0.\x180b"); } +test { try parseIDNAFail("xn--n3b742bkqf4ty."); } +test { try parseIDNAFail("xn--n3b468aoqa89r."); } +test { try parseIDNAFail("xn--n3b445e53po6d."); } +test { try parseIDNAFail("xn--n3b468azngju2a."); } +test { try parseIDNAFail("\x2763\x200d\xff0e\x9cd\xd807\xdc3d\x612\xa929"); } +test { try parseIDNAFail("\x2763\x200d.\x9cd\xd807\xdc3d\x612\xa929"); } +test { try parseIDNAFail("xn--pei.xn--0fb32q3w7q2g4d"); } +test { try parseIDNAFail("xn--1ugy10a.xn--0fb32q3w7q2g4d"); } +test { try parseIDNAFail("\x349\x3002\xd85e\xdc6b"); } +test { try parseIDNAFail("xn--nua.xn--bc6k"); } +test { try parseIDNAFail("\xd807\xdc3f\xdb40\xdd66\xff0e\x1160"); } +test { try parseIDNAFail("\xd807\xdc3f\xdb40\xdd66.\x1160"); } +test { try parseIDNAFail("xn--ok3d."); } +test { try parseIDNAFail("xn--ok3d.xn--psd"); } +test { try parseIDNAFail("\x850f\xff61\xd807\xdc3a"); } +test { try parseIDNAFail("\x850f\x3002\xd807\xdc3a"); } +test { try parseIDNAFail("xn--uy1a.xn--jk3d"); } +test { try parseIDNAFail("xn--8g1d12120a.xn--5l6h"); } +test { try parseIDNAFail("\xd804\xdee7\xa9c02\xff61\x39c9\xda09\xdd84"); } +test { try parseIDNAFail("\xd804\xdee7\xa9c02\x3002\x39c9\xda09\xdd84"); } +test { try parseIDNAFail("xn--2-5z4eu89y.xn--97l02706d"); } +test { try parseIDNAFail("\x2938\x3c2\xd8ab\xdc40\xff61\xffa0"); } +test { try parseIDNAFail("\x2938\x3c2\xd8ab\xdc40\x3002\x1160"); } +test { try parseIDNAFail("\x2938\x3a3\xd8ab\xdc40\x3002\x1160"); } +test { try parseIDNAFail("\x2938\x3c3\xd8ab\xdc40\x3002\x1160"); } +test { try parseIDNAFail("xn--4xa192qmp03d."); } +test { try parseIDNAFail("xn--3xa392qmp03d."); } +test { try parseIDNAFail("\x2938\x3a3\xd8ab\xdc40\xff61\xffa0"); } +test { try parseIDNAFail("\x2938\x3c3\xd8ab\xdc40\xff61\xffa0"); } +test { try parseIDNAFail("xn--4xa192qmp03d.xn--psd"); } +test { try parseIDNAFail("xn--3xa392qmp03d.xn--psd"); } +test { try parseIDNAFail("xn--4xa192qmp03d.xn--cl7c"); } +test { try parseIDNAFail("xn--3xa392qmp03d.xn--cl7c"); } +test { try parseIDNAFail("\x200d\xdb7d\xdc56\xdb40\xdc50\xff0e\x5bd\xd826\xdfb0\xa85d\xd800\xdee1"); } +test { try parseIDNAFail("\x200d\xdb7d\xdc56\xdb40\xdc50.\x5bd\xd826\xdfb0\xa85d\xd800\xdee1"); } +test { try parseIDNAFail("xn--b726ey18m.xn--ldb8734fg0qcyzzg"); } +test { try parseIDNAFail("xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg"); } +test { try parseIDNAFail("\x3002\xdbcc\xde35\x3c2\xd8c2\xdc07\x3002\xd802\xdf88"); } +test { try parseIDNAFail("\x3002\xdbcc\xde35\x3a3\xd8c2\xdc07\x3002\xd802\xdf88"); } +test { try parseIDNAFail("\x3002\xdbcc\xde35\x3c3\xd8c2\xdc07\x3002\xd802\xdf88"); } +test { try parseIDNAFail(".xn--4xa68573c7n64d.xn--f29c"); } +test { try parseIDNAFail(".xn--3xa88573c7n64d.xn--f29c"); } +test { try parseIDNAFail("\x2489\xdb40\xde93\x2260\xff61\x10bf\x2b23\x10a8"); } +test { try parseIDNAFail("\x2489\xdb40\xde93=\x338\xff61\x10bf\x2b23\x10a8"); } +test { try parseIDNAFail("2.\xdb40\xde93\x2260\x3002\x10bf\x2b23\x10a8"); } +test { try parseIDNAFail("2.\xdb40\xde93=\x338\x3002\x10bf\x2b23\x10a8"); } +test { try parseIDNAFail("2.\xdb40\xde93=\x338\x3002\x2d1f\x2b23\x2d08"); } +test { try parseIDNAFail("2.\xdb40\xde93\x2260\x3002\x2d1f\x2b23\x2d08"); } +test { try parseIDNAFail("2.xn--1chz4101l.xn--45iz7d6b"); } +test { try parseIDNAFail("\x2489\xdb40\xde93=\x338\xff61\x2d1f\x2b23\x2d08"); } +test { try parseIDNAFail("\x2489\xdb40\xde93\x2260\xff61\x2d1f\x2b23\x2d08"); } +test { try parseIDNAFail("xn--1ch07f91401d.xn--45iz7d6b"); } +test { try parseIDNAFail("2.xn--1chz4101l.xn--gnd9b297j"); } +test { try parseIDNAFail("xn--1ch07f91401d.xn--gnd9b297j"); } +test { try parseIDNAFail("-\xdb40\xde56\xa867\xff0e\xdb40\xde82\xd8dc\xdd83\xd83c\xdd09"); } +test { try parseIDNAFail("-\xdb40\xde56\xa867.\xdb40\xde82\xd8dc\xdd838,"); } +test { try parseIDNAFail("xn----hg4ei0361g.xn--8,-k362evu488a"); } +test { try parseIDNAFail("xn----hg4ei0361g.xn--207ht163h7m94c"); } +test { try parseIDNAFail("\x200c\xff61\x354"); } +test { try parseIDNAFail("\x200c\x3002\x354"); } +test { try parseIDNAFail(".xn--yua"); } +test { try parseIDNAFail("xn--0ug.xn--yua"); } +test { try parseIDNAFail("xn--de6h.xn--mnd799a"); } +test { try parseIDNAFail("\xfa4\xd986\xdd2f\xff0e\xd835\xdfed\x10bb"); } +test { try parseIDNAFail("\xfa4\xd986\xdd2f.1\x10bb"); } +test { try parseIDNAFail("\xfa4\xd986\xdd2f.1\x2d1b"); } +test { try parseIDNAFail("xn--0fd40533g.xn--1-tws"); } +test { try parseIDNAFail("\xfa4\xd986\xdd2f\xff0e\xd835\xdfed\x2d1b"); } +test { try parseIDNAFail("xn--0fd40533g.xn--1-q1g"); } +test { try parseIDNAFail("\x3c2\xd9d5\xdf0c\xff18.\xd83a\xdf64"); } +test { try parseIDNAFail("\x3c2\xd9d5\xdf0c8.\xd83a\xdf64"); } +test { try parseIDNAFail("\x3a3\xd9d5\xdf0c8.\xd83a\xdf64"); } +test { try parseIDNAFail("\x3c3\xd9d5\xdf0c8.\xd83a\xdf64"); } +test { try parseIDNAFail("xn--8-zmb14974n.xn--su6h"); } +test { try parseIDNAFail("xn--8-xmb44974n.xn--su6h"); } +test { try parseIDNAFail("\x3a3\xd9d5\xdf0c\xff18.\xd83a\xdf64"); } +test { try parseIDNAFail("\x3c3\xd9d5\xdf0c\xff18.\xd83a\xdf64"); } +test { try parseIDNAFail("\x200c\xae03.\x69b6-"); } +test { try parseIDNAFail("\x200c\x1100\x1173\x11b2.\x69b6-"); } +test { try parseIDNAFail("xn--0ug3307c.xn----d87b"); } +test { try parseIDNAFail("\xb253\x6cd3\xd833\xdd7d.\x9cd\x200d"); } +test { try parseIDNAFail("\x1102\x1170\x11be\x6cd3\xd833\xdd7d.\x9cd\x200d"); } +test { try parseIDNAFail("xn--lwwp69lqs7m.xn--b7b"); } +test { try parseIDNAFail("xn--lwwp69lqs7m.xn--b7b605i"); } +test { try parseIDNAFail("\x1b44\xff0e\x1baa-\x226e\x2260"); } +test { try parseIDNAFail("\x1b44\xff0e\x1baa-<\x338=\x338"); } +test { try parseIDNAFail("\x1b44.\x1baa-\x226e\x2260"); } +test { try parseIDNAFail("\x1b44.\x1baa-<\x338=\x338"); } +test { try parseIDNAFail("xn--1uf.xn----nmlz65aub"); } +test { try parseIDNAFail("\x1bf3\x10b1\x115f\xff0e\xd804\xdd34\x2132"); } +test { try parseIDNAFail("\x1bf3\x10b1\x115f.\xd804\xdd34\x2132"); } +test { try parseIDNAFail("\x1bf3\x2d11\x115f.\xd804\xdd34\x214e"); } +test { try parseIDNAFail("\x1bf3\x10b1\x115f.\xd804\xdd34\x214e"); } +test { try parseIDNAFail("xn--1zf224e.xn--73g3065g"); } +test { try parseIDNAFail("\x1bf3\x2d11\x115f\xff0e\xd804\xdd34\x214e"); } +test { try parseIDNAFail("\x1bf3\x10b1\x115f\xff0e\xd804\xdd34\x214e"); } +test { try parseIDNAFail("xn--pnd26a55x.xn--73g3065g"); } +test { try parseIDNAFail("xn--osd925cvyn.xn--73g3065g"); } +test { try parseIDNAFail("xn--pnd26a55x.xn--f3g7465g"); } +test { try parseIDNAFail("\x10a9\x7315\xdba5\xdeeb\x226e\xff0e\xfe12"); } +test { try parseIDNAFail("\x10a9\x7315\xdba5\xdeeb<\x338\xff0e\xfe12"); } +test { try parseIDNAFail("\x10a9\x7315\xdba5\xdeeb\x226e.\x3002"); } +test { try parseIDNAFail("\x10a9\x7315\xdba5\xdeeb<\x338.\x3002"); } +test { try parseIDNAFail("\x2d09\x7315\xdba5\xdeeb<\x338.\x3002"); } +test { try parseIDNAFail("\x2d09\x7315\xdba5\xdeeb\x226e.\x3002"); } +test { try parseIDNAFail("xn--gdh892bbz0d5438s.."); } +test { try parseIDNAFail("\x2d09\x7315\xdba5\xdeeb<\x338\xff0e\xfe12"); } +test { try parseIDNAFail("\x2d09\x7315\xdba5\xdeeb\x226e\xff0e\xfe12"); } +test { try parseIDNAFail("xn--gdh892bbz0d5438s.xn--y86c"); } +test { try parseIDNAFail("xn--hnd212gz32d54x5r.."); } +test { try parseIDNAFail("xn--hnd212gz32d54x5r.xn--y86c"); } +test { try parseIDNAFail("\xc5\xb444-\xff0e\x200c"); } +test { try parseIDNAFail("A\x30a\x1103\x116d\x11b7-\xff0e\x200c"); } +test { try parseIDNAFail("\xc5\xb444-.\x200c"); } +test { try parseIDNAFail("A\x30a\x1103\x116d\x11b7-.\x200c"); } +test { try parseIDNAFail("a\x30a\x1103\x116d\x11b7-.\x200c"); } +test { try parseIDNAFail("\xe5\xb444-.\x200c"); } +test { try parseIDNAFail("xn----1fa1788k.xn--0ug"); } +test { try parseIDNAFail("a\x30a\x1103\x116d\x11b7-\xff0e\x200c"); } +test { try parseIDNAFail("\xe5\xb444-\xff0e\x200c"); } +test { try parseIDNAFail("\xb8f1\x200d\xd880\xdf68\x200c\x3002\xd836\xde16\xfe12"); } +test { try parseIDNAFail("\x1105\x116e\x11b0\x200d\xd880\xdf68\x200c\x3002\xd836\xde16\xfe12"); } +test { try parseIDNAFail("\xb8f1\x200d\xd880\xdf68\x200c\x3002\xd836\xde16\x3002"); } +test { try parseIDNAFail("\x1105\x116e\x11b0\x200d\xd880\xdf68\x200c\x3002\xd836\xde16\x3002"); } +test { try parseIDNAFail("xn--ct2b0738h.xn--772h."); } +test { try parseIDNAFail("xn--0ugb3358ili2v.xn--772h."); } +test { try parseIDNAFail("xn--ct2b0738h.xn--y86cl899a"); } +test { try parseIDNAFail("xn--0ugb3358ili2v.xn--y86cl899a"); } +test { try parseIDNAFail("\xd83c\xdd04\xff0e\x1cdc\x2488\xdf"); } +test { try parseIDNAFail("3,.\x1cdc1.\xdf"); } +test { try parseIDNAFail("3,.\x1cdc1.SS"); } +test { try parseIDNAFail("3,.\x1cdc1.ss"); } +test { try parseIDNAFail("3,.\x1cdc1.Ss"); } +test { try parseIDNAFail("3,.xn--1-43l.ss"); } +test { try parseIDNAFail("3,.xn--1-43l.xn--zca"); } +test { try parseIDNAFail("\xd83c\xdd04\xff0e\x1cdc\x2488SS"); } +test { try parseIDNAFail("\xd83c\xdd04\xff0e\x1cdc\x2488ss"); } +test { try parseIDNAFail("\xd83c\xdd04\xff0e\x1cdc\x2488Ss"); } +test { try parseIDNAFail("3,.xn--ss-k1r094b"); } +test { try parseIDNAFail("3,.xn--zca344lmif"); } +test { try parseIDNAFail("xn--x07h.xn--ss-k1r094b"); } +test { try parseIDNAFail("xn--x07h.xn--zca344lmif"); } +test { try parseIDNAFail("\x1dfd\x103a\x94d\xff0e\x2260\x200d\x31db"); } +test { try parseIDNAFail("\x103a\x94d\x1dfd\xff0e\x2260\x200d\x31db"); } +test { try parseIDNAFail("\x103a\x94d\x1dfd\xff0e=\x338\x200d\x31db"); } +test { try parseIDNAFail("\x103a\x94d\x1dfd.\x2260\x200d\x31db"); } +test { try parseIDNAFail("\x103a\x94d\x1dfd.=\x338\x200d\x31db"); } +test { try parseIDNAFail("xn--n3b956a9zm.xn--1ch912d"); } +test { try parseIDNAFail("xn--n3b956a9zm.xn--1ug63gz5w"); } +test { try parseIDNAFail("\x1bf3.-\x900b\xd98e\xddad\xdb25\xde6e"); } +test { try parseIDNAFail("xn--1zf.xn----483d46987byr50b"); } +test { try parseIDNAFail("xn--9ob.xn--4xa380e"); } +test { try parseIDNAFail("xn--9ob.xn--4xa380ebol"); } +test { try parseIDNAFail("xn--9ob.xn--3xa580ebol"); } +test { try parseIDNAFail("xn--9ob.xn--4xa574u"); } +test { try parseIDNAFail("xn--9ob.xn--4xa795lq2l"); } +test { try parseIDNAFail("xn--9ob.xn--3xa995lq2l"); } +test { try parseIDNAFail("\x1846\x10a3\xff61\xdb3a\xdca7\x315\x200d\x200d"); } +test { try parseIDNAFail("\x1846\x10a3\x3002\xdb3a\xdca7\x315\x200d\x200d"); } +test { try parseIDNAFail("\x1846\x2d03\x3002\xdb3a\xdca7\x315\x200d\x200d"); } +test { try parseIDNAFail("xn--57e237h.xn--5sa98523p"); } +test { try parseIDNAFail("xn--57e237h.xn--5sa649la993427a"); } +test { try parseIDNAFail("\x1846\x2d03\xff61\xdb3a\xdca7\x315\x200d\x200d"); } +test { try parseIDNAFail("xn--bnd320b.xn--5sa98523p"); } +test { try parseIDNAFail("xn--bnd320b.xn--5sa649la993427a"); } +test { try parseIDNAFail("\xd838\xdc28\xff61\x1b44\xda45\xdee8\xd838\xdf87"); } +test { try parseIDNAFail("\xd838\xdc28\x3002\x1b44\xda45\xdee8\xd838\xdf87"); } +test { try parseIDNAFail("xn--mi4h.xn--1uf6843smg20c"); } +test { try parseIDNAFail("\x189b\xdb60\xdd5f\xdf.\x1327"); } +test { try parseIDNAFail("\x189b\xdb60\xdd5fSS.\x1327"); } +test { try parseIDNAFail("\x189b\xdb60\xdd5fss.\x1327"); } +test { try parseIDNAFail("\x189b\xdb60\xdd5fSs.\x1327"); } +test { try parseIDNAFail("xn--ss-7dp66033t.xn--p5d"); } +test { try parseIDNAFail("xn--zca562jc642x.xn--p5d"); } +test { try parseIDNAFail("\x2b92\x200c.\xd909\xde97\x200c"); } +test { try parseIDNAFail("xn--b9i.xn--5p9y"); } +test { try parseIDNAFail("xn--0ugx66b.xn--0ugz2871c"); } +test { try parseIDNAFail("\x226f\xd805\xdf2b\xdb42\xdf47.\x1734\xd909\xdfa4\xd804\xdf6c\x18a7"); } +test { try parseIDNAFail(">\x338\xd805\xdf2b\xdb42\xdf47.\x1734\xd909\xdfa4\xd804\xdf6c\x18a7"); } +test { try parseIDNAFail("xn--hdhx157g68o0g.xn--c0e65eu616c34o7a"); } +test { try parseIDNAFail("ss.xn--lgd10cu829c"); } +test { try parseIDNAFail("xn--zca.xn--lgd10cu829c"); } +test { try parseIDNAFail("\x1a5a\xd82e\xdd9d\xc4d\x3002\xd829\xdf6c\xd835\xdff5"); } +test { try parseIDNAFail("\x1a5a\xd82e\xdd9d\xc4d\x3002\xd829\xdf6c9"); } +test { try parseIDNAFail("xn--lqc703ebm93a.xn--9-000p"); } +test { try parseIDNAFail("\x1856\xff61\x31f\xd91d\xdee8\xb82-"); } +test { try parseIDNAFail("\x1856\x3002\x31f\xd91d\xdee8\xb82-"); } +test { try parseIDNAFail("xn--m8e.xn----mdb555dkk71m"); } +test { try parseIDNAFail("\x596\x10ab\xff0e\xd835\xdff3\x226f\xfe12\xfe0a"); } +test { try parseIDNAFail("\x596\x10ab\xff0e\xd835\xdff3>\x338\xfe12\xfe0a"); } +test { try parseIDNAFail("\x596\x10ab.7\x226f\x3002\xfe0a"); } +test { try parseIDNAFail("\x596\x10ab.7>\x338\x3002\xfe0a"); } +test { try parseIDNAFail("\x596\x2d0b.7>\x338\x3002\xfe0a"); } +test { try parseIDNAFail("\x596\x2d0b.7\x226f\x3002\xfe0a"); } +test { try parseIDNAFail("xn--hcb613r.xn--7-pgo."); } +test { try parseIDNAFail("\x596\x2d0b\xff0e\xd835\xdff3>\x338\xfe12\xfe0a"); } +test { try parseIDNAFail("\x596\x2d0b\xff0e\xd835\xdff3\x226f\xfe12\xfe0a"); } +test { try parseIDNAFail("xn--hcb613r.xn--7-pgoy530h"); } +test { try parseIDNAFail("xn--hcb887c.xn--7-pgo."); } +test { try parseIDNAFail("xn--hcb887c.xn--7-pgoy530h"); } +test { try parseIDNAFail("\xd83c\xdd07\x4f10\xfe12.\xd831\xde5a\xa8c4"); } +test { try parseIDNAFail("6,\x4f10\x3002.\xd831\xde5a\xa8c4"); } +test { try parseIDNAFail("xn--6,-7i3c..xn--0f9ao925c"); } +test { try parseIDNAFail("xn--6,-7i3cj157d.xn--0f9ao925c"); } +test { try parseIDNAFail("xn--woqs083bel0g.xn--0f9ao925c"); } +test { try parseIDNAFail("\xdb40\xdda0\xff0e\xd99d\xdc34\xdaf1\xdfc8"); } +test { try parseIDNAFail("\xdb40\xdda0.\xd99d\xdc34\xdaf1\xdfc8"); } +test { try parseIDNAFail(".xn--rx21bhv12i"); } +test { try parseIDNAFail("-.\x1886\xdb47\xdca3-"); } +test { try parseIDNAFail("-.xn----pbkx6497q"); } +test { try parseIDNAFail("\xdafd\xdcb0\xff0e-\xd835\xdffb\xdf"); } +test { try parseIDNAFail("\xdafd\xdcb0.-5\xdf"); } +test { try parseIDNAFail("\xdafd\xdcb0.-5SS"); } +test { try parseIDNAFail("\xdafd\xdcb0.-5ss"); } +test { try parseIDNAFail("xn--t960e.-5ss"); } +test { try parseIDNAFail("xn--t960e.xn---5-hia"); } +test { try parseIDNAFail("\xdafd\xdcb0\xff0e-\xd835\xdffbSS"); } +test { try parseIDNAFail("\xdafd\xdcb0\xff0e-\xd835\xdffbss"); } +test { try parseIDNAFail("\xdafd\xdcb0\xff0e-\xd835\xdffbSs"); } +test { try parseIDNAFail("\xdafd\xdcb0.-5Ss"); } +test { try parseIDNAFail("\x200d\xd802\xde3f.\xd83e\xdd12\x10c5\xda06\xdfb6"); } +test { try parseIDNAFail("\x200d\xd802\xde3f.\xd83e\xdd12\x2d25\xda06\xdfb6"); } +test { try parseIDNAFail("xn--0s9c.xn--tljz038l0gz4b"); } +test { try parseIDNAFail("xn--1ug9533g.xn--tljz038l0gz4b"); } +test { try parseIDNAFail("xn--0s9c.xn--9nd3211w0gz4b"); } +test { try parseIDNAFail("xn--1ug9533g.xn--9nd3211w0gz4b"); } +test { try parseIDNAFail("\xd894\xdec5\x3002\xdf\xd873\xdd69\x200d"); } +test { try parseIDNAFail("\xd894\xdec5\x3002SS\xd873\xdd69\x200d"); } +test { try parseIDNAFail("\xd894\xdec5\x3002ss\xd873\xdd69\x200d"); } +test { try parseIDNAFail("\xd894\xdec5\x3002Ss\xd873\xdd69\x200d"); } +test { try parseIDNAFail("xn--ey1p.xn--ss-eq36b"); } +test { try parseIDNAFail("xn--ey1p.xn--ss-n1tx0508a"); } +test { try parseIDNAFail("xn--ey1p.xn--zca870nz438b"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3c2\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3c2=\x338"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3c2\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3c2=\x338"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3a3=\x338"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3a3\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3c3\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\x3002\xd805\xddbf\x1abb\x3c3=\x338"); } +test { try parseIDNAFail("xn--zb9h5968x.xn--4xa378i1mfjw7y"); } +test { try parseIDNAFail("xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y"); } +test { try parseIDNAFail("xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3a3=\x338"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3a3\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3c3\x2260"); } +test { try parseIDNAFail("\xdb40\xdd6f\xd9df\xdf6d\x200c\xd83d\xdf2d\xff61\xd805\xddbf\x1abb\x3c3=\x338"); } +test { try parseIDNAFail("\x248b\xff61\x2488\x200d\xda8f\xdd22"); } +test { try parseIDNAFail("4.\x30021.\x200d\xda8f\xdd22"); } +test { try parseIDNAFail("4..1.xn--sf51d"); } +test { try parseIDNAFail("4..1.xn--1ug64613i"); } +test { try parseIDNAFail("xn--wsh.xn--tsh07994h"); } +test { try parseIDNAFail("xn--wsh.xn--1ug58o74922a"); } +test { try parseIDNAFail("\x10b3\xd805\xdf2b\x200d\xda1e\xdf53\xff0e\x6a7\xd807\xdc36"); } +test { try parseIDNAFail("\x10b3\xd805\xdf2b\x200d\xda1e\xdf53.\x6a7\xd807\xdc36"); } +test { try parseIDNAFail("\x2d13\xd805\xdf2b\x200d\xda1e\xdf53.\x6a7\xd807\xdc36"); } +test { try parseIDNAFail("xn--blj6306ey091d.xn--9jb4223l"); } +test { try parseIDNAFail("xn--1ugy52cym7p7xu5e.xn--9jb4223l"); } +test { try parseIDNAFail("\x2d13\xd805\xdf2b\x200d\xda1e\xdf53\xff0e\x6a7\xd807\xdc36"); } +test { try parseIDNAFail("xn--rnd8945ky009c.xn--9jb4223l"); } +test { try parseIDNAFail("xn--rnd479ep20q7x12e.xn--9jb4223l"); } +test { try parseIDNAFail("\xd802\xde3f.\xd83c\xdd06\x2014"); } +test { try parseIDNAFail("\xd802\xde3f.5,\x2014"); } +test { try parseIDNAFail("xn--0s9c.xn--5,-81t"); } +test { try parseIDNAFail("xn--0s9c.xn--8ug8324p"); } +test { try parseIDNAFail("\xda10\xdeb1\xd8c6\xddae\x6f8\x3002\xdb43\xdfad-"); } +test { try parseIDNAFail("xn--lmb18944c0g2z.xn----2k81m"); } +test { try parseIDNAFail("\xd83d\xdf85\xdb43\xdce1\xdb30\xdf59.\xd989\xddb7"); } +test { try parseIDNAFail("xn--ie9hi1349bqdlb.xn--oj69a"); } +test { try parseIDNAFail("\x20e7\xd97e\xdc4e-\xda6e\xdcdd.4\x10a4\x200c"); } +test { try parseIDNAFail("\x20e7\xd97e\xdc4e-\xda6e\xdcdd.4\x2d04\x200c"); } +test { try parseIDNAFail("xn----9snu5320fi76w.xn--4-ivs"); } +test { try parseIDNAFail("xn----9snu5320fi76w.xn--4-sgn589c"); } +test { try parseIDNAFail("xn----9snu5320fi76w.xn--4-f0g"); } +test { try parseIDNAFail("xn----9snu5320fi76w.xn--4-f0g649i"); } +test { try parseIDNAFail("\xd805\xdc44\x226f\xff61\xd805\xdf24"); } +test { try parseIDNAFail("\xd805\xdc44>\x338\xff61\xd805\xdf24"); } +test { try parseIDNAFail("\xd805\xdc44\x226f\x3002\xd805\xdf24"); } +test { try parseIDNAFail("\xd805\xdc44>\x338\x3002\xd805\xdf24"); } +test { try parseIDNAFail("xn--hdh5636g.xn--ci2d"); } +test { try parseIDNAFail("\x10ab\x226e\xd887\xdc86\x3002\x200d\x7a7\xd800\xdee3"); } +test { try parseIDNAFail("\x10ab<\x338\xd887\xdc86\x3002\x200d\x7a7\xd800\xdee3"); } +test { try parseIDNAFail("\x2d0b<\x338\xd887\xdc86\x3002\x200d\x7a7\xd800\xdee3"); } +test { try parseIDNAFail("\x2d0b\x226e\xd887\xdc86\x3002\x200d\x7a7\xd800\xdee3"); } +test { try parseIDNAFail("xn--gdhz03bxt42d.xn--lrb6479j"); } +test { try parseIDNAFail("xn--gdhz03bxt42d.xn--lrb506jqr4n"); } +test { try parseIDNAFail("xn--jnd802gsm17c.xn--lrb6479j"); } +test { try parseIDNAFail("xn--jnd802gsm17c.xn--lrb506jqr4n"); } +test { try parseIDNAFail("\x17d2.\xd9db\xdf52\x226f"); } +test { try parseIDNAFail("\x17d2.\xd9db\xdf52>\x338"); } +test { try parseIDNAFail("xn--u4e.xn--hdhx0084f"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734\xff0e\xd802\xde3a\xc9\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734\xff0e\xd802\xde3aE\x301\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734.\xd802\xde3a\xc9\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734.\xd802\xde3aE\x301\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734.\xd802\xde3ae\x301\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734.\xd802\xde3a\xe9\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("xn--c0e34564d.xn--9ca207st53lg3f"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734\xff0e\xd802\xde3ae\x301\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\xd8fc\xdc47\x1734\xff0e\xd802\xde3a\xe9\x2b13\xd804\xdd34"); } +test { try parseIDNAFail("\x10c3\xff0e\x653\x18a4"); } +test { try parseIDNAFail("\x10c3.\x653\x18a4"); } +test { try parseIDNAFail("\x2d23.\x653\x18a4"); } +test { try parseIDNAFail("xn--rlj.xn--vhb294g"); } +test { try parseIDNAFail("\x2d23\xff0e\x653\x18a4"); } +test { try parseIDNAFail("xn--7nd.xn--vhb294g"); } +test { try parseIDNAFail("\xdb40\xdd08\x813\xff0e\xc2c9\xd9d0\xddbb\x10c4\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813\xff0e\x1109\x1174\x11b0\xd9d0\xddbb\x10c4\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813.\xc2c9\xd9d0\xddbb\x10c4\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813.\x1109\x1174\x11b0\xd9d0\xddbb\x10c4\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813.\x1109\x1174\x11b0\xd9d0\xddbb\x2d24\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813.\xc2c9\xd9d0\xddbb\x2d24\xd9ca\xdc50"); } +test { try parseIDNAFail("xn--oub.xn--sljz109bpe25dviva"); } +test { try parseIDNAFail("\xdb40\xdd08\x813\xff0e\x1109\x1174\x11b0\xd9d0\xddbb\x2d24\xd9ca\xdc50"); } +test { try parseIDNAFail("\xdb40\xdd08\x813\xff0e\xc2c9\xd9d0\xddbb\x2d24\xd9ca\xdc50"); } +test { try parseIDNAFail("xn--oub.xn--8nd9522gpe69cviva"); } +test { try parseIDNAFail("\xaa2c\xd807\xdcab\x226e\xff0e\x2902"); } +test { try parseIDNAFail("\xaa2c\xd807\xdcab<\x338\xff0e\x2902"); } +test { try parseIDNAFail("\xaa2c\xd807\xdcab\x226e.\x2902"); } +test { try parseIDNAFail("\xaa2c\xd807\xdcab<\x338.\x2902"); } +test { try parseIDNAFail("xn--gdh1854cn19c.xn--kqi"); } +test { try parseIDNAFail("\xd804\xdc45\x3002-"); } +test { try parseIDNAFail("xn--210d.-"); } +test { try parseIDNAFail("\xa866\x1851\x200d\x2488\x3002\xd800\xdee3-"); } +test { try parseIDNAFail("\xa866\x1851\x200d1.\x3002\xd800\xdee3-"); } +test { try parseIDNAFail("xn--1-o7j663bdl7m..xn----381i"); } +test { try parseIDNAFail("xn--h8e863drj7h.xn----381i"); } +test { try parseIDNAFail("xn--h8e470bl0d838o.xn----381i"); } +test { try parseIDNAFail("\x2488\x4c39\x200d-\x3002\xc6c8"); } +test { try parseIDNAFail("\x2488\x4c39\x200d-\x3002\x110b\x116e\x11bf"); } +test { try parseIDNAFail("1.\x4c39\x200d-\x3002\xc6c8"); } +test { try parseIDNAFail("1.\x4c39\x200d-\x3002\x110b\x116e\x11bf"); } +test { try parseIDNAFail("1.xn----tgnz80r.xn--kp5b"); } +test { try parseIDNAFail("xn----dcp160o.xn--kp5b"); } +test { try parseIDNAFail("xn----tgnx5rjr6c.xn--kp5b"); } +test { try parseIDNAFail("\x3066\x3002\x200c\xdb43\xdcfd\x7f3"); } +test { try parseIDNAFail("xn--m9j.xn--rtb10784p"); } +test { try parseIDNAFail("xn--m9j.xn--rtb154j9l73w"); } +test { try parseIDNAFail("\x3c2\xff61\xa9c0\x6e7"); } +test { try parseIDNAFail("\x3c2\x3002\xa9c0\x6e7"); } +test { try parseIDNAFail("\x3a3\x3002\xa9c0\x6e7"); } +test { try parseIDNAFail("\x3c3\x3002\xa9c0\x6e7"); } +test { try parseIDNAFail("xn--4xa.xn--3lb1944f"); } +test { try parseIDNAFail("xn--3xa.xn--3lb1944f"); } +test { try parseIDNAFail("\x3a3\xff61\xa9c0\x6e7"); } +test { try parseIDNAFail("\x3c3\xff61\xa9c0\x6e7"); } +test { try parseIDNAFail("\xbcd\xdb56\xdec5\xd9f0\xde51.\x10a2\x10b5"); } +test { try parseIDNAFail("\xbcd\xdb56\xdec5\xd9f0\xde51.\x2d02\x2d15"); } +test { try parseIDNAFail("\xbcd\xdb56\xdec5\xd9f0\xde51.\x10a2\x2d15"); } +test { try parseIDNAFail("xn--xmc83135idcxza.xn--tkjwb"); } +test { try parseIDNAFail("xn--xmc83135idcxza.xn--9md086l"); } +test { try parseIDNAFail("xn--xmc83135idcxza.xn--9md2b"); } +test { try parseIDNAFail("\x1c32\xd83c\xdd08\x2f9b\x5a6\xff0e\x200d\xda7e\xdd64\x7fd"); } +test { try parseIDNAFail("\x1c327,\x8d70\x5a6.\x200d\xda7e\xdd64\x7fd"); } +test { try parseIDNAFail("xn--7,-bid991urn3k.xn--1tb13454l"); } +test { try parseIDNAFail("xn--7,-bid991urn3k.xn--1tb334j1197q"); } +test { try parseIDNAFail("xn--xcb756i493fwi5o.xn--1tb13454l"); } +test { try parseIDNAFail("xn--xcb756i493fwi5o.xn--1tb334j1197q"); } +test { try parseIDNAFail("\x1897\xff61\x4c0\xd934\xdd3b"); } +test { try parseIDNAFail("\x1897\x3002\x4c0\xd934\xdd3b"); } +test { try parseIDNAFail("\x1897\x3002\x4cf\xd934\xdd3b"); } +test { try parseIDNAFail("xn--hbf.xn--s5a83117e"); } +test { try parseIDNAFail("\x1897\xff61\x4cf\xd934\xdd3b"); } +test { try parseIDNAFail("xn--hbf.xn--d5a86117e"); } +test { try parseIDNAFail("\xd807\xdc98\xdb40\xdd12\xd80d\xdc61\xff61\xd835\xdfea\x10bc"); } +test { try parseIDNAFail("\xd807\xdc98\xdb40\xdd12\xd80d\xdc61\x30028\x10bc"); } +test { try parseIDNAFail("\xd807\xdc98\xdb40\xdd12\xd80d\xdc61\x30028\x2d1c"); } +test { try parseIDNAFail("xn--7m3d291b.xn--8-vws"); } +test { try parseIDNAFail("\xd807\xdc98\xdb40\xdd12\xd80d\xdc61\xff61\xd835\xdfea\x2d1c"); } +test { try parseIDNAFail("xn--7m3d291b.xn--8-s1g"); } +test { try parseIDNAFail("\x1bab\xff61\xd83c\xdc89\xdb40\xdc70"); } +test { try parseIDNAFail("\x1bab\x3002\xd83c\xdc89\xdb40\xdc70"); } +test { try parseIDNAFail("xn--zxf.xn--fx7ho0250c"); } +test { try parseIDNAFail("\xdb71\xdeb6\xdba0\xded6\xda1a\xde70-\x3002\x200c"); } +test { try parseIDNAFail("xn----7i12hu122k9ire."); } +test { try parseIDNAFail("xn----7i12hu122k9ire.xn--0ug"); } +test { try parseIDNAFail("\xfe12\xff0e\xfe2f\xd805\xdc42"); } +test { try parseIDNAFail("\xfe12\xff0e\xd805\xdc42\xfe2f"); } +test { try parseIDNAFail("\x3002.\xd805\xdc42\xfe2f"); } +test { try parseIDNAFail("..xn--s96cu30b"); } +test { try parseIDNAFail("xn--y86c.xn--s96cu30b"); } +test { try parseIDNAFail("\xa92c\x3002\x200d"); } +test { try parseIDNAFail("xn--zi9a."); } +test { try parseIDNAFail("xn--zi9a.xn--1ug"); } +test { try parseIDNAFail("\xdb58\xde04\x3002-"); } +test { try parseIDNAFail("xn--xm38e.-"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee\xff0e\xda98\xde2e\xf18\xdf\x226f"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee\xff0e\xda98\xde2e\xf18\xdf>\x338"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee.\xda98\xde2e\xf18\xdf\x226f"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee.\xda98\xde2e\xf18\xdf>\x338"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee.\xda98\xde2e\xf18SS>\x338"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee.\xda98\xde2e\xf18SS\x226f"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee.\xda98\xde2e\xf18ss\x226f"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee.\xda98\xde2e\xf18ss>\x338"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee.\xda98\xde2e\xf18Ss>\x338"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee.\xda98\xde2e\xf18Ss\x226f"); } +test { try parseIDNAFail("xn--pgh4639f.xn--ss-ifj426nle504a"); } +test { try parseIDNAFail("xn--pgh4639f.xn--zca593eo6oc013y"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee\xff0e\xda98\xde2e\xf18SS>\x338"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee\xff0e\xda98\xde2e\xf18SS\x226f"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee\xff0e\xda98\xde2e\xf18ss\x226f"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee\xff0e\xda98\xde2e\xf18ss>\x338"); } +test { try parseIDNAFail("\x227c\x338\xd800\xdeee\xff0e\xda98\xde2e\xf18Ss>\x338"); } +test { try parseIDNAFail("\x22e0\xd800\xdeee\xff0e\xda98\xde2e\xf18Ss\x226f"); } +test { try parseIDNAFail("\x330\xff0e\xdb81\xdf31\x8680"); } +test { try parseIDNAFail("\x330.\xdb81\xdf31\x8680"); } +test { try parseIDNAFail("xn--xta.xn--e91aw9417e"); } +test { try parseIDNAFail("\xd83e\xdc9f\xd83c\xdd08\x200d\xa84e\xff61\xf84"); } +test { try parseIDNAFail("\xd83e\xdc9f7,\x200d\xa84e\x3002\xf84"); } +test { try parseIDNAFail("xn--7,-gh9hg322i.xn--3ed"); } +test { try parseIDNAFail("xn--7,-n1t0654eqo3o.xn--3ed"); } +test { try parseIDNAFail("xn--nc9aq743ds0e.xn--3ed"); } +test { try parseIDNAFail("xn--1ug4874cfd0kbmg.xn--3ed"); } +test { try parseIDNAFail("\xa854\x3002\x1039\x1887"); } +test { try parseIDNAFail("xn--tc9a.xn--9jd663b"); } +test { try parseIDNAFail("\x20eb\x226e.\xd836\xde16"); } +test { try parseIDNAFail("\x20eb<\x338.\xd836\xde16"); } +test { try parseIDNAFail("xn--e1g71d.xn--772h"); } +test { try parseIDNAFail("\x200c.\x226f"); } +test { try parseIDNAFail("\x200c.>\x338"); } +test { try parseIDNAFail("xn--0ug.xn--hdh"); } +test { try parseIDNAFail("\xd880\xdd67\xd94e\xde60-\xff0e\xabed-\x609c"); } +test { try parseIDNAFail("\xd880\xdd67\xd94e\xde60-.\xabed-\x609c"); } +test { try parseIDNAFail("xn----7m53aj640l.xn----8f4br83t"); } +test { try parseIDNAFail("\x1849\xd899\xdce7\x2b1e\x189c.-\x200d\xd83a\xdcd1\x202e"); } +test { try parseIDNAFail("xn--87e0ol04cdl39e.xn----qinu247r"); } +test { try parseIDNAFail("xn--87e0ol04cdl39e.xn----ugn5e3763s"); } +test { try parseIDNAFail("xn--ynd2415j.xn--5-dug9054m"); } +test { try parseIDNAFail("\x200d-\x1839\xfe6a.\x1de1\x1922"); } +test { try parseIDNAFail("\x200d-\x1839%.\x1de1\x1922"); } +test { try parseIDNAFail("xn---%-u4o.xn--gff52t"); } +test { try parseIDNAFail("xn---%-u4oy48b.xn--gff52t"); } +test { try parseIDNAFail("xn----c6jx047j.xn--gff52t"); } +test { try parseIDNAFail("xn----c6j614b1z4v.xn--gff52t"); } +test { try parseIDNAFail("\xd84e\xde6b\xff0e\xd9f1\xdc72"); } +test { try parseIDNAFail("\xd84e\xde6b.\xd9f1\xdc72"); } +test { try parseIDNAFail("xn--td3j.xn--4628b"); } +test { try parseIDNAFail("\xc4d\xd836\xde3e\x5a9\xd835\xdfed\x3002-\xd805\xdf28"); } +test { try parseIDNAFail("\xc4d\xd836\xde3e\x5a91\x3002-\xd805\xdf28"); } +test { try parseIDNAFail("xn--1-rfc312cdp45c.xn----nq0j"); } +test { try parseIDNAFail("\xda4f\xdfc8\x3002\xb64f"); } +test { try parseIDNAFail("\xda4f\xdfc8\x3002\x1104\x116b\x11ae"); } +test { try parseIDNAFail("xn--ph26c.xn--281b"); } +test { try parseIDNAFail("\xd916\xde1a\xdb40\xdd0c\xdb07\xdf40\x1840.\x8b6"); } +test { try parseIDNAFail("xn--z7e98100evc01b.xn--czb"); } +test { try parseIDNAFail("\x200d\xff61\xd8d4\xdc5b"); } +test { try parseIDNAFail("\x200d\x3002\xd8d4\xdc5b"); } +test { try parseIDNAFail(".xn--6x4u"); } +test { try parseIDNAFail("xn--1ug.xn--6x4u"); } +test { try parseIDNAFail("\xfff9\x200c\xff61\x66f3\x2f91\xd800\xdef0\x226f"); } +test { try parseIDNAFail("\xfff9\x200c\xff61\x66f3\x2f91\xd800\xdef0>\x338"); } +test { try parseIDNAFail("\xfff9\x200c\x3002\x66f3\x897e\xd800\xdef0\x226f"); } +test { try parseIDNAFail("\xfff9\x200c\x3002\x66f3\x897e\xd800\xdef0>\x338"); } +test { try parseIDNAFail("xn--vn7c.xn--hdh501y8wvfs5h"); } +test { try parseIDNAFail("xn--0ug2139f.xn--hdh501y8wvfs5h"); } +test { try parseIDNAFail("\x226f\x2488\x3002\xdf"); } +test { try parseIDNAFail(">\x338\x2488\x3002\xdf"); } +test { try parseIDNAFail(">\x338\x2488\x3002SS"); } +test { try parseIDNAFail("\x226f\x2488\x3002SS"); } +test { try parseIDNAFail("\x226f\x2488\x3002ss"); } +test { try parseIDNAFail(">\x338\x2488\x3002ss"); } +test { try parseIDNAFail(">\x338\x2488\x3002Ss"); } +test { try parseIDNAFail("\x226f\x2488\x3002Ss"); } +test { try parseIDNAFail("xn--hdh84f.ss"); } +test { try parseIDNAFail("xn--hdh84f.xn--zca"); } +test { try parseIDNAFail("\x200c\xff61\x2260"); } +test { try parseIDNAFail("\x200c\xff61=\x338"); } +test { try parseIDNAFail("\x200c\x3002\x2260"); } +test { try parseIDNAFail("\x200c\x3002=\x338"); } +test { try parseIDNAFail("xn--0ug.xn--1ch"); } +test { try parseIDNAFail("\xd805\xddbf\xd836\xde14.\x185f\xd805\xddbf\x1b42\x200c"); } +test { try parseIDNAFail("xn--461dw464a.xn--v8e29loy65a"); } +test { try parseIDNAFail("xn--461dw464a.xn--v8e29ldzfo952a"); } +test { try parseIDNAFail("\xda12\xdcf3\x200d\xda05\xdf71.\xd81a\xdf34\x2183\x2260-"); } +test { try parseIDNAFail("\xda12\xdcf3\x200d\xda05\xdf71.\xd81a\xdf34\x2183=\x338-"); } +test { try parseIDNAFail("\xda12\xdcf3\x200d\xda05\xdf71.\xd81a\xdf34\x2184=\x338-"); } +test { try parseIDNAFail("\xda12\xdcf3\x200d\xda05\xdf71.\xd81a\xdf34\x2184\x2260-"); } +test { try parseIDNAFail("xn--6j00chy9a.xn----81n51bt713h"); } +test { try parseIDNAFail("xn--1ug15151gkb5a.xn----81n51bt713h"); } +test { try parseIDNAFail("xn--6j00chy9a.xn----61n81bt713h"); } +test { try parseIDNAFail("xn--1ug15151gkb5a.xn----61n81bt713h"); } +test { try parseIDNAFail("\x200d\x252e\xdb40\xddd0\xff0e\xc00\xc4d\x1734\x200d"); } +test { try parseIDNAFail("\x200d\x252e\xdb40\xddd0.\xc00\xc4d\x1734\x200d"); } +test { try parseIDNAFail("xn--kxh.xn--eoc8m432a"); } +test { try parseIDNAFail("xn--1ug04r.xn--eoc8m432a40i"); } +test { try parseIDNAFail("\xdaa5\xdeaa\xff61\xd83c\xdd02"); } +test { try parseIDNAFail("\xdaa5\xdeaa\x30021,"); } +test { try parseIDNAFail("xn--n433d.1,"); } +test { try parseIDNAFail("xn--n433d.xn--v07h"); } +test { try parseIDNAFail("\xd804\xdf68\x520d.\xd83d\xdee6"); } +test { try parseIDNAFail("xn--rbry728b.xn--y88h"); } +test { try parseIDNAFail("\xdb40\xdf0f3\xff61\x1bf1\xd835\xdfd2"); } +test { try parseIDNAFail("\xdb40\xdf0f3\x3002\x1bf14"); } +test { try parseIDNAFail("xn--3-ib31m.xn--4-pql"); } +test { try parseIDNAFail("\xa87d\x226f\xff0e\xdaaf\xdc80\xda0b\xdcc4"); } +test { try parseIDNAFail("\xa87d>\x338\xff0e\xdaaf\xdc80\xda0b\xdcc4"); } +test { try parseIDNAFail("\xa87d\x226f.\xdaaf\xdc80\xda0b\xdcc4"); } +test { try parseIDNAFail("\xa87d>\x338.\xdaaf\xdc80\xda0b\xdcc4"); } +test { try parseIDNAFail("xn--hdh8193c.xn--5z40cp629b"); } +test { try parseIDNAFail("\xdb43\xdcdb\xff0e\x200d\x492b\x2260\x10be"); } +test { try parseIDNAFail("\xdb43\xdcdb\xff0e\x200d\x492b=\x338\x10be"); } +test { try parseIDNAFail("\xdb43\xdcdb.\x200d\x492b\x2260\x10be"); } +test { try parseIDNAFail("\xdb43\xdcdb.\x200d\x492b=\x338\x10be"); } +test { try parseIDNAFail("\xdb43\xdcdb.\x200d\x492b=\x338\x2d1e"); } +test { try parseIDNAFail("\xdb43\xdcdb.\x200d\x492b\x2260\x2d1e"); } +test { try parseIDNAFail("xn--1t56e.xn--1ch153bqvw"); } +test { try parseIDNAFail("xn--1t56e.xn--1ug73gzzpwi3a"); } +test { try parseIDNAFail("\xdb43\xdcdb\xff0e\x200d\x492b=\x338\x2d1e"); } +test { try parseIDNAFail("\xdb43\xdcdb\xff0e\x200d\x492b\x2260\x2d1e"); } +test { try parseIDNAFail("xn--1t56e.xn--2nd141ghl2a"); } +test { try parseIDNAFail("xn--1t56e.xn--2nd159e9vb743e"); } +test { try parseIDNAFail("3.1.xn--110d.j"); } +test { try parseIDNAFail("xn--tshd3512p.j"); } +test { try parseIDNAFail("\x34a\xff0e\xd802\xde0e"); } +test { try parseIDNAFail("\x34a.\xd802\xde0e"); } +test { try parseIDNAFail("xn--oua.xn--mr9c"); } +test { try parseIDNAFail("\xd6c9\x226e\xff61\xe34"); } +test { try parseIDNAFail("\x1112\x116e\x11ac<\x338\xff61\xe34"); } +test { try parseIDNAFail("\xd6c9\x226e\x3002\xe34"); } +test { try parseIDNAFail("\x1112\x116e\x11ac<\x338\x3002\xe34"); } +test { try parseIDNAFail("xn--gdh2512e.xn--i4c"); } +test { try parseIDNAFail("xn--fc9a.xn----qmg787k869k"); } +test { try parseIDNAFail("\x226e\xd834\xdd76\xff0e\xd987\xdc81\xaaec\x2e48\xdb82\xdd6d"); } +test { try parseIDNAFail("<\x338\xd834\xdd76\xff0e\xd987\xdc81\xaaec\x2e48\xdb82\xdd6d"); } +test { try parseIDNAFail("\x226e\xd834\xdd76.\xd987\xdc81\xaaec\x2e48\xdb82\xdd6d"); } +test { try parseIDNAFail("<\x338\xd834\xdd76.\xd987\xdc81\xaaec\x2e48\xdb82\xdd6d"); } +test { try parseIDNAFail("xn--gdh.xn--4tjx101bsg00ds9pyc"); } +test { try parseIDNAFail("xn--gdh0880o.xn--4tjx101bsg00ds9pyc"); } +test { try parseIDNAFail("\xd805\xdc42\xff61\x200d\xdb55\xdf80\xd83d\xdf95\xda54\xdc54"); } +test { try parseIDNAFail("\xd805\xdc42\x3002\x200d\xdb55\xdf80\xd83d\xdf95\xda54\xdc54"); } +test { try parseIDNAFail("xn--8v1d.xn--ye9h41035a2qqs"); } +test { try parseIDNAFail("xn--8v1d.xn--1ug1386plvx1cd8vya"); } +test { try parseIDNAFail("-\x200c\x2499\xd802\xdee5\xff61\xd836\xde35"); } +test { try parseIDNAFail("-\x200c18.\xd802\xdee5\x3002\xd836\xde35"); } +test { try parseIDNAFail("-18.xn--rx9c.xn--382h"); } +test { try parseIDNAFail("xn---18-9m0a.xn--rx9c.xn--382h"); } +test { try parseIDNAFail("xn----ddps939g.xn--382h"); } +test { try parseIDNAFail("xn----sgn18r3191a.xn--382h"); } +test { try parseIDNAFail("\xfe05\xfe12\x3002\xd858\xdc3e\x1ce0"); } +test { try parseIDNAFail("xn--y86c.xn--t6f5138v"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-\xdf\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-\xdf\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f.-\xdf\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f.-\xdf\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f.-SS\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f.-SS\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f.-ss\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f.-ss\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f.-Ss\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f.-Ss\x200c\x2260"); } +test { try parseIDNAFail("xn--u836e.xn---ss-gl2a"); } +test { try parseIDNAFail("xn--u836e.xn---ss-cn0at5l"); } +test { try parseIDNAFail("xn--u836e.xn----qfa750ve7b"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-SS\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-SS\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-ss\x200c\x2260"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-ss\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-Ss\x200c=\x338"); } +test { try parseIDNAFail("\xdb41\xdd4f\xff0e-Ss\x200c\x2260"); } +test { try parseIDNAFail("\x1859\x200c\xff61\x226f\xd800\xdef2\x2260"); } +test { try parseIDNAFail("\x1859\x200c\xff61>\x338\xd800\xdef2=\x338"); } +test { try parseIDNAFail("\x1859\x200c\x3002\x226f\xd800\xdef2\x2260"); } +test { try parseIDNAFail("\x1859\x200c\x3002>\x338\xd800\xdef2=\x338"); } +test { try parseIDNAFail("xn--p8e650b.xn--1ch3a7084l"); } +test { try parseIDNAFail("\xda7b\xdd5b\x613.\x10b5"); } +test { try parseIDNAFail("\xda7b\xdd5b\x613.\x2d15"); } +test { try parseIDNAFail("xn--1fb94204l.xn--dlj"); } +test { try parseIDNAFail("xn--1fb94204l.xn--tnd"); } +test { try parseIDNAFail("\x200c\xdb40\xdd37\xff61\xda09\xdc41"); } +test { try parseIDNAFail("\x200c\xdb40\xdd37\x3002\xda09\xdc41"); } +test { try parseIDNAFail(".xn--w720c"); } +test { try parseIDNAFail("xn--0ug.xn--w720c"); } +test { try parseIDNAFail("\x2488\xdd6\x7105.\xdb1e\xdc59\x200d\xa85f"); } +test { try parseIDNAFail("1.\xdd6\x7105.\xdb1e\xdc59\x200d\xa85f"); } +test { try parseIDNAFail("1.xn--t1c6981c.xn--4c9a21133d"); } +test { try parseIDNAFail("1.xn--t1c6981c.xn--1ugz184c9lw7i"); } +test { try parseIDNAFail("xn--t1c337io97c.xn--4c9a21133d"); } +test { try parseIDNAFail("xn--t1c337io97c.xn--1ugz184c9lw7i"); } +test { try parseIDNAFail("\xd804\xddc0\x258d.\x205e\x1830"); } +test { try parseIDNAFail("xn--9zh3057f.xn--j7e103b"); } +test { try parseIDNAFail("-3.\x200d\x30cc\x1895"); } +test { try parseIDNAFail("-3.xn--fbf739aq5o"); } +test { try parseIDNAFail("\x2132\x17d2\x200d\xff61\x2260\x200d\x200c"); } +test { try parseIDNAFail("\x2132\x17d2\x200d\xff61=\x338\x200d\x200c"); } +test { try parseIDNAFail("\x2132\x17d2\x200d\x3002\x2260\x200d\x200c"); } +test { try parseIDNAFail("\x2132\x17d2\x200d\x3002=\x338\x200d\x200c"); } +test { try parseIDNAFail("\x214e\x17d2\x200d\x3002=\x338\x200d\x200c"); } +test { try parseIDNAFail("\x214e\x17d2\x200d\x3002\x2260\x200d\x200c"); } +test { try parseIDNAFail("xn--u4e823bq1a.xn--0ugb89o"); } +test { try parseIDNAFail("\x214e\x17d2\x200d\xff61=\x338\x200d\x200c"); } +test { try parseIDNAFail("\x214e\x17d2\x200d\xff61\x2260\x200d\x200c"); } +test { try parseIDNAFail("xn--u4e319b.xn--1ch"); } +test { try parseIDNAFail("xn--u4e823bcza.xn--0ugb89o"); } +test { try parseIDNAFail("\xd9a9\xdd2f\xfa8\xff0e\x226f"); } +test { try parseIDNAFail("\xd9a9\xdd2f\xfa8\xff0e>\x338"); } +test { try parseIDNAFail("\xd9a9\xdd2f\xfa8.\x226f"); } +test { try parseIDNAFail("\xd9a9\xdd2f\xfa8.>\x338"); } +test { try parseIDNAFail("xn--4fd57150h.xn--hdh"); } +test { try parseIDNAFail("\xd802\xde3f\xdb40\xdd8c\x9e2e\xd805\xdeb6.\x3c2"); } +test { try parseIDNAFail("\xd802\xde3f\xdb40\xdd8c\x9e2e\xd805\xdeb6.\x3a3"); } +test { try parseIDNAFail("\xd802\xde3f\xdb40\xdd8c\x9e2e\xd805\xdeb6.\x3c3"); } +test { try parseIDNAFail("xn--l76a726rt2h.xn--4xa"); } +test { try parseIDNAFail("xn--l76a726rt2h.xn--3xa"); } +test { try parseIDNAFail("\x3c2-\x3002\x200c\xd835\xdfed-"); } +test { try parseIDNAFail("\x3c2-\x3002\x200c1-"); } +test { try parseIDNAFail("\x3a3-\x3002\x200c1-"); } +test { try parseIDNAFail("\x3c3-\x3002\x200c1-"); } +test { try parseIDNAFail("xn----zmb.xn--1--i1t"); } +test { try parseIDNAFail("xn----xmb.xn--1--i1t"); } +test { try parseIDNAFail("\x3a3-\x3002\x200c\xd835\xdfed-"); } +test { try parseIDNAFail("\x3c3-\x3002\x200c\xd835\xdfed-"); } +test { try parseIDNAFail("\x1734-\xce2\xff0e\xdb40\xdd29\x10a4"); } +test { try parseIDNAFail("\x1734-\xce2.\xdb40\xdd29\x10a4"); } +test { try parseIDNAFail("\x1734-\xce2.\xdb40\xdd29\x2d04"); } +test { try parseIDNAFail("xn----ggf830f.xn--vkj"); } +test { try parseIDNAFail("\x1734-\xce2\xff0e\xdb40\xdd29\x2d04"); } +test { try parseIDNAFail("xn----ggf830f.xn--cnd"); } +test { try parseIDNAFail("\x200d\x3002\xd838\xdc18\x2488\xa84d\x64c9"); } +test { try parseIDNAFail("\x200d\x3002\xd838\xdc181.\xa84d\x64c9"); } +test { try parseIDNAFail(".xn--1-1p4r.xn--s7uv61m"); } +test { try parseIDNAFail("xn--1ug.xn--1-1p4r.xn--s7uv61m"); } +test { try parseIDNAFail(".xn--tsh026uql4bew9p"); } +test { try parseIDNAFail("xn--1ug.xn--tsh026uql4bew9p"); } +test { try parseIDNAFail("\x2ad0\xff61\x10c0-\xdacd\xdc22"); } +test { try parseIDNAFail("\x2ad0\x3002\x10c0-\xdacd\xdc22"); } +test { try parseIDNAFail("\x2ad0\x3002\x2d20-\xdacd\xdc22"); } +test { try parseIDNAFail("xn--r3i.xn----2wst7439i"); } +test { try parseIDNAFail("\x2ad0\xff61\x2d20-\xdacd\xdc22"); } +test { try parseIDNAFail("xn--r3i.xn----z1g58579u"); } +test { try parseIDNAFail("\xd805\xdc42\x25ca\xff0e\x299f\x2220"); } +test { try parseIDNAFail("\xd805\xdc42\x25ca.\x299f\x2220"); } +test { try parseIDNAFail("xn--01h3338f.xn--79g270a"); } +test { try parseIDNAFail("\xd5c1\xdb21\xdd99\xe3a\xdb28\xdf5a\x3002\x6ba\xd835\xdfdc"); } +test { try parseIDNAFail("\x1112\x1164\x11bc\xdb21\xdd99\xe3a\xdb28\xdf5a\x3002\x6ba\xd835\xdfdc"); } +test { try parseIDNAFail("\xd5c1\xdb21\xdd99\xe3a\xdb28\xdf5a\x3002\x6ba4"); } +test { try parseIDNAFail("\x1112\x1164\x11bc\xdb21\xdd99\xe3a\xdb28\xdf5a\x3002\x6ba4"); } +test { try parseIDNAFail("xn--o4c1723h8g85gt4ya.xn--4-dvc"); } +test { try parseIDNAFail("\xa953.\x33d\xd804\xdcbd\x998b"); } +test { try parseIDNAFail("xn--3j9a.xn--bua0708eqzrd"); } +test { try parseIDNAFail("\xdae2\xdedd\xda69\xdef8\x200d\xff61\x4716"); } +test { try parseIDNAFail("\xdae2\xdedd\xda69\xdef8\x200d\x3002\x4716"); } +test { try parseIDNAFail("xn--g138cxw05a.xn--k0o"); } +test { try parseIDNAFail("xn--1ug30527h9mxi.xn--k0o"); } +test { try parseIDNAFail("\x186f\x2689\x59f6\xd83c\xdd09\xff0e\x6f7\x200d\xd83c\xdfaa\x200d"); } +test { try parseIDNAFail("\x186f\x2689\x59f68,.\x6f7\x200d\xd83c\xdfaa\x200d"); } +test { try parseIDNAFail("xn--8,-g9oy26fzu4d.xn--kmb859ja94998b"); } +test { try parseIDNAFail("xn--c9e433epi4b3j20a.xn--kmb6733w"); } +test { try parseIDNAFail("xn--c9e433epi4b3j20a.xn--kmb859ja94998b"); } +test { try parseIDNAFail("\x135f\x1848\x200c\xff0e\xfe12-\xd81b\xdf90-"); } +test { try parseIDNAFail("\x135f\x1848\x200c.\x3002-\xd81b\xdf90-"); } +test { try parseIDNAFail("xn--b7d82w..xn-----pe4u"); } +test { try parseIDNAFail("xn--b7d82wo4h..xn-----pe4u"); } +test { try parseIDNAFail("xn--b7d82w.xn-----c82nz547a"); } +test { try parseIDNAFail("xn--b7d82wo4h.xn-----c82nz547a"); } +test { try parseIDNAFail("\xd836\xde5c\x3002-\xb4d\x10ab"); } +test { try parseIDNAFail("\xd836\xde5c\x3002-\xb4d\x2d0b"); } +test { try parseIDNAFail("xn--792h.xn----bse820x"); } +test { try parseIDNAFail("xn--792h.xn----bse632b"); } +test { try parseIDNAFail("\xd835\xdff5\x9681\x2bee\xff0e\x180d\x200c"); } +test { try parseIDNAFail("9\x9681\x2bee.\x180d\x200c"); } +test { try parseIDNAFail("xn--9-mfs8024b.xn--0ug"); } +test { try parseIDNAFail("\x1bac\x10ac\x200c\x325\x3002\xd835\xdff8"); } +test { try parseIDNAFail("xn--mta176jjjm.c"); } +test { try parseIDNAFail("xn--mta176j97cl2q.c"); } +test { try parseIDNAFail("\x1bac\x2d0c\x200c\x325\x3002\xd835\xdff8"); } +test { try parseIDNAFail("xn--mta930emri.c"); } +test { try parseIDNAFail("xn--mta930emribme.c"); } +test { try parseIDNAFail("\xdb40\xdd01\x35f\x2fb6\xff61\x2087\xfe12\xb207\x226e"); } +test { try parseIDNAFail("\xdb40\xdd01\x35f\x2fb6\xff61\x2087\xfe12\x1102\x116e\x11aa<\x338"); } +test { try parseIDNAFail("\xdb40\xdd01\x35f\x98db\x30027\x3002\xb207\x226e"); } +test { try parseIDNAFail("\xdb40\xdd01\x35f\x98db\x30027\x3002\x1102\x116e\x11aa<\x338"); } +test { try parseIDNAFail("xn--9ua0567e.7.xn--gdh6767c"); } +test { try parseIDNAFail("xn--9ua0567e.xn--7-ngou006d1ttc"); } +test { try parseIDNAFail("\x200c\x3002\xffa0\xf84\xf96"); } +test { try parseIDNAFail("\x200c\x3002\x1160\xf84\xf96"); } +test { try parseIDNAFail(".xn--3ed0b"); } +test { try parseIDNAFail("xn--0ug.xn--3ed0b"); } +test { try parseIDNAFail(".xn--3ed0b20h"); } +test { try parseIDNAFail("xn--0ug.xn--3ed0b20h"); } +test { try parseIDNAFail(".xn--3ed0by082k"); } +test { try parseIDNAFail("xn--0ug.xn--3ed0by082k"); } +test { try parseIDNAFail("\x226f\xd9f5\xde05\xff0e\x200d\xd800\xdd7c\xda88\xdddb"); } +test { try parseIDNAFail(">\x338\xd9f5\xde05\xff0e\x200d\xd800\xdd7c\xda88\xdddb"); } +test { try parseIDNAFail("\x226f\xd9f5\xde05.\x200d\xd800\xdd7c\xda88\xdddb"); } +test { try parseIDNAFail(">\x338\xd9f5\xde05.\x200d\xd800\xdd7c\xda88\xdddb"); } +test { try parseIDNAFail("xn--hdh84488f.xn--xy7cw2886b"); } +test { try parseIDNAFail("xn--hdh84488f.xn--1ug8099fbjp4e"); } +test { try parseIDNAFail("xn--d5a07sn4u297k.xn--2e1b"); } +test { try parseIDNAFail("\xa8ea\xff61\xd818\xdd3f\xd804\xddbe\xdb40\xddd7"); } +test { try parseIDNAFail("\xa8ea\x3002\xd818\xdd3f\xd804\xddbe\xdb40\xddd7"); } +test { try parseIDNAFail("xn--3g9a.xn--ud1dz07k"); } +test { try parseIDNAFail("\xdadd\xdcd3\xd805\xdeb3\x3002\xd903\xddff\x226f\x2f87"); } +test { try parseIDNAFail("\xdadd\xdcd3\xd805\xdeb3\x3002\xd903\xddff>\x338\x2f87"); } +test { try parseIDNAFail("\xdadd\xdcd3\xd805\xdeb3\x3002\xd903\xddff\x226f\x821b"); } +test { try parseIDNAFail("\xdadd\xdcd3\xd805\xdeb3\x3002\xd903\xddff>\x338\x821b"); } +test { try parseIDNAFail("xn--3e2d79770c.xn--hdh0088abyy1c"); } +test { try parseIDNAFail("\xd944\xdd48\x782a\x226f\x1891\xff61\x226f\xd836\xde5a\xda0f\xdd14\x200c"); } +test { try parseIDNAFail("\xd944\xdd48\x782a>\x338\x1891\xff61>\x338\xd836\xde5a\xda0f\xdd14\x200c"); } +test { try parseIDNAFail("\xd944\xdd48\x782a\x226f\x1891\x3002\x226f\xd836\xde5a\xda0f\xdd14\x200c"); } +test { try parseIDNAFail("\xd944\xdd48\x782a>\x338\x1891\x3002>\x338\xd836\xde5a\xda0f\xdd14\x200c"); } +test { try parseIDNAFail("xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b"); } +test { try parseIDNAFail("xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c"); } +test { try parseIDNAFail("\x10c5.\xd804\xdd33\x32b8"); } +test { try parseIDNAFail("\x10c5.\xd804\xdd3343"); } +test { try parseIDNAFail("\x2d25.\xd804\xdd3343"); } +test { try parseIDNAFail("xn--tlj.xn--43-274o"); } +test { try parseIDNAFail("\x2d25.\xd804\xdd33\x32b8"); } +test { try parseIDNAFail("xn--9nd.xn--43-274o"); } +test { try parseIDNAFail("\xd91e\xdea8\xdb40\xdd09\xffa0\xfb7.\xd9a1\xdfb0\xa953"); } +test { try parseIDNAFail("\xd91e\xdea8\xdb40\xdd09\x1160\xfb7.\xd9a1\xdfb0\xa953"); } +test { try parseIDNAFail("xn--kgd72212e.xn--3j9au7544a"); } +test { try parseIDNAFail("xn--kgd36f9z57y.xn--3j9au7544a"); } +test { try parseIDNAFail("xn--kgd7493jee34a.xn--3j9au7544a"); } +test { try parseIDNAFail("\x618.\x6f3\x200c\xa953"); } +test { try parseIDNAFail("xn--6fb.xn--gmb0524f"); } +test { try parseIDNAFail("xn--6fb.xn--gmb469jjf1h"); } +test { try parseIDNAFail("\x184c\xff0e\xfe12\x1891"); } +test { try parseIDNAFail("xn--c8e.xn--bbf9168i"); } +test { try parseIDNAFail("\xd83b\xddcf\x3002\x1822\xda0d\xde06"); } +test { try parseIDNAFail("xn--hd7h.xn--46e66060j"); } +test { try parseIDNAFail("\xd9f0\xded4\xdb40\xdd8e\xdb40\xdd97\xd807\xdc95\x3002\x226e"); } +test { try parseIDNAFail("\xd9f0\xded4\xdb40\xdd8e\xdb40\xdd97\xd807\xdc95\x3002<\x338"); } +test { try parseIDNAFail("xn--4m3dv4354a.xn--gdh"); } +test { try parseIDNAFail("\xdb40\xdda6.\x8e3\x6680\x2260"); } +test { try parseIDNAFail("\xdb40\xdda6.\x8e3\x6680=\x338"); } +test { try parseIDNAFail(".xn--m0b461k3g2c"); } +test { try parseIDNAFail("\x40b9\xdbb9\xdd85\xd800\xdee6\xff0e\x200d"); } +test { try parseIDNAFail("\x40b9\xdbb9\xdd85\xd800\xdee6.\x200d"); } +test { try parseIDNAFail("xn--0on3543c5981i."); } +test { try parseIDNAFail("xn--0on3543c5981i.xn--1ug"); } +test { try parseIDNAFail("\xfe12\xff61\x10a3\x226f"); } +test { try parseIDNAFail("\xfe12\xff61\x10a3>\x338"); } +test { try parseIDNAFail("\xfe12\xff61\x2d03>\x338"); } +test { try parseIDNAFail("\xfe12\xff61\x2d03\x226f"); } +test { try parseIDNAFail("xn--y86c.xn--hdh782b"); } +test { try parseIDNAFail("..xn--bnd622g"); } +test { try parseIDNAFail("xn--y86c.xn--bnd622g"); } +test { try parseIDNAFail("\x7b83\x10c1-\xdb40\xdc5d\xff61\x2260-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x10c1-\xdb40\xdc5d\xff61=\x338-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x10c1-\xdb40\xdc5d\x3002\x2260-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x10c1-\xdb40\xdc5d\x3002=\x338-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x2d21-\xdb40\xdc5d\x3002=\x338-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x2d21-\xdb40\xdc5d\x3002\x2260-\xd83e\xdd16"); } +test { try parseIDNAFail("xn----4wsr321ay823p.xn----tfot873s"); } +test { try parseIDNAFail("\x7b83\x2d21-\xdb40\xdc5d\xff61=\x338-\xd83e\xdd16"); } +test { try parseIDNAFail("\x7b83\x2d21-\xdb40\xdc5d\xff61\x2260-\xd83e\xdd16"); } +test { try parseIDNAFail("xn----11g3013fy8x5m.xn----tfot873s"); } +test { try parseIDNAFail("\x103a\x200d\x200c\x3002-\x200c"); } +test { try parseIDNAFail("xn--bkd.-"); } +test { try parseIDNAFail("xn--bkd412fca.xn----sgn"); } +test { try parseIDNAFail("\xfe12\xff61\x1b44\x1849"); } +test { try parseIDNAFail("\x3002\x3002\x1b44\x1849"); } +test { try parseIDNAFail("..xn--87e93m"); } +test { try parseIDNAFail("xn--y86c.xn--87e93m"); } +test { try parseIDNAFail("-\x1bab\xfe12\x200d.\xd90b\xdd88\xd957\xde53"); } +test { try parseIDNAFail("-\x1bab\x3002\x200d.\xd90b\xdd88\xd957\xde53"); } +test { try parseIDNAFail("xn----qml..xn--x50zy803a"); } +test { try parseIDNAFail("xn----qml.xn--1ug.xn--x50zy803a"); } +test { try parseIDNAFail("xn----qml1407i.xn--x50zy803a"); } +test { try parseIDNAFail("xn----qmlv7tw180a.xn--x50zy803a"); } +test { try parseIDNAFail("\xdb42\xddae.\x226f\xd838\xdc06"); } +test { try parseIDNAFail("\xdb42\xddae.>\x338\xd838\xdc06"); } +test { try parseIDNAFail("xn--t546e.xn--hdh5166o"); } +test { try parseIDNAFail("xn--skb.xn--osd737a"); } +test { try parseIDNAFail("\x3a1b\xd823\xdc4e.\xfe12\xd835\xdfd5\xd01"); } +test { try parseIDNAFail("xn--mbm8237g.xn--7-7hf1526p"); } +test { try parseIDNAFail("\xdf\x200c\xaaf6\x18a5\xff0e\x22b6\x10c1\x10b6"); } +test { try parseIDNAFail("\xdf\x200c\xaaf6\x18a5.\x22b6\x10c1\x10b6"); } +test { try parseIDNAFail("\xdf\x200c\xaaf6\x18a5.\x22b6\x2d21\x2d16"); } +test { try parseIDNAFail("SS\x200c\xaaf6\x18a5.\x22b6\x10c1\x10b6"); } +test { try parseIDNAFail("ss\x200c\xaaf6\x18a5.\x22b6\x2d21\x2d16"); } +test { try parseIDNAFail("Ss\x200c\xaaf6\x18a5.\x22b6\x10c1\x2d16"); } +test { try parseIDNAFail("xn--ss-4ep585bkm5p.xn--ifh802b6a"); } +test { try parseIDNAFail("xn--zca682johfi89m.xn--ifh802b6a"); } +test { try parseIDNAFail("\xdf\x200c\xaaf6\x18a5\xff0e\x22b6\x2d21\x2d16"); } +test { try parseIDNAFail("SS\x200c\xaaf6\x18a5\xff0e\x22b6\x10c1\x10b6"); } +test { try parseIDNAFail("ss\x200c\xaaf6\x18a5\xff0e\x22b6\x2d21\x2d16"); } +test { try parseIDNAFail("Ss\x200c\xaaf6\x18a5\xff0e\x22b6\x10c1\x2d16"); } +test { try parseIDNAFail("xn--ss-4epx629f.xn--5nd703gyrh"); } +test { try parseIDNAFail("xn--ss-4ep585bkm5p.xn--5nd703gyrh"); } +test { try parseIDNAFail("xn--ss-4epx629f.xn--undv409k"); } +test { try parseIDNAFail("xn--ss-4ep585bkm5p.xn--undv409k"); } +test { try parseIDNAFail("xn--zca682johfi89m.xn--undv409k"); } +test { try parseIDNAFail("\x200d\x3002\x3c2\xdb40\xdc49"); } +test { try parseIDNAFail("\x200d\x3002\x3a3\xdb40\xdc49"); } +test { try parseIDNAFail("\x200d\x3002\x3c3\xdb40\xdc49"); } +test { try parseIDNAFail(".xn--4xa24344p"); } +test { try parseIDNAFail("xn--1ug.xn--4xa24344p"); } +test { try parseIDNAFail("xn--1ug.xn--3xa44344p"); } +test { try parseIDNAFail("\x2492\xda61\xde19\xda8f\xdce0\xd805\xdcc0.-\xdb3a\xdc4a"); } +test { try parseIDNAFail("11.\xda61\xde19\xda8f\xdce0\xd805\xdcc0.-\xdb3a\xdc4a"); } +test { try parseIDNAFail("11.xn--uz1d59632bxujd.xn----x310m"); } +test { try parseIDNAFail("xn--3shy698frsu9dt1me.xn----x310m"); } +test { try parseIDNAFail("-\xff61\x200d"); } +test { try parseIDNAFail("-\x3002\x200d"); } +test { try parseIDNAFail("-.xn--1ug"); } +test { try parseIDNAFail("\x126c\xda12\xdc3c\xd8c5\xddf6\xff61\xd802\xde2c\xd835\xdfe0"); } +test { try parseIDNAFail("\x126c\xda12\xdc3c\xd8c5\xddf6\x3002\xd802\xde2c8"); } +test { try parseIDNAFail("xn--d0d41273c887z.xn--8-ob5i"); } +test { try parseIDNAFail("\x3c2\x200d-.\x10c3\xd859\xdfd9"); } +test { try parseIDNAFail("\x3c2\x200d-.\x2d23\xd859\xdfd9"); } +test { try parseIDNAFail("\x3a3\x200d-.\x10c3\xd859\xdfd9"); } +test { try parseIDNAFail("\x3c3\x200d-.\x2d23\xd859\xdfd9"); } +test { try parseIDNAFail("xn----zmb048s.xn--rlj2573p"); } +test { try parseIDNAFail("xn----xmb348s.xn--rlj2573p"); } +test { try parseIDNAFail("xn----zmb.xn--7nd64871a"); } +test { try parseIDNAFail("xn----zmb048s.xn--7nd64871a"); } +test { try parseIDNAFail("xn----xmb348s.xn--7nd64871a"); } +test { try parseIDNAFail("\xdad6\xdf3d.\x8814"); } +test { try parseIDNAFail("xn--g747d.xn--xl2a"); } +test { try parseIDNAFail("\x8e6\x200d\xff0e\xbf3d"); } +test { try parseIDNAFail("\x8e6\x200d\xff0e\x1108\x1168\x11c0"); } +test { try parseIDNAFail("\x8e6\x200d.\xbf3d"); } +test { try parseIDNAFail("\x8e6\x200d.\x1108\x1168\x11c0"); } +test { try parseIDNAFail("xn--p0b.xn--e43b"); } +test { try parseIDNAFail("xn--p0b869i.xn--e43b"); } +test { try parseIDNAFail("\xd8f6\xde3d\xff0e\xd8ef\xde15"); } +test { try parseIDNAFail("\xd8f6\xde3d.\xd8ef\xde15"); } +test { try parseIDNAFail("xn--pr3x.xn--rv7w"); } +test { try parseIDNAFail("\xd802\xdfc0\xd803\xde09\xd83a\xddcf\x3002\xd949\xdea7\x2084\x10ab\xd8cb\xde6b"); } +test { try parseIDNAFail("\xd802\xdfc0\xd803\xde09\xd83a\xddcf\x3002\xd949\xdea74\x10ab\xd8cb\xde6b"); } +test { try parseIDNAFail("\xd802\xdfc0\xd803\xde09\xd83a\xddcf\x3002\xd949\xdea74\x2d0b\xd8cb\xde6b"); } +test { try parseIDNAFail("xn--039c42bq865a.xn--4-wvs27840bnrzm"); } +test { try parseIDNAFail("\xd802\xdfc0\xd803\xde09\xd83a\xddcf\x3002\xd949\xdea7\x2084\x2d0b\xd8cb\xde6b"); } +test { try parseIDNAFail("xn--039c42bq865a.xn--4-t0g49302fnrzm"); } +test { try parseIDNAFail("\xd835\xdfd3\x3002\x6d7"); } +test { try parseIDNAFail("5\x3002\x6d7"); } +test { try parseIDNAFail("5.xn--nlb"); } +test { try parseIDNAFail("\x200c\xdaab\xde29.\x2f95"); } +test { try parseIDNAFail("\x200c\xdaab\xde29.\x8c37"); } +test { try parseIDNAFail("xn--i183d.xn--6g3a"); } +test { try parseIDNAFail("xn--0ug26167i.xn--6g3a"); } +test { try parseIDNAFail("\xfe12\xdafb\xdc07\x200d.-\x73c\x200c"); } +test { try parseIDNAFail("\x3002\xdafb\xdc07\x200d.-\x73c\x200c"); } +test { try parseIDNAFail(".xn--hh50e.xn----t2c"); } +test { try parseIDNAFail(".xn--1ug05310k.xn----t2c071q"); } +test { try parseIDNAFail("xn--y86c71305c.xn----t2c"); } +test { try parseIDNAFail("xn--1ug1658ftw26f.xn----t2c071q"); } +test { try parseIDNAFail("\x200d\xff0e\xd835\xdfd7"); } +test { try parseIDNAFail("\x200d.j"); } +test { try parseIDNAFail("\x200d.J"); } +test { try parseIDNAFail("xn--1ug.j"); } +test { try parseIDNAFail("\x10ad\xd8be\xdccd\xa868\x5ae\x3002\x10be\x200c\x200c"); } +test { try parseIDNAFail("\x2d0d\xd8be\xdccd\xa868\x5ae\x3002\x2d1e\x200c\x200c"); } +test { try parseIDNAFail("xn--5cb172r175fug38a.xn--mlj"); } +test { try parseIDNAFail("xn--5cb172r175fug38a.xn--0uga051h"); } +test { try parseIDNAFail("xn--5cb347co96jug15a.xn--2nd"); } +test { try parseIDNAFail("xn--5cb347co96jug15a.xn--2nd059ea"); } +test { try parseIDNAFail("\xd800\xdef0\x3002\xdb05\xdcf1"); } +test { try parseIDNAFail("xn--k97c.xn--q031e"); } +test { try parseIDNAFail("\x8df\x10ab\xd89b\xdff8\xade4\xff0e\xda40\xdd7c\xd835\xdfe2\xd72a\xae3"); } +test { try parseIDNAFail("\x8df\x10ab\xd89b\xdff8\x1100\x1172\x11af\xff0e\xda40\xdd7c\xd835\xdfe2\x1112\x1171\x11b9\xae3"); } +test { try parseIDNAFail("\x8df\x10ab\xd89b\xdff8\xade4.\xda40\xdd7c0\xd72a\xae3"); } +test { try parseIDNAFail("\x8df\x10ab\xd89b\xdff8\x1100\x1172\x11af.\xda40\xdd7c0\x1112\x1171\x11b9\xae3"); } +test { try parseIDNAFail("\x8df\x2d0b\xd89b\xdff8\x1100\x1172\x11af.\xda40\xdd7c0\x1112\x1171\x11b9\xae3"); } +test { try parseIDNAFail("\x8df\x2d0b\xd89b\xdff8\xade4.\xda40\xdd7c0\xd72a\xae3"); } +test { try parseIDNAFail("xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f"); } +test { try parseIDNAFail("\x8df\x2d0b\xd89b\xdff8\x1100\x1172\x11af\xff0e\xda40\xdd7c\xd835\xdfe2\x1112\x1171\x11b9\xae3"); } +test { try parseIDNAFail("\x8df\x2d0b\xd89b\xdff8\xade4\xff0e\xda40\xdd7c\xd835\xdfe2\xd72a\xae3"); } +test { try parseIDNAFail("xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f"); } +test { try parseIDNAFail("\x784\xff0e\xd83a\xdc5d\x601"); } +test { try parseIDNAFail("\x784.\xd83a\xdc5d\x601"); } +test { try parseIDNAFail("xn--lqb.xn--jfb1808v"); } +test { try parseIDNAFail("\xacd\x2083.8\xa8c4\x200d\xd83c\xdce4"); } +test { try parseIDNAFail("\xacd3.8\xa8c4\x200d\xd83c\xdce4"); } +test { try parseIDNAFail("xn--3-yke.xn--8-sl4et308f"); } +test { try parseIDNAFail("xn--3-yke.xn--8-ugnv982dbkwm"); } +test { try parseIDNAFail("\xa855\x2260\x105e\xdb7b\xdff1\xff61\xd803\xdd67\xdb40\xdd2b\xffa0"); } +test { try parseIDNAFail("\xa855=\x338\x105e\xdb7b\xdff1\xff61\xd803\xdd67\xdb40\xdd2b\xffa0"); } +test { try parseIDNAFail("\xa855\x2260\x105e\xdb7b\xdff1\x3002\xd803\xdd67\xdb40\xdd2b\x1160"); } +test { try parseIDNAFail("\xa855=\x338\x105e\xdb7b\xdff1\x3002\xd803\xdd67\xdb40\xdd2b\x1160"); } +test { try parseIDNAFail("xn--cld333gn31h0158l.xn--3g0d"); } +test { try parseIDNAFail("\x9c4a\x3002\x200c"); } +test { try parseIDNAFail("xn--rt6a.xn--0ug"); } +test { try parseIDNAFail("\x200c\xd908\xdce0\xff0e\x200d"); } +test { try parseIDNAFail("\x200c\xd908\xdce0.\x200d"); } +test { try parseIDNAFail("xn--dj8y."); } +test { try parseIDNAFail("xn--0ugz7551c.xn--1ug"); } +test { try parseIDNAFail("\xd804\xddc0.\xdb42\xde31"); } +test { try parseIDNAFail("xn--wd1d.xn--k946e"); } +test { try parseIDNAFail("\x200c\x10ba\xff61\x3c2"); } +test { try parseIDNAFail("\x200c\x10ba\x3002\x3c2"); } +test { try parseIDNAFail("\x200c\x2d1a\x3002\x3c2"); } +test { try parseIDNAFail("\x200c\x10ba\x3002\x3a3"); } +test { try parseIDNAFail("\x200c\x2d1a\x3002\x3c3"); } +test { try parseIDNAFail("xn--0ug262c.xn--4xa"); } +test { try parseIDNAFail("xn--0ug262c.xn--3xa"); } +test { try parseIDNAFail("\x200c\x2d1a\xff61\x3c2"); } +test { try parseIDNAFail("\x200c\x10ba\xff61\x3a3"); } +test { try parseIDNAFail("\x200c\x2d1a\xff61\x3c3"); } +test { try parseIDNAFail("xn--ynd.xn--4xa"); } +test { try parseIDNAFail("xn--ynd.xn--3xa"); } +test { try parseIDNAFail("xn--ynd759e.xn--4xa"); } +test { try parseIDNAFail("xn--ynd759e.xn--3xa"); } +test { try parseIDNAFail("\x200d\x2f95\x3002\x200c\x310\xa953\xa84e"); } +test { try parseIDNAFail("\x200d\x2f95\x3002\x200c\xa953\x310\xa84e"); } +test { try parseIDNAFail("\x200d\x8c37\x3002\x200c\xa953\x310\xa84e"); } +test { try parseIDNAFail("xn--6g3a.xn--0sa8175flwa"); } +test { try parseIDNAFail("xn--1ug0273b.xn--0sa359l6n7g13a"); } +test { try parseIDNAFail("\xda72\xde29\x10b3\x2753\xff61\xd804\xdd28"); } +test { try parseIDNAFail("\xda72\xde29\x10b3\x2753\x3002\xd804\xdd28"); } +test { try parseIDNAFail("\xda72\xde29\x2d13\x2753\x3002\xd804\xdd28"); } +test { try parseIDNAFail("xn--8di78qvw32y.xn--k80d"); } +test { try parseIDNAFail("\xda72\xde29\x2d13\x2753\xff61\xd804\xdd28"); } +test { try parseIDNAFail("xn--rnd896i0j14q.xn--k80d"); } +test { try parseIDNAFail("\x17ff\xff61\xd83a\xdf33"); } +test { try parseIDNAFail("\x17ff\x3002\xd83a\xdf33"); } +test { try parseIDNAFail("xn--45e.xn--et6h"); } +test { try parseIDNAFail("\x652\x200d\xff61\xccd\xd805\xdeb3"); } +test { try parseIDNAFail("\x652\x200d\x3002\xccd\xd805\xdeb3"); } +test { try parseIDNAFail("xn--uhb.xn--8tc4527k"); } +test { try parseIDNAFail("xn--uhb882k.xn--8tc4527k"); } +test { try parseIDNAFail("\xdf\xd880\xdc3b\xd8da\xdf17\xff61\xd836\xde68\xd83d\xdd6e\xdf"); } +test { try parseIDNAFail("\xdf\xd880\xdc3b\xd8da\xdf17\x3002\xd836\xde68\xd83d\xdd6e\xdf"); } +test { try parseIDNAFail("SS\xd880\xdc3b\xd8da\xdf17\x3002\xd836\xde68\xd83d\xdd6eSS"); } +test { try parseIDNAFail("ss\xd880\xdc3b\xd8da\xdf17\x3002\xd836\xde68\xd83d\xdd6ess"); } +test { try parseIDNAFail("Ss\xd880\xdc3b\xd8da\xdf17\x3002\xd836\xde68\xd83d\xdd6eSs"); } +test { try parseIDNAFail("xn--ss-jl59biy67d.xn--ss-4d11aw87d"); } +test { try parseIDNAFail("xn--zca20040bgrkh.xn--zca3653v86qa"); } +test { try parseIDNAFail("SS\xd880\xdc3b\xd8da\xdf17\xff61\xd836\xde68\xd83d\xdd6eSS"); } +test { try parseIDNAFail("ss\xd880\xdc3b\xd8da\xdf17\xff61\xd836\xde68\xd83d\xdd6ess"); } +test { try parseIDNAFail("Ss\xd880\xdc3b\xd8da\xdf17\xff61\xd836\xde68\xd83d\xdd6eSs"); } +test { try parseIDNAFail("\x200d\x3002\x200c"); } +test { try parseIDNAFail("xn--1ug.xn--0ug"); } +test { try parseIDNAFail("\xdb41\xdc58\xff0e\xdb40\xdd2e"); } +test { try parseIDNAFail("\xdb41\xdc58.\xdb40\xdd2e"); } +test { try parseIDNAFail("xn--s136e."); } +test { try parseIDNAFail("\xa9b7\xdb37\xdd59\xba79\x3002\x249b\xdb42\xde07"); } +test { try parseIDNAFail("\xa9b7\xdb37\xdd59\x1106\x1167\x11b0\x3002\x249b\xdb42\xde07"); } +test { try parseIDNAFail("\xa9b7\xdb37\xdd59\xba79\x300220.\xdb42\xde07"); } +test { try parseIDNAFail("\xa9b7\xdb37\xdd59\x1106\x1167\x11b0\x300220.\xdb42\xde07"); } +test { try parseIDNAFail("xn--ym9av13acp85w.20.xn--d846e"); } +test { try parseIDNAFail("xn--ym9av13acp85w.xn--dth22121k"); } +test { try parseIDNAFail("\x200c\xff61\xfe12"); } +test { try parseIDNAFail("\x200c\x3002\x3002"); } +test { try parseIDNAFail("xn--0ug.."); } +test { try parseIDNAFail(".xn--y86c"); } +test { try parseIDNAFail("xn--0ug.xn--y86c"); } +test { try parseIDNAFail("\x1872-\xd835\xdff9.\xdf-\x200c-"); } +test { try parseIDNAFail("\x1872-3.\xdf-\x200c-"); } +test { try parseIDNAFail("\x1872-3.SS-\x200c-"); } +test { try parseIDNAFail("\x1872-3.ss-\x200c-"); } +test { try parseIDNAFail("\x1872-3.Ss-\x200c-"); } +test { try parseIDNAFail("xn---3-p9o.xn--ss---276a"); } +test { try parseIDNAFail("xn---3-p9o.xn-----fia9303a"); } +test { try parseIDNAFail("\x1872-\xd835\xdff9.SS-\x200c-"); } +test { try parseIDNAFail("\x1872-\xd835\xdff9.ss-\x200c-"); } +test { try parseIDNAFail("\x1872-\xd835\xdff9.Ss-\x200c-"); } +test { try parseIDNAFail("\xdb27\xdd9c\x1898\x3002\x1a7f\x2ea2"); } +test { try parseIDNAFail("xn--ibf35138o.xn--fpfz94g"); } +test { try parseIDNAFail("\xda1c\xdda7\xd835\xdfef\x3002\x2488\x1a76\xd835\xdfda\xda41\xde0c"); } +test { try parseIDNAFail("\xda1c\xdda73\x30021.\x1a762\xda41\xde0c"); } +test { try parseIDNAFail("xn--3-rj42h.1.xn--2-13k96240l"); } +test { try parseIDNAFail("xn--3-rj42h.xn--2-13k746cq465x"); } +test { try parseIDNAFail("\x200d\x2085\x2488\x3002\x226f\xd835\xdff4\x200d"); } +test { try parseIDNAFail("\x200d\x2085\x2488\x3002>\x338\xd835\xdff4\x200d"); } +test { try parseIDNAFail("\x200d51.\x3002\x226f8\x200d"); } +test { try parseIDNAFail("\x200d51.\x3002>\x3388\x200d"); } +test { try parseIDNAFail("xn--51-l1t..xn--8-ugn00i"); } +test { try parseIDNAFail("xn--5-ecp.xn--8-ogo"); } +test { try parseIDNAFail("xn--5-tgnz5r.xn--8-ugn00i"); } +test { try parseIDNAFail("\xd8bb\xddc2\xa42\x10aa\xd8c8\xdc9f.\x226e"); } +test { try parseIDNAFail("\xd8bb\xddc2\xa42\x10aa\xd8c8\xdc9f.<\x338"); } +test { try parseIDNAFail("\xd8bb\xddc2\xa42\x2d0a\xd8c8\xdc9f.<\x338"); } +test { try parseIDNAFail("\xd8bb\xddc2\xa42\x2d0a\xd8c8\xdc9f.\x226e"); } +test { try parseIDNAFail("xn--nbc229o4y27dgskb.xn--gdh"); } +test { try parseIDNAFail("xn--nbc493aro75ggskb.xn--gdh"); } +test { try parseIDNAFail("\xa67d\x200c\xd87e\xddf5\xd83c\xdd06\xff61\x200c\xd804\xdc42\x1b01"); } +test { try parseIDNAFail("\xa67d\x200c\x9723\xd83c\xdd06\xff61\x200c\xd804\xdc42\x1b01"); } +test { try parseIDNAFail("\xa67d\x200c\x97235,\x3002\x200c\xd804\xdc42\x1b01"); } +test { try parseIDNAFail("xn--5,-op8g373c.xn--4sf0725i"); } +test { try parseIDNAFail("xn--5,-i1tz135dnbqa.xn--4sf36u6u4w"); } +test { try parseIDNAFail("xn--2q5a751a653w.xn--4sf0725i"); } +test { try parseIDNAFail("xn--0ug4208b2vjuk63a.xn--4sf36u6u4w"); } +test { try parseIDNAFail("\x514e\xff61\x183c\xdb43\xdd1c\xd805\xdeb6\xd807\xdc3f"); } +test { try parseIDNAFail("\x514e\x3002\x183c\xdb43\xdd1c\xd805\xdeb6\xd807\xdc3f"); } +test { try parseIDNAFail("xn--b5q.xn--v7e6041kqqd4m251b"); } +test { try parseIDNAFail("\xd835\xdfd9\xff61\x200d\xd835\xdff8\x200d\x2077"); } +test { try parseIDNAFail("1\x3002\x200d2\x200d7"); } +test { try parseIDNAFail("1.xn--27-l1tb"); } +test { try parseIDNAFail("\x1868-\xff61\xdb43\xdecb\xd835\xdff7"); } +test { try parseIDNAFail("\x1868-\x3002\xdb43\xdecb1"); } +test { try parseIDNAFail("xn----z8j.xn--1-5671m"); } +test { try parseIDNAFail("\x10bc\xd9e3\xdded\xf80\x2f87\x3002\x10af\x2640\x200c\x200c"); } +test { try parseIDNAFail("\x10bc\xd9e3\xdded\xf80\x821b\x3002\x10af\x2640\x200c\x200c"); } +test { try parseIDNAFail("\x2d1c\xd9e3\xdded\xf80\x821b\x3002\x2d0f\x2640\x200c\x200c"); } +test { try parseIDNAFail("xn--zed372mdj2do3v4h.xn--e5h11w"); } +test { try parseIDNAFail("xn--zed372mdj2do3v4h.xn--0uga678bgyh"); } +test { try parseIDNAFail("\x2d1c\xd9e3\xdded\xf80\x2f87\x3002\x2d0f\x2640\x200c\x200c"); } +test { try parseIDNAFail("xn--zed54dz10wo343g.xn--nnd651i"); } +test { try parseIDNAFail("xn--zed54dz10wo343g.xn--nnd089ea464d"); } +test { try parseIDNAFail("\xd804\xdc46\xd835\xdff0.\x200d"); } +test { try parseIDNAFail("\xd804\xdc464.\x200d"); } +test { try parseIDNAFail("xn--4-xu7i."); } +test { try parseIDNAFail("xn--4-xu7i.xn--1ug"); } +test { try parseIDNAFail("\xd97b\xdd18\x10be\x7640\xff61\xd805\xde3f\x200d\x200c\xbdbc"); } +test { try parseIDNAFail("\xd97b\xdd18\x10be\x7640\xff61\xd805\xde3f\x200d\x200c\x1107\x1170\x11ab"); } +test { try parseIDNAFail("\xd97b\xdd18\x10be\x7640\x3002\xd805\xde3f\x200d\x200c\xbdbc"); } +test { try parseIDNAFail("\xd97b\xdd18\x10be\x7640\x3002\xd805\xde3f\x200d\x200c\x1107\x1170\x11ab"); } +test { try parseIDNAFail("\xd97b\xdd18\x2d1e\x7640\x3002\xd805\xde3f\x200d\x200c\x1107\x1170\x11ab"); } +test { try parseIDNAFail("\xd97b\xdd18\x2d1e\x7640\x3002\xd805\xde3f\x200d\x200c\xbdbc"); } +test { try parseIDNAFail("xn--mlju35u7qx2f.xn--et3bn23n"); } +test { try parseIDNAFail("xn--mlju35u7qx2f.xn--0ugb6122js83c"); } +test { try parseIDNAFail("\xd97b\xdd18\x2d1e\x7640\xff61\xd805\xde3f\x200d\x200c\x1107\x1170\x11ab"); } +test { try parseIDNAFail("\xd97b\xdd18\x2d1e\x7640\xff61\xd805\xde3f\x200d\x200c\xbdbc"); } +test { try parseIDNAFail("xn--2nd6803c7q37d.xn--et3bn23n"); } +test { try parseIDNAFail("xn--2nd6803c7q37d.xn--0ugb6122js83c"); } +test { try parseIDNAFail("\x1843\xd835\xdfe7\x226f\x1823\xff0e\x6c01\xd960\xdff1\xa06b"); } +test { try parseIDNAFail("\x1843\xd835\xdfe7>\x338\x1823\xff0e\x6c01\xd960\xdff1\xa06b"); } +test { try parseIDNAFail("\x18435\x226f\x1823.\x6c01\xd960\xdff1\xa06b"); } +test { try parseIDNAFail("\x18435>\x338\x1823.\x6c01\xd960\xdff1\xa06b"); } +test { try parseIDNAFail("xn--5-24jyf768b.xn--lqw213ime95g"); } +test { try parseIDNAFail("-\xd804\xde36\x248f\xff0e\x248e\xd881\xdee2\xdb40\xdfad"); } +test { try parseIDNAFail("-\xd804\xde368..7.\xd881\xdee2\xdb40\xdfad"); } +test { try parseIDNAFail("xn---8-bv5o..7.xn--c35nf1622b"); } +test { try parseIDNAFail("xn----scp6252h.xn--zshy411yzpx2d"); } +test { try parseIDNAFail("\x200c\x10a1\x755d\x200d\xff0e\x226e"); } +test { try parseIDNAFail("\x200c\x10a1\x755d\x200d\xff0e<\x338"); } +test { try parseIDNAFail("\x200c\x10a1\x755d\x200d.\x226e"); } +test { try parseIDNAFail("\x200c\x10a1\x755d\x200d.<\x338"); } +test { try parseIDNAFail("\x200c\x2d01\x755d\x200d.<\x338"); } +test { try parseIDNAFail("\x200c\x2d01\x755d\x200d.\x226e"); } +test { try parseIDNAFail("xn--0ugc160hb36e.xn--gdh"); } +test { try parseIDNAFail("\x200c\x2d01\x755d\x200d\xff0e<\x338"); } +test { try parseIDNAFail("\x200c\x2d01\x755d\x200d\xff0e\x226e"); } +test { try parseIDNAFail("xn--8md0962c.xn--gdh"); } +test { try parseIDNAFail("xn--8md700fea3748f.xn--gdh"); } +test { try parseIDNAFail("\xecb\x200d\xff0e\x9381\xdb43\xdc11"); } +test { try parseIDNAFail("\xecb\x200d.\x9381\xdb43\xdc11"); } +test { try parseIDNAFail("xn--t8c.xn--iz4a43209d"); } +test { try parseIDNAFail("xn--t8c059f.xn--iz4a43209d"); } +test { try parseIDNAFail("\xd9e5\xdef4.-\x1862\x592\xd836\xde20"); } +test { try parseIDNAFail("xn--ep37b.xn----hec165lho83b"); } +test { try parseIDNAFail("\xd8bc\xdc2b\xff0e\x1baa\x3c2\x10a6\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b.\x1baa\x3c2\x10a6\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b.\x1baa\x3c2\x2d06\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b.\x1baa\x3a3\x10a6\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b.\x1baa\x3c3\x2d06\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b.\x1baa\x3a3\x2d06\x200d"); } +test { try parseIDNAFail("xn--nu4s.xn--4xa153j7im"); } +test { try parseIDNAFail("xn--nu4s.xn--4xa153jk8cs1q"); } +test { try parseIDNAFail("xn--nu4s.xn--3xa353jk8cs1q"); } +test { try parseIDNAFail("\xd8bc\xdc2b\xff0e\x1baa\x3c2\x2d06\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b\xff0e\x1baa\x3a3\x10a6\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b\xff0e\x1baa\x3c3\x2d06\x200d"); } +test { try parseIDNAFail("\xd8bc\xdc2b\xff0e\x1baa\x3a3\x2d06\x200d"); } +test { try parseIDNAFail("xn--nu4s.xn--4xa217dxri"); } +test { try parseIDNAFail("xn--nu4s.xn--4xa217dxriome"); } +test { try parseIDNAFail("xn--nu4s.xn--3xa417dxriome"); } +test { try parseIDNAFail("\x2488\x200c\xaaec\xfe12\xff0e\xacd"); } +test { try parseIDNAFail("1.\x200c\xaaec\x3002.\xacd"); } +test { try parseIDNAFail("1.xn--sv9a..xn--mfc"); } +test { try parseIDNAFail("1.xn--0ug7185c..xn--mfc"); } +test { try parseIDNAFail("xn--tsh0720cse8b.xn--mfc"); } +test { try parseIDNAFail("xn--0ug78o720myr1c.xn--mfc"); } +test { try parseIDNAFail("\xdf\x200d.\x1bf2\xd8d3\xdfbc"); } +test { try parseIDNAFail("SS\x200d.\x1bf2\xd8d3\xdfbc"); } +test { try parseIDNAFail("ss\x200d.\x1bf2\xd8d3\xdfbc"); } +test { try parseIDNAFail("Ss\x200d.\x1bf2\xd8d3\xdfbc"); } +test { try parseIDNAFail("ss.xn--0zf22107b"); } +test { try parseIDNAFail("xn--ss-n1t.xn--0zf22107b"); } +test { try parseIDNAFail("xn--zca870n.xn--0zf22107b"); } +test { try parseIDNAFail("\xd805\xdcc2\x200c\x226e.\x226e"); } +test { try parseIDNAFail("\xd805\xdcc2\x200c<\x338.<\x338"); } +test { try parseIDNAFail("xn--gdhz656g.xn--gdh"); } +test { try parseIDNAFail("xn--0ugy6glz29a.xn--gdh"); } +test { try parseIDNAFail("xn--my8h.xn--psd"); } +test { try parseIDNAFail("xn--my8h.xn--cl7c"); } +test { try parseIDNAFail("\x7215\xda8d\xde51\xff0e\xd835\xdff0\x6c17"); } +test { try parseIDNAFail("\x7215\xda8d\xde51.4\x6c17"); } +test { try parseIDNAFail("xn--1zxq3199c.xn--4-678b"); } +test { try parseIDNAFail("\xdb39\xdf43\x3002\xda04\xdd83\xd8e6\xdc97--"); } +test { try parseIDNAFail("xn--2y75e.xn-----1l15eer88n"); } +test { try parseIDNAFail("\x8530\x3002\xdb40\xdc79\x8dd-\xd804\xde35"); } +test { try parseIDNAFail("xn--sz1a.xn----mrd9984r3dl0i"); } +test { try parseIDNAFail("xn--4xa477d.xn--epb"); } +test { try parseIDNAFail("xn--3xa677d.xn--epb"); } +test { try parseIDNAFail("xn--pt9c.xn--hnd666l"); } +test { try parseIDNAFail("xn--pt9c.xn--hndy"); } +test { try parseIDNAFail("\x200c\x200c\x3124\xff0e\x32e\xdb16\xde11\x9c2"); } +test { try parseIDNAFail("\x200c\x200c\x3124.\x32e\xdb16\xde11\x9c2"); } +test { try parseIDNAFail("xn--1fk.xn--vta284a9o563a"); } +test { try parseIDNAFail("xn--0uga242k.xn--vta284a9o563a"); } +test { try parseIDNAFail("\x10b4\xd836\xde28\x2083\xdb40\xdc66\xff0e\xd835\xdff3\xd804\xdcb9\xb82"); } +test { try parseIDNAFail("\x10b4\xd836\xde283\xdb40\xdc66.7\xd804\xdcb9\xb82"); } +test { try parseIDNAFail("\x2d14\xd836\xde283\xdb40\xdc66.7\xd804\xdcb9\xb82"); } +test { try parseIDNAFail("xn--3-ews6985n35s3g.xn--7-cve6271r"); } +test { try parseIDNAFail("\x2d14\xd836\xde28\x2083\xdb40\xdc66\xff0e\xd835\xdff3\xd804\xdcb9\xb82"); } +test { try parseIDNAFail("xn--3-b1g83426a35t0g.xn--7-cve6271r"); } +test { try parseIDNAFail("\x43c8\x200c\x3002\x200c\x2488\xd986\xdc95"); } +test { try parseIDNAFail("\x43c8\x200c\x3002\x200c1.\xd986\xdc95"); } +test { try parseIDNAFail("xn--eco.1.xn--ms39a"); } +test { try parseIDNAFail("xn--0ug491l.xn--1-rgn.xn--ms39a"); } +test { try parseIDNAFail("xn--eco.xn--tsh21126d"); } +test { try parseIDNAFail("xn--0ug491l.xn--0ug88oot66q"); } +test { try parseIDNAFail("\xff11\xaaf6\xdf\xd807\xdca5\xff61\x1dd8"); } +test { try parseIDNAFail("1\xaaf6\xdf\xd807\xdca5\x3002\x1dd8"); } +test { try parseIDNAFail("1\xaaf6SS\xd807\xdca5\x3002\x1dd8"); } +test { try parseIDNAFail("1\xaaf6ss\xd807\xdca5\x3002\x1dd8"); } +test { try parseIDNAFail("xn--1ss-ir6ln166b.xn--weg"); } +test { try parseIDNAFail("xn--1-qfa2471kdb0d.xn--weg"); } +test { try parseIDNAFail("\xff11\xaaf6SS\xd807\xdca5\xff61\x1dd8"); } +test { try parseIDNAFail("\xff11\xaaf6ss\xd807\xdca5\xff61\x1dd8"); } +test { try parseIDNAFail("1\xaaf6Ss\xd807\xdca5\x3002\x1dd8"); } +test { try parseIDNAFail("\xff11\xaaf6Ss\xd807\xdca5\xff61\x1dd8"); } +test { try parseIDNAFail("xn--3j78f.xn--mkb20b"); } +test { try parseIDNAFail("\xd88a\xdd31\x249b\x2fb3\xff0e\xa866\x2488"); } +test { try parseIDNAFail("xn--dth6033bzbvx.xn--tsh9439b"); } +test { try parseIDNAFail("xn--tnd.xn--ss-jbe65aw27i"); } +test { try parseIDNAFail("xn--tnd.xn--zca912alh227g"); } +test { try parseIDNAFail("\x2132\xdb40\xdd7a\xd937\xdd52\x3002\x226f\x2f91"); } +test { try parseIDNAFail("\x2132\xdb40\xdd7a\xd937\xdd52\x3002>\x338\x2f91"); } +test { try parseIDNAFail("\x2132\xdb40\xdd7a\xd937\xdd52\x3002\x226f\x897e"); } +test { try parseIDNAFail("\x2132\xdb40\xdd7a\xd937\xdd52\x3002>\x338\x897e"); } +test { try parseIDNAFail("\x214e\xdb40\xdd7a\xd937\xdd52\x3002>\x338\x897e"); } +test { try parseIDNAFail("\x214e\xdb40\xdd7a\xd937\xdd52\x3002\x226f\x897e"); } +test { try parseIDNAFail("xn--73g39298c.xn--hdhz171b"); } +test { try parseIDNAFail("\x214e\xdb40\xdd7a\xd937\xdd52\x3002>\x338\x2f91"); } +test { try parseIDNAFail("\x214e\xdb40\xdd7a\xd937\xdd52\x3002\x226f\x2f91"); } +test { try parseIDNAFail("xn--f3g73398c.xn--hdhz171b"); } +test { try parseIDNAFail("\x200c.\xdf\x10a9-"); } +test { try parseIDNAFail("\x200c.\xdf\x2d09-"); } +test { try parseIDNAFail("\x200c.SS\x10a9-"); } +test { try parseIDNAFail("\x200c.ss\x2d09-"); } +test { try parseIDNAFail("\x200c.Ss\x2d09-"); } +test { try parseIDNAFail("xn--0ug.xn--ss--bi1b"); } +test { try parseIDNAFail("xn--0ug.xn----pfa2305a"); } +test { try parseIDNAFail(".xn--ss--4rn"); } +test { try parseIDNAFail("xn--0ug.xn--ss--4rn"); } +test { try parseIDNAFail("xn--0ug.xn----pfa042j"); } +test { try parseIDNAFail("\xdb42\xdea2-\x3002\xda2c\xdc8f\x226e\xd805\xdf2b"); } +test { try parseIDNAFail("\xdb42\xdea2-\x3002\xda2c\xdc8f<\x338\xd805\xdf2b"); } +test { try parseIDNAFail("xn----bh61m.xn--gdhz157g0em1d"); } +test { try parseIDNAFail("\x200c\xdb40\xde79\x200d\x3002\xd9f3\xdfe7\x226e\x10a9"); } +test { try parseIDNAFail("\x200c\xdb40\xde79\x200d\x3002\xd9f3\xdfe7<\x338\x10a9"); } +test { try parseIDNAFail("\x200c\xdb40\xde79\x200d\x3002\xd9f3\xdfe7<\x338\x2d09"); } +test { try parseIDNAFail("\x200c\xdb40\xde79\x200d\x3002\xd9f3\xdfe7\x226e\x2d09"); } +test { try parseIDNAFail("xn--3n36e.xn--gdh992byu01p"); } +test { try parseIDNAFail("xn--0ugc90904y.xn--gdh992byu01p"); } +test { try parseIDNAFail("xn--3n36e.xn--hnd112gpz83n"); } +test { try parseIDNAFail("xn--0ugc90904y.xn--hnd112gpz83n"); } +test { try parseIDNAFail("\xd836\xde9e\x10b0\xff61\xcaa1"); } +test { try parseIDNAFail("\xd836\xde9e\x10b0\xff61\x110d\x1168\x11a8"); } +test { try parseIDNAFail("\xd836\xde9e\x10b0\x3002\xcaa1"); } +test { try parseIDNAFail("\xd836\xde9e\x10b0\x3002\x110d\x1168\x11a8"); } +test { try parseIDNAFail("\xd836\xde9e\x2d10\x3002\x110d\x1168\x11a8"); } +test { try parseIDNAFail("\xd836\xde9e\x2d10\x3002\xcaa1"); } +test { try parseIDNAFail("xn--7kj1858k.xn--pi6b"); } +test { try parseIDNAFail("\xd836\xde9e\x2d10\xff61\x110d\x1168\x11a8"); } +test { try parseIDNAFail("\xd836\xde9e\x2d10\xff61\xcaa1"); } +test { try parseIDNAFail("xn--ond3755u.xn--pi6b"); } +test { try parseIDNAFail("\x1845\xff10\x200c\xff61\x23a2\xdb52\xde04"); } +test { try parseIDNAFail("\x18450\x200c\x3002\x23a2\xdb52\xde04"); } +test { try parseIDNAFail("xn--0-z6j.xn--8lh28773l"); } +test { try parseIDNAFail("xn--0-z6jy93b.xn--8lh28773l"); } +test { try parseIDNAFail("\xd88a\xdf9a\xff19\xa369\x17d3\xff0e\x200d\xdf"); } +test { try parseIDNAFail("\xd88a\xdf9a9\xa369\x17d3.\x200d\xdf"); } +test { try parseIDNAFail("\xd88a\xdf9a9\xa369\x17d3.\x200dSS"); } +test { try parseIDNAFail("\xd88a\xdf9a9\xa369\x17d3.\x200dss"); } +test { try parseIDNAFail("xn--9-i0j5967eg3qz.xn--ss-l1t"); } +test { try parseIDNAFail("xn--9-i0j5967eg3qz.xn--zca770n"); } +test { try parseIDNAFail("\xd88a\xdf9a\xff19\xa369\x17d3\xff0e\x200dSS"); } +test { try parseIDNAFail("\xd88a\xdf9a\xff19\xa369\x17d3\xff0e\x200dss"); } +test { try parseIDNAFail("\xd88a\xdf9a9\xa369\x17d3.\x200dSs"); } +test { try parseIDNAFail("\xd88a\xdf9a\xff19\xa369\x17d3\xff0e\x200dSs"); } +test { try parseIDNAFail("\x2490\x226f-\x3002\xfe12\xda65\xdc63-\xd939\xdee0"); } +test { try parseIDNAFail("\x2490>\x338-\x3002\xfe12\xda65\xdc63-\xd939\xdee0"); } +test { try parseIDNAFail("9.\x226f-\x3002\x3002\xda65\xdc63-\xd939\xdee0"); } +test { try parseIDNAFail("9.>\x338-\x3002\x3002\xda65\xdc63-\xd939\xdee0"); } +test { try parseIDNAFail("9.xn----ogo..xn----xj54d1s69k"); } +test { try parseIDNAFail("xn----ogot9g.xn----n89hl0522az9u2a"); } +test { try parseIDNAFail("\x10af\xdb40\xdd4b-\xff0e\x200d\x10a9"); } +test { try parseIDNAFail("\x10af\xdb40\xdd4b-.\x200d\x10a9"); } +test { try parseIDNAFail("\x2d0f\xdb40\xdd4b-.\x200d\x2d09"); } +test { try parseIDNAFail("xn----3vs.xn--1ug532c"); } +test { try parseIDNAFail("\x2d0f\xdb40\xdd4b-\xff0e\x200d\x2d09"); } +test { try parseIDNAFail("xn----00g.xn--hnd"); } +test { try parseIDNAFail("xn----00g.xn--hnd399e"); } +test { try parseIDNAFail("\x1714\x3002\xdb40\xdda3-\xd804\xdeea"); } +test { try parseIDNAFail("xn--fze.xn----ly8i"); } +test { try parseIDNAFail("\xabe8-\xff0e\xda60\xdfdc\x5bd\xdf"); } +test { try parseIDNAFail("\xabe8-.\xda60\xdfdc\x5bd\xdf"); } +test { try parseIDNAFail("\xabe8-.\xda60\xdfdc\x5bdSS"); } +test { try parseIDNAFail("\xabe8-.\xda60\xdfdc\x5bdss"); } +test { try parseIDNAFail("\xabe8-.\xda60\xdfdc\x5bdSs"); } +test { try parseIDNAFail("xn----pw5e.xn--ss-7jd10716y"); } +test { try parseIDNAFail("xn----pw5e.xn--zca50wfv060a"); } +test { try parseIDNAFail("\xabe8-\xff0e\xda60\xdfdc\x5bdSS"); } +test { try parseIDNAFail("\xabe8-\xff0e\xda60\xdfdc\x5bdss"); } +test { try parseIDNAFail("\xabe8-\xff0e\xda60\xdfdc\x5bdSs"); } +test { try parseIDNAFail("\xd835\xdfe5\x266e\xd805\xdf2b\x8ed\xff0e\x17d2\xd805\xdf2b8\xdb40\xdd8f"); } +test { try parseIDNAFail("3\x266e\xd805\xdf2b\x8ed.\x17d2\xd805\xdf2b8\xdb40\xdd8f"); } +test { try parseIDNAFail("xn--3-ksd277tlo7s.xn--8-f0jx021l"); } +test { try parseIDNAFail("-\xff61\xda14\xdf00\x200d\x2761"); } +test { try parseIDNAFail("-\x3002\xda14\xdf00\x200d\x2761"); } +test { try parseIDNAFail("-.xn--nei54421f"); } +test { try parseIDNAFail("-.xn--1ug800aq795s"); } +test { try parseIDNAFail("\xd835\xdfd3\x2631\xd835\xdfd0\xda57\xdc35\xff61\xd836\xdeae\xd902\xdc73"); } +test { try parseIDNAFail("5\x26312\xda57\xdc35\x3002\xd836\xdeae\xd902\xdc73"); } +test { try parseIDNAFail("xn--52-dwx47758j.xn--kd3hk431k"); } +test { try parseIDNAFail("-.-\x251c\xda1a\xdda3"); } +test { try parseIDNAFail("-.xn----ukp70432h"); } +test { try parseIDNAFail("\x3c2\xff0e\xfdc1\xd83d\xdf9b\x2488"); } +test { try parseIDNAFail("\x3a3\xff0e\xfdc1\xd83d\xdf9b\x2488"); } +test { try parseIDNAFail("\x3c3\xff0e\xfdc1\xd83d\xdf9b\x2488"); } +test { try parseIDNAFail("xn--4xa.xn--dhbip2802atb20c"); } +test { try parseIDNAFail("xn--3xa.xn--dhbip2802atb20c"); } +test { try parseIDNAFail("9\xdb40\xdde5\xff0e\xdb6b\xdd34\x1893"); } +test { try parseIDNAFail("9\xdb40\xdde5.\xdb6b\xdd34\x1893"); } +test { try parseIDNAFail("9.xn--dbf91222q"); } +test { try parseIDNAFail("\xfe12\x10b6\x366\xff0e\x200c"); } +test { try parseIDNAFail("\x3002\x10b6\x366.\x200c"); } +test { try parseIDNAFail("\x3002\x2d16\x366.\x200c"); } +test { try parseIDNAFail(".xn--hva754s.xn--0ug"); } +test { try parseIDNAFail("\xfe12\x2d16\x366\xff0e\x200c"); } +test { try parseIDNAFail("xn--hva754sy94k."); } +test { try parseIDNAFail("xn--hva754sy94k.xn--0ug"); } +test { try parseIDNAFail(".xn--hva929d."); } +test { try parseIDNAFail(".xn--hva929d.xn--0ug"); } +test { try parseIDNAFail("xn--hva929dl29p."); } +test { try parseIDNAFail("xn--hva929dl29p.xn--0ug"); } +test { try parseIDNAFail("xn--hva929d."); } +test { try parseIDNAFail("xn--hzb.xn--bnd2938u"); } +test { try parseIDNAFail("\x200d\x200c\x3002\xff12\x4af7\xdb42\xddf7"); } +test { try parseIDNAFail("\x200d\x200c\x30022\x4af7\xdb42\xddf7"); } +test { try parseIDNAFail(".xn--2-me5ay1273i"); } +test { try parseIDNAFail("xn--0ugb.xn--2-me5ay1273i"); } +test { try parseIDNAFail("-\xd838\xdc24\xdb32\xdc10\x3002\xd9e2\xdf16"); } +test { try parseIDNAFail("xn----rq4re4997d.xn--l707b"); } +test { try parseIDNAFail("\xdb8d\xdec2\xfe12\x200c\x37c0\xff0e\x624\x2488"); } +test { try parseIDNAFail("\xdb8d\xdec2\xfe12\x200c\x37c0\xff0e\x648\x654\x2488"); } +test { try parseIDNAFail("xn--z272f.xn--etl.xn--1-smc."); } +test { try parseIDNAFail("xn--etlt457ccrq7h.xn--jgb476m"); } +test { try parseIDNAFail("xn--0ug754gxl4ldlt0k.xn--jgb476m"); } +test { try parseIDNAFail("\x7fc\xd803\xde06.\xd80d\xdd8f\xfe12\xd8ea\xde29\x10b0"); } +test { try parseIDNAFail("\x7fc\xd803\xde06.\xd80d\xdd8f\x3002\xd8ea\xde29\x10b0"); } +test { try parseIDNAFail("\x7fc\xd803\xde06.\xd80d\xdd8f\x3002\xd8ea\xde29\x2d10"); } +test { try parseIDNAFail("xn--0tb8725k.xn--tu8d.xn--7kj73887a"); } +test { try parseIDNAFail("\x7fc\xd803\xde06.\xd80d\xdd8f\xfe12\xd8ea\xde29\x2d10"); } +test { try parseIDNAFail("xn--0tb8725k.xn--7kj9008dt18a7py9c"); } +test { try parseIDNAFail("xn--0tb8725k.xn--tu8d.xn--ond97931d"); } +test { try parseIDNAFail("xn--0tb8725k.xn--ond3562jt18a7py9c"); } +test { try parseIDNAFail("\x10c5\x26ad\xdb41\xddab\x22c3\xff61\xd804\xdf3c"); } +test { try parseIDNAFail("\x10c5\x26ad\xdb41\xddab\x22c3\x3002\xd804\xdf3c"); } +test { try parseIDNAFail("\x2d25\x26ad\xdb41\xddab\x22c3\x3002\xd804\xdf3c"); } +test { try parseIDNAFail("xn--vfh16m67gx1162b.xn--ro1d"); } +test { try parseIDNAFail("\x2d25\x26ad\xdb41\xddab\x22c3\xff61\xd804\xdf3c"); } +test { try parseIDNAFail("xn--9nd623g4zc5z060c.xn--ro1d"); } +test { try parseIDNAFail("\xd8c8\xde26\x5e37\xff61\x226f\x843a\x1dc8-"); } +test { try parseIDNAFail("\xd8c8\xde26\x5e37\xff61>\x338\x843a\x1dc8-"); } +test { try parseIDNAFail("\xd8c8\xde26\x5e37\x3002\x226f\x843a\x1dc8-"); } +test { try parseIDNAFail("\xd8c8\xde26\x5e37\x3002>\x338\x843a\x1dc8-"); } +test { try parseIDNAFail("xn--qutw175s.xn----mimu6tf67j"); } +test { try parseIDNAFail("\x200d\x650c\xabed\x3002\x1896-\x10b8"); } +test { try parseIDNAFail("\x200d\x650c\xabed\x3002\x1896-\x2d18"); } +test { try parseIDNAFail("xn--1ug592ykp6b.xn----mck373i"); } +test { try parseIDNAFail("xn--p9ut19m.xn----k1g451d"); } +test { try parseIDNAFail("xn--1ug592ykp6b.xn----k1g451d"); } +test { try parseIDNAFail("\x200c\xa5a8\xff0e\x2497\xff13\xd212\x6f3"); } +test { try parseIDNAFail("\x200c\xa5a8\xff0e\x2497\xff13\x1110\x116d\x11a9\x6f3"); } +test { try parseIDNAFail("\x200c\xa5a8.16.3\xd212\x6f3"); } +test { try parseIDNAFail("\x200c\xa5a8.16.3\x1110\x116d\x11a9\x6f3"); } +test { try parseIDNAFail("xn--0ug2473c.16.xn--3-nyc0117m"); } +test { try parseIDNAFail("xn--9r8a.xn--3-nyc678tu07m"); } +test { try parseIDNAFail("xn--0ug2473c.xn--3-nyc678tu07m"); } +test { try parseIDNAFail("\xd835\xdfcf\xd836\xde19\x2e16.\x200d"); } +test { try parseIDNAFail("1\xd836\xde19\x2e16.\x200d"); } +test { try parseIDNAFail("xn--1-5bt6845n.xn--1ug"); } +test { try parseIDNAFail("F\xdb40\xdd5f\xff61\xd9fd\xddc5\x265a"); } +test { try parseIDNAFail("F\xdb40\xdd5f\x3002\xd9fd\xddc5\x265a"); } +test { try parseIDNAFail("f\xdb40\xdd5f\x3002\xd9fd\xddc5\x265a"); } +test { try parseIDNAFail("f.xn--45hz6953f"); } +test { try parseIDNAFail("f\xdb40\xdd5f\xff61\xd9fd\xddc5\x265a"); } +test { try parseIDNAFail("\xb4d\xd804\xdd34\x1de9\x3002\xd835\xdfee\x10b8\xd838\xdc28\xd8ce\xdd47"); } +test { try parseIDNAFail("\xb4d\xd804\xdd34\x1de9\x30022\x10b8\xd838\xdc28\xd8ce\xdd47"); } +test { try parseIDNAFail("\xb4d\xd804\xdd34\x1de9\x30022\x2d18\xd838\xdc28\xd8ce\xdd47"); } +test { try parseIDNAFail("xn--9ic246gs21p.xn--2-nws2918ndrjr"); } +test { try parseIDNAFail("\xb4d\xd804\xdd34\x1de9\x3002\xd835\xdfee\x2d18\xd838\xdc28\xd8ce\xdd47"); } +test { try parseIDNAFail("xn--9ic246gs21p.xn--2-k1g43076adrwq"); } +test { try parseIDNAFail("\xda0e\xdc2d\x200c\x200c\x2488\x3002\x52c9\xd804\xdc45"); } +test { try parseIDNAFail("\xda0e\xdc2d\x200c\x200c1.\x3002\x52c9\xd804\xdc45"); } +test { try parseIDNAFail("xn--1-yi00h..xn--4grs325b"); } +test { try parseIDNAFail("xn--1-rgna61159u..xn--4grs325b"); } +test { try parseIDNAFail("xn--tsh11906f.xn--4grs325b"); } +test { try parseIDNAFail("xn--0uga855aez302a.xn--4grs325b"); } +test { try parseIDNAFail("\x1843.\x73bf\xd96c\xde1c\xdb15\xdf90"); } +test { try parseIDNAFail("xn--27e.xn--7cy81125a0yq4a"); } +test { try parseIDNAFail("\x200c\x200c\xff61\x2488\x226f\xd835\xdff5"); } +test { try parseIDNAFail("\x200c\x200c\xff61\x2488>\x338\xd835\xdff5"); } +test { try parseIDNAFail("\x200c\x200c\x30021.\x226f9"); } +test { try parseIDNAFail("\x200c\x200c\x30021.>\x3389"); } +test { try parseIDNAFail("xn--0uga.1.xn--9-ogo"); } +test { try parseIDNAFail(".xn--9-ogo37g"); } +test { try parseIDNAFail("xn--0uga.xn--9-ogo37g"); } +test { try parseIDNAFail("\x20da\xff0e\xd805\xde3f-"); } +test { try parseIDNAFail("\x20da.\xd805\xde3f-"); } +test { try parseIDNAFail("xn--w0g.xn----bd0j"); } +test { try parseIDNAFail("\x1082-\x200d\xa8ea\xff0e\xa84a\x200d\xd9b3\xde33"); } +test { try parseIDNAFail("\x1082-\x200d\xa8ea.\xa84a\x200d\xd9b3\xde33"); } +test { try parseIDNAFail("xn----gyg3618i.xn--jc9ao4185a"); } +test { try parseIDNAFail("xn----gyg250jio7k.xn--1ug8774cri56d"); } +test { try parseIDNAFail("\xd804\xde35\x5eca.\xd802\xdc0d"); } +test { try parseIDNAFail("xn--xytw701b.xn--yc9c"); } +test { try parseIDNAFail("\x10be\xd899\xdec0\xd82d\xddfb\xff0e\x1897\xb9ab"); } +test { try parseIDNAFail("\x10be\xd899\xdec0\xd82d\xddfb\xff0e\x1897\x1105\x1174\x11c2"); } +test { try parseIDNAFail("\x10be\xd899\xdec0\xd82d\xddfb.\x1897\xb9ab"); } +test { try parseIDNAFail("\x10be\xd899\xdec0\xd82d\xddfb.\x1897\x1105\x1174\x11c2"); } +test { try parseIDNAFail("\x2d1e\xd899\xdec0\xd82d\xddfb.\x1897\x1105\x1174\x11c2"); } +test { try parseIDNAFail("\x2d1e\xd899\xdec0\xd82d\xddfb.\x1897\xb9ab"); } +test { try parseIDNAFail("xn--mlj0486jgl2j.xn--hbf6853f"); } +test { try parseIDNAFail("\x2d1e\xd899\xdec0\xd82d\xddfb\xff0e\x1897\x1105\x1174\x11c2"); } +test { try parseIDNAFail("\x2d1e\xd899\xdec0\xd82d\xddfb\xff0e\x1897\xb9ab"); } +test { try parseIDNAFail("xn--2nd8876sgl2j.xn--hbf6853f"); } +test { try parseIDNAFail("\xdf\x200d\x103a\xff61\x2488"); } +test { try parseIDNAFail("xn--ss-f4j585j.b."); } +test { try parseIDNAFail("xn--zca679eh2l.b."); } +test { try parseIDNAFail("SS\x200d\x103a\xff61\x2488"); } +test { try parseIDNAFail("ss\x200d\x103a\xff61\x2488"); } +test { try parseIDNAFail("Ss\x200d\x103a\xff61\x2488"); } +test { try parseIDNAFail("xn--ss-f4j.xn--tsh"); } +test { try parseIDNAFail("xn--ss-f4j585j.xn--tsh"); } +test { try parseIDNAFail("xn--zca679eh2l.xn--tsh"); } +test { try parseIDNAFail("\xd835\xdfe0\x226e\x200c\xff61\xdb40\xdd71\x17b4"); } +test { try parseIDNAFail("\xd835\xdfe0<\x338\x200c\xff61\xdb40\xdd71\x17b4"); } +test { try parseIDNAFail("8\x226e\x200c\x3002\xdb40\xdd71\x17b4"); } +test { try parseIDNAFail("8<\x338\x200c\x3002\xdb40\xdd71\x17b4"); } +test { try parseIDNAFail("xn--8-sgn10i."); } +test { try parseIDNAFail("xn--8-ngo.xn--z3e"); } +test { try parseIDNAFail("xn--8-sgn10i.xn--z3e"); } +test { try parseIDNAFail("\x1895\x226f\xfe12\xd8d0\xdcaf\xff0e\x10a0"); } +test { try parseIDNAFail("\x1895>\x338\xfe12\xd8d0\xdcaf\xff0e\x10a0"); } +test { try parseIDNAFail("\x1895\x226f\x3002\xd8d0\xdcaf.\x10a0"); } +test { try parseIDNAFail("\x1895>\x338\x3002\xd8d0\xdcaf.\x10a0"); } +test { try parseIDNAFail("\x1895>\x338\x3002\xd8d0\xdcaf.\x2d00"); } +test { try parseIDNAFail("\x1895\x226f\x3002\xd8d0\xdcaf.\x2d00"); } +test { try parseIDNAFail("xn--fbf851c.xn--ko1u.xn--rkj"); } +test { try parseIDNAFail("\x1895>\x338\xfe12\xd8d0\xdcaf\xff0e\x2d00"); } +test { try parseIDNAFail("\x1895\x226f\xfe12\xd8d0\xdcaf\xff0e\x2d00"); } +test { try parseIDNAFail("xn--fbf851cq98poxw1a.xn--rkj"); } +test { try parseIDNAFail("xn--fbf851c.xn--ko1u.xn--7md"); } +test { try parseIDNAFail("xn--fbf851cq98poxw1a.xn--7md"); } +test { try parseIDNAFail("\xf9f\xff0e-\x82a"); } +test { try parseIDNAFail("\xf9f.-\x82a"); } +test { try parseIDNAFail("xn--vfd.xn----fhd"); } +test { try parseIDNAFail("\x1d6c\xdb40\xdda0\xff0e\xd552\x2492\x2488\xdbe0\xdd26"); } +test { try parseIDNAFail("\x1d6c\xdb40\xdda0\xff0e\x1111\x1175\x11bd\x2492\x2488\xdbe0\xdd26"); } +test { try parseIDNAFail("\x1d6c\xdb40\xdda0.\xd55211.1.\xdbe0\xdd26"); } +test { try parseIDNAFail("\x1d6c\xdb40\xdda0.\x1111\x1175\x11bd11.1.\xdbe0\xdd26"); } +test { try parseIDNAFail("xn--tbg.xn--11-5o7k.1.xn--k469f"); } +test { try parseIDNAFail("xn--tbg.xn--tsht7586kyts9l"); } +test { try parseIDNAFail("\x2488\x270c\xda3e\xdf1f\xff0e\xd835\xdfe1\xd943\xdc63"); } +test { try parseIDNAFail("1.\x270c\xda3e\xdf1f.9\xd943\xdc63"); } +test { try parseIDNAFail("1.xn--7bi44996f.xn--9-o706d"); } +test { try parseIDNAFail("xn--tsh24g49550b.xn--9-o706d"); } +test { try parseIDNAFail("\x3c2\xff0e\xa9c0\xa8c4"); } +test { try parseIDNAFail("\x3c2.\xa9c0\xa8c4"); } +test { try parseIDNAFail("\x3a3.\xa9c0\xa8c4"); } +test { try parseIDNAFail("\x3c3.\xa9c0\xa8c4"); } +test { try parseIDNAFail("xn--4xa.xn--0f9ars"); } +test { try parseIDNAFail("xn--3xa.xn--0f9ars"); } +test { try parseIDNAFail("\x3a3\xff0e\xa9c0\xa8c4"); } +test { try parseIDNAFail("\x3c3\xff0e\xa9c0\xa8c4"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5\x1ed7\x2488\xff0e\xda06\xdf12\xd945\xde2e\x85b\xd835\xdfeb"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5o\x302\x303\x2488\xff0e\xda06\xdf12\xd945\xde2e\x85b\xd835\xdfeb"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5\x1ed71..\xda06\xdf12\xd945\xde2e\x85b9"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5o\x302\x3031..\xda06\xdf12\xd945\xde2e\x85b9"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5O\x302\x3031..\xda06\xdf12\xd945\xde2e\x85b9"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5\x1ed61..\xda06\xdf12\xd945\xde2e\x85b9"); } +test { try parseIDNAFail("xn--1-3xm292b6044r..xn--9-6jd87310jtcqs"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5O\x302\x303\x2488\xff0e\xda06\xdf12\xd945\xde2e\x85b\xd835\xdfeb"); } +test { try parseIDNAFail("\x2786\xd99e\xddd5\x1ed6\x2488\xff0e\xda06\xdf12\xd945\xde2e\x85b\xd835\xdfeb"); } +test { try parseIDNAFail("xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs"); } +test { try parseIDNAFail("\x73c\x200c-\x3002\xd80d\xdc3e\xdf"); } +test { try parseIDNAFail("\x73c\x200c-\x3002\xd80d\xdc3eSS"); } +test { try parseIDNAFail("\x73c\x200c-\x3002\xd80d\xdc3ess"); } +test { try parseIDNAFail("\x73c\x200c-\x3002\xd80d\xdc3eSs"); } +test { try parseIDNAFail("xn----s2c.xn--ss-066q"); } +test { try parseIDNAFail("xn----s2c071q.xn--ss-066q"); } +test { try parseIDNAFail("xn----s2c071q.xn--zca7848m"); } +test { try parseIDNAFail("-\xda9d\xdf6c\x135e\xd805\xdf27.\x1deb-\xfe12"); } +test { try parseIDNAFail("-\xda9d\xdf6c\x135e\xd805\xdf27.\x1deb-\x3002"); } +test { try parseIDNAFail("xn----b5h1837n2ok9f.xn----mkm."); } +test { try parseIDNAFail("xn----b5h1837n2ok9f.xn----mkmw278h"); } +test { try parseIDNAFail("\xfe12.\xda2a\xdc21\x1a59"); } +test { try parseIDNAFail("\x3002.\xda2a\xdc21\x1a59"); } +test { try parseIDNAFail("..xn--cof61594i"); } +test { try parseIDNAFail("xn--y86c.xn--cof61594i"); } +test { try parseIDNAFail("\xd807\xdc3a.-\xda05\xdfcf"); } +test { try parseIDNAFail("xn--jk3d.xn----iz68g"); } +test { try parseIDNAFail("\xdb43\xdee9\xff0e\x8d4f"); } +test { try parseIDNAFail("\xdb43\xdee9.\x8d4f"); } +test { try parseIDNAFail("xn--2856e.xn--6o3a"); } +test { try parseIDNAFail("\x10ad\xff0e\xd8f4\xdde6\x200c"); } +test { try parseIDNAFail("\x10ad.\xd8f4\xdde6\x200c"); } +test { try parseIDNAFail("\x2d0d.\xd8f4\xdde6\x200c"); } +test { try parseIDNAFail("xn--4kj.xn--p01x"); } +test { try parseIDNAFail("xn--4kj.xn--0ug56448b"); } +test { try parseIDNAFail("\x2d0d\xff0e\xd8f4\xdde6\x200c"); } +test { try parseIDNAFail("xn--lnd.xn--p01x"); } +test { try parseIDNAFail("xn--lnd.xn--0ug56448b"); } +test { try parseIDNAFail("-\x200d.\x10be\xd800\xdef7"); } +test { try parseIDNAFail("-\x200d.\x2d1e\xd800\xdef7"); } +test { try parseIDNAFail("xn----ugn.xn--mlj8559d"); } +test { try parseIDNAFail("-.xn--2nd2315j"); } +test { try parseIDNAFail("xn----ugn.xn--2nd2315j"); } +test { try parseIDNAFail("\x200d\x3c2\xdf\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x200d\x3c2\xdf\x731.\xbcd"); } +test { try parseIDNAFail("\x200d\x3a3SS\x731.\xbcd"); } +test { try parseIDNAFail("\x200d\x3c3ss\x731.\xbcd"); } +test { try parseIDNAFail("\x200d\x3a3ss\x731.\xbcd"); } +test { try parseIDNAFail("xn--ss-ubc826a.xn--xmc"); } +test { try parseIDNAFail("xn--ss-ubc826ab34b.xn--xmc"); } +test { try parseIDNAFail("\x200d\x3a3\xdf\x731.\xbcd"); } +test { try parseIDNAFail("\x200d\x3c3\xdf\x731.\xbcd"); } +test { try parseIDNAFail("xn--zca39lk1di19a.xn--xmc"); } +test { try parseIDNAFail("xn--zca19ln1di19a.xn--xmc"); } +test { try parseIDNAFail("\x200d\x3a3SS\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x200d\x3c3ss\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x200d\x3a3ss\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x200d\x3a3\xdf\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x200d\x3c3\xdf\x731\xff0e\xbcd"); } +test { try parseIDNAFail("\x2260\xff0e\x200d"); } +test { try parseIDNAFail("=\x338\xff0e\x200d"); } +test { try parseIDNAFail("\x2260.\x200d"); } +test { try parseIDNAFail("=\x338.\x200d"); } +test { try parseIDNAFail("xn--1ch.xn--1ug"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c2\xff0e\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c2.\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3.\x3a3\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c3.\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c3.\x3c3\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3.\x3c3\xd802\xde3f"); } +test { try parseIDNAFail("xn--4xa502av8297a.xn--4xa6055k"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3.\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("xn--4xa502av8297a.xn--3xa8055k"); } +test { try parseIDNAFail("xn--3xa702av8297a.xn--3xa8055k"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3\xff0e\x3a3\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c3\xff0e\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3c3\xff0e\x3c3\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3\xff0e\x3c3\xd802\xde3f"); } +test { try parseIDNAFail("\xdb5c\xdef5\x9cd\x3a3\xff0e\x3c2\xd802\xde3f"); } +test { try parseIDNAFail("\xd94e\xdd12\xff61\xb967"); } +test { try parseIDNAFail("\xd94e\xdd12\xff61\x1105\x1172\x11b6"); } +test { try parseIDNAFail("\xd94e\xdd12\x3002\xb967"); } +test { try parseIDNAFail("\xd94e\xdd12\x3002\x1105\x1172\x11b6"); } +test { try parseIDNAFail("xn--s264a.xn--pw2b"); } +test { try parseIDNAFail("\x1846\xd805\xdcdd\xff0e\xd83b\xdd46"); } +test { try parseIDNAFail("\x1846\xd805\xdcdd.\xd83b\xdd46"); } +test { try parseIDNAFail("xn--57e0440k.xn--k86h"); } +test { try parseIDNAFail("\xdbef\xdfe6\xff61\x183d"); } +test { try parseIDNAFail("\xdbef\xdfe6\x3002\x183d"); } +test { try parseIDNAFail("xn--j890g.xn--w7e"); } +test { try parseIDNAFail("\x5b03\xd834\xdf4c\xff0e\x200d\xb44"); } +test { try parseIDNAFail("\x5b03\xd834\xdf4c.\x200d\xb44"); } +test { try parseIDNAFail("xn--b6s0078f.xn--0ic"); } +test { try parseIDNAFail("xn--b6s0078f.xn--0ic557h"); } +test { try parseIDNAFail("\x200c.\xd93d\xdee4"); } +test { try parseIDNAFail(".xn--q823a"); } +test { try parseIDNAFail("xn--0ug.xn--q823a"); } +test { try parseIDNAFail("\xdaa9\xded5\x10a3\x4805\xff0e\xd803\xde11"); } +test { try parseIDNAFail("\xdaa9\xded5\x10a3\x4805.\xd803\xde11"); } +test { try parseIDNAFail("\xdaa9\xded5\x2d03\x4805.\xd803\xde11"); } +test { try parseIDNAFail("xn--ukju77frl47r.xn--yl0d"); } +test { try parseIDNAFail("\xdaa9\xded5\x2d03\x4805\xff0e\xd803\xde11"); } +test { try parseIDNAFail("xn--bnd074zr557n.xn--yl0d"); } +test { try parseIDNAFail("-\xff61\xfe12"); } +test { try parseIDNAFail("-.xn--y86c"); } +test { try parseIDNAFail("\x200d.F"); } +test { try parseIDNAFail("\x200d.f"); } +test { try parseIDNAFail("xn--1ug.f"); } +test { try parseIDNAFail("\x200d\x3a32\xff61\xdf"); } +test { try parseIDNAFail("\x200d\x3a32\x3002\xdf"); } +test { try parseIDNAFail("\x200d\x3a32\x3002SS"); } +test { try parseIDNAFail("\x200d\x3a32\x3002ss"); } +test { try parseIDNAFail("\x200d\x3a32\x3002Ss"); } +test { try parseIDNAFail("xn--1ug914h.ss"); } +test { try parseIDNAFail("xn--1ug914h.xn--zca"); } +test { try parseIDNAFail("\x200d\x3a32\xff61SS"); } +test { try parseIDNAFail("\x200d\x3a32\xff61ss"); } +test { try parseIDNAFail("\x200d\x3a32\xff61Ss"); } +test { try parseIDNAFail("\x200d\xff0e\xdbc3\xde28"); } +test { try parseIDNAFail("\x200d.\xdbc3\xde28"); } +test { try parseIDNAFail(".xn--h327f"); } +test { try parseIDNAFail("xn--1ug.xn--h327f"); } +test { try parseIDNAFail("\xd94e\xdf7b\xd8f2\xdd41\xff61\x2260\xd835\xdff2"); } +test { try parseIDNAFail("\xd94e\xdf7b\xd8f2\xdd41\xff61=\x338\xd835\xdff2"); } +test { try parseIDNAFail("\xd94e\xdf7b\xd8f2\xdd41\x3002\x22606"); } +test { try parseIDNAFail("\xd94e\xdf7b\xd8f2\xdd41\x3002=\x3386"); } +test { try parseIDNAFail("xn--h79w4z99a.xn--6-tfo"); } +test { try parseIDNAFail("xn--98e.xn--om9c"); } +test { try parseIDNAFail("\xaaf6\x188f\xe3a\xff12.\xd800\xdee2\x745\xf9f\xfe12"); } +test { try parseIDNAFail("\xaaf6\x188f\xe3a2.\xd800\xdee2\x745\xf9f\x3002"); } +test { try parseIDNAFail("xn--2-2zf840fk16m.xn--sob093b2m7s."); } +test { try parseIDNAFail("xn--2-2zf840fk16m.xn--sob093bj62sz9d"); } +test { try parseIDNAFail("\xdad7\xdd27\xff61\x2260-\xdb41\xde44\x2f9b"); } +test { try parseIDNAFail("\xdad7\xdd27\xff61=\x338-\xdb41\xde44\x2f9b"); } +test { try parseIDNAFail("\xdad7\xdd27\x3002\x2260-\xdb41\xde44\x8d70"); } +test { try parseIDNAFail("\xdad7\xdd27\x3002=\x338-\xdb41\xde44\x8d70"); } +test { try parseIDNAFail("xn--gm57d.xn----tfo4949b3664m"); } +test { try parseIDNAFail("-\x2f86\xff0e\xaaf6"); } +test { try parseIDNAFail("-\x820c.\xaaf6"); } +test { try parseIDNAFail("xn----ef8c.xn--2v9a"); } +test { try parseIDNAFail("xn--jnd1986v.xn--gdh"); } +test { try parseIDNAFail("\x74bc\xd836\xde2d\xff61\x200c\xdb40\xdddf"); } +test { try parseIDNAFail("\x74bc\xd836\xde2d\x3002\x200c\xdb40\xdddf"); } +test { try parseIDNAFail("xn--gky8837e.xn--0ug"); } +test { try parseIDNAFail("\x200c.\x200c"); } +test { try parseIDNAFail("xn--0ug.xn--0ug"); } +test { try parseIDNAFail("\x10b7\xff0e\x5c2\xd804\xdd34\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("\x10b7\xff0e\xd804\xdd34\x5c2\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("\x10b7.\xd804\xdd34\x5c2\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("\x2d17.\xd804\xdd34\x5c2\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("xn--flj.xn--qdb0605f14ycrms3c"); } +test { try parseIDNAFail("\x2d17\xff0e\xd804\xdd34\x5c2\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("\x2d17\xff0e\x5c2\xd804\xdd34\xa9b7\xd920\xdce8"); } +test { try parseIDNAFail("xn--vnd.xn--qdb0605f14ycrms3c"); } +test { try parseIDNAFail("\x2488\x916b\xfe12\x3002\x8d6"); } +test { try parseIDNAFail("1.\x916b\x3002\x3002\x8d6"); } +test { try parseIDNAFail("1.xn--8j4a..xn--8zb"); } +test { try parseIDNAFail("xn--tsh4490bfe8c.xn--8zb"); } +test { try parseIDNAFail("\x2de3\x200c\x226e\x1a6b.\x200c\xe3a"); } +test { try parseIDNAFail("\x2de3\x200c<\x338\x1a6b.\x200c\xe3a"); } +test { try parseIDNAFail("xn--uof548an0j.xn--o4c"); } +test { try parseIDNAFail("xn--uof63xk4bf3s.xn--o4c732g"); } +test { try parseIDNAFail("xn--co6h.xn--1-kwssa"); } +test { try parseIDNAFail("xn--co6h.xn--1-h1g429s"); } +test { try parseIDNAFail("xn--co6h.xn--1-h1gs"); } +test { try parseIDNAFail("\xa806\x3002\xd8ad\xde8f\xfb0\x2495"); } +test { try parseIDNAFail("\xa806\x3002\xd8ad\xde8f\xfb014."); } +test { try parseIDNAFail("xn--l98a.xn--14-jsj57880f."); } +test { try parseIDNAFail("xn--l98a.xn--dgd218hhp28d"); } +test { try parseIDNAFail("\xd835\xdfe04\xdb40\xddd7\xd834\xde3b\xff0e\x200d\xd800\xdef5\x26e7\x200d"); } +test { try parseIDNAFail("84\xdb40\xddd7\xd834\xde3b.\x200d\xd800\xdef5\x26e7\x200d"); } +test { try parseIDNAFail("xn--84-s850a.xn--1uga573cfq1w"); } +test { try parseIDNAFail("\xd975\xdf0e\x2488\xff61\x200c\xd835\xdfe4"); } +test { try parseIDNAFail("\xd975\xdf0e1.\x3002\x200c2"); } +test { try parseIDNAFail("xn--1-ex54e..c"); } +test { try parseIDNAFail("xn--1-ex54e..xn--2-rgn"); } +test { try parseIDNAFail("xn--tsh94183d.c"); } +test { try parseIDNAFail("xn--tsh94183d.xn--2-rgn"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\xff61\xdf\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\x3002\xdf\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\x3002SS\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\x3002ss\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\x3002Ss\xd805\xdcc3"); } +test { try parseIDNAFail("xn--0ugb.xn--ss-bh7o"); } +test { try parseIDNAFail("xn--0ugb.xn--zca0732l"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\xff61SS\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\xff61ss\xd805\xdcc3"); } +test { try parseIDNAFail("\x200d\x200c\xdb40\xddaa\xff61Ss\xd805\xdcc3"); } +test { try parseIDNAFail("\xfe12\x200c\x30f6\x44a9.\xa86a"); } +test { try parseIDNAFail("\x3002\x200c\x30f6\x44a9.\xa86a"); } +test { try parseIDNAFail(".xn--0ug287dj0o.xn--gd9a"); } +test { try parseIDNAFail("xn--qekw60dns9k.xn--gd9a"); } +test { try parseIDNAFail("xn--0ug287dj0or48o.xn--gd9a"); } +test { try parseIDNAFail("\x200c\x2488\xd852\xdf8d.\xdb49\xdccb\x1a60"); } +test { try parseIDNAFail("\x200c1.\xd852\xdf8d.\xdb49\xdccb\x1a60"); } +test { try parseIDNAFail("1.xn--4x6j.xn--jof45148n"); } +test { try parseIDNAFail("xn--1-rgn.xn--4x6j.xn--jof45148n"); } +test { try parseIDNAFail("xn--tshw462r.xn--jof45148n"); } +test { try parseIDNAFail("xn--0ug88o7471d.xn--jof45148n"); } +test { try parseIDNAFail("\xd834\xdd75\xff61\xd835\xdfeb\xd838\xdc08\x4b3a\x2488"); } +test { try parseIDNAFail(".xn--9-ecp936non25a"); } +test { try parseIDNAFail("xn--3f1h.xn--91-030c1650n."); } +test { try parseIDNAFail("xn--3f1h.xn--9-ecp936non25a"); } +test { try parseIDNAFail("-\xdb40\xdd710\xff61\x17cf\x1dfd\xd187\xc2ed"); } +test { try parseIDNAFail("-\xdb40\xdd710\xff61\x17cf\x1dfd\x1110\x1168\x11aa\x1109\x1175\x11b8"); } +test { try parseIDNAFail("-\xdb40\xdd710\x3002\x17cf\x1dfd\xd187\xc2ed"); } +test { try parseIDNAFail("-\xdb40\xdd710\x3002\x17cf\x1dfd\x1110\x1168\x11aa\x1109\x1175\x11b8"); } +test { try parseIDNAFail("-0.xn--r4e872ah77nghm"); } +test { try parseIDNAFail("\x115f\x10bf\x10b5\x10e0\xff61\xb4d"); } +test { try parseIDNAFail("\x115f\x10bf\x10b5\x10e0\x3002\xb4d"); } +test { try parseIDNAFail("\x115f\x2d1f\x2d15\x10e0\x3002\xb4d"); } +test { try parseIDNAFail("\x115f\x10bf\x10b5\x1ca0\x3002\xb4d"); } +test { try parseIDNAFail("xn--1od555l3a.xn--9ic"); } +test { try parseIDNAFail("\x115f\x2d1f\x2d15\x10e0\xff61\xb4d"); } +test { try parseIDNAFail("\x115f\x10bf\x10b5\x1ca0\xff61\xb4d"); } +test { try parseIDNAFail("xn--tndt4hvw.xn--9ic"); } +test { try parseIDNAFail("xn--1od7wz74eeb.xn--9ic"); } +test { try parseIDNAFail("\x115f\x10bf\x2d15\x10e0\x3002\xb4d"); } +test { try parseIDNAFail("xn--3nd0etsm92g.xn--9ic"); } +test { try parseIDNAFail("\x115f\x10bf\x2d15\x10e0\xff61\xb4d"); } +test { try parseIDNAFail("xn--l96h.xn--o8e4044k"); } +test { try parseIDNAFail("xn--l96h.xn--03e93aq365d"); } +test { try parseIDNAFail("\xd835\xdfdb\xd834\xddaa\xa8c4\xff61\xa8ea-"); } +test { try parseIDNAFail("\xd835\xdfdb\xa8c4\xd834\xddaa\xff61\xa8ea-"); } +test { try parseIDNAFail("3\xa8c4\xd834\xddaa\x3002\xa8ea-"); } +test { try parseIDNAFail("xn--3-sl4eu679e.xn----xn4e"); } +test { try parseIDNAFail("\x1139\xff61\xeca\xda42\xdfe4\xdb40\xdd1e"); } +test { try parseIDNAFail("\x1139\x3002\xeca\xda42\xdfe4\xdb40\xdd1e"); } +test { try parseIDNAFail("xn--lrd.xn--s8c05302k"); } +test { try parseIDNAFail("\x10a6\xdaae\xdca9\xff0e\xdb40\xdda1\xfe09\xd83a\xdd0d"); } +test { try parseIDNAFail("\x10a6\xdaae\xdca9.\xdb40\xdda1\xfe09\xd83a\xdd0d"); } +test { try parseIDNAFail("\x2d06\xdaae\xdca9.\xdb40\xdda1\xfe09\xd83a\xdd2f"); } +test { try parseIDNAFail("xn--xkjw3965g.xn--ne6h"); } +test { try parseIDNAFail("\x2d06\xdaae\xdca9\xff0e\xdb40\xdda1\xfe09\xd83a\xdd2f"); } +test { try parseIDNAFail("xn--end82983m.xn--ne6h"); } +test { try parseIDNAFail("\x2d06\xdaae\xdca9.\xdb40\xdda1\xfe09\xd83a\xdd0d"); } +test { try parseIDNAFail("\x2d06\xdaae\xdca9\xff0e\xdb40\xdda1\xfe09\xd83a\xdd0d"); } +test { try parseIDNAFail("\xd91d\xdee8.\xd9d5\xdfe2\xd835\xdfe8\xa8c4"); } +test { try parseIDNAFail("\xd91d\xdee8.\xd9d5\xdfe26\xa8c4"); } +test { try parseIDNAFail("xn--mi60a.xn--6-sl4es8023c"); } +test { try parseIDNAFail("\xd800\xdef8\xdb79\xde0b\x10c2.\x10a1"); } +test { try parseIDNAFail("\xd800\xdef8\xdb79\xde0b\x2d22.\x2d01"); } +test { try parseIDNAFail("\xd800\xdef8\xdb79\xde0b\x10c2.\x2d01"); } +test { try parseIDNAFail("xn--qlj1559dr224h.xn--skj"); } +test { try parseIDNAFail("xn--6nd5215jr2u0h.xn--skj"); } +test { try parseIDNAFail("xn--6nd5215jr2u0h.xn--8md"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa806\x2084\xda65\xdf86\xff61\xd88a\xde67\xdb41\xdcb9\x3c2"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa8064\xda65\xdf86\x3002\xd88a\xde67\xdb41\xdcb9\x3c2"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa8064\xda65\xdf86\x3002\xd88a\xde67\xdb41\xdcb9\x3a3"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa8064\xda65\xdf86\x3002\xd88a\xde67\xdb41\xdcb9\x3c3"); } +test { try parseIDNAFail("xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d"); } +test { try parseIDNAFail("xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa806\x2084\xda65\xdf86\xff61\xd88a\xde67\xdb41\xdcb9\x3a3"); } +test { try parseIDNAFail("\xd91d\xdc7f\xa806\x2084\xda65\xdf86\xff61\xd88a\xde67\xdb41\xdcb9\x3c3"); } +test { try parseIDNAFail("\xd8ba\xdcac\x3002\x729\x3002\xcbd95"); } +test { try parseIDNAFail("\xd8ba\xdcac\x3002\x729\x3002\x110d\x1173\x11ac5"); } +test { try parseIDNAFail("xn--t92s.xn--znb.xn--5-y88f"); } +test { try parseIDNAFail("\x17ca.\x200d\xd835\xdfee\xd804\xdc3f"); } +test { try parseIDNAFail("\x17ca.\x200d2\xd804\xdc3f"); } +test { try parseIDNAFail("xn--m4e.xn--2-ku7i"); } +test { try parseIDNAFail("xn--m4e.xn--2-tgnv469h"); } +test { try parseIDNAFail("\xaaf6\x3002\x5b36\xdf\x847d"); } +test { try parseIDNAFail("\xaaf6\x3002\x5b36SS\x847d"); } +test { try parseIDNAFail("\xaaf6\x3002\x5b36ss\x847d"); } +test { try parseIDNAFail("\xaaf6\x3002\x5b36Ss\x847d"); } +test { try parseIDNAFail("xn--2v9a.xn--ss-q40dp97m"); } +test { try parseIDNAFail("xn--2v9a.xn--zca7637b14za"); } +test { try parseIDNAFail("\x3c2\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\xff61\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("\x3c2\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\x3002\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("\x3a3\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\x3002\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("\x3c3\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\x3002\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("xn--4xa2260lk3b8z15g.xn--tw9ct349a"); } +test { try parseIDNAFail("xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf"); } +test { try parseIDNAFail("xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf"); } +test { try parseIDNAFail("\x3a3\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\xff61\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("\x3c3\xd805\xdc3d\xd896\xdc88\xd805\xdf2b\xff61\xd83a\xdf29\x200c\xd802\xdec4"); } +test { try parseIDNAFail("\x2ea2\xd9df\xde85\xd835\xdfe4\xff61\x200d\xd83d\xdeb7"); } +test { try parseIDNAFail("\x2ea2\xd9df\xde852\x3002\x200d\xd83d\xdeb7"); } +test { try parseIDNAFail("xn--2-4jtr4282f.xn--m78h"); } +test { try parseIDNAFail("xn--2-4jtr4282f.xn--1ugz946p"); } +test { try parseIDNAFail("\xd836\xde25\x3002\x2adf\xd804\xde3e"); } +test { try parseIDNAFail("xn--n82h.xn--63iw010f"); } +test { try parseIDNAFail("-\x1897\x200c\xd83c\xdd04.\xd805\xdf22"); } +test { try parseIDNAFail("-\x1897\x200c3,.\xd805\xdf22"); } +test { try parseIDNAFail("xn---3,-3eu.xn--9h2d"); } +test { try parseIDNAFail("xn---3,-3eu051c.xn--9h2d"); } +test { try parseIDNAFail("xn----pck1820x.xn--9h2d"); } +test { try parseIDNAFail("xn----pck312bx563c.xn--9h2d"); } +test { try parseIDNAFail("xn--z3e.xn----938f"); } +test { try parseIDNAFail("\x200c\xd805\xdcc2\x3002\x2488-\xdbc2\xde9b"); } +test { try parseIDNAFail("\x200c\xd805\xdcc2\x30021.-\xdbc2\xde9b"); } +test { try parseIDNAFail("xn--wz1d.1.xn----rg03o"); } +test { try parseIDNAFail("xn--0ugy057g.1.xn----rg03o"); } +test { try parseIDNAFail("xn--wz1d.xn----dcp29674o"); } +test { try parseIDNAFail("xn--0ugy057g.xn----dcp29674o"); } +test { try parseIDNAFail("\xf94\xa84b-\xff0e-\xd81a\xdf34"); } +test { try parseIDNAFail("\xf94\xa84b-.-\xd81a\xdf34"); } +test { try parseIDNAFail("xn----ukg9938i.xn----4u5m"); } +test { try parseIDNAFail("\xd9bd\xdcb3-\x22e2\x200c\xff0e\x6807-"); } +test { try parseIDNAFail("\xd9bd\xdcb3-\x2291\x338\x200c\xff0e\x6807-"); } +test { try parseIDNAFail("\xd9bd\xdcb3-\x22e2\x200c.\x6807-"); } +test { try parseIDNAFail("\xd9bd\xdcb3-\x2291\x338\x200c.\x6807-"); } +test { try parseIDNAFail("xn----9mo67451g.xn----qj7b"); } +test { try parseIDNAFail("xn----sgn90kn5663a.xn----qj7b"); } +test { try parseIDNAFail("-\xd914\xde74.\x6e0\x189a-"); } +test { try parseIDNAFail("xn----qi38c.xn----jxc827k"); } +test { try parseIDNAFail("\x3002\x635\x649\xe37\x644\x627\x3002\x5c93\x1bf2\xdb43\xdf83\x1842"); } +test { try parseIDNAFail(".xn--mgb1a7bt462h.xn--17e10qe61f9r71s"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2\xff0e\xdf"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2.\xdf"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2.SS"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2.ss"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2.Ss"); } +test { try parseIDNAFail("xn----9tg11172akr8b.ss"); } +test { try parseIDNAFail("xn----9tg11172akr8b.xn--zca"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2\xff0eSS"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2\xff0ess"); } +test { try parseIDNAFail("\x1039-\xd82a\xdfad\xd83d\xdfa2\xff0eSs"); } +test { try parseIDNAFail("\xd4d-\x200d\x200c\xff61\xd955\xdfa7\x2085\x2260"); } +test { try parseIDNAFail("\xd4d-\x200d\x200c\xff61\xd955\xdfa7\x2085=\x338"); } +test { try parseIDNAFail("\xd4d-\x200d\x200c\x3002\xd955\xdfa75\x2260"); } +test { try parseIDNAFail("\xd4d-\x200d\x200c\x3002\xd955\xdfa75=\x338"); } +test { try parseIDNAFail("xn----jmf.xn--5-ufo50192e"); } +test { try parseIDNAFail("xn----jmf215lda.xn--5-ufo50192e"); } +test { try parseIDNAFail("\x9523\x3002\xa4d\xdb41\xde3b\xdb41\xde86"); } +test { try parseIDNAFail("xn--gc5a.xn--ybc83044ppga"); } +test { try parseIDNAFail("xn--6-8cb306hms1a.xn--ss-2vq"); } +test { try parseIDNAFail("xn--6-8cb555h2b.xn--ss-2vq"); } +test { try parseIDNAFail("xn--6-8cb555h2b.xn--zca894k"); } +test { try parseIDNAFail("\xd9ee\xdc50\xff61\x226f\xd804\xdeea"); } +test { try parseIDNAFail("\xd9ee\xdc50\xff61>\x338\xd804\xdeea"); } +test { try parseIDNAFail("\xd9ee\xdc50\x3002\x226f\xd804\xdeea"); } +test { try parseIDNAFail("\xd9ee\xdc50\x3002>\x338\xd804\xdeea"); } +test { try parseIDNAFail("xn--eo08b.xn--hdh3385g"); } +test { try parseIDNAFail("\xdb40\xdd0f\xd81a\xdf34\xdb43\xdcbd\xff61\xffa0"); } +test { try parseIDNAFail("\xdb40\xdd0f\xd81a\xdf34\xdb43\xdcbd\x3002\x1160"); } +test { try parseIDNAFail("xn--619ep9154c."); } +test { try parseIDNAFail("xn--619ep9154c.xn--psd"); } +test { try parseIDNAFail("xn--619ep9154c.xn--cl7c"); } +test { try parseIDNAFail("\xdb42\xdf54.\xd800\xdef1\x2082"); } +test { try parseIDNAFail("\xdb42\xdf54.\xd800\xdef12"); } +test { try parseIDNAFail("xn--vi56e.xn--2-w91i"); } +test { try parseIDNAFail("\x2dbf.\xdf\x200d"); } +test { try parseIDNAFail("\x2dbf.SS\x200d"); } +test { try parseIDNAFail("\x2dbf.ss\x200d"); } +test { try parseIDNAFail("\x2dbf.Ss\x200d"); } +test { try parseIDNAFail("xn--7pj.ss"); } +test { try parseIDNAFail("xn--7pj.xn--ss-n1t"); } +test { try parseIDNAFail("xn--7pj.xn--zca870n"); } +test { try parseIDNAFail("\x6889\x3002\x200c"); } +test { try parseIDNAFail("xn--7zv.xn--0ug"); } +test { try parseIDNAFail("\x40da\x87e5-\x3002-\xd9b5\xdc98\x2488"); } +test { try parseIDNAFail("\x40da\x87e5-\x3002-\xd9b5\xdc981."); } +test { try parseIDNAFail("xn----n50a258u.xn---1-up07j."); } +test { try parseIDNAFail("xn----n50a258u.xn----ecp33805f"); } +test { try parseIDNAFail("\x1894\x2260\xdbec\xde42.\x200d\xd800\xdee2"); } +test { try parseIDNAFail("\x1894=\x338\xdbec\xde42.\x200d\xd800\xdee2"); } +test { try parseIDNAFail("xn--ebf031cf7196a.xn--587c"); } +test { try parseIDNAFail("xn--ebf031cf7196a.xn--1ug9540g"); } +test { try parseIDNAFail("\xdb43\xdc29\xd807\xdcac\xff0e\x65c"); } +test { try parseIDNAFail("\xdb43\xdc29\xd807\xdcac.\x65c"); } +test { try parseIDNAFail("xn--sn3d59267c.xn--4hb"); } +test { try parseIDNAFail("\xd800\xdf7a.\xd928\xddc3\x200c"); } +test { try parseIDNAFail("xn--ie8c.xn--2g51a"); } +test { try parseIDNAFail("xn--ie8c.xn--0ug03366c"); } +test { try parseIDNAFail("\x200d\x226e\xff0e\xdb41\xdfea\xd8a6\xdecf-"); } +test { try parseIDNAFail("\x200d<\x338\xff0e\xdb41\xdfea\xd8a6\xdecf-"); } +test { try parseIDNAFail("\x200d\x226e.\xdb41\xdfea\xd8a6\xdecf-"); } +test { try parseIDNAFail("\x200d<\x338.\xdb41\xdfea\xd8a6\xdecf-"); } +test { try parseIDNAFail("xn--gdh.xn----cr99a1w710b"); } +test { try parseIDNAFail("xn--1ug95g.xn----cr99a1w710b"); } +test { try parseIDNAFail("\x200d\x200d\x8954\x3002\x10bc5\xa86e\xd995\xdf4f"); } +test { try parseIDNAFail("\x200d\x200d\x8954\x3002\x2d1c5\xa86e\xd995\xdf4f"); } +test { try parseIDNAFail("xn--2u2a.xn--5-uws5848bpf44e"); } +test { try parseIDNAFail("xn--1uga7691f.xn--5-uws5848bpf44e"); } +test { try parseIDNAFail("xn--2u2a.xn--5-r1g7167ipfw8d"); } +test { try parseIDNAFail("xn--1uga7691f.xn--5-r1g7167ipfw8d"); } +test { try parseIDNAFail("\xa9b9\x200d\xd077\xd8af\xdda1\xff61\x2082"); } +test { try parseIDNAFail("\xa9b9\x200d\x110f\x1173\x11b2\xd8af\xdda1\xff61\x2082"); } +test { try parseIDNAFail("xn--0m9as84e2e21c.c"); } +test { try parseIDNAFail("xn--1ug1435cfkyaoi04d.c"); } +test { try parseIDNAFail("\x2260\x81a3\x3002\xf83"); } +test { try parseIDNAFail("=\x338\x81a3\x3002\xf83"); } +test { try parseIDNAFail("xn--1chy468a.xn--2ed"); } +test { try parseIDNAFail("\xd800\xdef7\x3002\x200d"); } +test { try parseIDNAFail("xn--r97c.xn--1ug"); } +test { try parseIDNAFail("\xd807\xdc33\xd804\xde2f\x3002\x296a"); } +test { try parseIDNAFail("xn--2g1d14o.xn--jti"); } +test { try parseIDNAFail("\xd804\xdd80\x4074\xd952\xdde3\xff0e\x10b5\xd835\xdfdc\x200c\x348"); } +test { try parseIDNAFail("\xd804\xdd80\x4074\xd952\xdde3.\x10b54\x200c\x348"); } +test { try parseIDNAFail("\xd804\xdd80\x4074\xd952\xdde3.\x2d154\x200c\x348"); } +test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb5123a"); } +test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb502tlsl"); } +test { try parseIDNAFail("\xd804\xdd80\x4074\xd952\xdde3\xff0e\x2d15\xd835\xdfdc\x200c\x348"); } +test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h"); } +test { try parseIDNAFail("xn--1mnx647cg3x1b.xn--4-zfb324h32o"); } + +test { try parseIDNAPass("fass.de", "fass.de"); } +test { try parseIDNAPass("fa\xdf.de", "xn--fa-hia.de"); } +test { try parseIDNAPass("Fa\xdf.de", "xn--fa-hia.de"); } +test { try parseIDNAPass("xn--fa-hia.de", "xn--fa-hia.de"); } +test { try parseIDNAPass("\xe0.\x5d0\x308", "xn--0ca.xn--ssa73l"); } +test { try parseIDNAPass("a\x300.\x5d0\x308", "xn--0ca.xn--ssa73l"); } +test { try parseIDNAPass("A\x300.\x5d0\x308", "xn--0ca.xn--ssa73l"); } +test { try parseIDNAPass("\xc0.\x5d0\x308", "xn--0ca.xn--ssa73l"); } +test { try parseIDNAPass("xn--0ca.xn--ssa73l", "xn--0ca.xn--ssa73l"); } +test { try parseIDNAPass("\xe0\x308.\x5d0", "xn--0ca81i.xn--4db"); } +test { try parseIDNAPass("a\x300\x308.\x5d0", "xn--0ca81i.xn--4db"); } +test { try parseIDNAPass("A\x300\x308.\x5d0", "xn--0ca81i.xn--4db"); } +test { try parseIDNAPass("\xc0\x308.\x5d0", "xn--0ca81i.xn--4db"); } +test { try parseIDNAPass("xn--0ca81i.xn--4db", "xn--0ca81i.xn--4db"); } +test { try parseIDNAPass("ab", "ab"); } +test { try parseIDNAPass("a\x94d\x200cb", "xn--ab-fsf604u"); } +test { try parseIDNAPass("A\x94d\x200cB", "xn--ab-fsf604u"); } +test { try parseIDNAPass("A\x94d\x200cb", "xn--ab-fsf604u"); } +test { try parseIDNAPass("xn--ab-fsf", "xn--ab-fsf"); } +test { try parseIDNAPass("a\x94db", "xn--ab-fsf"); } +test { try parseIDNAPass("A\x94dB", "xn--ab-fsf"); } +test { try parseIDNAPass("A\x94db", "xn--ab-fsf"); } +test { try parseIDNAPass("xn--ab-fsf604u", "xn--ab-fsf604u"); } +test { try parseIDNAPass("a\x94d\x200db", "xn--ab-fsf014u"); } +test { try parseIDNAPass("A\x94d\x200dB", "xn--ab-fsf014u"); } +test { try parseIDNAPass("A\x94d\x200db", "xn--ab-fsf014u"); } +test { try parseIDNAPass("xn--ab-fsf014u", "xn--ab-fsf014u"); } +test { try parseIDNAPass("\xa1", "xn--7a"); } +test { try parseIDNAPass("xn--7a", "xn--7a"); } +test { try parseIDNAPass("\x19da", "xn--pkf"); } +test { try parseIDNAPass("xn--pkf", "xn--pkf"); } +test { try parseIDNAPass("\x3002", "."); } +test { try parseIDNAPass(".", "."); } +test { try parseIDNAPass("\xab60", "xn--3y9a"); } +test { try parseIDNAPass("xn--3y9a", "xn--3y9a"); } +test { try parseIDNAPass("1234567890\xe41234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); } +test { try parseIDNAPass("1234567890a\x3081234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); } +test { try parseIDNAPass("1234567890A\x3081234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); } +test { try parseIDNAPass("1234567890\xc41234567890123456789012345678901234567890123456", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); } +test { try parseIDNAPass("xn--12345678901234567890123456789012345678901234567890123456-fxe", "xn--12345678901234567890123456789012345678901234567890123456-fxe"); } +test { try parseIDNAPass("www.eXample.cOm", "www.example.com"); } +test { try parseIDNAPass("B\xfccher.de", "xn--bcher-kva.de"); } +test { try parseIDNAPass("Bu\x308cher.de", "xn--bcher-kva.de"); } +test { try parseIDNAPass("bu\x308cher.de", "xn--bcher-kva.de"); } +test { try parseIDNAPass("b\xfccher.de", "xn--bcher-kva.de"); } +test { try parseIDNAPass("B\xdcCHER.DE", "xn--bcher-kva.de"); } +test { try parseIDNAPass("BU\x308CHER.DE", "xn--bcher-kva.de"); } +test { try parseIDNAPass("xn--bcher-kva.de", "xn--bcher-kva.de"); } +test { try parseIDNAPass("\xd6BB", "xn--bb-eka"); } +test { try parseIDNAPass("O\x308BB", "xn--bb-eka"); } +test { try parseIDNAPass("o\x308bb", "xn--bb-eka"); } +test { try parseIDNAPass("\xf6bb", "xn--bb-eka"); } +test { try parseIDNAPass("\xd6bb", "xn--bb-eka"); } +test { try parseIDNAPass("O\x308bb", "xn--bb-eka"); } +test { try parseIDNAPass("xn--bb-eka", "xn--bb-eka"); } +test { try parseIDNAPass("FA\x1e9e.de", "xn--fa-hia.de"); } +test { try parseIDNAPass("FA\x1e9e.DE", "xn--fa-hia.de"); } +test { try parseIDNAPass("\x3b2\x3cc\x3bb\x3bf\x3c2.com", "xn--nxasmm1c.com"); } +test { try parseIDNAPass("\x3b2\x3bf\x301\x3bb\x3bf\x3c2.com", "xn--nxasmm1c.com"); } +test { try parseIDNAPass("\x392\x39f\x301\x39b\x39f\x3a3.COM", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x392\x38c\x39b\x39f\x3a3.COM", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x3b2\x3cc\x3bb\x3bf\x3c3.com", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x3b2\x3bf\x301\x3bb\x3bf\x3c3.com", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x392\x3bf\x301\x3bb\x3bf\x3c3.com", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x392\x3cc\x3bb\x3bf\x3c3.com", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("xn--nxasmq6b.com", "xn--nxasmq6b.com"); } +test { try parseIDNAPass("\x392\x3bf\x301\x3bb\x3bf\x3c2.com", "xn--nxasmm1c.com"); } +test { try parseIDNAPass("\x392\x3cc\x3bb\x3bf\x3c2.com", "xn--nxasmm1c.com"); } +test { try parseIDNAPass("xn--nxasmm1c.com", "xn--nxasmm1c.com"); } +test { try parseIDNAPass("xn--nxasmm1c", "xn--nxasmm1c"); } +test { try parseIDNAPass("\x3b2\x3cc\x3bb\x3bf\x3c2", "xn--nxasmm1c"); } +test { try parseIDNAPass("\x3b2\x3bf\x301\x3bb\x3bf\x3c2", "xn--nxasmm1c"); } +test { try parseIDNAPass("\x392\x39f\x301\x39b\x39f\x3a3", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x392\x38c\x39b\x39f\x3a3", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x3b2\x3cc\x3bb\x3bf\x3c3", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x3b2\x3bf\x301\x3bb\x3bf\x3c3", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x392\x3bf\x301\x3bb\x3bf\x3c3", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x392\x3cc\x3bb\x3bf\x3c3", "xn--nxasmq6b"); } +test { try parseIDNAPass("xn--nxasmq6b", "xn--nxasmq6b"); } +test { try parseIDNAPass("\x392\x3cc\x3bb\x3bf\x3c2", "xn--nxasmm1c"); } +test { try parseIDNAPass("\x392\x3bf\x301\x3bb\x3bf\x3c2", "xn--nxasmm1c"); } +test { try parseIDNAPass("www.\xdc1\xdca\x200d\xdbb\xdd3.com", "www.xn--10cl1a0b660p.com"); } +test { try parseIDNAPass("WWW.\xdc1\xdca\x200d\xdbb\xdd3.COM", "www.xn--10cl1a0b660p.com"); } +test { try parseIDNAPass("Www.\xdc1\xdca\x200d\xdbb\xdd3.com", "www.xn--10cl1a0b660p.com"); } +test { try parseIDNAPass("www.xn--10cl1a0b.com", "www.xn--10cl1a0b.com"); } +test { try parseIDNAPass("www.\xdc1\xdca\xdbb\xdd3.com", "www.xn--10cl1a0b.com"); } +test { try parseIDNAPass("WWW.\xdc1\xdca\xdbb\xdd3.COM", "www.xn--10cl1a0b.com"); } +test { try parseIDNAPass("Www.\xdc1\xdca\xdbb\xdd3.com", "www.xn--10cl1a0b.com"); } +test { try parseIDNAPass("www.xn--10cl1a0b660p.com", "www.xn--10cl1a0b660p.com"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x200c\x627\x6cc", "xn--mgba3gch31f060k"); } +test { try parseIDNAPass("xn--mgba3gch31f", "xn--mgba3gch31f"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x627\x6cc", "xn--mgba3gch31f"); } +test { try parseIDNAPass("xn--mgba3gch31f060k", "xn--mgba3gch31f060k"); } +test { try parseIDNAPass("xn--mgba3gch31f060k.com", "xn--mgba3gch31f060k.com"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x200c\x627\x6cc.com", "xn--mgba3gch31f060k.com"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x200c\x627\x6cc.COM", "xn--mgba3gch31f060k.com"); } +test { try parseIDNAPass("xn--mgba3gch31f.com", "xn--mgba3gch31f.com"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x627\x6cc.com", "xn--mgba3gch31f.com"); } +test { try parseIDNAPass("\x646\x627\x645\x647\x627\x6cc.COM", "xn--mgba3gch31f.com"); } +test { try parseIDNAPass("a.b\xff0ec\x3002d\xff61", "a.b.c.d."); } +test { try parseIDNAPass("a.b.c\x3002d\x3002", "a.b.c.d."); } +test { try parseIDNAPass("A.B.C\x3002D\x3002", "a.b.c.d."); } +test { try parseIDNAPass("A.b.c\x3002D\x3002", "a.b.c.d."); } +test { try parseIDNAPass("a.b.c.d.", "a.b.c.d."); } +test { try parseIDNAPass("A.B\xff0eC\x3002D\xff61", "a.b.c.d."); } +test { try parseIDNAPass("A.b\xff0ec\x3002D\xff61", "a.b.c.d."); } +test { try parseIDNAPass("U\x308.xn--tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xdc.xn--tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xfc.xn--tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("u\x308.xn--tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("U\x308.XN--TDA", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xdc.XN--TDA", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xdc.xn--Tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("U\x308.xn--Tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("xn--tda.xn--tda", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xfc.\xfc", "xn--tda.xn--tda"); } +test { try parseIDNAPass("u\x308.u\x308", "xn--tda.xn--tda"); } +test { try parseIDNAPass("U\x308.U\x308", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xdc.\xdc", "xn--tda.xn--tda"); } +test { try parseIDNAPass("\xdc.\xfc", "xn--tda.xn--tda"); } +test { try parseIDNAPass("U\x308.u\x308", "xn--tda.xn--tda"); } +test { try parseIDNAPass("a1.com", "a1.com"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002\xff2a\xff30", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002JP", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002jp", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002Jp", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("xn--wgv71a119e.jp", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e.jp", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e.JP", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e.Jp", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002\xff4a\xff50", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x65e5\x672c\x8a9e\x3002\xff2a\xff50", "xn--wgv71a119e.jp"); } +test { try parseIDNAPass("\x2615", "xn--53h"); } +test { try parseIDNAPass("xn--53h", "xn--53h"); } +test { try parseIDNAPass("1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.assbcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\x15dssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.assbcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\x302ssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.ASSBCSSSSSSSSD\x3a3\x3a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\x302SSZ", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.ASSBCSSSSSSSSD\x3a3\x3a3SSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSS\x15cSSZ", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.Assbcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssss\x15dssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("1.Assbcssssssssd\x3c3\x3c3ssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\x302ssz", "1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa"); } +test { try parseIDNAPass("xn--bss", "xn--bss"); } +test { try parseIDNAPass("\x5919", "xn--bss"); } +test { try parseIDNAPass("\x2e3\x34f\x2115\x200b\xfe63\xad\xff0d\x180c\x212c\xfe00\x17f\x2064\xd835\xdd30\xdb40\xddef\xfb04", "xn--bssffl"); } +test { try parseIDNAPass("x\x34fN\x200b-\xad-\x180cB\xfe00s\x2064s\xdb40\xddefffl", "xn--bssffl"); } +test { try parseIDNAPass("x\x34fn\x200b-\xad-\x180cb\xfe00s\x2064s\xdb40\xddefffl", "xn--bssffl"); } +test { try parseIDNAPass("X\x34fN\x200b-\xad-\x180cB\xfe00S\x2064S\xdb40\xddefFFL", "xn--bssffl"); } +test { try parseIDNAPass("X\x34fn\x200b-\xad-\x180cB\xfe00s\x2064s\xdb40\xddefffl", "xn--bssffl"); } +test { try parseIDNAPass("xn--bssffl", "xn--bssffl"); } +test { try parseIDNAPass("\x5921\x591e\x591c\x5919", "xn--bssffl"); } +test { try parseIDNAPass("\x2e3\x34f\x2115\x200b\xfe63\xad\xff0d\x180c\x212c\xfe00S\x2064\xd835\xdd30\xdb40\xddefFFL", "xn--bssffl"); } +test { try parseIDNAPass("x\x34fN\x200b-\xad-\x180cB\xfe00S\x2064s\xdb40\xddefFFL", "xn--bssffl"); } +test { try parseIDNAPass("\x2e3\x34f\x2115\x200b\xfe63\xad\xff0d\x180c\x212c\xfe00s\x2064\xd835\xdd30\xdb40\xddefffl", "xn--bssffl"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("\xe41234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); } +test { try parseIDNAPass("a\x3081234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); } +test { try parseIDNAPass("A\x3081234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); } +test { try parseIDNAPass("\xc41234567890123456789012345678901234567890123456789012345", "xn--1234567890123456789012345678901234567890123456789012345-9te"); } +test { try parseIDNAPass("xn--1234567890123456789012345678901234567890123456789012345-9te", "xn--1234567890123456789012345678901234567890123456789012345-9te"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901C", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789A.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xe41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890a\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890B", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("a.b..-q--a-.e", "a.b..-q--a-.e"); } +test { try parseIDNAPass("a.b..-q--\xe4-.e", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("a.b..-q--a\x308-.e", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("A.B..-Q--A\x308-.E", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("A.B..-Q--\xc4-.E", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("A.b..-Q--\xc4-.E", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("A.b..-Q--A\x308-.E", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("a.b..xn---q----jra.e", "a.b..xn---q----jra.e"); } +test { try parseIDNAPass("a..c", "a..c"); } +test { try parseIDNAPass("a.-b.", "a.-b."); } +test { try parseIDNAPass("a.b-.c", "a.b-.c"); } +test { try parseIDNAPass("a.-.c", "a.-.c"); } +test { try parseIDNAPass("a.bc--de.f", "a.bc--de.f"); } +test { try parseIDNAPass("\xe4.\xad.c", "xn--4ca..c"); } +test { try parseIDNAPass("a\x308.\xad.c", "xn--4ca..c"); } +test { try parseIDNAPass("A\x308.\xad.C", "xn--4ca..c"); } +test { try parseIDNAPass("\xc4.\xad.C", "xn--4ca..c"); } +test { try parseIDNAPass("xn--4ca..c", "xn--4ca..c"); } +test { try parseIDNAPass("\xe4.-b.", "xn--4ca.-b."); } +test { try parseIDNAPass("a\x308.-b.", "xn--4ca.-b."); } +test { try parseIDNAPass("A\x308.-B.", "xn--4ca.-b."); } +test { try parseIDNAPass("\xc4.-B.", "xn--4ca.-b."); } +test { try parseIDNAPass("xn--4ca.-b.", "xn--4ca.-b."); } +test { try parseIDNAPass("\xe4.b-.c", "xn--4ca.b-.c"); } +test { try parseIDNAPass("a\x308.b-.c", "xn--4ca.b-.c"); } +test { try parseIDNAPass("A\x308.B-.C", "xn--4ca.b-.c"); } +test { try parseIDNAPass("\xc4.B-.C", "xn--4ca.b-.c"); } +test { try parseIDNAPass("\xc4.b-.C", "xn--4ca.b-.c"); } +test { try parseIDNAPass("A\x308.b-.C", "xn--4ca.b-.c"); } +test { try parseIDNAPass("xn--4ca.b-.c", "xn--4ca.b-.c"); } +test { try parseIDNAPass("\xe4.-.c", "xn--4ca.-.c"); } +test { try parseIDNAPass("a\x308.-.c", "xn--4ca.-.c"); } +test { try parseIDNAPass("A\x308.-.C", "xn--4ca.-.c"); } +test { try parseIDNAPass("\xc4.-.C", "xn--4ca.-.c"); } +test { try parseIDNAPass("xn--4ca.-.c", "xn--4ca.-.c"); } +test { try parseIDNAPass("\xe4.bc--de.f", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("a\x308.bc--de.f", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("A\x308.BC--DE.F", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("\xc4.BC--DE.F", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("\xc4.bc--De.f", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("A\x308.bc--De.f", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("xn--4ca.bc--de.f", "xn--4ca.bc--de.f"); } +test { try parseIDNAPass("A0", "a0"); } +test { try parseIDNAPass("0A", "0a"); } +test { try parseIDNAPass("\x5d0\x5c7", "xn--vdbr"); } +test { try parseIDNAPass("xn--vdbr", "xn--vdbr"); } +test { try parseIDNAPass("\x5d09\x5c7", "xn--9-ihcz"); } +test { try parseIDNAPass("xn--9-ihcz", "xn--9-ihcz"); } +test { try parseIDNAPass("\x5d0\x5ea", "xn--4db6c"); } +test { try parseIDNAPass("xn--4db6c", "xn--4db6c"); } +test { try parseIDNAPass("\x5d0\x5f3\x5ea", "xn--4db6c0a"); } +test { try parseIDNAPass("xn--4db6c0a", "xn--4db6c0a"); } +test { try parseIDNAPass("\x5d07\x5ea", "xn--7-zhc3f"); } +test { try parseIDNAPass("xn--7-zhc3f", "xn--7-zhc3f"); } +test { try parseIDNAPass("\x5d0\x667\x5ea", "xn--4db6c6t"); } +test { try parseIDNAPass("xn--4db6c6t", "xn--4db6c6t"); } +test { try parseIDNAPass("\xbb9\xbcd\x200d", "xn--dmc4b194h"); } +test { try parseIDNAPass("xn--dmc4b", "xn--dmc4b"); } +test { try parseIDNAPass("\xbb9\xbcd", "xn--dmc4b"); } +test { try parseIDNAPass("xn--dmc4b194h", "xn--dmc4b194h"); } +test { try parseIDNAPass("xn--dmc", "xn--dmc"); } +test { try parseIDNAPass("\xbb9", "xn--dmc"); } +test { try parseIDNAPass("\xbb9\xbcd\x200c", "xn--dmc4by94h"); } +test { try parseIDNAPass("xn--dmc4by94h", "xn--dmc4by94h"); } +test { try parseIDNAPass("\x644\x670\x200c\x6ed\x6ef", "xn--ghb2gxqia7523a"); } +test { try parseIDNAPass("xn--ghb2gxqia", "xn--ghb2gxqia"); } +test { try parseIDNAPass("\x644\x670\x6ed\x6ef", "xn--ghb2gxqia"); } +test { try parseIDNAPass("xn--ghb2gxqia7523a", "xn--ghb2gxqia7523a"); } +test { try parseIDNAPass("\x644\x670\x200c\x6ef", "xn--ghb2g3qq34f"); } +test { try parseIDNAPass("xn--ghb2g3q", "xn--ghb2g3q"); } +test { try parseIDNAPass("\x644\x670\x6ef", "xn--ghb2g3q"); } +test { try parseIDNAPass("xn--ghb2g3qq34f", "xn--ghb2g3qq34f"); } +test { try parseIDNAPass("\x644\x200c\x6ed\x6ef", "xn--ghb25aga828w"); } +test { try parseIDNAPass("xn--ghb25aga", "xn--ghb25aga"); } +test { try parseIDNAPass("\x644\x6ed\x6ef", "xn--ghb25aga"); } +test { try parseIDNAPass("xn--ghb25aga828w", "xn--ghb25aga828w"); } +test { try parseIDNAPass("\x644\x200c\x6ef", "xn--ghb65a953d"); } +test { try parseIDNAPass("xn--ghb65a", "xn--ghb65a"); } +test { try parseIDNAPass("\x644\x6ef", "xn--ghb65a"); } +test { try parseIDNAPass("xn--ghb65a953d", "xn--ghb65a953d"); } +test { try parseIDNAPass("xn--ghb2gxq", "xn--ghb2gxq"); } +test { try parseIDNAPass("\x644\x670\x6ed", "xn--ghb2gxq"); } +test { try parseIDNAPass("xn--cmba", "xn--cmba"); } +test { try parseIDNAPass("\x6ef\x6ef", "xn--cmba"); } +test { try parseIDNAPass("xn--ghb", "xn--ghb"); } +test { try parseIDNAPass("\x644", "xn--ghb"); } +test { try parseIDNAPass("a\x3002\x3002b", "a..b"); } +test { try parseIDNAPass("A\x3002\x3002B", "a..b"); } +test { try parseIDNAPass("a..b", "a..b"); } +test { try parseIDNAPass("..xn--skb", "..xn--skb"); } +test { try parseIDNAPass("$", "$"); } +test { try parseIDNAPass("\x2477.four", "(4).four"); } +test { try parseIDNAPass("(4).four", "(4).four"); } +test { try parseIDNAPass("\x2477.FOUR", "(4).four"); } +test { try parseIDNAPass("\x2477.Four", "(4).four"); } +test { try parseIDNAPass("ascii", "ascii"); } +test { try parseIDNAPass("unicode.org", "unicode.org"); } +test { try parseIDNAPass("\xf951\xd87e\xdc68\xd87e\xdc74\xd87e\xdd1f\xd87e\xdd5f\xd87e\xddbf", "xn--snl253bgitxhzwu2arn60c"); } +test { try parseIDNAPass("\x964b\x36fc\x5f53\xd850\xdfab\x7aee\x45d7", "xn--snl253bgitxhzwu2arn60c"); } +test { try parseIDNAPass("xn--snl253bgitxhzwu2arn60c", "xn--snl253bgitxhzwu2arn60c"); } +test { try parseIDNAPass("\x96fb\xd844\xdf6a\x5f33\x43ab\x7aae\x4d57", "xn--kbo60w31ob3z6t3av9z5b"); } +test { try parseIDNAPass("xn--kbo60w31ob3z6t3av9z5b", "xn--kbo60w31ob3z6t3av9z5b"); } +test { try parseIDNAPass("xn--A-1ga", "xn--a-1ga"); } +test { try parseIDNAPass("a\xf6", "xn--a-1ga"); } +test { try parseIDNAPass("ao\x308", "xn--a-1ga"); } +test { try parseIDNAPass("AO\x308", "xn--a-1ga"); } +test { try parseIDNAPass("A\xd6", "xn--a-1ga"); } +test { try parseIDNAPass("A\xf6", "xn--a-1ga"); } +test { try parseIDNAPass("Ao\x308", "xn--a-1ga"); } +test { try parseIDNAPass("\xff1d\x338", "xn--1ch"); } +test { try parseIDNAPass("\x2260", "xn--1ch"); } +test { try parseIDNAPass("=\x338", "xn--1ch"); } +test { try parseIDNAPass("xn--1ch", "xn--1ch"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b.", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc4123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c", "123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901c"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a.", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789a."); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890A\x3081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("123456789012345678901234567890123456789012345678901234567890123.1234567890\xc41234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b", "123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890b"); } +test { try parseIDNAPass("\xa863.\x7cf", "xn--8c9a.xn--qsb"); } +test { try parseIDNAPass("xn--8c9a.xn--qsb", "xn--8c9a.xn--qsb"); } +test { try parseIDNAPass("xn--jbf911clb.xn----p9j493ivi4l", "xn--jbf911clb.xn----p9j493ivi4l"); } +test { try parseIDNAPass("\x2260\x1899\x226f.\xc1a3-\x1874\x2d00", "xn--jbf911clb.xn----p9j493ivi4l"); } +test { try parseIDNAPass("=\x338\x1899>\x338.\x1109\x1169\x11be-\x1874\x2d00", "xn--jbf911clb.xn----p9j493ivi4l"); } +test { try parseIDNAPass("=\x338\x1899>\x338.\x1109\x1169\x11be-\x1874\x10a0", "xn--jbf911clb.xn----p9j493ivi4l"); } +test { try parseIDNAPass("\x2260\x1899\x226f.\xc1a3-\x1874\x10a0", "xn--jbf911clb.xn----p9j493ivi4l"); } +test { try parseIDNAPass("xn--gl0as212a.i.", "xn--gl0as212a.i."); } +test { try parseIDNAPass("\x7e71\xd805\xddbf.i.", "xn--gl0as212a.i."); } +test { try parseIDNAPass("\x7e71\xd805\xddbf.I.", "xn--gl0as212a.i."); } +test { try parseIDNAPass("xn--1ug6928ac48e.i.", "xn--1ug6928ac48e.i."); } +test { try parseIDNAPass("\x7e71\xd805\xddbf\x200d.i.", "xn--1ug6928ac48e.i."); } +test { try parseIDNAPass("\x7e71\xd805\xddbf\x200d.I.", "xn--1ug6928ac48e.i."); } +test { try parseIDNAPass("xn--ss-59d.", "xn--ss-59d."); } +test { try parseIDNAPass("ss\x6eb.", "xn--ss-59d."); } +test { try parseIDNAPass("SS\x6eb.", "xn--ss-59d."); } +test { try parseIDNAPass("Ss\x6eb.", "xn--ss-59d."); } +test { try parseIDNAPass("\xd83a\xdd37.\xd802\xdf90\xd83a\xdc81\xd803\xde60\x624", "xn--ve6h.xn--jgb1694kz0b2176a"); } +test { try parseIDNAPass("\xd83a\xdd37.\xd802\xdf90\xd83a\xdc81\xd803\xde60\x648\x654", "xn--ve6h.xn--jgb1694kz0b2176a"); } +test { try parseIDNAPass("\xd83a\xdd15.\xd802\xdf90\xd83a\xdc81\xd803\xde60\x648\x654", "xn--ve6h.xn--jgb1694kz0b2176a"); } +test { try parseIDNAPass("\xd83a\xdd15.\xd802\xdf90\xd83a\xdc81\xd803\xde60\x624", "xn--ve6h.xn--jgb1694kz0b2176a"); } +test { try parseIDNAPass("xn--ve6h.xn--jgb1694kz0b2176a", "xn--ve6h.xn--jgb1694kz0b2176a"); } +test { try parseIDNAPass("\xd83a\xdd25\xdb40\xdd6e\xff0e\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd25\xdb40\xdd6e.\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd25\xdb40\xdd6e.\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03\xdb40\xdd6e.\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03\xdb40\xdd6e.\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("xn--de6h.xn--37e857h", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd25.\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03.\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03.\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd25\xdb40\xdd6e\xff0e\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03\xdb40\xdd6e\xff0e\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd03\xdb40\xdd6e\xff0e\x1844\x2d0e", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("\xd83a\xdd25.\x1844\x10ae", "xn--de6h.xn--37e857h"); } +test { try parseIDNAPass("xn--ej0b.xn----d87b", "xn--ej0b.xn----d87b"); } +test { try parseIDNAPass("xn----1fa1788k.", "xn----1fa1788k."); } +test { try parseIDNAPass("xn--9ob.xn--4xa", "xn--9ob.xn--4xa"); } +test { try parseIDNAPass("\x756.\x3c3", "xn--9ob.xn--4xa"); } +test { try parseIDNAPass("\x756.\x3a3", "xn--9ob.xn--4xa"); } +test { try parseIDNAPass("\xdf\xff61\xd800\xdef3\x10ac\xfb8", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("\xdf\x3002\xd800\xdef3\x10ac\xfb8", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("\xdf\x3002\xd800\xdef3\x2d0c\xfb8", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("SS\x3002\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("ss\x3002\xd800\xdef3\x2d0c\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("Ss\x3002\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("ss.xn--lgd921mvv0m", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("ss.\xd800\xdef3\x2d0c\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("SS.\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("Ss.\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("xn--zca.xn--lgd921mvv0m", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("\xdf.\xd800\xdef3\x2d0c\xfb8", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("\xdf\xff61\xd800\xdef3\x2d0c\xfb8", "xn--zca.xn--lgd921mvv0m"); } +test { try parseIDNAPass("SS\xff61\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("ss\xff61\xd800\xdef3\x2d0c\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("Ss\xff61\xd800\xdef3\x10ac\xfb8", "ss.xn--lgd921mvv0m"); } +test { try parseIDNAPass("\x16ad\xff61\xd834\xdf20\xdf\xd81a\xdef1", "xn--hwe.xn--zca4946pblnc"); } +test { try parseIDNAPass("\x16ad\x3002\xd834\xdf20\xdf\xd81a\xdef1", "xn--hwe.xn--zca4946pblnc"); } +test { try parseIDNAPass("\x16ad\x3002\xd834\xdf20SS\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad\x3002\xd834\xdf20ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad\x3002\xd834\xdf20Ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("xn--hwe.xn--ss-ci1ub261a", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad.\xd834\xdf20ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad.\xd834\xdf20SS\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad.\xd834\xdf20Ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("xn--hwe.xn--zca4946pblnc", "xn--hwe.xn--zca4946pblnc"); } +test { try parseIDNAPass("\x16ad.\xd834\xdf20\xdf\xd81a\xdef1", "xn--hwe.xn--zca4946pblnc"); } +test { try parseIDNAPass("\x16ad\xff61\xd834\xdf20SS\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad\xff61\xd834\xdf20ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("\x16ad\xff61\xd834\xdf20Ss\xd81a\xdef1", "xn--hwe.xn--ss-ci1ub261a"); } +test { try parseIDNAPass("xn--09e4694e..xn--ye6h", "xn--09e4694e..xn--ye6h"); } +test { try parseIDNAPass("xn--1-o7j0610f..xn----381i", "xn--1-o7j0610f..xn----381i"); } +test { try parseIDNAPass("1.xn----zw5a.xn--kp5b", "1.xn----zw5a.xn--kp5b"); } +test { try parseIDNAPass("-\xd800\xdef7\xd81b\xdf91\x3002\xdb40\xddac", "xn----991iq40y."); } +test { try parseIDNAPass("xn----991iq40y.", "xn----991iq40y."); } +test { try parseIDNAPass(".xn--hdh", ".xn--hdh"); } +test { try parseIDNAPass("\xd83a\xdd53\xff0e\x718", "xn--of6h.xn--inb"); } +test { try parseIDNAPass("\xd83a\xdd53.\x718", "xn--of6h.xn--inb"); } +test { try parseIDNAPass("xn--of6h.xn--inb", "xn--of6h.xn--inb"); } +test { try parseIDNAPass("\xdb40\xdd3d-\xff0e-\xdca", "-.xn----ptf"); } +test { try parseIDNAPass("\xdb40\xdd3d-.-\xdca", "-.xn----ptf"); } +test { try parseIDNAPass("-.xn----ptf", "-.xn----ptf"); } +test { try parseIDNAPass("\x10ba\xd800\xdef8\xdb40\xdd04\x3002\xd835\xdfdd\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x10ba\xd800\xdef8\xdb40\xdd04\x30025\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x2d1a\xd800\xdef8\xdb40\xdd04\x30025\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("xn--ilj2659d.xn--5-dug9054m", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x2d1a\xd800\xdef8.5\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x10ba\xd800\xdef8.5\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x2d1a\xd800\xdef8\xdb40\xdd04\x3002\xd835\xdfdd\xd7f6\x103a", "xn--ilj2659d.xn--5-dug9054m"); } +test { try parseIDNAPass("\x2260.\x183f", "xn--1ch.xn--y7e"); } +test { try parseIDNAPass("=\x338.\x183f", "xn--1ch.xn--y7e"); } +test { try parseIDNAPass("xn--1ch.xn--y7e", "xn--1ch.xn--y7e"); } +test { try parseIDNAPass("\x723\x5a3\xff61\x332a", "xn--ucb18e.xn--eck4c5a"); } +test { try parseIDNAPass("\x723\x5a3\x3002\x30cf\x30a4\x30c4", "xn--ucb18e.xn--eck4c5a"); } +test { try parseIDNAPass("xn--ucb18e.xn--eck4c5a", "xn--ucb18e.xn--eck4c5a"); } +test { try parseIDNAPass("\x723\x5a3.\x30cf\x30a4\x30c4", "xn--ucb18e.xn--eck4c5a"); } +test { try parseIDNAPass("xn--skb", "xn--skb"); } +test { try parseIDNAPass("\x6b9", "xn--skb"); } +test { try parseIDNAPass("\x226f1.\x3002\xdf", "xn--1-ogo..xn--zca"); } +test { try parseIDNAPass(">\x3381.\x3002\xdf", "xn--1-ogo..xn--zca"); } +test { try parseIDNAPass(">\x3381.\x3002SS", "xn--1-ogo..ss"); } +test { try parseIDNAPass("\x226f1.\x3002SS", "xn--1-ogo..ss"); } +test { try parseIDNAPass("\x226f1.\x3002ss", "xn--1-ogo..ss"); } +test { try parseIDNAPass(">\x3381.\x3002ss", "xn--1-ogo..ss"); } +test { try parseIDNAPass(">\x3381.\x3002Ss", "xn--1-ogo..ss"); } +test { try parseIDNAPass("\x226f1.\x3002Ss", "xn--1-ogo..ss"); } +test { try parseIDNAPass("xn--1-ogo..ss", "xn--1-ogo..ss"); } +test { try parseIDNAPass("xn--1-ogo..xn--zca", "xn--1-ogo..xn--zca"); } +test { try parseIDNAPass(".xn--1ch", ".xn--1ch"); } +test { try parseIDNAPass("\xa846\x3002\x2183\xfb5\xb1ae-", "xn--fc9a.xn----qmg097k469k"); } +test { try parseIDNAPass("\xa846\x3002\x2183\xfb5\x1102\x116a\x11c1-", "xn--fc9a.xn----qmg097k469k"); } +test { try parseIDNAPass("\xa846\x3002\x2184\xfb5\x1102\x116a\x11c1-", "xn--fc9a.xn----qmg097k469k"); } +test { try parseIDNAPass("\xa846\x3002\x2184\xfb5\xb1ae-", "xn--fc9a.xn----qmg097k469k"); } +test { try parseIDNAPass("xn--fc9a.xn----qmg097k469k", "xn--fc9a.xn----qmg097k469k"); } +test { try parseIDNAPass("\xdf\x9c1\x1ded\x3002\x6208\x2085", "xn--zca266bwrr.xn--85-psd"); } +test { try parseIDNAPass("\xdf\x9c1\x1ded\x3002\x62085", "xn--zca266bwrr.xn--85-psd"); } +test { try parseIDNAPass("SS\x9c1\x1ded\x3002\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("ss\x9c1\x1ded\x3002\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("Ss\x9c1\x1ded\x3002\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("xn--ss-e2f077r.xn--85-psd", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("ss\x9c1\x1ded.\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("SS\x9c1\x1ded.\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("Ss\x9c1\x1ded.\x62085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("xn--zca266bwrr.xn--85-psd", "xn--zca266bwrr.xn--85-psd"); } +test { try parseIDNAPass("\xdf\x9c1\x1ded.\x62085", "xn--zca266bwrr.xn--85-psd"); } +test { try parseIDNAPass("SS\x9c1\x1ded\x3002\x6208\x2085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("ss\x9c1\x1ded\x3002\x6208\x2085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("Ss\x9c1\x1ded\x3002\x6208\x2085", "xn--ss-e2f077r.xn--85-psd"); } +test { try parseIDNAPass("\xfe0d\xa9b\x3002\x5d68", "xn--6dc.xn--tot"); } +test { try parseIDNAPass("xn--6dc.xn--tot", "xn--6dc.xn--tot"); } +test { try parseIDNAPass("\xa9b.\x5d68", "xn--6dc.xn--tot"); } +test { try parseIDNAPass("\xfe05\x3002\x3002\xd858\xdc3e\x1ce0", "..xn--t6f5138v"); } +test { try parseIDNAPass("..xn--t6f5138v", "..xn--t6f5138v"); } +test { try parseIDNAPass("xn--t6f5138v", "xn--t6f5138v"); } +test { try parseIDNAPass("\xd858\xdc3e\x1ce0", "xn--t6f5138v"); } +test { try parseIDNAPass("xn--p8e.xn--1ch3a7084l", "xn--p8e.xn--1ch3a7084l"); } +test { try parseIDNAPass("\x1859.\x226f\xd800\xdef2\x2260", "xn--p8e.xn--1ch3a7084l"); } +test { try parseIDNAPass("\x1859.>\x338\xd800\xdef2=\x338", "xn--p8e.xn--1ch3a7084l"); } +test { try parseIDNAPass("-3.xn--fbf115j", "-3.xn--fbf115j"); } +test { try parseIDNAPass("xn--u4e969b.xn--1ch", "xn--u4e969b.xn--1ch"); } +test { try parseIDNAPass("\x214e\x17d2.\x2260", "xn--u4e969b.xn--1ch"); } +test { try parseIDNAPass("\x214e\x17d2.=\x338", "xn--u4e969b.xn--1ch"); } +test { try parseIDNAPass("\x2132\x17d2.=\x338", "xn--u4e969b.xn--1ch"); } +test { try parseIDNAPass("\x2132\x17d2.\x2260", "xn--u4e969b.xn--1ch"); } +test { try parseIDNAPass("xn----zmb.1-", "xn----zmb.1-"); } +test { try parseIDNAPass("xn--8,-g9oy26fzu4d.xn--kmb6733w", "xn--8,-g9oy26fzu4d.xn--kmb6733w"); } +test { try parseIDNAPass("xn--9-mfs8024b.", "xn--9-mfs8024b."); } +test { try parseIDNAPass("9\x9681\x2bee.", "xn--9-mfs8024b."); } +test { try parseIDNAPass("xn--2ib43l.xn--te6h", "xn--2ib43l.xn--te6h"); } +test { try parseIDNAPass("\x67d\x943.\xd83a\xdd35", "xn--2ib43l.xn--te6h"); } +test { try parseIDNAPass("\x67d\x943.\xd83a\xdd13", "xn--2ib43l.xn--te6h"); } +test { try parseIDNAPass("\xa9d0\x4c0\x1baa\x8f6\xff0e\xb235", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4c0\x1baa\x8f6\xff0e\x1102\x116f\x11bc", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4c0\x1baa\x8f6.\xb235", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4c0\x1baa\x8f6.\x1102\x116f\x11bc", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4cf\x1baa\x8f6.\x1102\x116f\x11bc", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4cf\x1baa\x8f6.\xb235", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("xn--s5a04sn4u297k.xn--2e1b", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4cf\x1baa\x8f6\xff0e\x1102\x116f\x11bc", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("\xa9d0\x4cf\x1baa\x8f6\xff0e\xb235", "xn--s5a04sn4u297k.xn--2e1b"); } +test { try parseIDNAPass("xn--9hb7344k.", "xn--9hb7344k."); } +test { try parseIDNAPass("\xd802\xdec7\x661.", "xn--9hb7344k."); } +test { try parseIDNAPass("\x184c.\x3002\x1891", "xn--c8e..xn--bbf"); } +test { try parseIDNAPass("xn--c8e..xn--bbf", "xn--c8e..xn--bbf"); } +test { try parseIDNAPass("\x3002\x3002\x10a3\x226f", "..xn--hdh782b"); } +test { try parseIDNAPass("\x3002\x3002\x10a3>\x338", "..xn--hdh782b"); } +test { try parseIDNAPass("\x3002\x3002\x2d03>\x338", "..xn--hdh782b"); } +test { try parseIDNAPass("\x3002\x3002\x2d03\x226f", "..xn--hdh782b"); } +test { try parseIDNAPass("..xn--hdh782b", "..xn--hdh782b"); } +test { try parseIDNAPass("\x7e5.\x6b5", "xn--dtb.xn--okb"); } +test { try parseIDNAPass("xn--dtb.xn--okb", "xn--dtb.xn--okb"); } +test { try parseIDNAPass(".xn--3e6h", ".xn--3e6h"); } +test { try parseIDNAPass("xn--3e6h", "xn--3e6h"); } +test { try parseIDNAPass("\xd83a\xdd3f", "xn--3e6h"); } +test { try parseIDNAPass("\xd83a\xdd1d", "xn--3e6h"); } +test { try parseIDNAPass("\x6b9\xff0e\x1873\x115f", "xn--skb.xn--g9e"); } +test { try parseIDNAPass("\x6b9.\x1873\x115f", "xn--skb.xn--g9e"); } +test { try parseIDNAPass("xn--skb.xn--g9e", "xn--skb.xn--g9e"); } +test { try parseIDNAPass("\x6b9.\x1873", "xn--skb.xn--g9e"); } +test { try parseIDNAPass("\x3a1b\xd823\xdc4e.\x30027\xd01", "xn--mbm8237g..xn--7-7hf"); } +test { try parseIDNAPass("xn--mbm8237g..xn--7-7hf", "xn--mbm8237g..xn--7-7hf"); } +test { try parseIDNAPass("xn--ss-4epx629f.xn--ifh802b6a", "xn--ss-4epx629f.xn--ifh802b6a"); } +test { try parseIDNAPass("ss\xaaf6\x18a5.\x22b6\x2d21\x2d16", "xn--ss-4epx629f.xn--ifh802b6a"); } +test { try parseIDNAPass("SS\xaaf6\x18a5.\x22b6\x10c1\x10b6", "xn--ss-4epx629f.xn--ifh802b6a"); } +test { try parseIDNAPass("Ss\xaaf6\x18a5.\x22b6\x10c1\x2d16", "xn--ss-4epx629f.xn--ifh802b6a"); } +test { try parseIDNAPass("-.", "-."); } +test { try parseIDNAPass("xn----zmb.xn--rlj2573p", "xn----zmb.xn--rlj2573p"); } +test { try parseIDNAPass("\x2260\x3002\xd83d\xdfb3\xd835\xdff2", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("=\x338\x3002\xd83d\xdfb3\xd835\xdff2", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("\x2260\x3002\xd83d\xdfb36", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("=\x338\x3002\xd83d\xdfb36", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("xn--1ch.xn--6-dl4s", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("\x2260.\xd83d\xdfb36", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass("=\x338.\xd83d\xdfb36", "xn--1ch.xn--6-dl4s"); } +test { try parseIDNAPass(".j", ".j"); } +test { try parseIDNAPass("j", "j"); } +test { try parseIDNAPass("xn--rt6a.", "xn--rt6a."); } +test { try parseIDNAPass("\x9c4a.", "xn--rt6a."); } +test { try parseIDNAPass("xn--4-0bd15808a.", "xn--4-0bd15808a."); } +test { try parseIDNAPass("\xd83a\xdd3a\x7cc4.", "xn--4-0bd15808a."); } +test { try parseIDNAPass("\xd83a\xdd18\x7cc4.", "xn--4-0bd15808a."); } +test { try parseIDNAPass("-\xff61\x43db", "-.xn--xco"); } +test { try parseIDNAPass("-\x3002\x43db", "-.xn--xco"); } +test { try parseIDNAPass("-.xn--xco", "-.xn--xco"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15\x226f\xdf", "xn--tc1a.xn--5-qfa988w745i"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15>\x338\xdf", "xn--tc1a.xn--5-qfa988w745i"); } +test { try parseIDNAPass("\x820c.\xa8485\x226f\xdf", "xn--tc1a.xn--5-qfa988w745i"); } +test { try parseIDNAPass("\x820c.\xa8485>\x338\xdf", "xn--tc1a.xn--5-qfa988w745i"); } +test { try parseIDNAPass("\x820c.\xa8485>\x338SS", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x820c.\xa8485\x226fSS", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x820c.\xa8485\x226fss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x820c.\xa8485>\x338ss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x820c.\xa8485>\x338Ss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x820c.\xa8485\x226fSs", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("xn--tc1a.xn--5ss-3m2a5009e", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("xn--tc1a.xn--5-qfa988w745i", "xn--tc1a.xn--5-qfa988w745i"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15>\x338SS", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15\x226fSS", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15\x226fss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15>\x338ss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15>\x338Ss", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\x2f86\xff0e\xa848\xff15\x226fSs", "xn--tc1a.xn--5ss-3m2a5009e"); } +test { try parseIDNAPass("\xd83a\xdd2a.\x3c2", "xn--ie6h.xn--3xa"); } +test { try parseIDNAPass("\xd83a\xdd08.\x3a3", "xn--ie6h.xn--4xa"); } +test { try parseIDNAPass("\xd83a\xdd2a.\x3c3", "xn--ie6h.xn--4xa"); } +test { try parseIDNAPass("\xd83a\xdd08.\x3c3", "xn--ie6h.xn--4xa"); } +test { try parseIDNAPass("xn--ie6h.xn--4xa", "xn--ie6h.xn--4xa"); } +test { try parseIDNAPass("\xd83a\xdd08.\x3c2", "xn--ie6h.xn--3xa"); } +test { try parseIDNAPass("xn--ie6h.xn--3xa", "xn--ie6h.xn--3xa"); } +test { try parseIDNAPass("\xd83a\xdd2a.\x3a3", "xn--ie6h.xn--4xa"); } +test { try parseIDNAPass("xn--ilj.xn--4xa", "xn--ilj.xn--4xa"); } +test { try parseIDNAPass("\x2d1a.\x3c3", "xn--ilj.xn--4xa"); } +test { try parseIDNAPass("\x10ba.\x3a3", "xn--ilj.xn--4xa"); } +test { try parseIDNAPass("\x2d1a.\x3c2", "xn--ilj.xn--3xa"); } +test { try parseIDNAPass("\x10ba.\x3c2", "xn--ilj.xn--3xa"); } +test { try parseIDNAPass("xn--ilj.xn--3xa", "xn--ilj.xn--3xa"); } +test { try parseIDNAPass("\x10ba.\x3c3", "xn--ilj.xn--4xa"); } +test { try parseIDNAPass("\x6dfd\x3002\x183e", "xn--34w.xn--x7e"); } +test { try parseIDNAPass("xn--34w.xn--x7e", "xn--34w.xn--x7e"); } +test { try parseIDNAPass("\x6dfd.\x183e", "xn--34w.xn--x7e"); } +test { try parseIDNAPass("..", ".."); } +test { try parseIDNAPass("xn---3-p9o.ss--", "xn---3-p9o.ss--"); } +test { try parseIDNAPass("51..xn--8-ogo", "51..xn--8-ogo"); } +test { try parseIDNAPass("\xa860\xff0e\x6f2", "xn--5c9a.xn--fmb"); } +test { try parseIDNAPass("\xa860.\x6f2", "xn--5c9a.xn--fmb"); } +test { try parseIDNAPass("xn--5c9a.xn--fmb", "xn--5c9a.xn--fmb"); } +test { try parseIDNAPass("1.2h", "1.2h"); } +test { try parseIDNAPass("xn--skjy82u.xn--gdh", "xn--skjy82u.xn--gdh"); } +test { try parseIDNAPass("\x2d01\x755d.\x226e", "xn--skjy82u.xn--gdh"); } +test { try parseIDNAPass("\x2d01\x755d.<\x338", "xn--skjy82u.xn--gdh"); } +test { try parseIDNAPass("\x10a1\x755d.<\x338", "xn--skjy82u.xn--gdh"); } +test { try parseIDNAPass("\x10a1\x755d.\x226e", "xn--skjy82u.xn--gdh"); } +test { try parseIDNAPass("\xd83d\xdd7c\xff0e\xffa0", "xn--my8h."); } +test { try parseIDNAPass("\xd83d\xdd7c.\x1160", "xn--my8h."); } +test { try parseIDNAPass("xn--my8h.", "xn--my8h."); } +test { try parseIDNAPass("\xd83d\xdd7c.", "xn--my8h."); } +test { try parseIDNAPass("\x3c2\x10c5\x3002\x75a", "xn--3xa403s.xn--epb"); } +test { try parseIDNAPass("\x3c2\x2d25\x3002\x75a", "xn--3xa403s.xn--epb"); } +test { try parseIDNAPass("\x3a3\x10c5\x3002\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("\x3c3\x2d25\x3002\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("\x3a3\x2d25\x3002\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("xn--4xa203s.xn--epb", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("\x3c3\x2d25.\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("\x3a3\x10c5.\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("\x3a3\x2d25.\x75a", "xn--4xa203s.xn--epb"); } +test { try parseIDNAPass("xn--3xa403s.xn--epb", "xn--3xa403s.xn--epb"); } +test { try parseIDNAPass("\x3c2\x2d25.\x75a", "xn--3xa403s.xn--epb"); } +test { try parseIDNAPass("xn--vkb.xn--08e172a", "xn--vkb.xn--08e172a"); } +test { try parseIDNAPass("\x6bc.\x1e8f\x1864", "xn--vkb.xn--08e172a"); } +test { try parseIDNAPass("\x6bc.y\x307\x1864", "xn--vkb.xn--08e172a"); } +test { try parseIDNAPass("\x6bc.Y\x307\x1864", "xn--vkb.xn--08e172a"); } +test { try parseIDNAPass("\x6bc.\x1e8e\x1864", "xn--vkb.xn--08e172a"); } +test { try parseIDNAPass("xn--pt9c.xn--0kjya", "xn--pt9c.xn--0kjya"); } +test { try parseIDNAPass("\xd802\xde57.\x2d09\x2d15", "xn--pt9c.xn--0kjya"); } +test { try parseIDNAPass("\xd802\xde57.\x10a9\x10b5", "xn--pt9c.xn--0kjya"); } +test { try parseIDNAPass("\xd802\xde57.\x10a9\x2d15", "xn--pt9c.xn--0kjya"); } +test { try parseIDNAPass("\xd88a\xdd3120.\x97f3.\xa8661.", "xn--20-9802c.xn--0w5a.xn--1-eg4e."); } +test { try parseIDNAPass("xn--20-9802c.xn--0w5a.xn--1-eg4e.", "xn--20-9802c.xn--0w5a.xn--1-eg4e."); } +test { try parseIDNAPass("\x10b5\x3002\x6f0\x226e\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x10b5\x3002\x6f0<\x338\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x2d15\x3002\x6f0<\x338\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x2d15\x3002\x6f0\x226e\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x10b5\x3002\x6f0\x226eSS\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5\x3002\x6f0<\x338SS\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x2d15\x3002\x6f0<\x338ss\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x2d15\x3002\x6f0\x226ess\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5\x3002\x6f0\x226eSs\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5\x3002\x6f0<\x338Ss\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("xn--dlj.xn--ss-jbe65aw27i", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x2d15.\x6f0\x226ess\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x2d15.\x6f0<\x338ss\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5.\x6f0<\x338SS\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5.\x6f0\x226eSS\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5.\x6f0\x226eSs\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("\x10b5.\x6f0<\x338Ss\x745", "xn--dlj.xn--ss-jbe65aw27i"); } +test { try parseIDNAPass("xn--dlj.xn--zca912alh227g", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x2d15.\x6f0\x226e\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("\x2d15.\x6f0<\x338\xdf\x745", "xn--dlj.xn--zca912alh227g"); } +test { try parseIDNAPass("xn--ge6h.xn--oc9a", "xn--ge6h.xn--oc9a"); } +test { try parseIDNAPass("\xd83a\xdd28.\xa84f", "xn--ge6h.xn--oc9a"); } +test { try parseIDNAPass("\xd83a\xdd06.\xa84f", "xn--ge6h.xn--oc9a"); } +test { try parseIDNAPass(".xn--ss--bi1b", ".xn--ss--bi1b"); } +test { try parseIDNAPass("\x9f59--\xd835\xdff0.\xdf", "xn----4-p16k.xn--zca"); } +test { try parseIDNAPass("\x9f59--4.\xdf", "xn----4-p16k.xn--zca"); } +test { try parseIDNAPass("\x9f59--4.SS", "xn----4-p16k.ss"); } +test { try parseIDNAPass("\x9f59--4.ss", "xn----4-p16k.ss"); } +test { try parseIDNAPass("\x9f59--4.Ss", "xn----4-p16k.ss"); } +test { try parseIDNAPass("xn----4-p16k.ss", "xn----4-p16k.ss"); } +test { try parseIDNAPass("xn----4-p16k.xn--zca", "xn----4-p16k.xn--zca"); } +test { try parseIDNAPass("\x9f59--\xd835\xdff0.SS", "xn----4-p16k.ss"); } +test { try parseIDNAPass("\x9f59--\xd835\xdff0.ss", "xn----4-p16k.ss"); } +test { try parseIDNAPass("\x9f59--\xd835\xdff0.Ss", "xn----4-p16k.ss"); } +test { try parseIDNAPass("xn--9-i0j5967eg3qz.ss", "xn--9-i0j5967eg3qz.ss"); } +test { try parseIDNAPass("\xd88a\xdf9a9\xa369\x17d3.ss", "xn--9-i0j5967eg3qz.ss"); } +test { try parseIDNAPass("\xd88a\xdf9a9\xa369\x17d3.SS", "xn--9-i0j5967eg3qz.ss"); } +test { try parseIDNAPass("\xa5f7\xd804\xdd80.\x75d\xd802\xde52", "xn--ju8a625r.xn--hpb0073k"); } +test { try parseIDNAPass("xn--ju8a625r.xn--hpb0073k", "xn--ju8a625r.xn--hpb0073k"); } +test { try parseIDNAPass("xn----3vs.xn--0kj", "xn----3vs.xn--0kj"); } +test { try parseIDNAPass("\x3c2.\x641\x645\x64a\xd83d\xdf9b1.", "xn--3xa.xn--1-gocmu97674d."); } +test { try parseIDNAPass("\x3a3.\x641\x645\x64a\xd83d\xdf9b1.", "xn--4xa.xn--1-gocmu97674d."); } +test { try parseIDNAPass("\x3c3.\x641\x645\x64a\xd83d\xdf9b1.", "xn--4xa.xn--1-gocmu97674d."); } +test { try parseIDNAPass("xn--4xa.xn--1-gocmu97674d.", "xn--4xa.xn--1-gocmu97674d."); } +test { try parseIDNAPass("xn--3xa.xn--1-gocmu97674d.", "xn--3xa.xn--1-gocmu97674d."); } +test { try parseIDNAPass(".xn--hva754s.", ".xn--hva754s."); } +test { try parseIDNAPass("xn--hva754s.", "xn--hva754s."); } +test { try parseIDNAPass("\x2d16\x366.", "xn--hva754s."); } +test { try parseIDNAPass("\x10b6\x366.", "xn--hva754s."); } +test { try parseIDNAPass("xn--hzb.xn--ukj4430l", "xn--hzb.xn--ukj4430l"); } +test { try parseIDNAPass("\x8bb.\x2d03\xd838\xdc12", "xn--hzb.xn--ukj4430l"); } +test { try parseIDNAPass("\x8bb.\x10a3\xd838\xdc12", "xn--hzb.xn--ukj4430l"); } +test { try parseIDNAPass("\xdb40\xdd93\x26cf-\x3002\xa852", "xn----o9p.xn--rc9a"); } +test { try parseIDNAPass("xn----o9p.xn--rc9a", "xn----o9p.xn--rc9a"); } +test { try parseIDNAPass("xn--p9ut19m.xn----mck373i", "xn--p9ut19m.xn----mck373i"); } +test { try parseIDNAPass("\x650c\xabed.\x1896-\x2d18", "xn--p9ut19m.xn----mck373i"); } +test { try parseIDNAPass("\x650c\xabed.\x1896-\x10b8", "xn--p9ut19m.xn----mck373i"); } +test { try parseIDNAPass("xn--9r8a.16.xn--3-nyc0117m", "xn--9r8a.16.xn--3-nyc0117m"); } +test { try parseIDNAPass("\xa5a8.16.3\xd212\x6f3", "xn--9r8a.16.xn--3-nyc0117m"); } +test { try parseIDNAPass("\xa5a8.16.3\x1110\x116d\x11a9\x6f3", "xn--9r8a.16.xn--3-nyc0117m"); } +test { try parseIDNAPass("xn--1-5bt6845n.", "xn--1-5bt6845n."); } +test { try parseIDNAPass("1\xd836\xde19\x2e16.", "xn--1-5bt6845n."); } +test { try parseIDNAPass(".1.xn--9-ogo", ".1.xn--9-ogo"); } +test { try parseIDNAPass("xn--ss-f4j.b.", "xn--ss-f4j.b."); } +test { try parseIDNAPass("ss\x103a.b.", "xn--ss-f4j.b."); } +test { try parseIDNAPass("SS\x103a.B.", "xn--ss-f4j.b."); } +test { try parseIDNAPass("Ss\x103a.b.", "xn--ss-f4j.b."); } +test { try parseIDNAPass("SS\x103a.b.", "xn--ss-f4j.b."); } +test { try parseIDNAPass("\x6cc\xd802\xde3f\xff0e\xdf\xf84\xd804\xdf6c", "xn--clb2593k.xn--zca216edt0r"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f.\xdf\xf84\xd804\xdf6c", "xn--clb2593k.xn--zca216edt0r"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f.SS\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f.ss\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("xn--clb2593k.xn--ss-toj6092t", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("xn--clb2593k.xn--zca216edt0r", "xn--clb2593k.xn--zca216edt0r"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f\xff0eSS\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f\xff0ess\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f.Ss\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("\x6cc\xd802\xde3f\xff0eSs\xf84\xd804\xdf6c", "xn--clb2593k.xn--ss-toj6092t"); } +test { try parseIDNAPass("xn--8-ngo.", "xn--8-ngo."); } +test { try parseIDNAPass("8\x226e.", "xn--8-ngo."); } +test { try parseIDNAPass("8<\x338.", "xn--8-ngo."); } +test { try parseIDNAPass("\x7f9a\xff61\x226f", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("\x7f9a\xff61>\x338", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("\x7f9a\x3002\x226f", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("\x7f9a\x3002>\x338", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("xn--xt0a.xn--hdh", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("\x7f9a.\x226f", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass("\x7f9a.>\x338", "xn--xt0a.xn--hdh"); } +test { try parseIDNAPass(".xn--ye6h", ".xn--ye6h"); } +test { try parseIDNAPass("xn--ye6h", "xn--ye6h"); } +test { try parseIDNAPass("\xd83a\xdd3a", "xn--ye6h"); } +test { try parseIDNAPass("\xd83a\xdd18", "xn--ye6h"); } +test { try parseIDNAPass("\xd835\xdfdb\xff0e\xf9f8", "3.xn--6vz"); } +test { try parseIDNAPass("\xd835\xdfdb\xff0e\x7b20", "3.xn--6vz"); } +test { try parseIDNAPass("3.\x7b20", "3.xn--6vz"); } +test { try parseIDNAPass("3.xn--6vz", "3.xn--6vz"); } +test { try parseIDNAPass("-.xn--mlj8559d", "-.xn--mlj8559d"); } +test { try parseIDNAPass("xn--1ch.", "xn--1ch."); } +test { try parseIDNAPass("\x2260.", "xn--1ch."); } +test { try parseIDNAPass("=\x338.", "xn--1ch."); } +test { try parseIDNAPass("-\x3002\x3002", "-.."); } +test { try parseIDNAPass("-..", "-.."); } +test { try parseIDNAPass(".f", ".f"); } +test { try parseIDNAPass("f", "f"); } +test { try parseIDNAPass("xn--9bm.ss", "xn--9bm.ss"); } +test { try parseIDNAPass("\x3a32.ss", "xn--9bm.ss"); } +test { try parseIDNAPass("\x3a32.SS", "xn--9bm.ss"); } +test { try parseIDNAPass("\x3a32.Ss", "xn--9bm.ss"); } +test { try parseIDNAPass("\xd835\xdfce\x3002\x752f", "0.xn--qny"); } +test { try parseIDNAPass("0\x3002\x752f", "0.xn--qny"); } +test { try parseIDNAPass("0.xn--qny", "0.xn--qny"); } +test { try parseIDNAPass("0.\x752f", "0.xn--qny"); } +test { try parseIDNAPass("-\xff61\x1898", "-.xn--ibf"); } +test { try parseIDNAPass("-\x3002\x1898", "-.xn--ibf"); } +test { try parseIDNAPass("-.xn--ibf", "-.xn--ibf"); } +test { try parseIDNAPass("\xd83c\xdcb4\x10ab.\x226e", "xn--2kj7565l.xn--gdh"); } +test { try parseIDNAPass("\xd83c\xdcb4\x10ab.<\x338", "xn--2kj7565l.xn--gdh"); } +test { try parseIDNAPass("\xd83c\xdcb4\x2d0b.<\x338", "xn--2kj7565l.xn--gdh"); } +test { try parseIDNAPass("\xd83c\xdcb4\x2d0b.\x226e", "xn--2kj7565l.xn--gdh"); } +test { try parseIDNAPass("xn--2kj7565l.xn--gdh", "xn--2kj7565l.xn--gdh"); } +test { try parseIDNAPass("xn--gky8837e.", "xn--gky8837e."); } +test { try parseIDNAPass("\x74bc\xd836\xde2d.", "xn--gky8837e."); } +test { try parseIDNAPass("xn--157b.xn--gnb", "xn--157b.xn--gnb"); } +test { try parseIDNAPass("\xd29b.\x716", "xn--157b.xn--gnb"); } +test { try parseIDNAPass("\x1110\x1171\x11c2.\x716", "xn--157b.xn--gnb"); } +test { try parseIDNAPass("xn--84-s850a.xn--59h6326e", "xn--84-s850a.xn--59h6326e"); } +test { try parseIDNAPass("84\xd834\xde3b.\xd800\xdef5\x26e7", "xn--84-s850a.xn--59h6326e"); } +test { try parseIDNAPass("\x226e\xd835\xdfd5\xff0e\x8b16\xdf\x226f", "xn--7-mgo.xn--zca892oly5e"); } +test { try parseIDNAPass("<\x338\xd835\xdfd5\xff0e\x8b16\xdf>\x338", "xn--7-mgo.xn--zca892oly5e"); } +test { try parseIDNAPass("\x226e7.\x8b16\xdf\x226f", "xn--7-mgo.xn--zca892oly5e"); } +test { try parseIDNAPass("<\x3387.\x8b16\xdf>\x338", "xn--7-mgo.xn--zca892oly5e"); } +test { try parseIDNAPass("<\x3387.\x8b16SS>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e7.\x8b16SS\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e7.\x8b16ss\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("<\x3387.\x8b16ss>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("<\x3387.\x8b16Ss>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e7.\x8b16Ss\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("xn--7-mgo.xn--ss-xjvv174c", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("xn--7-mgo.xn--zca892oly5e", "xn--7-mgo.xn--zca892oly5e"); } +test { try parseIDNAPass("<\x338\xd835\xdfd5\xff0e\x8b16SS>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e\xd835\xdfd5\xff0e\x8b16SS\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e\xd835\xdfd5\xff0e\x8b16ss\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("<\x338\xd835\xdfd5\xff0e\x8b16ss>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("<\x338\xd835\xdfd5\xff0e\x8b16Ss>\x338", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass("\x226e\xd835\xdfd5\xff0e\x8b16Ss\x226f", "xn--7-mgo.xn--ss-xjvv174c"); } +test { try parseIDNAPass(".xn--ss-bh7o", ".xn--ss-bh7o"); } +test { try parseIDNAPass("xn--ss-bh7o", "xn--ss-bh7o"); } +test { try parseIDNAPass("ss\xd805\xdcc3", "xn--ss-bh7o"); } +test { try parseIDNAPass("SS\xd805\xdcc3", "xn--ss-bh7o"); } +test { try parseIDNAPass("Ss\xd805\xdcc3", "xn--ss-bh7o"); } +test { try parseIDNAPass(".xn--qekw60d.xn--gd9a", ".xn--qekw60d.xn--gd9a"); } +test { try parseIDNAPass("xn--qekw60d.xn--gd9a", "xn--qekw60d.xn--gd9a"); } +test { try parseIDNAPass("\x30f6\x44a9.\xa86a", "xn--qekw60d.xn--gd9a"); } +test { try parseIDNAPass("\xd834\xdd75\x30029\xd838\xdc08\x4b3a1.", ".xn--91-030c1650n."); } +test { try parseIDNAPass(".xn--91-030c1650n.", ".xn--91-030c1650n."); } +test { try parseIDNAPass("xn--8c1a.xn--2ib8jn539l", "xn--8c1a.xn--2ib8jn539l"); } +test { try parseIDNAPass("\x821b.\x67d\xd83a\xdd34\x6bb", "xn--8c1a.xn--2ib8jn539l"); } +test { try parseIDNAPass("\x821b.\x67d\xd83a\xdd12\x6bb", "xn--8c1a.xn--2ib8jn539l"); } +test { try parseIDNAPass("\x17b4.\xcb87-", ".xn----938f"); } +test { try parseIDNAPass("\x17b4.\x110d\x1170\x11ae-", ".xn----938f"); } +test { try parseIDNAPass(".xn----938f", ".xn----938f"); } +test { try parseIDNAPass(".xn--hcb32bni", ".xn--hcb32bni"); } +test { try parseIDNAPass("xn--hcb32bni", "xn--hcb32bni"); } +test { try parseIDNAPass("\x6bd\x663\x596", "xn--hcb32bni"); } +test { try parseIDNAPass("\x188c\xff0e-\x85a", "xn--59e.xn----5jd"); } +test { try parseIDNAPass("\x188c.-\x85a", "xn--59e.xn----5jd"); } +test { try parseIDNAPass("xn--59e.xn----5jd", "xn--59e.xn----5jd"); } +test { try parseIDNAPass("xn--8gb2338k.xn--lhb0154f", "xn--8gb2338k.xn--lhb0154f"); } +test { try parseIDNAPass("\x63d\xd804\xde3e.\x649\xa92b", "xn--8gb2338k.xn--lhb0154f"); } +test { try parseIDNAPass("\x10c1\x10b16\x318\x3002\xdf\x1b03", "xn--6-8cb7433a2ba.xn--zca894k"); } +test { try parseIDNAPass("\x2d21\x2d116\x318\x3002\xdf\x1b03", "xn--6-8cb7433a2ba.xn--zca894k"); } +test { try parseIDNAPass("\x10c1\x10b16\x318\x3002SS\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("\x2d21\x2d116\x318\x3002ss\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("\x10c1\x2d116\x318\x3002Ss\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("xn--6-8cb7433a2ba.xn--ss-2vq", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("\x2d21\x2d116\x318.ss\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("\x10c1\x10b16\x318.SS\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("\x10c1\x2d116\x318.Ss\x1b03", "xn--6-8cb7433a2ba.xn--ss-2vq"); } +test { try parseIDNAPass("xn--6-8cb7433a2ba.xn--zca894k", "xn--6-8cb7433a2ba.xn--zca894k"); } +test { try parseIDNAPass("\x2d21\x2d116\x318.\xdf\x1b03", "xn--6-8cb7433a2ba.xn--zca894k"); } +test { try parseIDNAPass("xn--7zv.", "xn--7zv."); } +test { try parseIDNAPass("\x6889.", "xn--7zv."); } +test { try parseIDNAPass("xn--iwb.ss", "xn--iwb.ss"); } +test { try parseIDNAPass("\x853.ss", "xn--iwb.ss"); } +test { try parseIDNAPass("\x853.SS", "xn--iwb.ss"); } +test { try parseIDNAPass("-\xff61\x2e90", "-.xn--6vj"); } +test { try parseIDNAPass("-\x3002\x2e90", "-.xn--6vj"); } +test { try parseIDNAPass("-.xn--6vj", "-.xn--6vj"); } +test { try parseIDNAPass("xn--ix9c26l.xn--q0s", "xn--ix9c26l.xn--q0s"); } +test { try parseIDNAPass("\xd802\xdedc\xd804\xdf3c.\x5a40", "xn--ix9c26l.xn--q0s"); } +test { try parseIDNAPass("\xd802\xdec0\xff0e\x689\xd804\xdf00", "xn--pw9c.xn--fjb8658k"); } +test { try parseIDNAPass("\xd802\xdec0.\x689\xd804\xdf00", "xn--pw9c.xn--fjb8658k"); } +test { try parseIDNAPass("xn--pw9c.xn--fjb8658k", "xn--pw9c.xn--fjb8658k"); } +test { try parseIDNAPass("xn--r97c.", "xn--r97c."); } +test { try parseIDNAPass("\xd800\xdef7.", "xn--r97c."); } diff --git a/test.zig b/test.zig new file mode 100644 index 0000000000000000000000000000000000000000..e1ce9ccfae058291a6f29c4ae9a465bd7fb7b6d9 --- /dev/null +++ b/test.zig @@ -0,0 +1,6 @@ +const std = @import("std"); +const url = @import("url"); + +test { + _ = @import("./test.generated.zig"); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..bfa0fead54e8070848b4572df2e14b62a86d570f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} diff --git a/url.zig b/url.zig new file mode 100644 index 0000000000000000000000000000000000000000..defe664ee721d76e3b51c968096be06ef0f245e8 --- /dev/null +++ b/url.zig @@ -0,0 +1,25 @@ +const std = @import("std"); + +pub const URL = struct { + href: []const u8, + origin: []const u8, + protocol: []const u8, + username: []const u8, + password: []const u8, + host: []const u8, + hostname: []const u8, + port: []const u8, + pathname: []const u8, + search: []const u8, + hash: []const u8, + + /// Caller owns memory and is responsible for freeing `url.href`. + pub fn parse(alloc: std.mem.Allocator, input: []const u8, base: ?[]const u8) !URL { + var u: URL = .{ .href = "", .origin = "", .protocol = "", .username = "", .password = "", .host = "", .hostname = "", .port = "", .pathname = "", .search = "", .hash = "" }; + _ = &u; + _ = alloc; + _ = input; + _ = base; + return error.SkipZigTest; + } +}; diff --git a/urltestdata.json b/urltestdata.json new file mode 100644 index 0000000000000000000000000000000000000000..d1a06f6319d1bca3275d75d5433de3dc846d3322 --- /dev/null +++ b/urltestdata.json @@ -0,0 +1,10242 @@ +[ + "See ../README.md for a description of the format.", + { + "input": "http://example\t.\norg", + "base": "http://example.org/foo/bar", + "href": "http://example.org/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://user:pass@foo:21/bar;par?b#c", + "base": "http://example.org/foo/bar", + "href": "http://user:pass@foo:21/bar;par?b#c", + "origin": "http://foo:21", + "protocol": "http:", + "username": "user", + "password": "pass", + "host": "foo:21", + "hostname": "foo", + "port": "21", + "pathname": "/bar;par", + "search": "?b", + "hash": "#c" + }, + { + "input": "https://test:@test", + "base": null, + "href": "https://test@test/", + "origin": "https://test", + "protocol": "https:", + "username": "test", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https://:@test", + "base": null, + "href": "https://test/", + "origin": "https://test", + "protocol": "https:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special://test:@test/x", + "base": null, + "href": "non-special://test@test/x", + "origin": "null", + "protocol": "non-special:", + "username": "test", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/x", + "search": "", + "hash": "" + }, + { + "input": "non-special://:@test/x", + "base": null, + "href": "non-special://test/x", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/x", + "search": "", + "hash": "" + }, + { + "input": "http:foo.com", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/foo.com", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/foo.com", + "search": "", + "hash": "" + }, + { + "input": "\t :foo.com \n", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:foo.com", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:foo.com", + "search": "", + "hash": "" + }, + { + "input": " foo.com ", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/foo.com", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/foo.com", + "search": "", + "hash": "" + }, + { + "input": "a:\t foo.com", + "base": "http://example.org/foo/bar", + "href": "a: foo.com", + "origin": "null", + "protocol": "a:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": " foo.com", + "search": "", + "hash": "" + }, + { + "input": "http://f:21/ b ? d # e ", + "base": "http://example.org/foo/bar", + "href": "http://f:21/%20b%20?%20d%20#%20e", + "origin": "http://f:21", + "protocol": "http:", + "username": "", + "password": "", + "host": "f:21", + "hostname": "f", + "port": "21", + "pathname": "/%20b%20", + "search": "?%20d%20", + "hash": "#%20e" + }, + { + "input": "lolscheme:x x#x x", + "base": null, + "href": "lolscheme:x x#x%20x", + "protocol": "lolscheme:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "x x", + "search": "", + "hash": "#x%20x" + }, + { + "input": "http://f:/c", + "base": "http://example.org/foo/bar", + "href": "http://f/c", + "origin": "http://f", + "protocol": "http:", + "username": "", + "password": "", + "host": "f", + "hostname": "f", + "port": "", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "http://f:0/c", + "base": "http://example.org/foo/bar", + "href": "http://f:0/c", + "origin": "http://f:0", + "protocol": "http:", + "username": "", + "password": "", + "host": "f:0", + "hostname": "f", + "port": "0", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "http://f:00000000000000/c", + "base": "http://example.org/foo/bar", + "href": "http://f:0/c", + "origin": "http://f:0", + "protocol": "http:", + "username": "", + "password": "", + "host": "f:0", + "hostname": "f", + "port": "0", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "http://f:00000000000000000000080/c", + "base": "http://example.org/foo/bar", + "href": "http://f/c", + "origin": "http://f", + "protocol": "http:", + "username": "", + "password": "", + "host": "f", + "hostname": "f", + "port": "", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "http://f:b/c", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://f: /c", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://f:\n/c", + "base": "http://example.org/foo/bar", + "href": "http://f/c", + "origin": "http://f", + "protocol": "http:", + "username": "", + "password": "", + "host": "f", + "hostname": "f", + "port": "", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "http://f:fifty-two/c", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://f:999999/c", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "non-special://f:999999/c", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://f: 21 / b ? d # e ", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "" + }, + { + "input": " \t", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "" + }, + { + "input": ":foo.com/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:foo.com/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:foo.com/", + "search": "", + "hash": "" + }, + { + "input": ":foo.com\\", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:foo.com/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:foo.com/", + "search": "", + "hash": "" + }, + { + "input": ":", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:", + "search": "", + "hash": "" + }, + { + "input": ":a", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:a", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:a", + "search": "", + "hash": "" + }, + { + "input": ":/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:/", + "search": "", + "hash": "" + }, + { + "input": ":\\", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:/", + "search": "", + "hash": "" + }, + { + "input": ":#", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:#", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:", + "search": "", + "hash": "" + }, + { + "input": "#", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar#", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "#/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar#/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "#/" + }, + { + "input": "#\\", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar#\\", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "#\\" + }, + { + "input": "#;?", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar#;?", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "#;?" + }, + { + "input": "?", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar?", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": ":23", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:23", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:23", + "search": "", + "hash": "" + }, + { + "input": "/:23", + "base": "http://example.org/foo/bar", + "href": "http://example.org/:23", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/:23", + "search": "", + "hash": "" + }, + { + "input": "\\x", + "base": "http://example.org/foo/bar", + "href": "http://example.org/x", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/x", + "search": "", + "hash": "" + }, + { + "input": "\\\\x\\hello", + "base": "http://example.org/foo/bar", + "href": "http://x/hello", + "origin": "http://x", + "protocol": "http:", + "username": "", + "password": "", + "host": "x", + "hostname": "x", + "port": "", + "pathname": "/hello", + "search": "", + "hash": "" + }, + { + "input": "::", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/::", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/::", + "search": "", + "hash": "" + }, + { + "input": "::23", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/::23", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/::23", + "search": "", + "hash": "" + }, + { + "input": "foo://", + "base": "http://example.org/foo/bar", + "href": "foo://", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "http://a:b@c:29/d", + "base": "http://example.org/foo/bar", + "href": "http://a:b@c:29/d", + "origin": "http://c:29", + "protocol": "http:", + "username": "a", + "password": "b", + "host": "c:29", + "hostname": "c", + "port": "29", + "pathname": "/d", + "search": "", + "hash": "" + }, + { + "input": "http::@c:29", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/:@c:29", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/:@c:29", + "search": "", + "hash": "" + }, + { + "input": "http://&a:foo(b]c@d:2/", + "base": "http://example.org/foo/bar", + "href": "http://&a:foo(b%5Dc@d:2/", + "origin": "http://d:2", + "protocol": "http:", + "username": "&a", + "password": "foo(b%5Dc", + "host": "d:2", + "hostname": "d", + "port": "2", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://::@c@d:2", + "base": "http://example.org/foo/bar", + "href": "http://:%3A%40c@d:2/", + "origin": "http://d:2", + "protocol": "http:", + "username": "", + "password": "%3A%40c", + "host": "d:2", + "hostname": "d", + "port": "2", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://foo.com:b@d/", + "base": "http://example.org/foo/bar", + "href": "http://foo.com:b@d/", + "origin": "http://d", + "protocol": "http:", + "username": "foo.com", + "password": "b", + "host": "d", + "hostname": "d", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://foo.com/\\@", + "base": "http://example.org/foo/bar", + "href": "http://foo.com//@", + "origin": "http://foo.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.com", + "hostname": "foo.com", + "port": "", + "pathname": "//@", + "search": "", + "hash": "" + }, + { + "input": "http:\\\\foo.com\\", + "base": "http://example.org/foo/bar", + "href": "http://foo.com/", + "origin": "http://foo.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.com", + "hostname": "foo.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:\\\\a\\b:c\\d@foo.com\\", + "base": "http://example.org/foo/bar", + "href": "http://a/b:c/d@foo.com/", + "origin": "http://a", + "protocol": "http:", + "username": "", + "password": "", + "host": "a", + "hostname": "a", + "port": "", + "pathname": "/b:c/d@foo.com/", + "search": "", + "hash": "" + }, + { + "input": "http://a:b@c\\", + "base": null, + "href": "http://a:b@c/", + "origin": "http://c", + "protocol": "http:", + "username": "a", + "password": "b", + "host": "c", + "hostname": "c", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ws://a@b\\c", + "base": null, + "href": "ws://a@b/c", + "origin": "ws://b", + "protocol": "ws:", + "username": "a", + "password": "", + "host": "b", + "hostname": "b", + "port": "", + "pathname": "/c", + "search": "", + "hash": "" + }, + { + "input": "foo:/", + "base": "http://example.org/foo/bar", + "href": "foo:/", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "foo:/bar.com/", + "base": "http://example.org/foo/bar", + "href": "foo:/bar.com/", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/bar.com/", + "search": "", + "hash": "" + }, + { + "input": "foo://///////", + "base": "http://example.org/foo/bar", + "href": "foo://///////", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "///////", + "search": "", + "hash": "" + }, + { + "input": "foo://///////bar.com/", + "base": "http://example.org/foo/bar", + "href": "foo://///////bar.com/", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "///////bar.com/", + "search": "", + "hash": "" + }, + { + "input": "foo:////://///", + "base": "http://example.org/foo/bar", + "href": "foo:////://///", + "origin": "null", + "protocol": "foo:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//://///", + "search": "", + "hash": "" + }, + { + "input": "c:/foo", + "base": "http://example.org/foo/bar", + "href": "c:/foo", + "origin": "null", + "protocol": "c:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/foo", + "search": "", + "hash": "" + }, + { + "input": "//foo/bar", + "base": "http://example.org/foo/bar", + "href": "http://foo/bar", + "origin": "http://foo", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/bar", + "search": "", + "hash": "" + }, + { + "input": "http://foo/path;a??e#f#g", + "base": "http://example.org/foo/bar", + "href": "http://foo/path;a??e#f#g", + "origin": "http://foo", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/path;a", + "search": "??e", + "hash": "#f#g" + }, + { + "input": "http://foo/abcd?efgh?ijkl", + "base": "http://example.org/foo/bar", + "href": "http://foo/abcd?efgh?ijkl", + "origin": "http://foo", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/abcd", + "search": "?efgh?ijkl", + "hash": "" + }, + { + "input": "http://foo/abcd#foo?bar", + "base": "http://example.org/foo/bar", + "href": "http://foo/abcd#foo?bar", + "origin": "http://foo", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/abcd", + "search": "", + "hash": "#foo?bar" + }, + { + "input": "[61:24:74]:98", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/[61:24:74]:98", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/[61:24:74]:98", + "search": "", + "hash": "" + }, + { + "input": "http:[61:27]/:foo", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/[61:27]/:foo", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/[61:27]/:foo", + "search": "", + "hash": "" + }, + { + "input": "http://[1::2]:3:4", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://2001::1", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://2001::1]", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://2001::1]:80", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://[2001::1]", + "base": "http://example.org/foo/bar", + "href": "http://[2001::1]/", + "origin": "http://[2001::1]", + "protocol": "http:", + "username": "", + "password": "", + "host": "[2001::1]", + "hostname": "[2001::1]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[::127.0.0.1]", + "base": "http://example.org/foo/bar", + "href": "http://[::7f00:1]/", + "origin": "http://[::7f00:1]", + "protocol": "http:", + "username": "", + "password": "", + "host": "[::7f00:1]", + "hostname": "[::7f00:1]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[::127.0.0.1.]", + "base": "http://example.org/foo/bar", + "failure": true + }, + { + "input": "http://[0:0:0:0:0:0:13.1.68.3]", + "base": "http://example.org/foo/bar", + "href": "http://[::d01:4403]/", + "origin": "http://[::d01:4403]", + "protocol": "http:", + "username": "", + "password": "", + "host": "[::d01:4403]", + "hostname": "[::d01:4403]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[2001::1]:80", + "base": "http://example.org/foo/bar", + "href": "http://[2001::1]/", + "origin": "http://[2001::1]", + "protocol": "http:", + "username": "", + "password": "", + "host": "[2001::1]", + "hostname": "[2001::1]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/example.com/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/example.com/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "ftp:/example.com/", + "base": "http://example.org/foo/bar", + "href": "ftp://example.com/", + "origin": "ftp://example.com", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https:/example.com/", + "base": "http://example.org/foo/bar", + "href": "https://example.com/", + "origin": "https://example.com", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "madeupscheme:/example.com/", + "base": "http://example.org/foo/bar", + "href": "madeupscheme:/example.com/", + "origin": "null", + "protocol": "madeupscheme:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "file:/example.com/", + "base": "http://example.org/foo/bar", + "href": "file:///example.com/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "file://example:1/", + "base": null, + "failure": true + }, + { + "input": "file://example:test/", + "base": null, + "failure": true + }, + { + "input": "file://example%/", + "base": null, + "failure": true + }, + { + "input": "file://[example]/", + "base": null, + "failure": true + }, + { + "input": "ftps:/example.com/", + "base": "http://example.org/foo/bar", + "href": "ftps:/example.com/", + "origin": "null", + "protocol": "ftps:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "gopher:/example.com/", + "base": "http://example.org/foo/bar", + "href": "gopher:/example.com/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "ws:/example.com/", + "base": "http://example.org/foo/bar", + "href": "ws://example.com/", + "origin": "ws://example.com", + "protocol": "ws:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss:/example.com/", + "base": "http://example.org/foo/bar", + "href": "wss://example.com/", + "origin": "wss://example.com", + "protocol": "wss:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "data:/example.com/", + "base": "http://example.org/foo/bar", + "href": "data:/example.com/", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "javascript:/example.com/", + "base": "http://example.org/foo/bar", + "href": "javascript:/example.com/", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "mailto:/example.com/", + "base": "http://example.org/foo/bar", + "href": "mailto:/example.com/", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "http:example.com/", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/example.com/", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/example.com/", + "search": "", + "hash": "" + }, + { + "input": "ftp:example.com/", + "base": "http://example.org/foo/bar", + "href": "ftp://example.com/", + "origin": "ftp://example.com", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https:example.com/", + "base": "http://example.org/foo/bar", + "href": "https://example.com/", + "origin": "https://example.com", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "madeupscheme:example.com/", + "base": "http://example.org/foo/bar", + "href": "madeupscheme:example.com/", + "origin": "null", + "protocol": "madeupscheme:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "ftps:example.com/", + "base": "http://example.org/foo/bar", + "href": "ftps:example.com/", + "origin": "null", + "protocol": "ftps:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "gopher:example.com/", + "base": "http://example.org/foo/bar", + "href": "gopher:example.com/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "ws:example.com/", + "base": "http://example.org/foo/bar", + "href": "ws://example.com/", + "origin": "ws://example.com", + "protocol": "ws:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss:example.com/", + "base": "http://example.org/foo/bar", + "href": "wss://example.com/", + "origin": "wss://example.com", + "protocol": "wss:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "data:example.com/", + "base": "http://example.org/foo/bar", + "href": "data:example.com/", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "javascript:example.com/", + "base": "http://example.org/foo/bar", + "href": "javascript:example.com/", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "mailto:example.com/", + "base": "http://example.org/foo/bar", + "href": "mailto:example.com/", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "/a/b/c", + "base": "http://example.org/foo/bar", + "href": "http://example.org/a/b/c", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/a/b/c", + "search": "", + "hash": "" + }, + { + "input": "/a/ /c", + "base": "http://example.org/foo/bar", + "href": "http://example.org/a/%20/c", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/a/%20/c", + "search": "", + "hash": "" + }, + { + "input": "/a%2fc", + "base": "http://example.org/foo/bar", + "href": "http://example.org/a%2fc", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/a%2fc", + "search": "", + "hash": "" + }, + { + "input": "/a/%2f/c", + "base": "http://example.org/foo/bar", + "href": "http://example.org/a/%2f/c", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/a/%2f/c", + "search": "", + "hash": "" + }, + { + "input": "#β", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar#%CE%B2", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "#%CE%B2" + }, + { + "input": "data:text/html,test#test", + "base": "http://example.org/foo/bar", + "href": "data:text/html,test#test", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "text/html,test", + "search": "", + "hash": "#test" + }, + { + "input": "tel:1234567890", + "base": "http://example.org/foo/bar", + "href": "tel:1234567890", + "origin": "null", + "protocol": "tel:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "1234567890", + "search": "", + "hash": "" + }, + "# Based on https://felixfbecker.github.io/whatwg-url-custom-host-repro/", + { + "input": "ssh://example.com/foo/bar.git", + "base": "http://example.org/", + "href": "ssh://example.com/foo/bar.git", + "origin": "null", + "protocol": "ssh:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/bar.git", + "search": "", + "hash": "" + }, + "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html", + { + "input": "file:c:\\foo\\bar.html", + "base": "file:///tmp/mock/path", + "href": "file:///c:/foo/bar.html", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/c:/foo/bar.html", + "search": "", + "hash": "" + }, + { + "input": " File:c|////foo\\bar.html", + "base": "file:///tmp/mock/path", + "href": "file:///c:////foo/bar.html", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/c:////foo/bar.html", + "search": "", + "hash": "" + }, + { + "input": "C|/foo/bar", + "base": "file:///tmp/mock/path", + "href": "file:///C:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "/C|\\foo\\bar", + "base": "file:///tmp/mock/path", + "href": "file:///C:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "//C|/foo/bar", + "base": "file:///tmp/mock/path", + "href": "file:///C:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "//server/file", + "base": "file:///tmp/mock/path", + "href": "file://server/file", + "protocol": "file:", + "username": "", + "password": "", + "host": "server", + "hostname": "server", + "port": "", + "pathname": "/file", + "search": "", + "hash": "" + }, + { + "input": "\\\\server\\file", + "base": "file:///tmp/mock/path", + "href": "file://server/file", + "protocol": "file:", + "username": "", + "password": "", + "host": "server", + "hostname": "server", + "port": "", + "pathname": "/file", + "search": "", + "hash": "" + }, + { + "input": "/\\server/file", + "base": "file:///tmp/mock/path", + "href": "file://server/file", + "protocol": "file:", + "username": "", + "password": "", + "host": "server", + "hostname": "server", + "port": "", + "pathname": "/file", + "search": "", + "hash": "" + }, + { + "input": "file:///foo/bar.txt", + "base": "file:///tmp/mock/path", + "href": "file:///foo/bar.txt", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/foo/bar.txt", + "search": "", + "hash": "" + }, + { + "input": "file:///home/me", + "base": "file:///tmp/mock/path", + "href": "file:///home/me", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/home/me", + "search": "", + "hash": "" + }, + { + "input": "//", + "base": "file:///tmp/mock/path", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///", + "base": "file:///tmp/mock/path", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///test", + "base": "file:///tmp/mock/path", + "href": "file:///test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "file://test", + "base": "file:///tmp/mock/path", + "href": "file://test/", + "protocol": "file:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file://localhost", + "base": "file:///tmp/mock/path", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file://localhost/", + "base": "file:///tmp/mock/path", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file://localhost/test", + "base": "file:///tmp/mock/path", + "href": "file:///test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "test", + "base": "file:///tmp/mock/path", + "href": "file:///tmp/mock/test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/tmp/mock/test", + "search": "", + "hash": "" + }, + { + "input": "file:test", + "base": "file:///tmp/mock/path", + "href": "file:///tmp/mock/test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/tmp/mock/test", + "search": "", + "hash": "" + }, + { + "input": "file:///w|m", + "base": null, + "href": "file:///w|m", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/w|m", + "search": "", + "hash": "" + }, + { + "input": "file:///w||m", + "base": null, + "href": "file:///w||m", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/w||m", + "search": "", + "hash": "" + }, + { + "input": "file:///w|/m", + "base": null, + "href": "file:///w:/m", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/w:/m", + "search": "", + "hash": "" + }, + { + "input": "file:C|/m/", + "base": null, + "href": "file:///C:/m/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/m/", + "search": "", + "hash": "" + }, + { + "input": "file:C||/m/", + "base": null, + "href": "file:///C||/m/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C||/m/", + "search": "", + "hash": "" + }, + "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js", + { + "input": "http://example.com/././foo", + "base": null, + "href": "http://example.com/foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/./.foo", + "base": null, + "href": "http://example.com/.foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/.foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/.", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/./", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar/..", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar/../", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/..bar", + "base": null, + "href": "http://example.com/foo/..bar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/..bar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar/../ton", + "base": null, + "href": "http://example.com/foo/ton", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/ton", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar/../ton/../../a", + "base": null, + "href": "http://example.com/a", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/../../..", + "base": null, + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/../../../ton", + "base": null, + "href": "http://example.com/ton", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/ton", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/%2e", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/%2e%2", + "base": null, + "href": "http://example.com/foo/%2e%2", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/%2e%2", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar", + "base": null, + "href": "http://example.com/%2e.bar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%2e.bar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com////../..", + "base": null, + "href": "http://example.com//", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar//../..", + "base": null, + "href": "http://example.com/foo/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo/bar//..", + "base": null, + "href": "http://example.com/foo/bar/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo/bar/", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo", + "base": null, + "href": "http://example.com/foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/%20foo", + "base": null, + "href": "http://example.com/%20foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%20foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%", + "base": null, + "href": "http://example.com/foo%", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%2", + "base": null, + "href": "http://example.com/foo%2", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%2", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%2zbar", + "base": null, + "href": "http://example.com/foo%2zbar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%2zbar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%2©zbar", + "base": null, + "href": "http://example.com/foo%2%C3%82%C2%A9zbar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%2%C3%82%C2%A9zbar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%41%7a", + "base": null, + "href": "http://example.com/foo%41%7a", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%41%7a", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo\t\u0091%91", + "base": null, + "href": "http://example.com/foo%C2%91%91", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%C2%91%91", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo%00%51", + "base": null, + "href": "http://example.com/foo%00%51", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foo%00%51", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/(%28:%3A%29)", + "base": null, + "href": "http://example.com/(%28:%3A%29)", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/(%28:%3A%29)", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/%3A%3a%3C%3c", + "base": null, + "href": "http://example.com/%3A%3a%3C%3c", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%3A%3a%3C%3c", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/foo\tbar", + "base": null, + "href": "http://example.com/foobar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/foobar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com\\\\foo\\\\bar", + "base": null, + "href": "http://example.com//foo//bar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "//foo//bar", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", + "base": null, + "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/@asdf%40", + "base": null, + "href": "http://example.com/@asdf%40", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/@asdf%40", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/你好你好", + "base": null, + "href": "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/‥/foo", + "base": null, + "href": "http://example.com/%E2%80%A5/foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%E2%80%A5/foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com//foo", + "base": null, + "href": "http://example.com/%EF%BB%BF/foo", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%EF%BB%BF/foo", + "search": "", + "hash": "" + }, + { + "input": "http://example.com/‮/foo/‭/bar", + "base": null, + "href": "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/%E2%80%AE/foo/%E2%80%AD/bar", + "search": "", + "hash": "" + }, + "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js", + { + "input": "http://www.google.com/foo?bar=baz#", + "base": null, + "href": "http://www.google.com/foo?bar=baz#", + "origin": "http://www.google.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.google.com", + "hostname": "www.google.com", + "port": "", + "pathname": "/foo", + "search": "?bar=baz", + "hash": "" + }, + { + "input": "http://www.google.com/foo?bar=baz# »", + "base": null, + "href": "http://www.google.com/foo?bar=baz#%20%C2%BB", + "origin": "http://www.google.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.google.com", + "hostname": "www.google.com", + "port": "", + "pathname": "/foo", + "search": "?bar=baz", + "hash": "#%20%C2%BB" + }, + { + "input": "data:test# »", + "base": null, + "href": "data:test#%20%C2%BB", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "test", + "search": "", + "hash": "#%20%C2%BB" + }, + { + "input": "http://www.google.com", + "base": null, + "href": "http://www.google.com/", + "origin": "http://www.google.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.google.com", + "hostname": "www.google.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://192.0x00A80001", + "base": null, + "href": "http://192.168.0.1/", + "origin": "http://192.168.0.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.0.1", + "hostname": "192.168.0.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://www/foo%2Ehtml", + "base": null, + "href": "http://www/foo%2Ehtml", + "origin": "http://www", + "protocol": "http:", + "username": "", + "password": "", + "host": "www", + "hostname": "www", + "port": "", + "pathname": "/foo%2Ehtml", + "search": "", + "hash": "" + }, + { + "input": "http://www/foo/%2E/html", + "base": null, + "href": "http://www/foo/html", + "origin": "http://www", + "protocol": "http:", + "username": "", + "password": "", + "host": "www", + "hostname": "www", + "port": "", + "pathname": "/foo/html", + "search": "", + "hash": "" + }, + { + "input": "http://user:pass@/", + "base": null, + "failure": true + }, + { + "input": "http://%25DOMAIN:foobar@foodomain.com/", + "base": null, + "href": "http://%25DOMAIN:foobar@foodomain.com/", + "origin": "http://foodomain.com", + "protocol": "http:", + "username": "%25DOMAIN", + "password": "foobar", + "host": "foodomain.com", + "hostname": "foodomain.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:\\\\www.google.com\\foo", + "base": null, + "href": "http://www.google.com/foo", + "origin": "http://www.google.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.google.com", + "hostname": "www.google.com", + "port": "", + "pathname": "/foo", + "search": "", + "hash": "" + }, + { + "input": "http://foo:80/", + "base": null, + "href": "http://foo/", + "origin": "http://foo", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://foo:81/", + "base": null, + "href": "http://foo:81/", + "origin": "http://foo:81", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo:81", + "hostname": "foo", + "port": "81", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "httpa://foo:80/", + "base": null, + "href": "httpa://foo:80/", + "origin": "null", + "protocol": "httpa:", + "username": "", + "password": "", + "host": "foo:80", + "hostname": "foo", + "port": "80", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://foo:-80/", + "base": null, + "failure": true + }, + { + "input": "https://foo:443/", + "base": null, + "href": "https://foo/", + "origin": "https://foo", + "protocol": "https:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https://foo:80/", + "base": null, + "href": "https://foo:80/", + "origin": "https://foo:80", + "protocol": "https:", + "username": "", + "password": "", + "host": "foo:80", + "hostname": "foo", + "port": "80", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ftp://foo:21/", + "base": null, + "href": "ftp://foo/", + "origin": "ftp://foo", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ftp://foo:80/", + "base": null, + "href": "ftp://foo:80/", + "origin": "ftp://foo:80", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "foo:80", + "hostname": "foo", + "port": "80", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "gopher://foo:70/", + "base": null, + "href": "gopher://foo:70/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "foo:70", + "hostname": "foo", + "port": "70", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "gopher://foo:443/", + "base": null, + "href": "gopher://foo:443/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "foo:443", + "hostname": "foo", + "port": "443", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ws://foo:80/", + "base": null, + "href": "ws://foo/", + "origin": "ws://foo", + "protocol": "ws:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ws://foo:81/", + "base": null, + "href": "ws://foo:81/", + "origin": "ws://foo:81", + "protocol": "ws:", + "username": "", + "password": "", + "host": "foo:81", + "hostname": "foo", + "port": "81", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ws://foo:443/", + "base": null, + "href": "ws://foo:443/", + "origin": "ws://foo:443", + "protocol": "ws:", + "username": "", + "password": "", + "host": "foo:443", + "hostname": "foo", + "port": "443", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ws://foo:815/", + "base": null, + "href": "ws://foo:815/", + "origin": "ws://foo:815", + "protocol": "ws:", + "username": "", + "password": "", + "host": "foo:815", + "hostname": "foo", + "port": "815", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss://foo:80/", + "base": null, + "href": "wss://foo:80/", + "origin": "wss://foo:80", + "protocol": "wss:", + "username": "", + "password": "", + "host": "foo:80", + "hostname": "foo", + "port": "80", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss://foo:81/", + "base": null, + "href": "wss://foo:81/", + "origin": "wss://foo:81", + "protocol": "wss:", + "username": "", + "password": "", + "host": "foo:81", + "hostname": "foo", + "port": "81", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss://foo:443/", + "base": null, + "href": "wss://foo/", + "origin": "wss://foo", + "protocol": "wss:", + "username": "", + "password": "", + "host": "foo", + "hostname": "foo", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss://foo:815/", + "base": null, + "href": "wss://foo:815/", + "origin": "wss://foo:815", + "protocol": "wss:", + "username": "", + "password": "", + "host": "foo:815", + "hostname": "foo", + "port": "815", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/example.com/", + "base": null, + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ftp:/example.com/", + "base": null, + "href": "ftp://example.com/", + "origin": "ftp://example.com", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https:/example.com/", + "base": null, + "href": "https://example.com/", + "origin": "https://example.com", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "madeupscheme:/example.com/", + "base": null, + "href": "madeupscheme:/example.com/", + "origin": "null", + "protocol": "madeupscheme:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "file:/example.com/", + "base": null, + "href": "file:///example.com/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "ftps:/example.com/", + "base": null, + "href": "ftps:/example.com/", + "origin": "null", + "protocol": "ftps:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "gopher:/example.com/", + "base": null, + "href": "gopher:/example.com/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "ws:/example.com/", + "base": null, + "href": "ws://example.com/", + "origin": "ws://example.com", + "protocol": "ws:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss:/example.com/", + "base": null, + "href": "wss://example.com/", + "origin": "wss://example.com", + "protocol": "wss:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "data:/example.com/", + "base": null, + "href": "data:/example.com/", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "javascript:/example.com/", + "base": null, + "href": "javascript:/example.com/", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "mailto:/example.com/", + "base": null, + "href": "mailto:/example.com/", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/example.com/", + "search": "", + "hash": "" + }, + { + "input": "http:example.com/", + "base": null, + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ftp:example.com/", + "base": null, + "href": "ftp://example.com/", + "origin": "ftp://example.com", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https:example.com/", + "base": null, + "href": "https://example.com/", + "origin": "https://example.com", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "madeupscheme:example.com/", + "base": null, + "href": "madeupscheme:example.com/", + "origin": "null", + "protocol": "madeupscheme:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "ftps:example.com/", + "base": null, + "href": "ftps:example.com/", + "origin": "null", + "protocol": "ftps:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "gopher:example.com/", + "base": null, + "href": "gopher:example.com/", + "origin": "null", + "protocol": "gopher:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "ws:example.com/", + "base": null, + "href": "ws://example.com/", + "origin": "ws://example.com", + "protocol": "ws:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "wss:example.com/", + "base": null, + "href": "wss://example.com/", + "origin": "wss://example.com", + "protocol": "wss:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "data:example.com/", + "base": null, + "href": "data:example.com/", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "javascript:example.com/", + "base": null, + "href": "javascript:example.com/", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "mailto:example.com/", + "base": null, + "href": "mailto:example.com/", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "example.com/", + "search": "", + "hash": "" + }, + { + "input": "https://example.com/aaa/bbb/%2e%2e?query", + "base": null, + "href": "https://example.com/aaa/?query", + "origin": "https://example.com", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/aaa/", + "search": "?query", + "hash": "" + }, + "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/segments-userinfo-vs-host.html", + { + "input": "http:@www.example.com", + "base": null, + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/@www.example.com", + "base": null, + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://@www.example.com", + "base": null, + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:a:b@www.example.com", + "base": null, + "href": "http://a:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/a:b@www.example.com", + "base": null, + "href": "http://a:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://a:b@www.example.com", + "base": null, + "href": "http://a:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://@pple.com", + "base": null, + "href": "http://pple.com/", + "origin": "http://pple.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "pple.com", + "hostname": "pple.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http::b@www.example.com", + "base": null, + "href": "http://:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/:b@www.example.com", + "base": null, + "href": "http://:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://:b@www.example.com", + "base": null, + "href": "http://:b@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "b", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/:@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http://user@/www.example.com", + "base": null, + "failure": true + }, + { + "input": "http:@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http:/@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http://@/www.example.com", + "base": null, + "failure": true + }, + { + "input": "https:@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http:a:b@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http:/a:b@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http://a:b@/www.example.com", + "base": null, + "failure": true + }, + { + "input": "http::@/www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http:a:@www.example.com", + "base": null, + "href": "http://a@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:/a:@www.example.com", + "base": null, + "href": "http://a@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://a:@www.example.com", + "base": null, + "href": "http://a@www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "a", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://www.@pple.com", + "base": null, + "href": "http://www.@pple.com/", + "origin": "http://pple.com", + "protocol": "http:", + "username": "www.", + "password": "", + "host": "pple.com", + "hostname": "pple.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http:@:www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http:/@:www.example.com", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "http://@:www.example.com", + "base": null, + "failure": true + }, + { + "input": "http://:@www.example.com", + "base": null, + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# Others", + { + "input": "/", + "base": "http://www.example.com/test", + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "/test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/test.txt", + "search": "", + "hash": "" + }, + { + "input": ".", + "base": "http://www.example.com/test", + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "..", + "base": "http://www.example.com/test", + "href": "http://www.example.com/", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/test.txt", + "search": "", + "hash": "" + }, + { + "input": "./test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/test.txt", + "search": "", + "hash": "" + }, + { + "input": "../test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/test.txt", + "search": "", + "hash": "" + }, + { + "input": "../aaa/test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/aaa/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/aaa/test.txt", + "search": "", + "hash": "" + }, + { + "input": "../../test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/test.txt", + "search": "", + "hash": "" + }, + { + "input": "中/test.txt", + "base": "http://www.example.com/test", + "href": "http://www.example.com/%E4%B8%AD/test.txt", + "origin": "http://www.example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example.com", + "hostname": "www.example.com", + "port": "", + "pathname": "/%E4%B8%AD/test.txt", + "search": "", + "hash": "" + }, + { + "input": "http://www.example2.com", + "base": "http://www.example.com/test", + "href": "http://www.example2.com/", + "origin": "http://www.example2.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example2.com", + "hostname": "www.example2.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "//www.example2.com", + "base": "http://www.example.com/test", + "href": "http://www.example2.com/", + "origin": "http://www.example2.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.example2.com", + "hostname": "www.example2.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file:...", + "base": "http://www.example.com/test", + "href": "file:///...", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/...", + "search": "", + "hash": "" + }, + { + "input": "file:..", + "base": "http://www.example.com/test", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file:a", + "base": "http://www.example.com/test", + "href": "file:///a", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "file:.", + "base": null, + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file:.", + "base": "http://www.example.com/test", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html", + "Basic canonicalization, uppercase should be converted to lowercase", + { + "input": "http://ExAmPlE.CoM", + "base": "http://other.com/", + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://example example.com", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://Goo%20 goo%7C|.com", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[:]", + "base": "http://other.com/", + "failure": true + }, + "U+3000 is mapped to U+0020 (space) which is disallowed", + { + "input": "http://GOO\u00a0\u3000goo.com", + "base": "http://other.com/", + "failure": true + }, + "Other types of space (no-break, zero-width, zero-width-no-break) are name-prepped away to nothing. U+200B, U+2060, and U+FEFF, are ignored", + { + "input": "http://GOO\u200b\u2060\ufeffgoo.com", + "base": "http://other.com/", + "href": "http://googoo.com/", + "origin": "http://googoo.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "googoo.com", + "hostname": "googoo.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Leading and trailing C0 control or space", + { + "input": "\u0000\u001b\u0004\u0012 http://example.com/\u001f \u000d ", + "base": null, + "href": "http://example.com/", + "origin": "http://example.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special:opaque ", + "base": null, + "href": "non-special:opaque", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque", + "search": "", + "hash": "" + }, + { + "input": "non-special:opaque ?hi", + "base": null, + "href": "non-special:opaque %20?hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque %20", + "search": "?hi", + "hash": "" + }, + { + "input": "non-special:opaque #hi", + "base": null, + "href": "non-special:opaque %20#hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque %20", + "search": "", + "hash": "#hi" + }, + { + "input": "non-special:opaque x?hi", + "base": null, + "href": "non-special:opaque x?hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque x", + "search": "?hi", + "hash": "" + }, + { + "input": "non-special:opaque x#hi", + "base": null, + "href": "non-special:opaque x#hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque x", + "search": "", + "hash": "#hi" + }, + { + "input": "non-special:opaque \t\t \t#hi", + "base": null, + "href": "non-special:opaque %20#hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque %20", + "search": "", + "hash": "#hi" + }, + { + "input": "non-special:opaque \t\t #hi", + "base": null, + "href": "non-special:opaque %20#hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque %20", + "search": "", + "hash": "#hi" + }, + { + "input": "non-special:opaque\t\t \r #hi", + "base": null, + "href": "non-special:opaque %20#hi", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "opaque %20", + "search": "", + "hash": "#hi" + }, + "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)", + { + "input": "http://www.foo。bar.com", + "base": "http://other.com/", + "href": "http://www.foo.bar.com/", + "origin": "http://www.foo.bar.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "www.foo.bar.com", + "hostname": "www.foo.bar.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0", + { + "input": "http://\ufdd0zyx.com", + "base": "http://other.com/", + "failure": true + }, + "This is the same as previous but escaped", + { + "input": "http://%ef%b7%90zyx.com", + "base": "http://other.com/", + "failure": true + }, + "U+FFFD", + { + "input": "https://\ufffd", + "base": null, + "failure": true + }, + { + "input": "https://%EF%BF%BD", + "base": null, + "failure": true + }, + { + "input": "https://x/\ufffd?\ufffd#\ufffd", + "base": null, + "href": "https://x/%EF%BF%BD?%EF%BF%BD#%EF%BF%BD", + "origin": "https://x", + "protocol": "https:", + "username": "", + "password": "", + "host": "x", + "hostname": "x", + "port": "", + "pathname": "/%EF%BF%BD", + "search": "?%EF%BF%BD", + "hash": "#%EF%BF%BD" + }, + "Domain is ASCII, but a label is invalid IDNA", + { + "input": "http://a.b.c.xn--pokxncvks", + "base": null, + "failure": true + }, + { + "input": "http://10.0.0.xn--pokxncvks", + "base": null, + "failure": true + }, + "IDNA labels should be matched case-insensitively", + { + "input": "http://a.b.c.XN--pokxncvks", + "base": null, + "failure": true + }, + { + "input": "http://a.b.c.Xn--pokxncvks", + "base": null, + "failure": true + }, + { + "input": "http://10.0.0.XN--pokxncvks", + "base": null, + "failure": true + }, + { + "input": "http://10.0.0.xN--pokxncvks", + "base": null, + "failure": true + }, + "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.", + { + "input": "http://Go.com", + "base": "http://other.com/", + "href": "http://go.com/", + "origin": "http://go.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "go.com", + "hostname": "go.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257", + { + "input": "http://%41.com", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com", + "base": "http://other.com/", + "failure": true + }, + "...%00 in fullwidth should fail (also as escaped UTF-8 input)", + { + "input": "http://%00.com", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com", + "base": "http://other.com/", + "failure": true + }, + "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN", + { + "input": "http://你好你好", + "base": "http://other.com/", + "href": "http://xn--6qqa088eba/", + "origin": "http://xn--6qqa088eba", + "protocol": "http:", + "username": "", + "password": "", + "host": "xn--6qqa088eba", + "hostname": "xn--6qqa088eba", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https://faß.ExAmPlE/", + "base": null, + "href": "https://xn--fa-hia.example/", + "origin": "https://xn--fa-hia.example", + "protocol": "https:", + "username": "", + "password": "", + "host": "xn--fa-hia.example", + "hostname": "xn--fa-hia.example", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "sc://faß.ExAmPlE/", + "base": null, + "href": "sc://fa%C3%9F.ExAmPlE/", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "fa%C3%9F.ExAmPlE", + "hostname": "fa%C3%9F.ExAmPlE", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191", + { + "input": "http://%zz%66%a.com", + "base": "http://other.com/", + "failure": true + }, + "If we get an invalid character that has been escaped.", + { + "input": "http://%25", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://hello%00", + "base": "http://other.com/", + "failure": true + }, + "Escaped numbers should be treated like IP addresses if they are.", + { + "input": "http://%30%78%63%30%2e%30%32%35%30.01", + "base": "http://other.com/", + "href": "http://192.168.0.1/", + "origin": "http://192.168.0.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.0.1", + "hostname": "192.168.0.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e", + "base": "http://other.com/", + "href": "http://192.168.0.1/", + "origin": "http://192.168.0.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.0.1", + "hostname": "192.168.0.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://192.168.0.257", + "base": "http://other.com/", + "failure": true + }, + "Invalid escaping in hosts causes failure", + { + "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01", + "base": "http://other.com/", + "failure": true + }, + "A space in a host causes failure", + { + "input": "http://192.168.0.1 hello", + "base": "http://other.com/", + "failure": true + }, + { + "input": "https://x x:12", + "base": null, + "failure": true + }, + "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP", + { + "input": "http://0Xc0.0250.01", + "base": "http://other.com/", + "href": "http://192.168.0.1/", + "origin": "http://192.168.0.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.0.1", + "hostname": "192.168.0.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Domains with empty labels", + { + "input": "http://./", + "base": null, + "href": "http://./", + "origin": "http://.", + "protocol": "http:", + "username": "", + "password": "", + "host": ".", + "hostname": ".", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://../", + "base": null, + "href": "http://../", + "origin": "http://..", + "protocol": "http:", + "username": "", + "password": "", + "host": "..", + "hostname": "..", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Non-special domains with empty labels", + { + "input": "h://.", + "base": null, + "href": "h://.", + "origin": "null", + "protocol": "h:", + "username": "", + "password": "", + "host": ".", + "hostname": ".", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + "Broken IPv6", + { + "input": "http://[www.google.com]/", + "base": null, + "failure": true + }, + { + "input": "http://[google.com]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::1.2.3.4x]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::1.2.3.]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::1.2.]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::.1.2]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::1.]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::.1]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://[::%31]", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://%5B::1]", + "base": "http://other.com/", + "failure": true + }, + "Misc Unicode", + { + "input": "http://foo:💩@example.com/bar", + "base": "http://other.com/", + "href": "http://foo:%F0%9F%92%A9@example.com/bar", + "origin": "http://example.com", + "protocol": "http:", + "username": "foo", + "password": "%F0%9F%92%A9", + "host": "example.com", + "hostname": "example.com", + "port": "", + "pathname": "/bar", + "search": "", + "hash": "" + }, + "# resolving a fragment against any scheme succeeds", + { + "input": "#", + "base": "test:test", + "href": "test:test#", + "origin": "null", + "protocol": "test:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "test", + "search": "", + "hash": "" + }, + { + "input": "#x", + "base": "mailto:x@x.com", + "href": "mailto:x@x.com#x", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "x@x.com", + "search": "", + "hash": "#x" + }, + { + "input": "#x", + "base": "data:,", + "href": "data:,#x", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": ",", + "search": "", + "hash": "#x" + }, + { + "input": "#x", + "base": "about:blank", + "href": "about:blank#x", + "origin": "null", + "protocol": "about:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "blank", + "search": "", + "hash": "#x" + }, + { + "input": "#x:y", + "base": "about:blank", + "href": "about:blank#x:y", + "origin": "null", + "protocol": "about:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "blank", + "search": "", + "hash": "#x:y" + }, + { + "input": "#", + "base": "test:test?test", + "href": "test:test?test#", + "origin": "null", + "protocol": "test:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "test", + "search": "?test", + "hash": "" + }, + "# multiple @ in authority state", + { + "input": "https://@test@test@example:800/", + "base": "http://doesnotmatter/", + "href": "https://%40test%40test@example:800/", + "origin": "https://example:800", + "protocol": "https:", + "username": "%40test%40test", + "password": "", + "host": "example:800", + "hostname": "example", + "port": "800", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https://@@@example", + "base": "http://doesnotmatter/", + "href": "https://%40%40@example/", + "origin": "https://example", + "protocol": "https:", + "username": "%40%40", + "password": "", + "host": "example", + "hostname": "example", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "non-az-09 characters", + { + "input": "http://`{}:`{}@h/`{}?`{}", + "base": "http://doesnotmatter/", + "href": "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}", + "origin": "http://h", + "protocol": "http:", + "username": "%60%7B%7D", + "password": "%60%7B%7D", + "host": "h", + "hostname": "h", + "port": "", + "pathname": "/%60%7B%7D", + "search": "?`{}", + "hash": "" + }, + "byte is ' and url is special", + { + "input": "http://host/?'", + "base": null, + "href": "http://host/?%27", + "origin": "http://host", + "protocol": "http:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/", + "search": "?%27", + "hash": "" + }, + { + "input": "notspecial://host/?'", + "base": null, + "href": "notspecial://host/?'", + "origin": "null", + "protocol": "notspecial:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/", + "search": "?'", + "hash": "" + }, + "# Credentials in base", + { + "input": "/some/path", + "base": "http://user@example.org/smth", + "href": "http://user@example.org/some/path", + "origin": "http://example.org", + "protocol": "http:", + "username": "user", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/some/path", + "search": "", + "hash": "" + }, + { + "input": "", + "base": "http://user:pass@example.org:21/smth", + "href": "http://user:pass@example.org:21/smth", + "origin": "http://example.org:21", + "protocol": "http:", + "username": "user", + "password": "pass", + "host": "example.org:21", + "hostname": "example.org", + "port": "21", + "pathname": "/smth", + "search": "", + "hash": "" + }, + { + "input": "/some/path", + "base": "http://user:pass@example.org:21/smth", + "href": "http://user:pass@example.org:21/some/path", + "origin": "http://example.org:21", + "protocol": "http:", + "username": "user", + "password": "pass", + "host": "example.org:21", + "hostname": "example.org", + "port": "21", + "pathname": "/some/path", + "search": "", + "hash": "" + }, + "# a set of tests designed by zcorpan for relative URLs with unknown schemes", + { + "input": "i", + "base": "sc:sd", + "failure": true + }, + { + "input": "i", + "base": "sc:sd/sd", + "failure": true + }, + { + "input": "i", + "base": "sc:/pa/pa", + "href": "sc:/pa/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/i", + "search": "", + "hash": "" + }, + { + "input": "i", + "base": "sc://ho/pa", + "href": "sc://ho/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "ho", + "hostname": "ho", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "i", + "base": "sc:///pa/pa", + "href": "sc:///pa/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/i", + "search": "", + "hash": "" + }, + { + "input": "../i", + "base": "sc:sd", + "failure": true + }, + { + "input": "../i", + "base": "sc:sd/sd", + "failure": true + }, + { + "input": "../i", + "base": "sc:/pa/pa", + "href": "sc:/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "../i", + "base": "sc://ho/pa", + "href": "sc://ho/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "ho", + "hostname": "ho", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "../i", + "base": "sc:///pa/pa", + "href": "sc:///i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "/i", + "base": "sc:sd", + "failure": true + }, + { + "input": "/i", + "base": "sc:sd/sd", + "failure": true + }, + { + "input": "/i", + "base": "sc:/pa/pa", + "href": "sc:/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "/i", + "base": "sc://ho/pa", + "href": "sc://ho/i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "ho", + "hostname": "ho", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "/i", + "base": "sc:///pa/pa", + "href": "sc:///i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/i", + "search": "", + "hash": "" + }, + { + "input": "?i", + "base": "sc:sd", + "failure": true + }, + { + "input": "?i", + "base": "sc:sd/sd", + "failure": true + }, + { + "input": "?i", + "base": "sc:/pa/pa", + "href": "sc:/pa/pa?i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/pa", + "search": "?i", + "hash": "" + }, + { + "input": "?i", + "base": "sc://ho/pa", + "href": "sc://ho/pa?i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "ho", + "hostname": "ho", + "port": "", + "pathname": "/pa", + "search": "?i", + "hash": "" + }, + { + "input": "?i", + "base": "sc:///pa/pa", + "href": "sc:///pa/pa?i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/pa", + "search": "?i", + "hash": "" + }, + { + "input": "#i", + "base": "sc:sd", + "href": "sc:sd#i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "sd", + "search": "", + "hash": "#i" + }, + { + "input": "#i", + "base": "sc:sd/sd", + "href": "sc:sd/sd#i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "sd/sd", + "search": "", + "hash": "#i" + }, + { + "input": "#i", + "base": "sc:/pa/pa", + "href": "sc:/pa/pa#i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/pa", + "search": "", + "hash": "#i" + }, + { + "input": "#i", + "base": "sc://ho/pa", + "href": "sc://ho/pa#i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "ho", + "hostname": "ho", + "port": "", + "pathname": "/pa", + "search": "", + "hash": "#i" + }, + { + "input": "#i", + "base": "sc:///pa/pa", + "href": "sc:///pa/pa#i", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pa/pa", + "search": "", + "hash": "#i" + }, + "# make sure that relative URL logic works on known typically non-relative schemes too", + { + "input": "about:/../", + "base": null, + "href": "about:/", + "origin": "null", + "protocol": "about:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "data:/../", + "base": null, + "href": "data:/", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "javascript:/../", + "base": null, + "href": "javascript:/", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "mailto:/../", + "base": null, + "href": "mailto:/", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# unknown schemes and their hosts", + { + "input": "sc://ñ.test/", + "base": null, + "href": "sc://%C3%B1.test/", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1.test", + "hostname": "%C3%B1.test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "sc://%/", + "base": null, + "href": "sc://%/", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%", + "hostname": "%", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "sc://@/", + "base": null, + "failure": true + }, + { + "input": "sc://te@s:t@/", + "base": null, + "failure": true + }, + { + "input": "sc://:/", + "base": null, + "failure": true + }, + { + "input": "sc://:12/", + "base": null, + "failure": true + }, + { + "input": "x", + "base": "sc://ñ", + "href": "sc://%C3%B1/x", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "/x", + "search": "", + "hash": "" + }, + "# unknown schemes and backslashes", + { + "input": "sc:\\../", + "base": null, + "href": "sc:\\../", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "\\../", + "search": "", + "hash": "" + }, + "# unknown scheme with path looking like a password", + { + "input": "sc::a@example.net", + "base": null, + "href": "sc::a@example.net", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": ":a@example.net", + "search": "", + "hash": "" + }, + "# unknown scheme with bogus percent-encoding", + { + "input": "wow:%NBD", + "base": null, + "href": "wow:%NBD", + "origin": "null", + "protocol": "wow:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "%NBD", + "search": "", + "hash": "" + }, + { + "input": "wow:%1G", + "base": null, + "href": "wow:%1G", + "origin": "null", + "protocol": "wow:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "%1G", + "search": "", + "hash": "" + }, + "# unknown scheme with non-URL characters", + { + "input": "wow:\uFFFF", + "base": null, + "href": "wow:%EF%BF%BF", + "origin": "null", + "protocol": "wow:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "%EF%BF%BF", + "search": "", + "hash": "" + }, + "Forbidden host code points", + { + "input": "sc://a\u0000b/", + "base": null, + "failure": true + }, + { + "input": "sc://a b/", + "base": null, + "failure": true + }, + { + "input": "sc://ab", + "base": null, + "failure": true + }, + { + "input": "sc://a[b/", + "base": null, + "failure": true + }, + { + "input": "sc://a\\b/", + "base": null, + "failure": true + }, + { + "input": "sc://a]b/", + "base": null, + "failure": true + }, + { + "input": "sc://a^b", + "base": null, + "failure": true + }, + { + "input": "sc://a|b/", + "base": null, + "failure": true + }, + "Forbidden host codepoints: tabs and newlines are removed during preprocessing", + { + "input": "foo://ho\u0009st/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"foo://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "foo://ho\u000Ast/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"foo://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "foo://ho\u000Dst/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"foo://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + "Forbidden domain code-points", + { + "input": "http://a\u0000b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0001b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0002b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0003b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0004b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0005b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0006b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0007b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0008b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u000Bb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u000Cb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u000Eb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u000Fb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0010b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0011b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0012b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0013b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0014b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0015b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0016b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0017b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0018b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u0019b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Ab/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Bb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Cb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Db/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Eb/", + "base": null, + "failure": true + }, + { + "input": "http://a\u001Fb/", + "base": null, + "failure": true + }, + { + "input": "http://a b/", + "base": null, + "failure": true + }, + { + "input": "http://a%b/", + "base": null, + "failure": true + }, + { + "input": "http://ab", + "base": null, + "failure": true + }, + { + "input": "http://a[b/", + "base": null, + "failure": true + }, + { + "input": "http://a]b/", + "base": null, + "failure": true + }, + { + "input": "http://a^b", + "base": null, + "failure": true + }, + { + "input": "http://a|b/", + "base": null, + "failure": true + }, + { + "input": "http://a\u007Fb/", + "base": null, + "failure": true + }, + "Forbidden domain codepoints: tabs and newlines are removed during preprocessing", + { + "input": "http://ho\u0009st/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://ho\u000Ast/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://ho\u000Dst/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href":"http://host/", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + "Encoded forbidden domain codepoints in special URLs", + { + "input": "http://ho%00st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%01st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%02st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%03st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%04st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%05st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%06st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%07st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%08st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%09st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Ast/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Bst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Cst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Dst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Est/", + "base": null, + "failure": true + }, + { + "input": "http://ho%0Fst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%10st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%11st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%12st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%13st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%14st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%15st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%16st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%17st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%18st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%19st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Ast/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Bst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Cst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Dst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Est/", + "base": null, + "failure": true + }, + { + "input": "http://ho%1Fst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%20st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%23st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%25st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%2Fst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%3Ast/", + "base": null, + "failure": true + }, + { + "input": "http://ho%3Cst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%3Est/", + "base": null, + "failure": true + }, + { + "input": "http://ho%3Fst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%40st/", + "base": null, + "failure": true + }, + { + "input": "http://ho%5Bst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%5Cst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%5Dst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%7Cst/", + "base": null, + "failure": true + }, + { + "input": "http://ho%7Fst/", + "base": null, + "failure": true + }, + "Allowed host/domain code points", + { + "input": "http://!\"$&'()*+,-.;=_`{}~/", + "base": null, + "href": "http://!\"$&'()*+,-.;=_`{}~/", + "origin": "http://!\"$&'()*+,-.;=_`{}~", + "protocol": "http:", + "username": "", + "password": "", + "host": "!\"$&'()*+,-.;=_`{}~", + "hostname": "!\"$&'()*+,-.;=_`{}~", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "sc://\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u007F!\"$%&'()*+,-.;=_`{}~/", + "base": null, + "href": "sc://%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~/", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", + "hostname": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# Hosts and percent-encoding", + { + "input": "ftp://example.com%80/", + "base": null, + "failure": true + }, + { + "input": "ftp://example.com%A0/", + "base": null, + "failure": true + }, + { + "input": "https://example.com%80/", + "base": null, + "failure": true + }, + { + "input": "https://example.com%A0/", + "base": null, + "failure": true + }, + { + "input": "ftp://%e2%98%83", + "base": null, + "href": "ftp://xn--n3h/", + "origin": "ftp://xn--n3h", + "protocol": "ftp:", + "username": "", + "password": "", + "host": "xn--n3h", + "hostname": "xn--n3h", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "https://%e2%98%83", + "base": null, + "href": "https://xn--n3h/", + "origin": "https://xn--n3h", + "protocol": "https:", + "username": "", + "password": "", + "host": "xn--n3h", + "hostname": "xn--n3h", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# tests from jsdom/whatwg-url designed for code coverage", + { + "input": "http://127.0.0.1:10100/relative_import.html", + "base": null, + "href": "http://127.0.0.1:10100/relative_import.html", + "origin": "http://127.0.0.1:10100", + "protocol": "http:", + "username": "", + "password": "", + "host": "127.0.0.1:10100", + "hostname": "127.0.0.1", + "port": "10100", + "pathname": "/relative_import.html", + "search": "", + "hash": "" + }, + { + "input": "http://facebook.com/?foo=%7B%22abc%22", + "base": null, + "href": "http://facebook.com/?foo=%7B%22abc%22", + "origin": "http://facebook.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "facebook.com", + "hostname": "facebook.com", + "port": "", + "pathname": "/", + "search": "?foo=%7B%22abc%22", + "hash": "" + }, + { + "input": "https://localhost:3000/jqueryui@1.2.3", + "base": null, + "href": "https://localhost:3000/jqueryui@1.2.3", + "origin": "https://localhost:3000", + "protocol": "https:", + "username": "", + "password": "", + "host": "localhost:3000", + "hostname": "localhost", + "port": "3000", + "pathname": "/jqueryui@1.2.3", + "search": "", + "hash": "" + }, + "# tab/LF/CR", + { + "input": "h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg", + "base": null, + "href": "http://host:9000/path?query#frag", + "origin": "http://host:9000", + "protocol": "http:", + "username": "", + "password": "", + "host": "host:9000", + "hostname": "host", + "port": "9000", + "pathname": "/path", + "search": "?query", + "hash": "#frag" + }, + "# Stringification of URL.searchParams", + { + "input": "?a=b&c=d", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar?a=b&c=d", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "?a=b&c=d", + "searchParams": "a=b&c=d", + "hash": "" + }, + { + "input": "??a=b&c=d", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar??a=b&c=d", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "??a=b&c=d", + "searchParams": "%3Fa=b&c=d", + "hash": "" + }, + "# Scheme only", + { + "input": "http:", + "base": "http://example.org/foo/bar", + "href": "http://example.org/foo/bar", + "origin": "http://example.org", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/foo/bar", + "search": "", + "searchParams": "", + "hash": "" + }, + { + "input": "http:", + "base": "https://example.org/foo/bar", + "failure": true + }, + { + "input": "sc:", + "base": "https://example.org/foo/bar", + "href": "sc:", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "searchParams": "", + "hash": "" + }, + "# Percent encoding of fragments", + { + "input": "http://foo.bar/baz?qux#foo\bbar", + "base": null, + "href": "http://foo.bar/baz?qux#foo%08bar", + "origin": "http://foo.bar", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.bar", + "hostname": "foo.bar", + "port": "", + "pathname": "/baz", + "search": "?qux", + "searchParams": "qux=", + "hash": "#foo%08bar" + }, + { + "input": "http://foo.bar/baz?qux#foo\"bar", + "base": null, + "href": "http://foo.bar/baz?qux#foo%22bar", + "origin": "http://foo.bar", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.bar", + "hostname": "foo.bar", + "port": "", + "pathname": "/baz", + "search": "?qux", + "searchParams": "qux=", + "hash": "#foo%22bar" + }, + { + "input": "http://foo.bar/baz?qux#foobar", + "base": null, + "href": "http://foo.bar/baz?qux#foo%3Ebar", + "origin": "http://foo.bar", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.bar", + "hostname": "foo.bar", + "port": "", + "pathname": "/baz", + "search": "?qux", + "searchParams": "qux=", + "hash": "#foo%3Ebar" + }, + { + "input": "http://foo.bar/baz?qux#foo`bar", + "base": null, + "href": "http://foo.bar/baz?qux#foo%60bar", + "origin": "http://foo.bar", + "protocol": "http:", + "username": "", + "password": "", + "host": "foo.bar", + "hostname": "foo.bar", + "port": "", + "pathname": "/baz", + "search": "?qux", + "searchParams": "qux=", + "hash": "#foo%60bar" + }, + "# IPv4 parsing (via https://github.com/nodejs/node/pull/10317)", + { + "input": "http://1.2.3.4/", + "base": "http://other.com/", + "href": "http://1.2.3.4/", + "origin": "http://1.2.3.4", + "protocol": "http:", + "username": "", + "password": "", + "host": "1.2.3.4", + "hostname": "1.2.3.4", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://1.2.3.4./", + "base": "http://other.com/", + "href": "http://1.2.3.4/", + "origin": "http://1.2.3.4", + "protocol": "http:", + "username": "", + "password": "", + "host": "1.2.3.4", + "hostname": "1.2.3.4", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://192.168.257", + "base": "http://other.com/", + "href": "http://192.168.1.1/", + "origin": "http://192.168.1.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.1.1", + "hostname": "192.168.1.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://192.168.257.", + "base": "http://other.com/", + "href": "http://192.168.1.1/", + "origin": "http://192.168.1.1", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.1.1", + "hostname": "192.168.1.1", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://192.168.257.com", + "base": "http://other.com/", + "href": "http://192.168.257.com/", + "origin": "http://192.168.257.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "192.168.257.com", + "hostname": "192.168.257.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://256", + "base": "http://other.com/", + "href": "http://0.0.1.0/", + "origin": "http://0.0.1.0", + "protocol": "http:", + "username": "", + "password": "", + "host": "0.0.1.0", + "hostname": "0.0.1.0", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://256.com", + "base": "http://other.com/", + "href": "http://256.com/", + "origin": "http://256.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "256.com", + "hostname": "256.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://999999999", + "base": "http://other.com/", + "href": "http://59.154.201.255/", + "origin": "http://59.154.201.255", + "protocol": "http:", + "username": "", + "password": "", + "host": "59.154.201.255", + "hostname": "59.154.201.255", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://999999999.", + "base": "http://other.com/", + "href": "http://59.154.201.255/", + "origin": "http://59.154.201.255", + "protocol": "http:", + "username": "", + "password": "", + "host": "59.154.201.255", + "hostname": "59.154.201.255", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://999999999.com", + "base": "http://other.com/", + "href": "http://999999999.com/", + "origin": "http://999999999.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "999999999.com", + "hostname": "999999999.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://10000000000", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://10000000000.com", + "base": "http://other.com/", + "href": "http://10000000000.com/", + "origin": "http://10000000000.com", + "protocol": "http:", + "username": "", + "password": "", + "host": "10000000000.com", + "hostname": "10000000000.com", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://4294967295", + "base": "http://other.com/", + "href": "http://255.255.255.255/", + "origin": "http://255.255.255.255", + "protocol": "http:", + "username": "", + "password": "", + "host": "255.255.255.255", + "hostname": "255.255.255.255", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://4294967296", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://0xffffffff", + "base": "http://other.com/", + "href": "http://255.255.255.255/", + "origin": "http://255.255.255.255", + "protocol": "http:", + "username": "", + "password": "", + "host": "255.255.255.255", + "hostname": "255.255.255.255", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://0xffffffff1", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://256.256.256.256", + "base": "http://other.com/", + "failure": true + }, + { + "input": "https://0x.0x.0", + "base": null, + "href": "https://0.0.0.0/", + "origin": "https://0.0.0.0", + "protocol": "https:", + "username": "", + "password": "", + "host": "0.0.0.0", + "hostname": "0.0.0.0", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)", + { + "input": "https://0x100000000/test", + "base": null, + "failure": true + }, + { + "input": "https://256.0.0.1/test", + "base": null, + "failure": true + }, + "# file URLs containing percent-encoded Windows drive letters (shouldn't work)", + { + "input": "file:///C%3A/", + "base": null, + "href": "file:///C%3A/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C%3A/", + "search": "", + "hash": "" + }, + { + "input": "file:///C%7C/", + "base": null, + "href": "file:///C%7C/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C%7C/", + "search": "", + "hash": "" + }, + { + "input": "file://%43%3A", + "base": null, + "failure": true + }, + { + "input": "file://%43%7C", + "base": null, + "failure": true + }, + { + "input": "file://%43|", + "base": null, + "failure": true + }, + { + "input": "file://C%7C", + "base": null, + "failure": true + }, + { + "input": "file://%43%7C/", + "base": null, + "failure": true + }, + { + "input": "https://%43%7C/", + "base": null, + "failure": true + }, + { + "input": "asdf://%43|/", + "base": null, + "failure": true + }, + { + "input": "asdf://%43%7C/", + "base": null, + "href": "asdf://%43%7C/", + "origin": "null", + "protocol": "asdf:", + "username": "", + "password": "", + "host": "%43%7C", + "hostname": "%43%7C", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# file URLs relative to other file URLs (via https://github.com/jsdom/whatwg-url/pull/60)", + { + "input": "pix/submit.gif", + "base": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html", + "href": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", + "search": "", + "hash": "" + }, + { + "input": "..", + "base": "file:///C:/", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "..", + "base": "file:///", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# More file URL tests by zcorpan and annevk", + { + "input": "/", + "base": "file:///C:/a/b", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "/", + "base": "file://h/C:/a/b", + "href": "file://h/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "h", + "hostname": "h", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "/", + "base": "file://h/a/b", + "href": "file://h/", + "protocol": "file:", + "username": "", + "password": "", + "host": "h", + "hostname": "h", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "//d:", + "base": "file:///C:/a/b", + "href": "file:///d:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/d:", + "search": "", + "hash": "" + }, + { + "input": "//d:/..", + "base": "file:///C:/a/b", + "href": "file:///d:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/d:/", + "search": "", + "hash": "" + }, + { + "input": "..", + "base": "file:///ab:/", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "..", + "base": "file:///1:/", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "", + "base": "file:///test?test#test", + "href": "file:///test?test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?test", + "hash": "" + }, + { + "input": "file:", + "base": "file:///test?test#test", + "href": "file:///test?test", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?test", + "hash": "" + }, + { + "input": "?x", + "base": "file:///test?test#test", + "href": "file:///test?x", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?x", + "hash": "" + }, + { + "input": "file:?x", + "base": "file:///test?test#test", + "href": "file:///test?x", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?x", + "hash": "" + }, + { + "input": "#x", + "base": "file:///test?test#test", + "href": "file:///test?test#x", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?test", + "hash": "#x" + }, + { + "input": "file:#x", + "base": "file:///test?test#test", + "href": "file:///test?test#x", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?test", + "hash": "#x" + }, + "# File URLs and many (back)slashes", + { + "input": "file:\\\\//", + "base": null, + "href": "file:////", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "file:\\\\\\\\", + "base": null, + "href": "file:////", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "file:\\\\\\\\?fox", + "base": null, + "href": "file:////?fox", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "?fox", + "hash": "" + }, + { + "input": "file:\\\\\\\\#guppy", + "base": null, + "href": "file:////#guppy", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "#guppy" + }, + { + "input": "file://spider///", + "base": null, + "href": "file://spider///", + "protocol": "file:", + "username": "", + "password": "", + "host": "spider", + "hostname": "spider", + "port": "", + "pathname": "///", + "search": "", + "hash": "" + }, + { + "input": "file:\\\\localhost//", + "base": null, + "href": "file:////", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "file:///localhost//cat", + "base": null, + "href": "file:///localhost//cat", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/localhost//cat", + "search": "", + "hash": "" + }, + { + "input": "file://\\/localhost//cat", + "base": null, + "href": "file:////localhost//cat", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//localhost//cat", + "search": "", + "hash": "" + }, + { + "input": "file://localhost//a//../..//", + "base": null, + "href": "file://///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "///", + "search": "", + "hash": "" + }, + { + "input": "/////mouse", + "base": "file:///elephant", + "href": "file://///mouse", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "///mouse", + "search": "", + "hash": "" + }, + { + "input": "\\//pig", + "base": "file://lion/", + "href": "file:///pig", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/pig", + "search": "", + "hash": "" + }, + { + "input": "\\/localhost//pig", + "base": "file://lion/", + "href": "file:////pig", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//pig", + "search": "", + "hash": "" + }, + { + "input": "//localhost//pig", + "base": "file://lion/", + "href": "file:////pig", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//pig", + "search": "", + "hash": "" + }, + { + "input": "/..//localhost//pig", + "base": "file://lion/", + "href": "file://lion//localhost//pig", + "protocol": "file:", + "username": "", + "password": "", + "host": "lion", + "hostname": "lion", + "port": "", + "pathname": "//localhost//pig", + "search": "", + "hash": "" + }, + { + "input": "file://", + "base": "file://ape/", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# File URLs with non-empty hosts", + { + "input": "/rooibos", + "base": "file://tea/", + "href": "file://tea/rooibos", + "protocol": "file:", + "username": "", + "password": "", + "host": "tea", + "hostname": "tea", + "port": "", + "pathname": "/rooibos", + "search": "", + "hash": "" + }, + { + "input": "/?chai", + "base": "file://tea/", + "href": "file://tea/?chai", + "protocol": "file:", + "username": "", + "password": "", + "host": "tea", + "hostname": "tea", + "port": "", + "pathname": "/", + "search": "?chai", + "hash": "" + }, + "# Windows drive letter handling with the 'file:' base URL", + { + "input": "C|", + "base": "file://host/dir/file", + "href": "file://host/C:", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|", + "base": "file://host/D:/dir1/dir2/file", + "href": "file://host/C:", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|#", + "base": "file://host/dir/file", + "href": "file://host/C:#", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|?", + "base": "file://host/dir/file", + "href": "file://host/C:?", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:", + "search": "", + "hash": "" + }, + { + "input": "C|/", + "base": "file://host/dir/file", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C|\n/", + "base": "file://host/dir/file", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C|\\", + "base": "file://host/dir/file", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "C", + "base": "file://host/dir/file", + "href": "file://host/dir/C", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/dir/C", + "search": "", + "hash": "" + }, + { + "input": "C|a", + "base": "file://host/dir/file", + "href": "file://host/dir/C|a", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/dir/C|a", + "search": "", + "hash": "" + }, + "# Windows drive letter quirk in the file slash state", + { + "input": "/c:/foo/bar", + "base": "file:///c:/baz/qux", + "href": "file:///c:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/c:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "/c|/foo/bar", + "base": "file:///c:/baz/qux", + "href": "file:///c:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/c:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "file:\\c:\\foo\\bar", + "base": "file:///c:/baz/qux", + "href": "file:///c:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/c:/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "/c:/foo/bar", + "base": "file://host/path", + "href": "file://host/c:/foo/bar", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/c:/foo/bar", + "search": "", + "hash": "" + }, + "# Do not drop the host in the presence of a drive letter", + { + "input": "file://example.net/C:/", + "base": null, + "href": "file://example.net/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "example.net", + "hostname": "example.net", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file://1.2.3.4/C:/", + "base": null, + "href": "file://1.2.3.4/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "1.2.3.4", + "hostname": "1.2.3.4", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file://[1::8]/C:/", + "base": null, + "href": "file://[1::8]/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "[1::8]", + "hostname": "[1::8]", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + "# Copy the host from the base URL in the following cases", + { + "input": "C|/", + "base": "file://host/", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "/C:/", + "base": "file://host/", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file:C:/", + "base": "file://host/", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file:/C:/", + "base": "file://host/", + "href": "file://host/C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + "# Copy the empty host from the input in the following cases", + { + "input": "//C:/", + "base": "file://host/", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file://C:/", + "base": "file://host/", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "///C:/", + "base": "file://host/", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file:///C:/", + "base": "file://host/", + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + "# Windows drive letter quirk (no host)", + { + "input": "file:/C|/", + "base": null, + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + { + "input": "file://C|/", + "base": null, + "href": "file:///C:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/C:/", + "search": "", + "hash": "" + }, + "# file URLs without base URL by Rimas Misevičius", + { + "input": "file:", + "base": null, + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "file:?q=v", + "base": null, + "href": "file:///?q=v", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "?q=v", + "hash": "" + }, + { + "input": "file:#frag", + "base": null, + "href": "file:///#frag", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "#frag" + }, + "# file: drive letter cases from https://crbug.com/1078698", + { + "input": "file:///Y:", + "base": null, + "href": "file:///Y:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/Y:", + "search": "", + "hash": "" + }, + { + "input": "file:///Y:/", + "base": null, + "href": "file:///Y:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/Y:/", + "search": "", + "hash": "" + }, + { + "input": "file:///./Y", + "base": null, + "href": "file:///Y", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/Y", + "search": "", + "hash": "" + }, + { + "input": "file:///./Y:", + "base": null, + "href": "file:///Y:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/Y:", + "search": "", + "hash": "" + }, + { + "input": "\\\\\\.\\Y:", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + "# file: drive letter cases from https://crbug.com/1078698 but lowercased", + { + "input": "file:///y:", + "base": null, + "href": "file:///y:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/y:", + "search": "", + "hash": "" + }, + { + "input": "file:///y:/", + "base": null, + "href": "file:///y:/", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/y:/", + "search": "", + "hash": "" + }, + { + "input": "file:///./y", + "base": null, + "href": "file:///y", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/y", + "search": "", + "hash": "" + }, + { + "input": "file:///./y:", + "base": null, + "href": "file:///y:", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/y:", + "search": "", + "hash": "" + }, + { + "input": "\\\\\\.\\y:", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + "# Additional file URL tests for (https://github.com/whatwg/url/issues/405)", + { + "input": "file://localhost//a//../..//foo", + "base": null, + "href": "file://///foo", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "///foo", + "search": "", + "hash": "" + }, + { + "input": "file://localhost////foo", + "base": null, + "href": "file://////foo", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "////foo", + "search": "", + "hash": "" + }, + { + "input": "file:////foo", + "base": null, + "href": "file:////foo", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//foo", + "search": "", + "hash": "" + }, + { + "input": "file:///one/two", + "base": "file:///", + "href": "file:///one/two", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/one/two", + "search": "", + "hash": "" + }, + { + "input": "file:////one/two", + "base": "file:///", + "href": "file:////one/two", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//one/two", + "search": "", + "hash": "" + }, + { + "input": "//one/two", + "base": "file:///", + "href": "file://one/two", + "protocol": "file:", + "username": "", + "password": "", + "host": "one", + "hostname": "one", + "port": "", + "pathname": "/two", + "search": "", + "hash": "" + }, + { + "input": "///one/two", + "base": "file:///", + "href": "file:///one/two", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/one/two", + "search": "", + "hash": "" + }, + { + "input": "////one/two", + "base": "file:///", + "href": "file:////one/two", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//one/two", + "search": "", + "hash": "" + }, + { + "input": "file:///.//", + "base": "file:////", + "href": "file:////", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + "File URL tests for https://github.com/whatwg/url/issues/549", + { + "input": "file:.//p", + "base": null, + "href": "file:////p", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//p", + "search": "", + "hash": "" + }, + { + "input": "file:/.//p", + "base": null, + "href": "file:////p", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//p", + "search": "", + "hash": "" + }, + "# IPv6 tests", + { + "input": "http://[1:0::]", + "base": "http://example.net/", + "href": "http://[1::]/", + "origin": "http://[1::]", + "protocol": "http:", + "username": "", + "password": "", + "host": "[1::]", + "hostname": "[1::]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[0:1:2:3:4:5:6:7:8]", + "base": "http://example.net/", + "failure": true + }, + { + "input": "https://[0::0::0]", + "base": null, + "failure": true + }, + { + "input": "https://[0:.0]", + "base": null, + "failure": true + }, + { + "input": "https://[0:0:]", + "base": null, + "failure": true + }, + { + "input": "https://[0:1:2:3:4:5:6:7.0.0.0.1]", + "base": null, + "failure": true + }, + { + "input": "https://[0:1.00.0.0.0]", + "base": null, + "failure": true + }, + { + "input": "https://[0:1.290.0.0.0]", + "base": null, + "failure": true + }, + { + "input": "https://[0:1.23.23]", + "base": null, + "failure": true + }, + "# Empty host", + { + "input": "http://?", + "base": null, + "failure": true + }, + { + "input": "http://#", + "base": null, + "failure": true + }, + "Port overflow (2^32 + 81)", + { + "input": "http://f:4294967377/c", + "base": "http://example.org/", + "failure": true + }, + "Port overflow (2^64 + 81)", + { + "input": "http://f:18446744073709551697/c", + "base": "http://example.org/", + "failure": true + }, + "Port overflow (2^128 + 81)", + { + "input": "http://f:340282366920938463463374607431768211537/c", + "base": "http://example.org/", + "failure": true + }, + "# Non-special-URL path tests", + { + "input": "sc://ñ", + "base": null, + "href": "sc://%C3%B1", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "sc://ñ?x", + "base": null, + "href": "sc://%C3%B1?x", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "", + "search": "?x", + "hash": "" + }, + { + "input": "sc://ñ#x", + "base": null, + "href": "sc://%C3%B1#x", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "", + "search": "", + "hash": "#x" + }, + { + "input": "#x", + "base": "sc://ñ", + "href": "sc://%C3%B1#x", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "", + "search": "", + "hash": "#x" + }, + { + "input": "?x", + "base": "sc://ñ", + "href": "sc://%C3%B1?x", + "origin": "null", + "protocol": "sc:", + "username": "", + "password": "", + "host": "%C3%B1", + "hostname": "%C3%B1", + "port": "", + "pathname": "", + "search": "?x", + "hash": "" + }, + { + "input": "sc://?", + "base": null, + "href": "sc://?", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "sc://#", + "base": null, + "href": "sc://#", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "///", + "base": "sc://x/", + "href": "sc:///", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "////", + "base": "sc://x/", + "href": "sc:////", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "////x/", + "base": "sc://x/", + "href": "sc:////x/", + "protocol": "sc:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//x/", + "search": "", + "hash": "" + }, + { + "input": "tftp://foobar.com/someconfig;mode=netascii", + "base": null, + "href": "tftp://foobar.com/someconfig;mode=netascii", + "origin": "null", + "protocol": "tftp:", + "username": "", + "password": "", + "host": "foobar.com", + "hostname": "foobar.com", + "port": "", + "pathname": "/someconfig;mode=netascii", + "search": "", + "hash": "" + }, + { + "input": "telnet://user:pass@foobar.com:23/", + "base": null, + "href": "telnet://user:pass@foobar.com:23/", + "origin": "null", + "protocol": "telnet:", + "username": "user", + "password": "pass", + "host": "foobar.com:23", + "hostname": "foobar.com", + "port": "23", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "ut2004://10.10.10.10:7777/Index.ut2", + "base": null, + "href": "ut2004://10.10.10.10:7777/Index.ut2", + "origin": "null", + "protocol": "ut2004:", + "username": "", + "password": "", + "host": "10.10.10.10:7777", + "hostname": "10.10.10.10", + "port": "7777", + "pathname": "/Index.ut2", + "search": "", + "hash": "" + }, + { + "input": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", + "base": null, + "href": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", + "origin": "null", + "protocol": "redis:", + "username": "foo", + "password": "bar", + "host": "somehost:6379", + "hostname": "somehost", + "port": "6379", + "pathname": "/0", + "search": "?baz=bam&qux=baz", + "hash": "" + }, + { + "input": "rsync://foo@host:911/sup", + "base": null, + "href": "rsync://foo@host:911/sup", + "origin": "null", + "protocol": "rsync:", + "username": "foo", + "password": "", + "host": "host:911", + "hostname": "host", + "port": "911", + "pathname": "/sup", + "search": "", + "hash": "" + }, + { + "input": "git://github.com/foo/bar.git", + "base": null, + "href": "git://github.com/foo/bar.git", + "origin": "null", + "protocol": "git:", + "username": "", + "password": "", + "host": "github.com", + "hostname": "github.com", + "port": "", + "pathname": "/foo/bar.git", + "search": "", + "hash": "" + }, + { + "input": "irc://myserver.com:6999/channel?passwd", + "base": null, + "href": "irc://myserver.com:6999/channel?passwd", + "origin": "null", + "protocol": "irc:", + "username": "", + "password": "", + "host": "myserver.com:6999", + "hostname": "myserver.com", + "port": "6999", + "pathname": "/channel", + "search": "?passwd", + "hash": "" + }, + { + "input": "dns://fw.example.org:9999/foo.bar.org?type=TXT", + "base": null, + "href": "dns://fw.example.org:9999/foo.bar.org?type=TXT", + "origin": "null", + "protocol": "dns:", + "username": "", + "password": "", + "host": "fw.example.org:9999", + "hostname": "fw.example.org", + "port": "9999", + "pathname": "/foo.bar.org", + "search": "?type=TXT", + "hash": "" + }, + { + "input": "ldap://localhost:389/ou=People,o=JNDITutorial", + "base": null, + "href": "ldap://localhost:389/ou=People,o=JNDITutorial", + "origin": "null", + "protocol": "ldap:", + "username": "", + "password": "", + "host": "localhost:389", + "hostname": "localhost", + "port": "389", + "pathname": "/ou=People,o=JNDITutorial", + "search": "", + "hash": "" + }, + { + "input": "git+https://github.com/foo/bar", + "base": null, + "href": "git+https://github.com/foo/bar", + "origin": "null", + "protocol": "git+https:", + "username": "", + "password": "", + "host": "github.com", + "hostname": "github.com", + "port": "", + "pathname": "/foo/bar", + "search": "", + "hash": "" + }, + { + "input": "urn:ietf:rfc:2648", + "base": null, + "href": "urn:ietf:rfc:2648", + "origin": "null", + "protocol": "urn:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "ietf:rfc:2648", + "search": "", + "hash": "" + }, + { + "input": "tag:joe@example.org,2001:foo/bar", + "base": null, + "href": "tag:joe@example.org,2001:foo/bar", + "origin": "null", + "protocol": "tag:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "joe@example.org,2001:foo/bar", + "search": "", + "hash": "" + }, + "Serialize /. in path", + { + "input": "non-spec:/.//", + "base": null, + "href": "non-spec:/.//", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "non-spec:/..//", + "base": null, + "href": "non-spec:/.//", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "non-spec:/a/..//", + "base": null, + "href": "non-spec:/.//", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//", + "search": "", + "hash": "" + }, + { + "input": "non-spec:/.//path", + "base": null, + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "non-spec:/..//path", + "base": null, + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "non-spec:/a/..//path", + "base": null, + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "/.//path", + "base": "non-spec:/p", + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "/..//path", + "base": "non-spec:/p", + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "..//path", + "base": "non-spec:/p", + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "a/..//path", + "base": "non-spec:/p", + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + { + "input": "", + "base": "non-spec:/..//p", + "href": "non-spec:/.//p", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//p", + "search": "", + "hash": "" + }, + { + "input": "path", + "base": "non-spec:/..//p", + "href": "non-spec:/.//path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "//path", + "search": "", + "hash": "" + }, + "Do not serialize /. in path", + { + "input": "../path", + "base": "non-spec:/.//p", + "href": "non-spec:/path", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + "# percent encoded hosts in non-special-URLs", + { + "input": "non-special://%E2%80%A0/", + "base": null, + "href": "non-special://%E2%80%A0/", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "%E2%80%A0", + "hostname": "%E2%80%A0", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special://H%4fSt/path", + "base": null, + "href": "non-special://H%4fSt/path", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "H%4fSt", + "hostname": "H%4fSt", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + "# IPv6 in non-special-URLs", + { + "input": "non-special://[1:2:0:0:5:0:0:0]/", + "base": null, + "href": "non-special://[1:2:0:0:5::]/", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "[1:2:0:0:5::]", + "hostname": "[1:2:0:0:5::]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special://[1:2:0:0:0:0:0:3]/", + "base": null, + "href": "non-special://[1:2::3]/", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "[1:2::3]", + "hostname": "[1:2::3]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special://[1:2::3]:80/", + "base": null, + "href": "non-special://[1:2::3]:80/", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "[1:2::3]:80", + "hostname": "[1:2::3]", + "port": "80", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "non-special://[:80/", + "base": null, + "failure": true + }, + { + "input": "blob:https://example.com:443/", + "base": null, + "href": "blob:https://example.com:443/", + "origin": "https://example.com", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "https://example.com:443/", + "search": "", + "hash": "" + }, + { + "input": "blob:http://example.org:88/", + "base": null, + "href": "blob:http://example.org:88/", + "origin": "http://example.org:88", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "http://example.org:88/", + "search": "", + "hash": "" + }, + { + "input": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", + "base": null, + "href": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "d3958f5c-0777-0845-9dcf-2cb28783acaf", + "search": "", + "hash": "" + }, + { + "input": "blob:", + "base": null, + "href": "blob:", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "", + "search": "", + "hash": "" + }, + "blob: in blob:", + { + "input": "blob:blob:", + "base": null, + "href": "blob:blob:", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "blob:", + "search": "", + "hash": "" + }, + { + "input": "blob:blob:https://example.org/", + "base": null, + "href": "blob:blob:https://example.org/", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "blob:https://example.org/", + "search": "", + "hash": "" + }, + "Non-http(s): in blob:", + { + "input": "blob:about:blank", + "base": null, + "href": "blob:about:blank", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "about:blank", + "search": "", + "hash": "" + }, + { + "input": "blob:file://host/path", + "base": null, + "href": "blob:file://host/path", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "file://host/path", + "search": "", + "hash": "" + }, + { + "input": "blob:ftp://host/path", + "base": null, + "href": "blob:ftp://host/path", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "ftp://host/path", + "search": "", + "hash": "" + }, + { + "input": "blob:ws://example.org/", + "base": null, + "href": "blob:ws://example.org/", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "ws://example.org/", + "search": "", + "hash": "" + }, + { + "input": "blob:wss://example.org/", + "base": null, + "href": "blob:wss://example.org/", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "wss://example.org/", + "search": "", + "hash": "" + }, + "Percent-encoded http: in blob:", + { + "input": "blob:http%3a//example.org/", + "base": null, + "href": "blob:http%3a//example.org/", + "origin": "null", + "protocol": "blob:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "http%3a//example.org/", + "search": "", + "hash": "" + }, + "Invalid IPv4 radix digits", + { + "input": "http://0x7f.0.0.0x7g", + "base": null, + "href": "http://0x7f.0.0.0x7g/", + "protocol": "http:", + "username": "", + "password": "", + "host": "0x7f.0.0.0x7g", + "hostname": "0x7f.0.0.0x7g", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://0X7F.0.0.0X7G", + "base": null, + "href": "http://0x7f.0.0.0x7g/", + "protocol": "http:", + "username": "", + "password": "", + "host": "0x7f.0.0.0x7g", + "hostname": "0x7f.0.0.0x7g", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Invalid IPv4 portion of IPv6 address", + { + "input": "http://[::127.0.0.0.1]", + "base": null, + "failure": true + }, + "Uncompressed IPv6 addresses with 0", + { + "input": "http://[0:1:0:1:0:1:0:1]", + "base": null, + "href": "http://[0:1:0:1:0:1:0:1]/", + "protocol": "http:", + "username": "", + "password": "", + "host": "[0:1:0:1:0:1:0:1]", + "hostname": "[0:1:0:1:0:1:0:1]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "http://[1:0:1:0:1:0:1:0]", + "base": null, + "href": "http://[1:0:1:0:1:0:1:0]/", + "protocol": "http:", + "username": "", + "password": "", + "host": "[1:0:1:0:1:0:1:0]", + "hostname": "[1:0:1:0:1:0:1:0]", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "Percent-encoded query and fragment", + { + "input": "http://example.org/test?\u0022", + "base": null, + "href": "http://example.org/test?%22", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%22", + "hash": "" + }, + { + "input": "http://example.org/test?\u0023", + "base": null, + "href": "http://example.org/test?#", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "http://example.org/test?\u003C", + "base": null, + "href": "http://example.org/test?%3C", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%3C", + "hash": "" + }, + { + "input": "http://example.org/test?\u003E", + "base": null, + "href": "http://example.org/test?%3E", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%3E", + "hash": "" + }, + { + "input": "http://example.org/test?\u2323", + "base": null, + "href": "http://example.org/test?%E2%8C%A3", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%E2%8C%A3", + "hash": "" + }, + { + "input": "http://example.org/test?%23%23", + "base": null, + "href": "http://example.org/test?%23%23", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%23%23", + "hash": "" + }, + { + "input": "http://example.org/test?%GH", + "base": null, + "href": "http://example.org/test?%GH", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?%GH", + "hash": "" + }, + { + "input": "http://example.org/test?a#%EF", + "base": null, + "href": "http://example.org/test?a#%EF", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#%EF" + }, + { + "input": "http://example.org/test?a#%GH", + "base": null, + "href": "http://example.org/test?a#%GH", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#%GH" + }, + "URLs that require a non-about:blank base. (Also serve as invalid base tests.)", + { + "input": "a", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "a/", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "a//", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + "Bases that don't fail to parse but fail to be bases", + { + "input": "test-a-colon.html", + "base": "a:", + "failure": true + }, + { + "input": "test-a-colon-b.html", + "base": "a:b", + "failure": true + }, + "Other base URL tests, that must succeed", + { + "input": "test-a-colon-slash.html", + "base": "a:/", + "href": "a:/test-a-colon-slash.html", + "protocol": "a:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test-a-colon-slash.html", + "search": "", + "hash": "" + }, + { + "input": "test-a-colon-slash-slash.html", + "base": "a://", + "href": "a:///test-a-colon-slash-slash.html", + "protocol": "a:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test-a-colon-slash-slash.html", + "search": "", + "hash": "" + }, + { + "input": "test-a-colon-slash-b.html", + "base": "a:/b", + "href": "a:/test-a-colon-slash-b.html", + "protocol": "a:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test-a-colon-slash-b.html", + "search": "", + "hash": "" + }, + { + "input": "test-a-colon-slash-slash-b.html", + "base": "a://b", + "href": "a://b/test-a-colon-slash-slash-b.html", + "protocol": "a:", + "username": "", + "password": "", + "host": "b", + "hostname": "b", + "port": "", + "pathname": "/test-a-colon-slash-slash-b.html", + "search": "", + "hash": "" + }, + "Null code point in fragment", + { + "input": "http://example.org/test?a#b\u0000c", + "base": null, + "href": "http://example.org/test?a#b%00c", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#b%00c" + }, + { + "input": "non-spec://example.org/test?a#b\u0000c", + "base": null, + "href": "non-spec://example.org/test?a#b%00c", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#b%00c" + }, + { + "input": "non-spec:/test?a#b\u0000c", + "base": null, + "href": "non-spec:/test?a#b%00c", + "protocol": "non-spec:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "?a", + "hash": "#b%00c" + }, + "First scheme char - not allowed: https://github.com/whatwg/url/issues/464", + { + "input": "10.0.0.7:8080/foo.html", + "base": "file:///some/dir/bar.html", + "href": "file:///some/dir/10.0.0.7:8080/foo.html", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/some/dir/10.0.0.7:8080/foo.html", + "search": "", + "hash": "" + }, + "Subsequent scheme chars - not allowed", + { + "input": "a!@$*=/foo.html", + "base": "file:///some/dir/bar.html", + "href": "file:///some/dir/a!@$*=/foo.html", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/some/dir/a!@$*=/foo.html", + "search": "", + "hash": "" + }, + "First and subsequent scheme chars - allowed", + { + "input": "a1234567890-+.:foo/bar", + "base": "http://example.com/dir/file", + "href": "a1234567890-+.:foo/bar", + "protocol": "a1234567890-+.:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "foo/bar", + "search": "", + "hash": "" + }, + "IDNA ignored code points in file URLs hosts", + { + "input": "file://a\u00ADb/p", + "base": null, + "href": "file://ab/p", + "protocol": "file:", + "username": "", + "password": "", + "host": "ab", + "hostname": "ab", + "port": "", + "pathname": "/p", + "search": "", + "hash": "" + }, + { + "input": "file://a%C2%ADb/p", + "base": null, + "href": "file://ab/p", + "protocol": "file:", + "username": "", + "password": "", + "host": "ab", + "hostname": "ab", + "port": "", + "pathname": "/p", + "search": "", + "hash": "" + }, + "IDNA hostnames which get mapped to 'localhost'", + { + "input": "file://loC𝐀𝐋𝐇𝐨𝐬𝐭/usr/bin", + "base": null, + "href": "file:///usr/bin", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/usr/bin", + "search": "", + "hash": "" + }, + "Empty host after the domain to ASCII", + { + "input": "file://\u00ad/p", + "base": null, + "failure": true + }, + { + "input": "file://%C2%AD/p", + "base": null, + "failure": true + }, + { + "input": "file://xn--/p", + "base": null, + "failure": true + }, + "https://bugzilla.mozilla.org/show_bug.cgi?id=1647058", + { + "input": "#link", + "base": "https://example.org/##link", + "href": "https://example.org/#link", + "protocol": "https:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/", + "search": "", + "hash": "#link" + }, + "UTF-8 percent-encode of C0 control percent-encode set and supersets", + { + "input": "non-special:cannot-be-a-base-url-\u0000\u0001\u001F\u001E\u007E\u007F\u0080", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", + "origin": "null", + "password": "", + "pathname": "cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", + "origin": "null", + "password": "", + "pathname": "cannot-be-a-base-url-!\"$%&'()*+,-.;<=>@[\\]^_`{|}~@/", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "https://www.example.com/path{\u007Fpath.html?query'\u007F=query#fragment<\u007Ffragment", + "base": null, + "hash": "#fragment%3C%7Ffragment", + "host": "www.example.com", + "hostname": "www.example.com", + "href": "https://www.example.com/path%7B%7Fpath.html?query%27%7F=query#fragment%3C%7Ffragment", + "origin": "https://www.example.com", + "password": "", + "pathname": "/path%7B%7Fpath.html", + "port": "", + "protocol": "https:", + "search": "?query%27%7F=query", + "username": "" + }, + { + "input": "https://user:pass[\u007F@foo/bar", + "base": "http://example.org", + "hash": "", + "host": "foo", + "hostname": "foo", + "href": "https://user:pass%5B%7F@foo/bar", + "origin": "https://foo", + "password": "pass%5B%7F", + "pathname": "/bar", + "port": "", + "protocol": "https:", + "search": "", + "username": "user" + }, + "Tests for the distinct percent-encode sets", + { + "input": "foo:// !\"$%&'()*+,-.;<=>@[\\]^_`{|}~@host/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "foo://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", + "origin": "null", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~" + }, + { + "input": "wss:// !\"$%&'()*+,-.;<=>@[]^_`{|}~@host/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "wss://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/", + "origin": "wss://host", + "password": "", + "pathname": "/", + "port":"", + "protocol": "wss:", + "search": "", + "username": "%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~" + }, + { + "input": "foo://joe: !\"$%&'()*+,-.:;<=>@[\\]^_`{|}~@host/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "foo://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", + "origin": "null", + "password": "%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "joe" + }, + { + "input": "wss://joe: !\"$%&'()*+,-.:;<=>@[]^_`{|}~@host/", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "wss://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~@host/", + "origin": "wss://host", + "password": "%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5D%5E_%60%7B%7C%7D~", + "pathname": "/", + "port":"", + "protocol": "wss:", + "search": "", + "username": "joe" + }, + { + "input": "foo://!\"$%&'()*+,-.;=_`{}~/", + "base": null, + "hash": "", + "host": "!\"$%&'()*+,-.;=_`{}~", + "hostname": "!\"$%&'()*+,-.;=_`{}~", + "href":"foo://!\"$%&'()*+,-.;=_`{}~/", + "origin": "null", + "password": "", + "pathname": "/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "wss://!\"$&'()*+,-.;=_`{}~/", + "base": null, + "hash": "", + "host": "!\"$&'()*+,-.;=_`{}~", + "hostname": "!\"$&'()*+,-.;=_`{}~", + "href":"wss://!\"$&'()*+,-.;=_`{}~/", + "origin": "wss://!\"$&'()*+,-.;=_`{}~", + "password": "", + "pathname": "/", + "port":"", + "protocol": "wss:", + "search": "", + "username": "" + }, + { + "input": "foo://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "foo://host/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]%5E_%60%7B|%7D~", + "origin": "null", + "password": "", + "pathname": "/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]%5E_%60%7B|%7D~", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "wss://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "wss://host/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B|%7D~", + "origin": "wss://host", + "password": "", + "pathname": "/%20!%22$%&'()*+,-./:;%3C=%3E@[/]%5E_%60%7B|%7D~", + "port":"", + "protocol": "wss:", + "search": "", + "username": "" + }, + { + "input": "foo://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "foo://host/dir/?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", + "origin": "null", + "password": "", + "pathname": "/dir/", + "port":"", + "protocol": "foo:", + "search": "?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", + "username": "" + }, + { + "input": "wss://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + "base": null, + "hash": "", + "host": "host", + "hostname": "host", + "href": "wss://host/dir/?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", + "origin": "wss://host", + "password": "", + "pathname": "/dir/", + "port":"", + "protocol": "wss:", + "search": "?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", + "username": "" + }, + { + "input": "foo://host/dir/# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + "base": null, + "hash": "#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", + "host": "host", + "hostname": "host", + "href": "foo://host/dir/#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", + "origin": "null", + "password": "", + "pathname": "/dir/", + "port":"", + "protocol": "foo:", + "search": "", + "username": "" + }, + { + "input": "wss://host/dir/# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", + "base": null, + "hash": "#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", + "host": "host", + "hostname": "host", + "href": "wss://host/dir/#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", + "origin": "wss://host", + "password": "", + "pathname": "/dir/", + "port":"", + "protocol": "wss:", + "search": "", + "username": "" + }, + "Ensure that input schemes are not ignored when resolving non-special URLs", + { + "input": "abc:rootless", + "base": "abc://host/path", + "hash": "", + "host": "", + "hostname": "", + "href":"abc:rootless", + "password": "", + "pathname": "rootless", + "port":"", + "protocol": "abc:", + "search": "", + "username": "" + }, + { + "input": "abc:rootless", + "base": "abc:/path", + "hash": "", + "host": "", + "hostname": "", + "href":"abc:rootless", + "password": "", + "pathname": "rootless", + "port":"", + "protocol": "abc:", + "search": "", + "username": "" + }, + { + "input": "abc:rootless", + "base": "abc:path", + "hash": "", + "host": "", + "hostname": "", + "href":"abc:rootless", + "password": "", + "pathname": "rootless", + "port":"", + "protocol": "abc:", + "search": "", + "username": "" + }, + { + "input": "abc:/rooted", + "base": "abc://host/path", + "hash": "", + "host": "", + "hostname": "", + "href":"abc:/rooted", + "password": "", + "pathname": "/rooted", + "port":"", + "protocol": "abc:", + "search": "", + "username": "" + }, + "Empty query and fragment with blank should throw an error", + { + "input": "#", + "base": null, + "failure": true, + "relativeTo": "any-base" + }, + { + "input": "?", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + "Last component looks like a number, but not valid IPv4", + { + "input": "http://1.2.3.4.5", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://1.2.3.4.5.", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://0..0x300/", + "base": null, + "failure": true + }, + { + "input": "http://0..0x300./", + "base": null, + "failure": true + }, + { + "input": "http://256.256.256.256.256", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://256.256.256.256.256.", + "base": "http://other.com/", + "failure": true + }, + { + "input": "http://1.2.3.08", + "base": null, + "failure": true + }, + { + "input": "http://1.2.3.08.", + "base": null, + "failure": true + }, + { + "input": "http://1.2.3.09", + "base": null, + "failure": true + }, + { + "input": "http://09.2.3.4", + "base": null, + "failure": true + }, + { + "input": "http://09.2.3.4.", + "base": null, + "failure": true + }, + { + "input": "http://01.2.3.4.5", + "base": null, + "failure": true + }, + { + "input": "http://01.2.3.4.5.", + "base": null, + "failure": true + }, + { + "input": "http://0x100.2.3.4", + "base": null, + "failure": true + }, + { + "input": "http://0x100.2.3.4.", + "base": null, + "failure": true + }, + { + "input": "http://0x1.2.3.4.5", + "base": null, + "failure": true + }, + { + "input": "http://0x1.2.3.4.5.", + "base": null, + "failure": true + }, + { + "input": "http://foo.1.2.3.4", + "base": null, + "failure": true + }, + { + "input": "http://foo.1.2.3.4.", + "base": null, + "failure": true + }, + { + "input": "http://foo.2.3.4", + "base": null, + "failure": true + }, + { + "input": "http://foo.2.3.4.", + "base": null, + "failure": true + }, + { + "input": "http://foo.09", + "base": null, + "failure": true + }, + { + "input": "http://foo.09.", + "base": null, + "failure": true + }, + { + "input": "http://foo.0x4", + "base": null, + "failure": true + }, + { + "input": "http://foo.0x4.", + "base": null, + "failure": true + }, + { + "input": "http://foo.09..", + "base": null, + "hash": "", + "host": "foo.09..", + "hostname": "foo.09..", + "href":"http://foo.09../", + "password": "", + "pathname": "/", + "port":"", + "protocol": "http:", + "search": "", + "username": "" + }, + { + "input": "http://0999999999999999999/", + "base": null, + "failure": true + }, + { + "input": "http://foo.0x", + "base": null, + "failure": true + }, + { + "input": "http://foo.0XFfFfFfFfFfFfFfFfFfAcE123", + "base": null, + "failure": true + }, + { + "input": "http://💩.123/", + "base": null, + "failure": true + }, + "U+0000 and U+FFFF in various places", + { + "input": "https://\u0000y", + "base": null, + "failure": true + }, + { + "input": "https://x/\u0000y", + "base": null, + "hash": "", + "host": "x", + "hostname": "x", + "href": "https://x/%00y", + "password": "", + "pathname": "/%00y", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "input": "https://x/?\u0000y", + "base": null, + "hash": "", + "host": "x", + "hostname": "x", + "href": "https://x/?%00y", + "password": "", + "pathname": "/", + "port": "", + "protocol": "https:", + "search": "?%00y", + "username": "" + }, + { + "input": "https://x/?#\u0000y", + "base": null, + "hash": "#%00y", + "host": "x", + "hostname": "x", + "href": "https://x/?#%00y", + "password": "", + "pathname": "/", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "input": "https://\uFFFFy", + "base": null, + "failure": true + }, + { + "input": "https://x/\uFFFFy", + "base": null, + "hash": "", + "host": "x", + "hostname": "x", + "href": "https://x/%EF%BF%BFy", + "password": "", + "pathname": "/%EF%BF%BFy", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "input": "https://x/?\uFFFFy", + "base": null, + "hash": "", + "host": "x", + "hostname": "x", + "href": "https://x/?%EF%BF%BFy", + "password": "", + "pathname": "/", + "port": "", + "protocol": "https:", + "search": "?%EF%BF%BFy", + "username": "" + }, + { + "input": "https://x/?#\uFFFFy", + "base": null, + "hash": "#%EF%BF%BFy", + "host": "x", + "hostname": "x", + "href": "https://x/?#%EF%BF%BFy", + "password": "", + "pathname": "/", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "input": "non-special:\u0000y", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:%00y", + "password": "", + "pathname": "%00y", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:x/\u0000y", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:x/%00y", + "password": "", + "pathname": "x/%00y", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:x/?\u0000y", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:x/?%00y", + "password": "", + "pathname": "x/", + "port": "", + "protocol": "non-special:", + "search": "?%00y", + "username": "" + }, + { + "input": "non-special:x/?#\u0000y", + "base": null, + "hash": "#%00y", + "host": "", + "hostname": "", + "href": "non-special:x/?#%00y", + "password": "", + "pathname": "x/", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:\uFFFFy", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:%EF%BF%BFy", + "password": "", + "pathname": "%EF%BF%BFy", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:x/\uFFFFy", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:x/%EF%BF%BFy", + "password": "", + "pathname": "x/%EF%BF%BFy", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "non-special:x/?\uFFFFy", + "base": null, + "hash": "", + "host": "", + "hostname": "", + "href": "non-special:x/?%EF%BF%BFy", + "password": "", + "pathname": "x/", + "port": "", + "protocol": "non-special:", + "search": "?%EF%BF%BFy", + "username": "" + }, + { + "input": "non-special:x/?#\uFFFFy", + "base": null, + "hash": "#%EF%BF%BFy", + "host": "", + "hostname": "", + "href": "non-special:x/?#%EF%BF%BFy", + "password": "", + "pathname": "x/", + "port": "", + "protocol": "non-special:", + "search": "", + "username": "" + }, + { + "input": "", + "base": null, + "failure": true, + "relativeTo": "non-opaque-path-base" + }, + { + "input": "https://example.com/\"quoted\"", + "base": null, + "hash": "", + "host": "example.com", + "hostname": "example.com", + "href": "https://example.com/%22quoted%22", + "origin": "https://example.com", + "password": "", + "pathname": "/%22quoted%22", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "input": "https://a%C2%ADb/", + "base": null, + "hash": "", + "host": "ab", + "hostname": "ab", + "href": "https://ab/", + "origin": "https://ab", + "password": "", + "pathname": "/", + "port": "", + "protocol": "https:", + "search": "", + "username": "" + }, + { + "comment": "Empty host after domain to ASCII", + "input": "https://\u00AD/", + "base": null, + "failure": true + }, + { + "input": "https://%C2%AD/", + "base": null, + "failure": true + }, + { + "input": "https://xn--/", + "base": null, + "failure": true + }, + "Non-special schemes that some implementations might incorrectly treat as special", + { + "input": "data://example.com:8080/pathname?search#hash", + "base": null, + "href": "data://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "data:///test", + "base": null, + "href": "data:///test", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "data://test/a/../b", + "base": null, + "href": "data://test/b", + "origin": "null", + "protocol": "data:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "data://:443", + "base": null, + "failure": true + }, + { + "input": "data://test:test", + "base": null, + "failure": true + }, + { + "input": "data://[:1]", + "base": null, + "failure": true + }, + { + "input": "javascript://example.com:8080/pathname?search#hash", + "base": null, + "href": "javascript://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "javascript:///test", + "base": null, + "href": "javascript:///test", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "javascript://test/a/../b", + "base": null, + "href": "javascript://test/b", + "origin": "null", + "protocol": "javascript:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "javascript://:443", + "base": null, + "failure": true + }, + { + "input": "javascript://test:test", + "base": null, + "failure": true + }, + { + "input": "javascript://[:1]", + "base": null, + "failure": true + }, + { + "input": "mailto://example.com:8080/pathname?search#hash", + "base": null, + "href": "mailto://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "mailto:///test", + "base": null, + "href": "mailto:///test", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "mailto://test/a/../b", + "base": null, + "href": "mailto://test/b", + "origin": "null", + "protocol": "mailto:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "mailto://:443", + "base": null, + "failure": true + }, + { + "input": "mailto://test:test", + "base": null, + "failure": true + }, + { + "input": "mailto://[:1]", + "base": null, + "failure": true + }, + { + "input": "intent://example.com:8080/pathname?search#hash", + "base": null, + "href": "intent://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "intent:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "intent:///test", + "base": null, + "href": "intent:///test", + "origin": "null", + "protocol": "intent:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "intent://test/a/../b", + "base": null, + "href": "intent://test/b", + "origin": "null", + "protocol": "intent:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "intent://:443", + "base": null, + "failure": true + }, + { + "input": "intent://test:test", + "base": null, + "failure": true + }, + { + "input": "intent://[:1]", + "base": null, + "failure": true + }, + { + "input": "urn://example.com:8080/pathname?search#hash", + "base": null, + "href": "urn://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "urn:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "urn:///test", + "base": null, + "href": "urn:///test", + "origin": "null", + "protocol": "urn:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "urn://test/a/../b", + "base": null, + "href": "urn://test/b", + "origin": "null", + "protocol": "urn:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "urn://:443", + "base": null, + "failure": true + }, + { + "input": "urn://test:test", + "base": null, + "failure": true + }, + { + "input": "urn://[:1]", + "base": null, + "failure": true + }, + { + "input": "turn://example.com:8080/pathname?search#hash", + "base": null, + "href": "turn://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "turn:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "turn:///test", + "base": null, + "href": "turn:///test", + "origin": "null", + "protocol": "turn:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "turn://test/a/../b", + "base": null, + "href": "turn://test/b", + "origin": "null", + "protocol": "turn:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "turn://:443", + "base": null, + "failure": true + }, + { + "input": "turn://test:test", + "base": null, + "failure": true + }, + { + "input": "turn://[:1]", + "base": null, + "failure": true + }, + { + "input": "stun://example.com:8080/pathname?search#hash", + "base": null, + "href": "stun://example.com:8080/pathname?search#hash", + "origin": "null", + "protocol": "stun:", + "username": "", + "password": "", + "host": "example.com:8080", + "hostname": "example.com", + "port": "8080", + "pathname": "/pathname", + "search": "?search", + "hash": "#hash" + }, + { + "input": "stun:///test", + "base": null, + "href": "stun:///test", + "origin": "null", + "protocol": "stun:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/test", + "search": "", + "hash": "" + }, + { + "input": "stun://test/a/../b", + "base": null, + "href": "stun://test/b", + "origin": "null", + "protocol": "stun:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/b", + "search": "", + "hash": "" + }, + { + "input": "stun://:443", + "base": null, + "failure": true + }, + { + "input": "stun://test:test", + "base": null, + "failure": true + }, + { + "input": "stun://[:1]", + "base": null, + "failure": true + }, + { + "input": "w://x:0", + "base": null, + "href": "w://x:0", + "origin": "null", + "protocol": "w:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "west://x:0", + "base": null, + "href": "west://x:0", + "origin": "null", + "protocol": "west:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "android://x:0/a", + "base": null, + "href": "android://x:0/a", + "origin": "null", + "protocol": "android:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "drivefs://x:0/a", + "base": null, + "href": "drivefs://x:0/a", + "origin": "null", + "protocol": "drivefs:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "chromeos-steam://x:0/a", + "base": null, + "href": "chromeos-steam://x:0/a", + "origin": "null", + "protocol": "chromeos-steam:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "steam://x:0/a", + "base": null, + "href": "steam://x:0/a", + "origin": "null", + "protocol": "steam:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "materialized-view://x:0/a", + "base": null, + "href": "materialized-view://x:0/a", + "origin": "null", + "protocol": "materialized-view:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "/a", + "search": "", + "hash": "" + }, + { + "input": "android-app://x:0", + "base": null, + "href": "android-app://x:0", + "origin": "null", + "protocol": "android-app:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "chrome-distiller://x:0", + "base": null, + "href": "chrome-distiller://x:0", + "origin": "null", + "protocol": "chrome-distiller:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "chrome-extension://x:0", + "base": null, + "href": "chrome-extension://x:0", + "origin": "null", + "protocol": "chrome-extension:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "chrome-native://x:0", + "base": null, + "href": "chrome-native://x:0", + "origin": "null", + "protocol": "chrome-native:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "chrome-resource://x:0", + "base": null, + "href": "chrome-resource://x:0", + "origin": "null", + "protocol": "chrome-resource:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "chrome-search://x:0", + "base": null, + "href": "chrome-search://x:0", + "origin": "null", + "protocol": "chrome-search:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "fuchsia-dir://x:0", + "base": null, + "href": "fuchsia-dir://x:0", + "origin": "null", + "protocol": "fuchsia-dir:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + { + "input": "isolated-app://x:0", + "base": null, + "href": "isolated-app://x:0", + "origin": "null", + "protocol": "isolated-app:", + "username": "", + "password": "", + "host": "x:0", + "hostname": "x", + "port": "0", + "pathname": "", + "search": "", + "hash": "" + }, + "Scheme relative path starting with multiple slashes", + { + "input": "///test", + "base": "http://example.org/", + "href": "http://test/", + "protocol": "http:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///\\//\\//test", + "base": "http://example.org/", + "href": "http://test/", + "protocol": "http:", + "username": "", + "password": "", + "host": "test", + "hostname": "test", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///example.org/path", + "base": "http://example.org/", + "href": "http://example.org/path", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + { + "input": "///example.org/../path", + "base": "http://example.org/", + "href": "http://example.org/path", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + { + "input": "///example.org/../../", + "base": "http://example.org/", + "href": "http://example.org/", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///example.org/../path/../../", + "base": "http://example.org/", + "href": "http://example.org/", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "///example.org/../path/../../path", + "base": "http://example.org/", + "href": "http://example.org/path", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + { + "input": "/\\/\\//example.org/../path", + "base": "http://example.org/", + "href": "http://example.org/path", + "protocol": "http:", + "username": "", + "password": "", + "host": "example.org", + "hostname": "example.org", + "port": "", + "pathname": "/path", + "search": "", + "hash": "" + }, + { + "input": "///abcdef/../", + "base": "file:///", + "href": "file:///", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + { + "input": "/\\//\\/a/../", + "base": "file:///", + "href": "file://////", + "protocol": "file:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "////", + "search": "", + "hash": "" + }, + { + "input": "//a/../", + "base": "file:///", + "href": "file://a/", + "protocol": "file:", + "username": "", + "password": "", + "host": "a", + "hostname": "a", + "port": "", + "pathname": "/", + "search": "", + "hash": "" + }, + "# Non-special URL and backslashes", + { + "input": "non-special:\\\\opaque", + "base": null, + "href": "non-special:\\\\opaque", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "\\\\opaque", + "search": "", + "hash": "" + }, + { + "input": "non-special:\\\\opaque/path", + "base": null, + "href": "non-special:\\\\opaque/path", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "\\\\opaque/path", + "search": "", + "hash": "" + }, + { + "input": "non-special:\\\\opaque\\path", + "base": null, + "href": "non-special:\\\\opaque\\path", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "\\\\opaque\\path", + "search": "", + "hash": "" + }, + { + "input": "non-special:\\/opaque", + "base": null, + "href": "non-special:\\/opaque", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "\\/opaque", + "search": "", + "hash": "" + }, + { + "input": "non-special:/\\path", + "base": null, + "href": "non-special:/\\path", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "", + "hostname": "", + "port": "", + "pathname": "/\\path", + "search": "", + "hash": "" + }, + { + "input": "non-special://host\\a", + "base": null, + "failure": true + }, + { + "input": "non-special://host/a\\b", + "base": null, + "href": "non-special://host/a\\b", + "origin": "null", + "protocol": "non-special:", + "username": "", + "password": "", + "host": "host", + "hostname": "host", + "port": "", + "pathname": "/a\\b", + "search": "", + "hash": "" + } +] diff --git a/zigmod.yml b/zigmod.yml new file mode 100644 index 0000000000000000000000000000000000000000..cab4caff7ffdb0631304d38247518557a5a2d92d --- /dev/null +++ b/zigmod.yml @@ -0,0 +1,8 @@ +id: k90bjcb81yhkqjoddl1qasoktf2eowtyjrf6ixvmmn1s0sra +name: url +main: url.zig +license: MPL-2.0 +description: A WHATWG URL-compatible parser for Zig +root_dependencies: + - src: git https://github.com/nektro/zig-json + - src: git https://github.com/nektro/zig-expect