/*
 * SDK Pullenti Lingvo, version 4.33, fabruary 2026. Copyright (c) 2013-2026, Pullenti. All rights reserved. 
 * Non-Commercial Freeware and Commercial Software.
 * This class is generated using the converter Unisharping (www.unisharping.ru) from Pullenti C#.NET project. 
 * The latest version of the code is available on the site www.pullenti.ru
 */

const Utils = require("./../../../unisharp/Utils");
const StringBuilder = require("./../../../unisharp/StringBuilder");

const TerminParseAttr = require("./../../core/TerminParseAttr");
const MorphNumber = require("./../../../morph/MorphNumber");
const GetTextAttr = require("./../../core/GetTextAttr");
const NumberExType = require("./../../core/NumberExType");
const NounPhraseParseAttr = require("./../../core/NounPhraseParseAttr");
const MetaToken = require("./../../MetaToken");
const MorphClass = require("./../../../morph/MorphClass");
const TextToken = require("./../../TextToken");
const NumberSpellingType = require("./../../NumberSpellingType");
const StreetItemType = require("./../../address/internal/StreetItemType");
const MorphGender = require("./../../../morph/MorphGender");
const LanguageHelper = require("./../../../morph/LanguageHelper");
const BracketParseAttr = require("./../../core/BracketParseAttr");
const BracketHelper = require("./../../core/BracketHelper");
const ReferentToken = require("./../../ReferentToken");
const NumberToken = require("./../../NumberToken");
const MiscHelper = require("./../../core/MiscHelper");
const BracketSequenceToken = require("./../../core/BracketSequenceToken");
const Termin = require("./../../core/Termin");
const TerminCollection = require("./../../core/TerminCollection");
const MiscLocationHelper = require("./MiscLocationHelper");
const GeoTokenType = require("./GeoTokenType");
const TerrItemToken = require("./TerrItemToken");
const NounPhraseHelper = require("./../../core/NounPhraseHelper");
const NumberHelper = require("./../../core/NumberHelper");
const AddressItemType = require("./../../address/internal/AddressItemType");
const AddressItemToken = require("./../../address/internal/AddressItemToken");
const StreetItemToken = require("./../../address/internal/StreetItemToken");
const CityItemToken = require("./CityItemToken");
const OrgTypToken = require("./OrgTypToken");

class NameToken extends MetaToken {
    
    constructor(b, e) {
        super(b, e, null);
        this.name = null;
        this.number = null;
        this.pref = null;
        this.miscTyp = null;
        this.isDoubt = false;
        this.isEponym = false;
        this.m_lev = 0;
        this.m_typ = GeoTokenType.ANY;
    }
    
    toString() {
        let res = new StringBuilder();
        if (this.isDoubt) 
            res.append("? ");
        if (this.pref !== null) 
            res.append(this.pref).append(" ");
        if (this.name !== null) 
            res.append("\"").append(this.name).append("\"");
        if (this.number !== null) 
            res.append(" N").append(this.number);
        return res.toString();
    }
    
    static tryParse(t, ty, lev, afterTyp = false) {
        let res = NameToken._tryParse(t, ty, lev, afterTyp);
        if (res === null) 
            return null;
        if (res.name === null && res.pref !== null && (res.whitespacesAfterCount < 3)) {
            let _next = NameToken._tryParse(res.endToken.next, ty, lev, true);
            if (_next !== null && _next.pref === null && _next.name !== null) {
                res.name = _next.name;
                if (res.number !== null) 
                    res.number = _next.number;
                res.endToken = _next.endToken;
            }
        }
        return res;
    }
    
    static _tryParse(t, ty, lev, afterTyp) {
        const NumToken = require("./NumToken");
        if (t === null || lev > 3) 
            return null;
        let br = BracketHelper.tryParse(t, BracketParseAttr.NO, 100);
        if (br === null && BracketHelper.isBracket(t, true) && MiscLocationHelper.isUserParamAddress(t)) {
            for (let tt = t.next; tt !== null; tt = tt.next) {
                if (!BracketHelper.isBracket(tt, true)) {
                    if (tt.isNewlineBefore) 
                        break;
                    if (tt.next === null || tt.next.isComma) {
                        if ((tt.endChar - t.beginChar) > 30) 
                            break;
                        br = new BracketSequenceToken(t, tt);
                        break;
                    }
                    continue;
                }
                if ((tt.endChar - t.beginChar) > 30) 
                    break;
                if (BracketHelper.tryParse(tt, BracketParseAttr.NO, 100) !== null) 
                    break;
                br = new BracketSequenceToken(t, tt);
                break;
            }
        }
        let res = null;
        let ttt = null;
        let num = null;
        let ttok = null;
        if (br !== null) {
            if (!BracketHelper.isBracket(t, true)) 
                return null;
            let ait = AddressItemToken.tryParsePureItem(t.next, null, null);
            if (ait !== null && ait.typ !== AddressItemType.NUMBER && ait.endToken.next === br.endToken) 
                return null;
            let nam = NameToken.tryParse(t.next, ty, lev + 1, false);
            if (nam !== null && nam.endToken.next === br.endToken) {
                res = nam;
                nam.beginToken = t;
                nam.endToken = br.endToken;
                res.isDoubt = false;
            }
            else {
                res = new NameToken(t, br.endToken);
                let tt = br.endToken.previous;
                if (!BracketHelper.isBracket(br.endToken, false)) 
                    tt = br.endToken;
                for (let tt3 = t.next; tt3 !== null && tt3.endChar <= tt.endChar; tt3 = tt3.next) {
                    let nn = NumToken.tryParse(tt3, GeoTokenType.ANY);
                    if (nn !== null && nn.endToken === tt) {
                        res.number = nn.value;
                        res.miscTyp = nn.miscType;
                        tt = tt3.previous;
                        if (tt !== null && tt.isHiphen) 
                            tt = tt.previous;
                        break;
                    }
                }
                if (tt !== null && tt.beginChar > br.beginChar) 
                    res.name = MiscHelper.getTextValue(t.next, tt, GetTextAttr.NO);
            }
        }
        else if ((t instanceof ReferentToken) && t.beginToken === t.endToken && !t.beginToken.chars.isAllLower) {
            res = NameToken._new1554(t, t, true);
            res.name = MiscHelper.getTextValueOfMetaToken(Utils.as(t, ReferentToken), GetTextAttr.NO);
        }
        else if (((ttt = MiscHelper.checkNumberPrefix(t))) instanceof NumberToken) {
            res = NameToken._new1555(t, ttt, ttt.value);
            let nnn = NumToken.tryParse(t, GeoTokenType.ORG);
            if (nnn !== null) {
                res.number = nnn.value;
                res.endToken = (ttt = nnn.endToken);
            }
            if (ttt.whitespacesAfterCount < 2) {
                let ttt3 = ttt.next;
                if (ttt3 !== null && ttt3.isHiphen) 
                    ttt3 = ttt3.next;
                let nam = NameToken.tryParse(ttt3, ty, lev + 1, false);
                if (nam !== null && nam.name !== null) {
                    if (res.number === null) 
                        res.number = nam.number;
                    else if (nam.number !== null) 
                        res.number = (res.number + "+" + nam.number);
                    res.name = nam.name;
                    res.endToken = nam.endToken;
                }
            }
        }
        else if ((((num = NumberHelper.tryParseAge(t)))) !== null) 
            res = NameToken._new1556(t, num.endToken, num.value + " ЛЕТ");
        else if ((((num = NumberHelper.tryParseAnniversary(t)))) !== null) 
            res = NameToken._new1556(t, num.endToken, num.value + " ЛЕТ");
        else if (t instanceof NumberToken) {
            let nn = NumberHelper.tryParseNumberWithPostfix(t);
            if (nn !== null && !MiscLocationHelper.isUserParamAddress(t)) {
                if (nn.exTyp !== NumberExType.UNDEFINED) 
                    return null;
            }
            res = NameToken._new1555(t, t, t.value);
            if (res.number === "1" || res.number === "2") {
                if (t.next !== null && t.next.isValue("ПОЛОВИНА", null)) {
                    res.name = ((res.number === "1" ? "ПЕРВОЙ" : "ВТОРОЙ")) + " ПОЛОВИНЫ";
                    res.number = null;
                    res.endToken = t.next;
                    return res;
                }
            }
            if ((t.whitespacesAfterCount < 3) && afterTyp) {
                let _next = NameToken.tryParse(t.next, ty, lev + 1, afterTyp);
                if (_next !== null && _next.name !== null) {
                    if (_next.number === null) 
                        _next.number = res.number;
                    else if (res.number !== null) 
                        _next.number = (res.number + "+" + _next.number);
                    _next.beginToken = res.beginToken;
                    res = _next;
                }
            }
            if (t.next !== null && t.next.isHiphen && !t.next.isWhitespaceAfter) {
                let _next = NameToken.tryParse(t.next.next, ty, lev + 1, afterTyp);
                if (_next !== null && _next.name !== null) {
                    if (_next.number === null) 
                        _next.number = res.number;
                    else if (res.number !== null) 
                        _next.number = (res.number + "+" + _next.number);
                    _next.beginToken = res.beginToken;
                    res = _next;
                }
            }
        }
        else if (t.isHiphen && (t.next instanceof NumberToken)) {
            num = NumberHelper.tryParseAge(t.next);
            if (num === null) 
                num = NumberHelper.tryParseAnniversary(t.next);
            if (num !== null) 
                res = NameToken._new1556(t, num.endToken, num.value + " ЛЕТ");
            else 
                res = NameToken._new1560(t, t.next, t.next.value, true);
        }
        else if ((t instanceof ReferentToken) && t.getReferent().typeName === "DATE") {
            let year = t.getReferent().getStringValue("YEAR");
            if (year !== null) 
                res = NameToken._new1556(t, t, year + " ГОДА");
            else {
                let mon = t.getReferent().getStringValue("MONTH");
                let day = t.getReferent().getStringValue("DAY");
                if (day !== null && mon === null && t.getReferent().parentReferent !== null) 
                    mon = t.getReferent().parentReferent.getStringValue("MONTH");
                if (mon !== null) 
                    res = NameToken._new1562(t, t, t.getReferent().toString().toUpperCase());
            }
        }
        else if (!(t instanceof TextToken)) 
            return null;
        else if (t.lengthChar === 1) {
            if (!t.chars.isLetter) 
                return null;
            if ((t.getMorphClassInDictionary().isPreposition && t.chars.isAllUpper && t.whitespacesAfterCount > 0) && (t.whitespacesAfterCount < 3) && (t.next instanceof TextToken)) {
                let npt = NounPhraseHelper.tryParse(t, NounPhraseParseAttr.PARSEPREPOSITION, 0, null);
                if (npt !== null && npt.endToken !== t) 
                    return NameToken._new1563(t, npt.endToken, true, MiscHelper.getTextValue(t, npt.endToken, GetTextAttr.NO));
            }
            if ((t.chars.isAllUpper && t.next !== null && t.next.isHiphen) && (t.next.next instanceof TextToken)) 
                return NameToken._new1563(t, t.next.next, true, MiscHelper.getTextValue(t, t.next.next, GetTextAttr.NO));
            if (((t.chars.isAllUpper || afterTyp)) && t.next !== null) {
                let te = null;
                if ((t.next instanceof NumberToken) && (t.whitespacesAfterCount < 2)) 
                    te = t.next;
                else if (t.next.isHiphen && (t.next.next instanceof NumberToken)) 
                    te = t.next.next;
                if (te !== null) {
                    let num1 = NumToken.tryParse(te, ty);
                    if (num1 !== null) 
                        return NameToken._new1555(t, num1.endToken, (num1.value + t.term));
                }
            }
            let ok = false;
            if (t.isNewlineAfter || t.next === null) 
                ok = true;
            else if (t.next.isComma) 
                ok = true;
            else if (t.previous !== null && t.previous.isValue("СЕКТОР", null)) 
                ok = true;
            if (ty === GeoTokenType.ORG && ok && t.chars.isLetter) 
                return NameToken._new1562(t, t, t.term);
            if ((((ty !== GeoTokenType.ORG && ty !== GeoTokenType.STRONG)) || !t.chars.isAllUpper || !t.chars.isLetter) || t.isWhitespaceAfter) 
                return null;
            let _next = NameToken.tryParse(t.next, ty, lev + 1, false);
            if (_next !== null && _next.number !== null && _next.name === null) {
                res = _next;
                res.beginToken = t;
                res.name = t.term;
            }
            else if (t.next !== null && t.next.isChar('.')) {
                let nam = new StringBuilder();
                nam.append(t.term);
                let t1 = t.next;
                for (let tt = t1.next; tt !== null; tt = tt.next) {
                    if (!(tt instanceof TextToken) || tt.lengthChar !== 1 || !tt.chars.isLetter) 
                        break;
                    if (tt.next === null || !tt.next.isChar('.')) 
                        break;
                    nam.append(tt.term);
                    tt = tt.next;
                    t1 = tt;
                }
                if (nam.length >= 3) 
                    res = NameToken._new1562(t, t1, nam.toString());
                else {
                    let rt = t.kit.processReferent("PERSON", t, null);
                    if (rt !== null) {
                        res = NameToken._new1562(t, rt.endToken, rt.referent.getStringValue("LASTNAME"));
                        if (res.name === null) 
                            res.name = rt.referent.toStringEx(false, null, 0).toUpperCase();
                        else 
                            for (let tt = t; tt !== null && tt.endChar <= rt.endChar; tt = tt.next) {
                                if ((tt instanceof TextToken) && tt.isValue(res.name, null)) {
                                    res.name = tt.term;
                                    break;
                                }
                            }
                    }
                }
            }
        }
        else if (t.term === "ИМЕНИ" || t.term === "ИМ") {
            let tt = t.next;
            if (t.isValue("ИМ", null) && tt !== null && tt.isChar('.')) 
                tt = tt.next;
            let nam = NameToken.tryParse(tt, GeoTokenType.STRONG, lev + 1, false);
            if (nam !== null) {
                nam.beginToken = t;
                nam.isDoubt = false;
                nam.isEponym = true;
                res = nam;
            }
            else {
                let si = StreetItemToken.tryParse(tt, null, false, null);
                if (si !== null) 
                    res = NameToken._new1569(t, si.endToken, false, true, si.value);
            }
        }
        else if ((((ttok = NameToken.M_ONTO.tryParse(t, TerminParseAttr.NO)))) !== null) {
            res = NameToken._new1562(t, ttok.endToken, ttok.termin.canonicText);
            let tt = ttok.endToken.next;
            if (tt !== null && tt.isValue("СССР", null)) 
                res.endToken = tt;
        }
        else if (t.isValue("ОТДЕЛЕНИЕ", null)) {
            res = NameToken.tryParse(t.next, ty, lev + 1, afterTyp);
            if (res !== null) {
                res.miscTyp = "отделение";
                res.beginToken = t;
            }
        }
        else {
            if (t.morph.containsAttr("к.ф.", null)) {
                let ptok = NameToken.M_PREF_ONTO.tryParse(t, TerminParseAttr.NO);
                if (ptok !== null) {
                    let tt = ptok.endToken.next;
                    if (tt !== null && tt.isHiphen) 
                        tt = tt.next;
                    let _next = NameToken.tryParse(tt, ty, lev + 1, false);
                    if (_next !== null && _next.name !== null) {
                        _next.name = (ptok.termin.canonicText + _next.name);
                        _next.beginToken = t;
                        return _next;
                    }
                }
            }
            if ((t.morph._class.isProperSurname || t.getMorphClassInDictionary().isProperName)) {
                let rt = t.kit.processReferent("PERSON", t, null);
                if (rt !== null) {
                    res = new NameToken(t, rt.endToken);
                    let sur = rt.referent.getStringValue("LASTNAME");
                    if (sur !== null) {
                        for (let tt = t; tt !== null && tt.endChar <= rt.endChar; tt = tt.next) {
                            if ((tt instanceof TextToken) && tt.isValue(sur, null)) 
                                res.name = tt.term;
                            else if (ty === GeoTokenType.CITY && res.name !== null) {
                                let cit = CityItemToken.checkKeyword(tt);
                                if (cit !== null) {
                                    res = null;
                                    break;
                                }
                            }
                        }
                    }
                    if (res !== null && res.name === null) 
                        res.name = MiscHelper.getTextValueOfMetaToken(rt, GetTextAttr.NO);
                }
            }
            if (res === null) {
                if (NameToken._isMiscType(t)) 
                    return null;
                let npt = NounPhraseHelper.tryParse(t, NounPhraseParseAttr.NO, 0, null);
                if (npt !== null && npt.endToken.isValue("КВАРТАЛ", null)) {
                    if (npt.beginToken === npt.endToken || npt.beginToken.isValue("КАДАСТРОВЫЙ", null)) {
                        let num2 = NumToken.tryParse(npt.endToken.next, ty);
                        if (num2 !== null && num2.isCadasterNumber) {
                            res = NameToken._new1555(t, num2.endToken, num2.value);
                            res.miscTyp = "кадастровый квартал";
                            if ((res.whitespacesAfterCount < 2) && !BracketHelper.isBracket(res.endToken.next, false)) {
                                if (res.endToken.next.isValue("ЛЕСНОЙ", null)) {
                                    res.endToken = res.endToken.next;
                                    res.name = "ЛЕСНОЙ";
                                }
                            }
                            return res;
                        }
                    }
                }
                if (npt !== null && npt.beginToken === npt.endToken) 
                    npt = null;
                if (npt !== null) {
                    let ttt2 = OrgTypToken.tryParse(npt.endToken, false, null);
                    if (ttt2 !== null && ttt2.endChar > npt.endChar) 
                        npt = null;
                    else if (ttt2 !== null && !afterTyp && !npt.morph._case.isGenitive) 
                        npt = null;
                    else if (npt.adjectives.length > 1 && OrgTypToken.tryParse(npt.endToken.previous, false, null) !== null) 
                        npt = null;
                }
                if (npt !== null && npt.endToken.chars.isAllLower) {
                    if (t.chars.isAllLower) 
                        npt = null;
                    else if (StreetItemToken.checkKeyword(npt.endToken)) {
                        if (npt.morph.number === MorphNumber.PLURAL) {
                        }
                        else if (npt.endToken.isValue("САД", null) || npt.endToken.isValue("ПАРК", null)) {
                        }
                        else 
                            npt = null;
                    }
                }
                if (npt !== null) 
                    res = NameToken._new1572(t, npt.endToken, npt.morph, Utils.replaceString(MiscHelper.getTextValueOfMetaToken(npt, GetTextAttr.NO), "-", " "));
                else if (!t.chars.isAllLower || t.isValue("МЕСТНОСТЬ", null) || ((afterTyp && MiscLocationHelper.isUserParamAddress(t)))) {
                    if (TerrItemToken.checkKeyword(t) !== null) {
                        if (t.chars.isCapitalUpper && afterTyp) {
                        }
                        else 
                            return null;
                    }
                    let sit = StreetItemToken.tryParse(t, null, false, null);
                    if (sit !== null && sit.typ === StreetItemType.NOUN) {
                        if (sit.endToken.isChar('.')) 
                            return null;
                        if (sit.termin.canonicText === "УЛИЦА") 
                            return null;
                    }
                    if (t.isValue("ФИЛИАЛ", null)) 
                        return null;
                    let ait = AddressItemToken.tryParsePureItem(t, null, null);
                    if ((ait !== null && ait.typ !== AddressItemType.NUMBER && ait.value !== null) && ait.value !== "0") 
                        return null;
                    res = NameToken._new1573(t, t, t.term, t.morph);
                    if (t.chars.isAllLower) 
                        res.isDoubt = true;
                    if ((((LanguageHelper.endsWith(res.name, "ОВ") || LanguageHelper.endsWith(res.name, "ВО"))) && (t.next instanceof TextToken) && !t.next.chars.isAllLower) && t.next.lengthChar > 1 && !t.next.getMorphClassInDictionary().isUndefined) {
                        if (StreetItemToken.checkKeyword(t.next)) {
                        }
                        else if (OrgTypToken.tryParse(t.next, false, null) !== null) {
                        }
                        else {
                            res.endToken = t.next;
                            res.name = (res.name + " " + t.next.term);
                            res.morph = t.next.morph;
                        }
                    }
                    if (((t.whitespacesAfterCount < 2) && (t.next instanceof TextToken) && t.next.chars.isLetter) && t.next.lengthChar > 1) {
                        let ok = false;
                        if (MiscLocationHelper.checkTerritory(t.next) !== null) {
                        }
                        else if (t.next.lengthChar >= 3 && t.next.getMorphClassInDictionary().isUndefined) 
                            ok = true;
                        else if (MiscLocationHelper.checkNameLong(res) !== null) 
                            ok = true;
                        else if (StreetItemToken.checkKeyword(t.next)) {
                        }
                        else {
                            let ok1 = false;
                            if ((((t.next.lengthChar < 4) || t.getMorphClassInDictionary().isUndefined)) && t.next.chars.equals(t.chars)) 
                                ok1 = true;
                            else if (t.isValue("МЕСТНОСТЬ", null) && !t.next.chars.isAllLower) 
                                ok = true;
                            else if (!t.next.chars.isAllLower || !AddressItemToken.checkHouseAfter(t.next, false, false)) {
                                if (MiscLocationHelper.checkTerritory(t.next) === null) {
                                    if (t.next.isNewlineAfter || t.next.next.isComma || AddressItemToken.checkHouseAfter(t.next.next, false, false)) 
                                        ok = true;
                                }
                                if (!ok && t.next.next !== null) {
                                    let typ = OrgTypToken.tryParse(t.next.next, false, null);
                                    if (typ !== null && typ.notOrg) 
                                        ok = true;
                                    else if (t.next.next.isValue("МАССИВ", null)) 
                                        ok = true;
                                }
                            }
                            if (ok1) {
                                let _next = NameToken.tryParse(t.next, ty, lev + 1, false);
                                if (_next === null || _next.beginToken === _next.endToken) 
                                    ok = true;
                            }
                        }
                        if (!ok && t.next.getMorphClassInDictionary().isAdjective) {
                            let mc = t.getMorphClassInDictionary();
                            if (mc.isNoun || mc.isProperGeo) {
                                if (((t.morph.gender.value()) & (t.next.morph.gender.value())) !== (MorphGender.UNDEFINED.value())) {
                                    let tt = t.next.next;
                                    if (tt === null) 
                                        ok = true;
                                    else if (tt.isComma || tt.isNewlineAfter) 
                                        ok = true;
                                    else if (AddressItemToken.checkHouseAfter(tt, false, false)) 
                                        ok = true;
                                    else if (AddressItemToken.checkStreetAfter(tt, false)) 
                                        ok = true;
                                }
                            }
                        }
                        if (ok) {
                            if (OrgTypToken.tryParse(t.next, false, null) !== null) 
                                ok = false;
                        }
                        if (ok) {
                            let tt = MiscLocationHelper.checkNameLong(res);
                            if (tt === null) 
                                tt = t.next;
                            if (t.previous !== null && t.previous.isValue("УРОЧИЩЕ", null)) {
                                for (let tt2 = tt.next; tt2 !== null; tt2 = tt2.next) {
                                    if (!(tt2 instanceof TextToken) || tt2.whitespacesBeforeCount > 3 || tt2.lengthChar === 1) 
                                        break;
                                    ait = AddressItemToken.tryParsePureItem(tt2, null, null);
                                    if (ait !== null) 
                                        break;
                                    tt = tt2;
                                }
                            }
                            res.name = (res.name + " " + MiscHelper.getTextValue(res.endToken.next, tt, GetTextAttr.NO));
                            res.endToken = tt;
                        }
                        else if (t.next !== null && !t.next.isValue("СХ", null) && !t.next.isValue("CX", null)) {
                            let lat = NumberHelper.tryParseRoman(t.next);
                            if (lat !== null && lat.typ === NumberSpellingType.ROMAN) {
                                res.number = lat.value;
                                res.endToken = lat.endToken;
                            }
                        }
                    }
                }
                if (res !== null && res.endToken.isValue("УСАДЬБА", null) && (res.whitespacesAfterCount < 2)) {
                    let res1 = NameToken.tryParse(res.endToken.next, ty, lev + 1, false);
                    if (res1 !== null && res1.name !== null) {
                        res.endToken = res1.endToken;
                        res.name = (res.name + " " + res1.name);
                    }
                }
            }
        }
        if (res === null || res.whitespacesAfterCount > 2) 
            return res;
        ttt = res.endToken.next;
        if (ttt !== null && ttt.isHiphen) {
            num = NumberHelper.tryParseAge(ttt.next);
            if (num === null) 
                num = NumberHelper.tryParseAnniversary(ttt.next);
            if (num !== null) {
                res.pref = num.value + " ЛЕТ";
                res.endToken = num.endToken;
            }
            else if ((ttt.next instanceof NumberToken) && res.number === null) {
                let nnn = NumToken.tryParse(ttt.next, ty);
                if (nnn !== null) {
                    res.number = nnn.value;
                    res.endToken = nnn.endToken;
                }
            }
            else if (res.number === null) {
                let nt = NumberHelper.tryParseRoman(ttt.next);
                if (nt !== null) {
                    res.number = nt.value;
                    res.endToken = nt.endToken;
                }
            }
            if ((ttt === res.endToken.next && (ttt.next instanceof TextToken) && !ttt.isWhitespaceAfter) && res.name !== null) {
                res.name = (res.name + " " + ttt.next.term);
                res.endToken = ttt.next;
            }
        }
        else if ((((num = NumberHelper.tryParseAge(ttt)))) !== null) {
            res.pref = num.value + " ЛЕТ";
            res.endToken = num.endToken;
        }
        else if ((((num = NumberHelper.tryParseAnniversary(ttt)))) !== null) {
            res.pref = num.value + " ЛЕТ";
            res.endToken = num.endToken;
        }
        else if ((ttt instanceof NumberToken) && res.number === null) {
            let ok = false;
            if (ty === GeoTokenType.ORG && (ttt.whitespacesBeforeCount < 2)) 
                ok = true;
            if (ok) {
                if (StreetItemToken.checkKeyword(ttt.next)) 
                    ok = false;
                else if (ttt.next !== null) {
                    if (ttt.next.isValue("КМ", null) || ttt.next.isValue("КИЛОМЕТР", null)) 
                        ok = false;
                }
            }
            if (ok) {
                let nnn = NumToken.tryParse(ttt, GeoTokenType.ANY);
                if (nnn !== null) {
                    res.number = nnn.value;
                    res.miscTyp = nnn.miscType;
                    res.endToken = nnn.endToken;
                }
            }
        }
        if (res.number === null && res.endToken.next !== null) {
            let nnn = NumToken.tryParse(res.endToken.next, ty);
            if (nnn !== null && nnn.hasPrefix) {
                res.number = nnn.value;
                res.miscTyp = nnn.miscType;
                res.endToken = nnn.endToken;
            }
            else if (nnn === null && res.endToken.next.isComma && (res.endToken.next.whitespacesAfterCount < 3)) {
                nnn = NumToken.tryParse(res.endToken.next.next, ty);
                if (nnn !== null && nnn.hasSpecWord) {
                    res.number = nnn.value;
                    res.miscTyp = nnn.miscType;
                    res.endToken = nnn.endToken;
                }
            }
        }
        if ((res.whitespacesAfterCount < 3) && res.name === null && BracketHelper.canBeStartOfSequence(res.endToken.next, false, false)) {
            let nam = NameToken.tryParse(res.endToken.next, ty, lev + 1, false);
            if (nam !== null) {
                res.name = nam.name;
                res.endToken = nam.endToken;
                res.isDoubt = false;
            }
        }
        if (res.pref !== null && res.name === null && res.number === null) {
            let nam = NameToken.tryParse(res.endToken.next, ty, lev + 1, false);
            if (nam !== null && nam.name !== null && nam.pref === null) {
                res.name = nam.name;
                res.number = nam.number;
                res.miscTyp = nam.miscTyp;
                res.endToken = nam.endToken;
            }
        }
        res.m_lev = lev;
        res.m_typ = ty;
        if (res.whitespacesAfterCount < 3) {
            let nn = NameToken.M_ONTO.tryParse(res.endToken.next, TerminParseAttr.NO);
            if (nn !== null) {
                res.endToken = nn.endToken;
                res.name = (res.name + " " + MiscHelper.getTextValueOfMetaToken(nn, GetTextAttr.NO));
            }
        }
        if (res.name !== null && res.beginToken === res.endToken) {
            let end = MiscLocationHelper.checkNameLong(res);
            if (end !== null) {
                if (OrgTypToken.tryParse(res.endToken.next, false, null) === null) {
                    res.endToken = end;
                    res.name = (res.name + " " + MiscHelper.getTextValue(res.beginToken.next, end, GetTextAttr.NO));
                }
            }
        }
        res.tryAttachNumber();
        if ((!res.endToken.isWhitespaceAfter && res.endToken.next.isHiphen && !res.endToken.next.isWhitespaceAfter) && res.number !== null && res.name !== null) {
            let nam2 = NameToken._tryParse(res.endToken.next.next, ty, lev + 1, afterTyp);
            if (nam2 !== null && nam2.name !== null && nam2.number === null) {
                res.name = (res.name + " " + nam2.name);
                res.endToken = nam2.endToken;
            }
        }
        return res;
    }
    
    static checkInitial(t) {
        if (!(t instanceof TextToken) || t.lengthChar > 2 || !t.chars.isLetter) 
            return null;
        let term = t.term;
        let t1 = t.next;
        if (t1 !== null && ((t1.isCharOf(".,") || t1.isHiphen))) 
            t1 = t1.next;
        else if (t.chars.isAllLower) 
            return null;
        if (((t1 instanceof TextToken) && t1.lengthChar === 1 && t1.next !== null) && t1.next.isChar('.')) 
            t1 = t1.next.next;
        if (t1 === null) 
            return null;
        if (NameToken.checkInitialAndSurname(term, t1)) 
            return t1;
        return null;
    }
    
    static checkInitialBack(t) {
        if (!(t instanceof TextToken) || t.whitespacesBeforeCount > 2) 
            return false;
        if (t.lengthChar > 2 || !t.chars.isLetter) 
            return false;
        if (t.next !== null && t.next.isChar('.')) {
        }
        else if (!t.chars.isAllUpper) 
            return false;
        return NameToken.checkInitialAndSurname(t.term, t.previous);
    }
    
    static checkInitialAndSurname(ini, sur) {
        if (sur === null || ini === null) 
            return false;
        if (ini === "А") {
            if (((((((sur.isValue("МАТРОСОВ", null) || sur.isValue("ПУШКИН", null) || sur.isValue("УЛЬЯНОВ", null)) || sur.isValue("СУВОРОВ", null) || sur.isValue("АХМАТОВА", null)) || sur.isValue("КАДЫРОВ", null) || sur.isValue("АБУБАКАРОВ", null)) || sur.isValue("АЛИША", null) || sur.isValue("БЛОК", null)) || sur.isValue("ГАЙДАР", null) || sur.isValue("НЕВСКИЙ", null)) || sur.isValue("СУЛТАН", null) || sur.isValue("ТОЛСТОЙ", null)) || sur.isValue("ШЕРИПОВ", null) || sur.isValue("ГРИН", null)) 
                return true;
        }
        if (ini === "Б") {
            if (sur.isValue("ХМЕЛЬНИЦКИЙ", null) || sur.isValue("БИКБАЙ", null) || sur.isValue("АКУГИНОВ", null)) 
                return true;
        }
        if (ini === "В" || ini === "B") {
            if (((((((sur.isValue("ЛЕНИН", null) || sur.isValue("ТЕРЕШКОВА", null) || sur.isValue("УЛЬЯНОВ", null)) || sur.isValue("ВЫСОЦКИЙ", null) || sur.isValue("ПАСТЕРНАК", null)) || sur.isValue("ЧАПАЕВ", null) || sur.isValue("ЧКАЛОВ", null)) || sur.isValue("ЭМИРОВ", null) || sur.isValue("ШУКШИН", null)) || sur.isValue("ГЮГО", null) || sur.isValue("МАЯКОВСКИЙ", null)) || sur.isValue("ГРИБ", null) || sur.isValue("КОРОБКОВ", null)) || sur.isValue("ГРОШЕВ", null)) 
                return true;
        }
        if (ini === "Г") {
            if (((sur.isValue("ЖУКОВ", null) || sur.isValue("ИБРАГИМОВ", null) || sur.isValue("ТУКАЙ", null)) || sur.isValue("ЦАДАС", null) || sur.isValue("ТИТОВ", null)) || sur.isValue("УСПЕНСКИЙ", null) || sur.isValue("ГАМИДОВ", null)) 
                return true;
        }
        if (ini === "Д") {
            if (sur.isValue("УЛЬЯНОВ", null) || sur.isValue("ДОНСКОЙ", null)) 
                return true;
        }
        if (ini === "Е") {
            if (sur.isValue("ПУГАЧЕВ", null) || sur.isValue("ЭМИН", null) || sur.isValue("КОТИН", null)) 
                return true;
        }
        if (ini === "З") {
            if (sur.isValue("КОСМОДЕМЬЯНСКАЯ", null)) 
                return true;
        }
        if (ini === "И") {
            if (((sur.isValue("ФРАНКО", null) || sur.isValue("ШАМИЛЬ", null) || sur.isValue("АЙВАЗОВСКИЙ", null)) || sur.isValue("ТУРГЕНЕВ", null) || sur.isValue("АРМАНД", null)) || sur.isValue("КАЗАК", null)) 
                return true;
        }
        if (ini === "К") {
            if (sur.isValue("МАРКС", null) || sur.isValue("ЛИБКНЕХТ", null) || sur.isValue("ЦЕТКИН", null)) 
                return true;
        }
        if (ini === "Л") {
            if ((sur.isValue("ТОЛСТОЙ", null) || sur.isValue("ЧАЙКИНА", null) || sur.isValue("ШЕВЦОВА", null)) || sur.isValue("УКРАИНКА", null)) 
                return true;
        }
        if (ini === "М" || ini === "M") {
            if (((((((((((sur.isValue("ГОРЬКИЙ", null) || sur.isValue("АЛИЕВ", null) || sur.isValue("БУЛГАКОВ", null)) || sur.isValue("ДЖАЛИЛЬ", null) || sur.isValue("КАРИМ", null)) || sur.isValue("КУТУЗОВ", null) || sur.isValue("ЛЕРМОНТОВ", null)) || sur.isValue("ЦВЕТАЕВА", null) || sur.isValue("ГАДЖИЕВ", null)) || sur.isValue("ЯРАГСКИЙ", null) || sur.isValue("ГАФУРИ", null)) || sur.isValue("РАСКОВА", null) || sur.isValue("УЛЬЯНОВА", null)) || sur.isValue("ЛОМОНОСОВА", null) || sur.isValue("ФРУНЗЕ", null)) || sur.isValue("ШОЛОХОВА", null) || sur.isValue("ТОРЕЗ", null)) || sur.isValue("ЖУКОВ", null) || sur.isValue("РОКОССОВСКИЙ", null)) || sur.isValue("ВАСИЛЕВСКИЙ", null) || sur.isValue("ТИМОШЕНКО", null)) || sur.isValue("УМАРОВ", null) || sur.isValue("КАЗЕЯ", null)) 
                return true;
        }
        if (ini === "Н") {
            if ((sur.isValue("ГОГОЛЬ", null) || sur.isValue("КРУПСКАЯ", null) || sur.isValue("ОСТРОВСКИЙ", null)) || sur.isValue("САМУРСКИЙ", null) || sur.isValue("ХАКИМ", null)) 
                return true;
        }
        if (ini === "О") {
            if (sur.isValue("КОШЕВОЙ", null) || sur.isValue("ДУНДИЧ", null) || sur.isValue("ШМИДТ", null)) 
                return true;
        }
        if (ini === "П") {
            if (sur instanceof TextToken) {
                if (sur.term === "САВЕЛЬЕВОЙ") 
                    return true;
            }
            if ((sur.isValue("МОРОЗОВ", null) || sur.isValue("КОРЧАГИН", null) || sur.isValue("ОСИПЕНКО", null)) || sur.isValue("ЛУМУМБА", null) || sur.isValue("ГАМЗАТОВ", null)) 
                return true;
        }
        if (ini === "Р") {
            if ((sur.isValue("ЛЮКСЕМБУРГ", null) || sur.isValue("КАДЫРОВ", null) || sur.isValue("ЗОРГЕ", null)) || sur.isValue("АЛИМХАНОВ", null) || sur.isValue("АРСАМУРЗАЕВ", null)) 
                return true;
        }
        if ((ini === "СТ" || ini === "CT" || ini === "С") || ini === "C") {
            if ((((((sur.isValue("РАЗИН", null) || sur.isValue("ХАЛТУРИН", null) || sur.isValue("ЕСЕНИН", null)) || sur.isValue("ЛАЗО", null) || sur.isValue("КИРОВ", null)) || sur.isValue("ЛИСИН", null) || sur.isValue("ОРДЖОНИКИДЗЕ", null)) || sur.isValue("ПЕТРОВСКАЯ", null) || sur.isValue("ЮЛАЕВ", null)) || sur.isValue("РАДОНЕЖСКИЙ", null) || sur.isValue("КОВАЛЕВСКАЯ", null)) || sur.isValue("КУДАШ", null)) 
                return true;
        }
        if (ini === "Т") {
            if (sur.isValue("ШЕВЧЕНКО", null) || sur.isValue("ХАХЛЫНОВА", null) || sur.isValue("ФРУНЗЕ", null)) 
                return true;
        }
        if (ini === "У") {
            if (sur.isValue("ГРОМОВА", null) || sur.isValue("АЛИЕВ", null) || sur.isValue("БУЙНАКСКИЙ", null)) 
                return true;
        }
        if (ini === "Ф") {
            if (sur.isValue("АМИРХАН", null) || sur.isValue("КАРИМ", null)) 
                return true;
        }
        if (ini === "Х" || ini === "X") {
            if (sur.isValue("АХМЕТОВ", null) || sur.isValue("ТАКТАШ", null) || sur.isValue("ДАВЛЕТШИНА", null)) 
                return true;
        }
        if (ini === "Ч") {
            if (sur.isValue("АЙТМАТОВ", null)) 
                return true;
        }
        if (ini === "Ш") {
            if (((sur.isValue("УСМАНОВ", null) || sur.isValue("БАБИЧ", null) || sur.isValue("РУСТАВЕЛИ", null)) || sur.isValue("АЛИЕВ", null) || sur.isValue("ХУДАЙБЕРДИН", null)) || sur.isValue("ЕШУГАОВА", null) || sur.isValue("КАМАЛ", null)) 
                return true;
        }
        if (ini === "Ю") {
            if (sur.isValue("ГАГАРИН", null) || sur.isValue("АКАЕВ", null) || sur.isValue("ФУЧИК", null)) 
                return true;
        }
        return false;
    }
    
    static _isMiscType(tt) {
        if (tt === null) 
            return false;
        if (tt.isValue("БРИГАДА", null) || tt.isValue("ОТДЕЛЕНИЕ", null) || tt.isValue("ОЧЕРЕДЬ", null)) 
            return true;
        return false;
    }
    
    tryAttachNumber() {
        if (this.whitespacesAfterCount > 1) 
            return;
        if (this.number === null && this.endToken.next !== null && this.m_lev === 0) {
            let tt = this.endToken.next;
            let _pref = false;
            if (NameToken._isMiscType(tt)) {
                this.miscTyp = tt.getNormalCaseText(MorphClass.NOUN, MorphNumber.UNDEFINED, MorphGender.UNDEFINED, false).toLowerCase();
                tt = tt.next;
            }
            else if (tt.isValue("ОТД", null)) {
                this.miscTyp = "отделение";
                tt = tt.next;
                if (tt !== null && tt.isChar('.')) 
                    tt = tt.next;
            }
            let nam2 = NameToken.tryParse(tt, this.m_typ, this.m_lev + 1, false);
            if ((nam2 !== null && nam2.number !== null && nam2.name === null) && nam2.pref === null) {
                if (tt === this.endToken.next && StreetItemToken.checkKeyword(nam2.endToken.next)) {
                }
                else {
                    this.number = nam2.number;
                    this.endToken = nam2.endToken;
                }
            }
            else if (nam2 !== null && nam2.isEponym) {
                this.endToken = nam2.endToken;
                if (this.name === null) 
                    this.name = nam2.name;
                else 
                    this.name = (this.name + " " + nam2.name);
                if (nam2.number !== null) 
                    this.number = nam2.number;
            }
        }
        if ((this.m_typ === GeoTokenType.ORG && (this.endToken instanceof NumberToken) && this.number === this.endToken.value) && !this.isWhitespaceAfter) {
            let tmp = new StringBuilder(this.number);
            let delim = null;
            for (let tt = this.endToken.next; tt !== null; tt = tt.next) {
                if (tt.isWhitespaceBefore) 
                    break;
                if (tt.isCharOf(",.") || tt.isTableControlChar) 
                    break;
                if (tt.isCharOf("\\/")) {
                    delim = "/";
                    continue;
                }
                else if (tt.isHiphen) {
                    delim = "-";
                    continue;
                }
                if ((tt instanceof NumberToken) && tt.typ === NumberSpellingType.DIGIT) {
                    if (delim !== null) 
                        tmp.append(delim);
                    delim = null;
                    tmp.append(tt.value);
                    this.endToken = tt;
                    continue;
                }
                if ((tt instanceof TextToken) && tt.lengthChar === 1 && tt.chars.isLetter) {
                    if (delim !== null && Utils.isLetter(tmp.charAt(tmp.length - 1))) 
                        tmp.append(delim);
                    delim = null;
                    tmp.append(tt.term);
                    this.endToken = tt;
                    continue;
                }
                break;
            }
            this.number = tmp.toString();
        }
        if ((this.m_typ === GeoTokenType.ORG && (this.endToken instanceof NumberToken) && this.endToken.next !== null) && this.number === this.endToken.value && (this.whitespacesAfterCount < 3)) {
            let t1 = this.endToken.next;
            if (NameToken._isMiscType(t1)) {
                if (t1.next instanceof NumberToken) 
                    return;
                if (MiscHelper.checkNumberPrefix(t1.next) !== null) 
                    return;
                this.endToken = t1;
            }
        }
        if (this.number !== null && (this.endToken instanceof NumberToken)) {
            let tt = this.endToken.next;
            if (((tt instanceof TextToken) && tt.chars.isLetter && tt.lengthChar === 1) && (tt.whitespacesBeforeCount < 3)) {
                let ok = false;
                if (!tt.isWhitespaceBefore) 
                    ok = true;
                else if (tt.isNewlineAfter) 
                    ok = true;
                else if (tt.next.isComma) 
                    ok = true;
                if (ok) {
                    let ch = tt.term[0];
                    let ch1 = LanguageHelper.getCyrForLat(ch);
                    if ((ch1.charCodeAt(0)) !== 0) 
                        ch = ch1;
                    this.number = (this.number + ch);
                    this.endToken = tt;
                }
            }
        }
    }
    
    static initialize() {
        NameToken.M_ONTO = new TerminCollection();
        NameToken.M_PREF_ONTO = new TerminCollection();
        let t = Termin._new1197("МИНИСТЕРСТВО ОБОРОНЫ", "МО");
        NameToken.M_ONTO.add(t);
        for (const s of NameToken.standardNames) {
            let pp = Utils.splitString(s, ';', false);
            t = Termin._new1517(pp[0], true);
            for (let kk = 1; kk < pp.length; kk++) {
                if (pp[kk].indexOf('.') > 0 || pp[kk].indexOf('/') > 0 || pp[kk].indexOf('-') > 0) 
                    t.addAbridge(Utils.replaceString(pp[kk], '.', ' '));
                else if (t.acronym === null && (pp[kk].length < 4)) 
                    t.acronym = pp[kk];
                else 
                    t.addVariant(pp[kk], false);
            }
            NameToken.M_ONTO.add(t);
        }
        for (const s of ["СТАРО", "НОВО", "НИЖНЕ", "ВЕРХНЕ", "СРЕДНЕ", "СЕВЕРО", "ЮГО", "ЮЖНО", "ВОСТОЧНО", "ЗАПАДНО", "КРАСНО", "БЕЛО", "ВЕЛИКО", "МАЛО"]) {
            NameToken.M_PREF_ONTO.add(new Termin(s));
        }
    }
    
    static _new1554(_arg1, _arg2, _arg3) {
        let res = new NameToken(_arg1, _arg2);
        res.isDoubt = _arg3;
        return res;
    }
    
    static _new1555(_arg1, _arg2, _arg3) {
        let res = new NameToken(_arg1, _arg2);
        res.number = _arg3;
        return res;
    }
    
    static _new1556(_arg1, _arg2, _arg3) {
        let res = new NameToken(_arg1, _arg2);
        res.pref = _arg3;
        return res;
    }
    
    static _new1560(_arg1, _arg2, _arg3, _arg4) {
        let res = new NameToken(_arg1, _arg2);
        res.number = _arg3;
        res.isDoubt = _arg4;
        return res;
    }
    
    static _new1562(_arg1, _arg2, _arg3) {
        let res = new NameToken(_arg1, _arg2);
        res.name = _arg3;
        return res;
    }
    
    static _new1563(_arg1, _arg2, _arg3, _arg4) {
        let res = new NameToken(_arg1, _arg2);
        res.isDoubt = _arg3;
        res.name = _arg4;
        return res;
    }
    
    static _new1569(_arg1, _arg2, _arg3, _arg4, _arg5) {
        let res = new NameToken(_arg1, _arg2);
        res.isDoubt = _arg3;
        res.isEponym = _arg4;
        res.name = _arg5;
        return res;
    }
    
    static _new1572(_arg1, _arg2, _arg3, _arg4) {
        let res = new NameToken(_arg1, _arg2);
        res.morph = _arg3;
        res.name = _arg4;
        return res;
    }
    
    static _new1573(_arg1, _arg2, _arg3, _arg4) {
        let res = new NameToken(_arg1, _arg2);
        res.name = _arg3;
        res.morph = _arg4;
        return res;
    }
    
    static static_constructor() {
        NameToken.M_ONTO = null;
        NameToken.M_PREF_ONTO = null;
        NameToken.standardNames = ["БЕЗ НАЗВАНИЯ;БЕЗ НАИМЕНОВАНИЯ;БЕЗ ИМЕНИ;Б/Н", "ПЕРВОЙ ПОЛОВИНЫ", "ВТОРОЙ ПОЛОВИНЫ", "ЭНГЕЛЬСА;ФРИДРИХА ЭНГЕЛЬСА;ФРИД.ЭНГЕЛЬСА;ФР.ЭНГЕЛЬСА;Ф.ЭНГЕЛЬСА", "МАРКСА;КАРЛА МАРКСА;К.МАРКСА", "МАРКСА И ЭНГЕЛЬСА;КАРЛА МАРКСА И ФРИДРИХА ЭНГЕЛЬСА", "ЛИБКНЕХТА;КАРЛА ЛИБКНЕХТА;К.ЛИБКНЕХТА", "ЛЮКСЕМБУРГ;РОЗЫ ЛЮКСЕМБУРГ;Р.ЛЮКСЕМБУРГ", "УЧАСТНИКОВ ВОВ;УЧАСТНИКОВ ВЕЛИКОЙ ОТЕЧЕСТВЕННОЙ ВОЙНЫ", "ТРУД И ОТДЫХ", "СЪЕЗДА КПСС;ПАРТСЪЕЗДА КПСС", "МОЛОДОЙ ГВАРДИИ;М.ГВАРДИИ;МОЛ.ГВАРДИИ", "ЛЕНИНСКОГО КОМСОМОЛА;Л.КОМСОМОЛА;ЛЕН.КОМСОМОЛА", "ЮНЫХ ЛЕНИНЦЕВ;ЮН.ЛЕНИНЦЕВ", "ВЕЛИКОЙ ПОБЕДЫ;ВЕЛ.ПОБЕДЫ;В.ПОБЕДЫ", "КРАСНОЙ АРМИИ;КР.АРМИИ", "СОВЕТСКОЙ АРМИИ;СОВ.АРМИИ;СА", "СОВЕТСКОЙ ВЛАСТИ;СОВ.ВЛАСТИ", "СА И ВМФ;СОВЕТСКОЙ АРМИИ И ВОЕННО МОРСКОГО ФЛОТА", "ВОЕННО МОРСКОЙ ФЛОТ;ВМФ", "МОЛОДАЯ ГВАРДИЯ", "ЗАЩИТНИКИ БЕЛОГО ДОМА", "ЗАРЯ ВОСТОКА", "ЗАРЯ КОММУНИЗМА", "ДРУЖБЫ НАРОДОВ", "ВЕТЕРАН ВС;ВЕТЕРАН ВООРУЖЕННЫХ СИЛ", "ВЕТЕРАН МО;ВЕТЕРАН МИНИСТЕРСТВА ОБОРОНЫ", "ОКТЯБРЬСКОЙ РЕВОЛЮЦИИ;ОКТЯБРЬСКОЙ РЕВ.;ОКТ.РЕВОЛЮЦИИ;ОКТЯБРЬСКОЙ РЕВ-ЦИИ", "ВЕТЕРАН РЕВОЛЮЦИИ", "ВЕТЕРАН ВОЙНЫ И ТРУДА", "ВЕТЕРАН СА;ВЕТЕРАН СОВЕТСКОЙ АРМИИ", "ВЕТЕРАН ВОВ;ВЕТЕРАН ВЕЛИКОЙ ОТЕЧЕСТВЕННОЙ ВОЙНЫ", "ГОРКИ ЛЕНИНСКИЕ", "ГОРОДОК ПИСАТЕЛЕЙ ПЕРЕДЕЛКИНО", "СВЕТЛЫЙ ПУТЬ ЛЕНИНА", "ЗАВЕТЫ ИЛЬИЧА", "СЕРП И МОЛОТ", "ЗАВОДА СЕРП И МОЛОТ", "СОЦТРУДА;СОЦ.ТРУДА;СОЦИАЛИСТИЧЕСКОГО ТРУДА", "ПАРИЖСКОЙ КОММУНЫ;П.КОММУНЫ;ПАР.КОММУНЫ;ПАРИЖ.КОММУНЫ", "КРАСНЫХ ПАРТИЗАН;КР.ПАРТИЗАН;КРАСН.ПАРТИЗАН", "АЛМА-АТИНСКАЯ;А.АТИНСКАЯ;АЛМАТИНСКАЯ", "КИМ ИР СЕНА;КИМ ИРСЕНА", "ХО ШИ МИНА;ХОШИМИНА;ХО ШИМИНА", "ДРУЖБЫ НАРОДОВ;ДР.НАРОДОВ;ДРУЖ.НАРОДОВ", "КИРИЛЛА И МЕФОДИЯ;КИРИЛА И МЕФОДИЯ", "ПАМЯТИ И СЛАВЫ", "ЗА РУЛЕМ", "ЛАТЫШСКИХ СТРЕЛКОВ;ЛАТ.СТРЕЛКОВ;ЛАТЫШ.СТРЕЛКОВ", "ПАРТСЪЕЗДА;П/СЪЕЗДА;ПАРТИЙНОГО СЪЕЗДА;ПАРТ.СЪЕЗДА", "ТОЛЬЯТТИ;ПАЛЬМИРО ТОЛЬЯТТИ;П.ТОЛЬЯТТИ", "БИКБАЯ;БАЯЗИТА БИКБАЯ", "АМИРХАНА;ФАТЫХА АМИРХАНА", "КАРИМА;ФАТЫХА КАРИМА", "САНТЬЯГО ДЕ КУБА", "ШАРЛЯ ДЕ ГОЛЛЯ;ДЕ ГОЛЛЯ", "САККО И ВАНЦЕТТИ", "ПЕТРА И ПАВЛА", "СУЛТАНА;АМЕТ ХАН СУЛТАНА;АМЕТХАН СУЛТАНА;АХМЕТ ХАН СУЛТАНА", "БАРКЛАЯ ДЕ ТОЛЛИ", "ЛЕОНАРДО ДА ВИНЧИ;ЛЕОНАРДО ДАВИНЧИ;ДА ВИНЧИ;ДАВИНЧИ", "МЕЛИК КАРАМОВА;М.КАРАМОВА;М КАРАМОВА", "ЗОИ И АЛЕКСАНДРА КОСМОДЕМЬЯНСКИХ;З.И А.КОСМОДЕМЬЯНСКИХ;З.А.КОСМОДЕМЬЯНСКИХ", "БАКИНСКИХ КОМИССАРОВ;БАК.КОМИССАРОВ;Б.КОМИССАРОВ", "МИНИНА И ПОЖАРСКОГО", "АРМАНД;ИНЕССЫ АРМАНД;И.АРМАНД", "РИМСКОГО-КОРСАКОВА"];
    }
}


NameToken.static_constructor();

module.exports = NameToken