| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905 | # coding: utf-8from __future__ import unicode_literalsimport binasciiimport collectionsimport emailimport getpassimport ioimport optparseimport osimport reimport shleximport shutilimport socketimport structimport subprocessimport sysimport itertoolsimport xml.etree.ElementTreetry:    import urllib.request as compat_urllib_requestexcept ImportError:  # Python 2    import urllib2 as compat_urllib_requesttry:    import urllib.error as compat_urllib_errorexcept ImportError:  # Python 2    import urllib2 as compat_urllib_errortry:    import urllib.parse as compat_urllib_parseexcept ImportError:  # Python 2    import urllib as compat_urllib_parsetry:    from urllib.parse import urlparse as compat_urllib_parse_urlparseexcept ImportError:  # Python 2    from urlparse import urlparse as compat_urllib_parse_urlparsetry:    import urllib.parse as compat_urlparseexcept ImportError:  # Python 2    import urlparse as compat_urlparsetry:    import urllib.response as compat_urllib_responseexcept ImportError:  # Python 2    import urllib as compat_urllib_responsetry:    import http.cookiejar as compat_cookiejarexcept ImportError:  # Python 2    import cookielib as compat_cookiejartry:    import http.cookies as compat_cookiesexcept ImportError:  # Python 2    import Cookie as compat_cookiestry:    import html.entities as compat_html_entitiesexcept ImportError:  # Python 2    import htmlentitydefs as compat_html_entitiestry:  # Python >= 3.3    compat_html_entities_html5 = compat_html_entities.html5except AttributeError:    # Copied from CPython 3.5.1 html/entities.py    compat_html_entities_html5 = {        'Aacute': '\xc1',        'aacute': '\xe1',        'Aacute;': '\xc1',        'aacute;': '\xe1',        'Abreve;': '\u0102',        'abreve;': '\u0103',        'ac;': '\u223e',        'acd;': '\u223f',        'acE;': '\u223e\u0333',        'Acirc': '\xc2',        'acirc': '\xe2',        'Acirc;': '\xc2',        'acirc;': '\xe2',        'acute': '\xb4',        'acute;': '\xb4',        'Acy;': '\u0410',        'acy;': '\u0430',        'AElig': '\xc6',        'aelig': '\xe6',        'AElig;': '\xc6',        'aelig;': '\xe6',        'af;': '\u2061',        'Afr;': '\U0001d504',        'afr;': '\U0001d51e',        'Agrave': '\xc0',        'agrave': '\xe0',        'Agrave;': '\xc0',        'agrave;': '\xe0',        'alefsym;': '\u2135',        'aleph;': '\u2135',        'Alpha;': '\u0391',        'alpha;': '\u03b1',        'Amacr;': '\u0100',        'amacr;': '\u0101',        'amalg;': '\u2a3f',        'AMP': '&',        'amp': '&',        'AMP;': '&',        'amp;': '&',        'And;': '\u2a53',        'and;': '\u2227',        'andand;': '\u2a55',        'andd;': '\u2a5c',        'andslope;': '\u2a58',        'andv;': '\u2a5a',        'ang;': '\u2220',        'ange;': '\u29a4',        'angle;': '\u2220',        'angmsd;': '\u2221',        'angmsdaa;': '\u29a8',        'angmsdab;': '\u29a9',        'angmsdac;': '\u29aa',        'angmsdad;': '\u29ab',        'angmsdae;': '\u29ac',        'angmsdaf;': '\u29ad',        'angmsdag;': '\u29ae',        'angmsdah;': '\u29af',        'angrt;': '\u221f',        'angrtvb;': '\u22be',        'angrtvbd;': '\u299d',        'angsph;': '\u2222',        'angst;': '\xc5',        'angzarr;': '\u237c',        'Aogon;': '\u0104',        'aogon;': '\u0105',        'Aopf;': '\U0001d538',        'aopf;': '\U0001d552',        'ap;': '\u2248',        'apacir;': '\u2a6f',        'apE;': '\u2a70',        'ape;': '\u224a',        'apid;': '\u224b',        'apos;': "'",        'ApplyFunction;': '\u2061',        'approx;': '\u2248',        'approxeq;': '\u224a',        'Aring': '\xc5',        'aring': '\xe5',        'Aring;': '\xc5',        'aring;': '\xe5',        'Ascr;': '\U0001d49c',        'ascr;': '\U0001d4b6',        'Assign;': '\u2254',        'ast;': '*',        'asymp;': '\u2248',        'asympeq;': '\u224d',        'Atilde': '\xc3',        'atilde': '\xe3',        'Atilde;': '\xc3',        'atilde;': '\xe3',        'Auml': '\xc4',        'auml': '\xe4',        'Auml;': '\xc4',        'auml;': '\xe4',        'awconint;': '\u2233',        'awint;': '\u2a11',        'backcong;': '\u224c',        'backepsilon;': '\u03f6',        'backprime;': '\u2035',        'backsim;': '\u223d',        'backsimeq;': '\u22cd',        'Backslash;': '\u2216',        'Barv;': '\u2ae7',        'barvee;': '\u22bd',        'Barwed;': '\u2306',        'barwed;': '\u2305',        'barwedge;': '\u2305',        'bbrk;': '\u23b5',        'bbrktbrk;': '\u23b6',        'bcong;': '\u224c',        'Bcy;': '\u0411',        'bcy;': '\u0431',        'bdquo;': '\u201e',        'becaus;': '\u2235',        'Because;': '\u2235',        'because;': '\u2235',        'bemptyv;': '\u29b0',        'bepsi;': '\u03f6',        'bernou;': '\u212c',        'Bernoullis;': '\u212c',        'Beta;': '\u0392',        'beta;': '\u03b2',        'beth;': '\u2136',        'between;': '\u226c',        'Bfr;': '\U0001d505',        'bfr;': '\U0001d51f',        'bigcap;': '\u22c2',        'bigcirc;': '\u25ef',        'bigcup;': '\u22c3',        'bigodot;': '\u2a00',        'bigoplus;': '\u2a01',        'bigotimes;': '\u2a02',        'bigsqcup;': '\u2a06',        'bigstar;': '\u2605',        'bigtriangledown;': '\u25bd',        'bigtriangleup;': '\u25b3',        'biguplus;': '\u2a04',        'bigvee;': '\u22c1',        'bigwedge;': '\u22c0',        'bkarow;': '\u290d',        'blacklozenge;': '\u29eb',        'blacksquare;': '\u25aa',        'blacktriangle;': '\u25b4',        'blacktriangledown;': '\u25be',        'blacktriangleleft;': '\u25c2',        'blacktriangleright;': '\u25b8',        'blank;': '\u2423',        'blk12;': '\u2592',        'blk14;': '\u2591',        'blk34;': '\u2593',        'block;': '\u2588',        'bne;': '=\u20e5',        'bnequiv;': '\u2261\u20e5',        'bNot;': '\u2aed',        'bnot;': '\u2310',        'Bopf;': '\U0001d539',        'bopf;': '\U0001d553',        'bot;': '\u22a5',        'bottom;': '\u22a5',        'bowtie;': '\u22c8',        'boxbox;': '\u29c9',        'boxDL;': '\u2557',        'boxDl;': '\u2556',        'boxdL;': '\u2555',        'boxdl;': '\u2510',        'boxDR;': '\u2554',        'boxDr;': '\u2553',        'boxdR;': '\u2552',        'boxdr;': '\u250c',        'boxH;': '\u2550',        'boxh;': '\u2500',        'boxHD;': '\u2566',        'boxHd;': '\u2564',        'boxhD;': '\u2565',        'boxhd;': '\u252c',        'boxHU;': '\u2569',        'boxHu;': '\u2567',        'boxhU;': '\u2568',        'boxhu;': '\u2534',        'boxminus;': '\u229f',        'boxplus;': '\u229e',        'boxtimes;': '\u22a0',        'boxUL;': '\u255d',        'boxUl;': '\u255c',        'boxuL;': '\u255b',        'boxul;': '\u2518',        'boxUR;': '\u255a',        'boxUr;': '\u2559',        'boxuR;': '\u2558',        'boxur;': '\u2514',        'boxV;': '\u2551',        'boxv;': '\u2502',        'boxVH;': '\u256c',        'boxVh;': '\u256b',        'boxvH;': '\u256a',        'boxvh;': '\u253c',        'boxVL;': '\u2563',        'boxVl;': '\u2562',        'boxvL;': '\u2561',        'boxvl;': '\u2524',        'boxVR;': '\u2560',        'boxVr;': '\u255f',        'boxvR;': '\u255e',        'boxvr;': '\u251c',        'bprime;': '\u2035',        'Breve;': '\u02d8',        'breve;': '\u02d8',        'brvbar': '\xa6',        'brvbar;': '\xa6',        'Bscr;': '\u212c',        'bscr;': '\U0001d4b7',        'bsemi;': '\u204f',        'bsim;': '\u223d',        'bsime;': '\u22cd',        'bsol;': '\\',        'bsolb;': '\u29c5',        'bsolhsub;': '\u27c8',        'bull;': '\u2022',        'bullet;': '\u2022',        'bump;': '\u224e',        'bumpE;': '\u2aae',        'bumpe;': '\u224f',        'Bumpeq;': '\u224e',        'bumpeq;': '\u224f',        'Cacute;': '\u0106',        'cacute;': '\u0107',        'Cap;': '\u22d2',        'cap;': '\u2229',        'capand;': '\u2a44',        'capbrcup;': '\u2a49',        'capcap;': '\u2a4b',        'capcup;': '\u2a47',        'capdot;': '\u2a40',        'CapitalDifferentialD;': '\u2145',        'caps;': '\u2229\ufe00',        'caret;': '\u2041',        'caron;': '\u02c7',        'Cayleys;': '\u212d',        'ccaps;': '\u2a4d',        'Ccaron;': '\u010c',        'ccaron;': '\u010d',        'Ccedil': '\xc7',        'ccedil': '\xe7',        'Ccedil;': '\xc7',        'ccedil;': '\xe7',        'Ccirc;': '\u0108',        'ccirc;': '\u0109',        'Cconint;': '\u2230',        'ccups;': '\u2a4c',        'ccupssm;': '\u2a50',        'Cdot;': '\u010a',        'cdot;': '\u010b',        'cedil': '\xb8',        'cedil;': '\xb8',        'Cedilla;': '\xb8',        'cemptyv;': '\u29b2',        'cent': '\xa2',        'cent;': '\xa2',        'CenterDot;': '\xb7',        'centerdot;': '\xb7',        'Cfr;': '\u212d',        'cfr;': '\U0001d520',        'CHcy;': '\u0427',        'chcy;': '\u0447',        'check;': '\u2713',        'checkmark;': '\u2713',        'Chi;': '\u03a7',        'chi;': '\u03c7',        'cir;': '\u25cb',        'circ;': '\u02c6',        'circeq;': '\u2257',        'circlearrowleft;': '\u21ba',        'circlearrowright;': '\u21bb',        'circledast;': '\u229b',        'circledcirc;': '\u229a',        'circleddash;': '\u229d',        'CircleDot;': '\u2299',        'circledR;': '\xae',        'circledS;': '\u24c8',        'CircleMinus;': '\u2296',        'CirclePlus;': '\u2295',        'CircleTimes;': '\u2297',        'cirE;': '\u29c3',        'cire;': '\u2257',        'cirfnint;': '\u2a10',        'cirmid;': '\u2aef',        'cirscir;': '\u29c2',        'ClockwiseContourIntegral;': '\u2232',        'CloseCurlyDoubleQuote;': '\u201d',        'CloseCurlyQuote;': '\u2019',        'clubs;': '\u2663',        'clubsuit;': '\u2663',        'Colon;': '\u2237',        'colon;': ':',        'Colone;': '\u2a74',        'colone;': '\u2254',        'coloneq;': '\u2254',        'comma;': ',',        'commat;': '@',        'comp;': '\u2201',        'compfn;': '\u2218',        'complement;': '\u2201',        'complexes;': '\u2102',        'cong;': '\u2245',        'congdot;': '\u2a6d',        'Congruent;': '\u2261',        'Conint;': '\u222f',        'conint;': '\u222e',        'ContourIntegral;': '\u222e',        'Copf;': '\u2102',        'copf;': '\U0001d554',        'coprod;': '\u2210',        'Coproduct;': '\u2210',        'COPY': '\xa9',        'copy': '\xa9',        'COPY;': '\xa9',        'copy;': '\xa9',        'copysr;': '\u2117',        'CounterClockwiseContourIntegral;': '\u2233',        'crarr;': '\u21b5',        'Cross;': '\u2a2f',        'cross;': '\u2717',        'Cscr;': '\U0001d49e',        'cscr;': '\U0001d4b8',        'csub;': '\u2acf',        'csube;': '\u2ad1',        'csup;': '\u2ad0',        'csupe;': '\u2ad2',        'ctdot;': '\u22ef',        'cudarrl;': '\u2938',        'cudarrr;': '\u2935',        'cuepr;': '\u22de',        'cuesc;': '\u22df',        'cularr;': '\u21b6',        'cularrp;': '\u293d',        'Cup;': '\u22d3',        'cup;': '\u222a',        'cupbrcap;': '\u2a48',        'CupCap;': '\u224d',        'cupcap;': '\u2a46',        'cupcup;': '\u2a4a',        'cupdot;': '\u228d',        'cupor;': '\u2a45',        'cups;': '\u222a\ufe00',        'curarr;': '\u21b7',        'curarrm;': '\u293c',        'curlyeqprec;': '\u22de',        'curlyeqsucc;': '\u22df',        'curlyvee;': '\u22ce',        'curlywedge;': '\u22cf',        'curren': '\xa4',        'curren;': '\xa4',        'curvearrowleft;': '\u21b6',        'curvearrowright;': '\u21b7',        'cuvee;': '\u22ce',        'cuwed;': '\u22cf',        'cwconint;': '\u2232',        'cwint;': '\u2231',        'cylcty;': '\u232d',        'Dagger;': '\u2021',        'dagger;': '\u2020',        'daleth;': '\u2138',        'Darr;': '\u21a1',        'dArr;': '\u21d3',        'darr;': '\u2193',        'dash;': '\u2010',        'Dashv;': '\u2ae4',        'dashv;': '\u22a3',        'dbkarow;': '\u290f',        'dblac;': '\u02dd',        'Dcaron;': '\u010e',        'dcaron;': '\u010f',        'Dcy;': '\u0414',        'dcy;': '\u0434',        'DD;': '\u2145',        'dd;': '\u2146',        'ddagger;': '\u2021',        'ddarr;': '\u21ca',        'DDotrahd;': '\u2911',        'ddotseq;': '\u2a77',        'deg': '\xb0',        'deg;': '\xb0',        'Del;': '\u2207',        'Delta;': '\u0394',        'delta;': '\u03b4',        'demptyv;': '\u29b1',        'dfisht;': '\u297f',        'Dfr;': '\U0001d507',        'dfr;': '\U0001d521',        'dHar;': '\u2965',        'dharl;': '\u21c3',        'dharr;': '\u21c2',        'DiacriticalAcute;': '\xb4',        'DiacriticalDot;': '\u02d9',        'DiacriticalDoubleAcute;': '\u02dd',        'DiacriticalGrave;': '`',        'DiacriticalTilde;': '\u02dc',        'diam;': '\u22c4',        'Diamond;': '\u22c4',        'diamond;': '\u22c4',        'diamondsuit;': '\u2666',        'diams;': '\u2666',        'die;': '\xa8',        'DifferentialD;': '\u2146',        'digamma;': '\u03dd',        'disin;': '\u22f2',        'div;': '\xf7',        'divide': '\xf7',        'divide;': '\xf7',        'divideontimes;': '\u22c7',        'divonx;': '\u22c7',        'DJcy;': '\u0402',        'djcy;': '\u0452',        'dlcorn;': '\u231e',        'dlcrop;': '\u230d',        'dollar;': '$',        'Dopf;': '\U0001d53b',        'dopf;': '\U0001d555',        'Dot;': '\xa8',        'dot;': '\u02d9',        'DotDot;': '\u20dc',        'doteq;': '\u2250',        'doteqdot;': '\u2251',        'DotEqual;': '\u2250',        'dotminus;': '\u2238',        'dotplus;': '\u2214',        'dotsquare;': '\u22a1',        'doublebarwedge;': '\u2306',        'DoubleContourIntegral;': '\u222f',        'DoubleDot;': '\xa8',        'DoubleDownArrow;': '\u21d3',        'DoubleLeftArrow;': '\u21d0',        'DoubleLeftRightArrow;': '\u21d4',        'DoubleLeftTee;': '\u2ae4',        'DoubleLongLeftArrow;': '\u27f8',        'DoubleLongLeftRightArrow;': '\u27fa',        'DoubleLongRightArrow;': '\u27f9',        'DoubleRightArrow;': '\u21d2',        'DoubleRightTee;': '\u22a8',        'DoubleUpArrow;': '\u21d1',        'DoubleUpDownArrow;': '\u21d5',        'DoubleVerticalBar;': '\u2225',        'DownArrow;': '\u2193',        'Downarrow;': '\u21d3',        'downarrow;': '\u2193',        'DownArrowBar;': '\u2913',        'DownArrowUpArrow;': '\u21f5',        'DownBreve;': '\u0311',        'downdownarrows;': '\u21ca',        'downharpoonleft;': '\u21c3',        'downharpoonright;': '\u21c2',        'DownLeftRightVector;': '\u2950',        'DownLeftTeeVector;': '\u295e',        'DownLeftVector;': '\u21bd',        'DownLeftVectorBar;': '\u2956',        'DownRightTeeVector;': '\u295f',        'DownRightVector;': '\u21c1',        'DownRightVectorBar;': '\u2957',        'DownTee;': '\u22a4',        'DownTeeArrow;': '\u21a7',        'drbkarow;': '\u2910',        'drcorn;': '\u231f',        'drcrop;': '\u230c',        'Dscr;': '\U0001d49f',        'dscr;': '\U0001d4b9',        'DScy;': '\u0405',        'dscy;': '\u0455',        'dsol;': '\u29f6',        'Dstrok;': '\u0110',        'dstrok;': '\u0111',        'dtdot;': '\u22f1',        'dtri;': '\u25bf',        'dtrif;': '\u25be',        'duarr;': '\u21f5',        'duhar;': '\u296f',        'dwangle;': '\u29a6',        'DZcy;': '\u040f',        'dzcy;': '\u045f',        'dzigrarr;': '\u27ff',        'Eacute': '\xc9',        'eacute': '\xe9',        'Eacute;': '\xc9',        'eacute;': '\xe9',        'easter;': '\u2a6e',        'Ecaron;': '\u011a',        'ecaron;': '\u011b',        'ecir;': '\u2256',        'Ecirc': '\xca',        'ecirc': '\xea',        'Ecirc;': '\xca',        'ecirc;': '\xea',        'ecolon;': '\u2255',        'Ecy;': '\u042d',        'ecy;': '\u044d',        'eDDot;': '\u2a77',        'Edot;': '\u0116',        'eDot;': '\u2251',        'edot;': '\u0117',        'ee;': '\u2147',        'efDot;': '\u2252',        'Efr;': '\U0001d508',        'efr;': '\U0001d522',        'eg;': '\u2a9a',        'Egrave': '\xc8',        'egrave': '\xe8',        'Egrave;': '\xc8',        'egrave;': '\xe8',        'egs;': '\u2a96',        'egsdot;': '\u2a98',        'el;': '\u2a99',        'Element;': '\u2208',        'elinters;': '\u23e7',        'ell;': '\u2113',        'els;': '\u2a95',        'elsdot;': '\u2a97',        'Emacr;': '\u0112',        'emacr;': '\u0113',        'empty;': '\u2205',        'emptyset;': '\u2205',        'EmptySmallSquare;': '\u25fb',        'emptyv;': '\u2205',        'EmptyVerySmallSquare;': '\u25ab',        'emsp13;': '\u2004',        'emsp14;': '\u2005',        'emsp;': '\u2003',        'ENG;': '\u014a',        'eng;': '\u014b',        'ensp;': '\u2002',        'Eogon;': '\u0118',        'eogon;': '\u0119',        'Eopf;': '\U0001d53c',        'eopf;': '\U0001d556',        'epar;': '\u22d5',        'eparsl;': '\u29e3',        'eplus;': '\u2a71',        'epsi;': '\u03b5',        'Epsilon;': '\u0395',        'epsilon;': '\u03b5',        'epsiv;': '\u03f5',        'eqcirc;': '\u2256',        'eqcolon;': '\u2255',        'eqsim;': '\u2242',        'eqslantgtr;': '\u2a96',        'eqslantless;': '\u2a95',        'Equal;': '\u2a75',        'equals;': '=',        'EqualTilde;': '\u2242',        'equest;': '\u225f',        'Equilibrium;': '\u21cc',        'equiv;': '\u2261',        'equivDD;': '\u2a78',        'eqvparsl;': '\u29e5',        'erarr;': '\u2971',        'erDot;': '\u2253',        'Escr;': '\u2130',        'escr;': '\u212f',        'esdot;': '\u2250',        'Esim;': '\u2a73',        'esim;': '\u2242',        'Eta;': '\u0397',        'eta;': '\u03b7',        'ETH': '\xd0',        'eth': '\xf0',        'ETH;': '\xd0',        'eth;': '\xf0',        'Euml': '\xcb',        'euml': '\xeb',        'Euml;': '\xcb',        'euml;': '\xeb',        'euro;': '\u20ac',        'excl;': '!',        'exist;': '\u2203',        'Exists;': '\u2203',        'expectation;': '\u2130',        'ExponentialE;': '\u2147',        'exponentiale;': '\u2147',        'fallingdotseq;': '\u2252',        'Fcy;': '\u0424',        'fcy;': '\u0444',        'female;': '\u2640',        'ffilig;': '\ufb03',        'fflig;': '\ufb00',        'ffllig;': '\ufb04',        'Ffr;': '\U0001d509',        'ffr;': '\U0001d523',        'filig;': '\ufb01',        'FilledSmallSquare;': '\u25fc',        'FilledVerySmallSquare;': '\u25aa',        'fjlig;': 'fj',        'flat;': '\u266d',        'fllig;': '\ufb02',        'fltns;': '\u25b1',        'fnof;': '\u0192',        'Fopf;': '\U0001d53d',        'fopf;': '\U0001d557',        'ForAll;': '\u2200',        'forall;': '\u2200',        'fork;': '\u22d4',        'forkv;': '\u2ad9',        'Fouriertrf;': '\u2131',        'fpartint;': '\u2a0d',        'frac12': '\xbd',        'frac12;': '\xbd',        'frac13;': '\u2153',        'frac14': '\xbc',        'frac14;': '\xbc',        'frac15;': '\u2155',        'frac16;': '\u2159',        'frac18;': '\u215b',        'frac23;': '\u2154',        'frac25;': '\u2156',        'frac34': '\xbe',        'frac34;': '\xbe',        'frac35;': '\u2157',        'frac38;': '\u215c',        'frac45;': '\u2158',        'frac56;': '\u215a',        'frac58;': '\u215d',        'frac78;': '\u215e',        'frasl;': '\u2044',        'frown;': '\u2322',        'Fscr;': '\u2131',        'fscr;': '\U0001d4bb',        'gacute;': '\u01f5',        'Gamma;': '\u0393',        'gamma;': '\u03b3',        'Gammad;': '\u03dc',        'gammad;': '\u03dd',        'gap;': '\u2a86',        'Gbreve;': '\u011e',        'gbreve;': '\u011f',        'Gcedil;': '\u0122',        'Gcirc;': '\u011c',        'gcirc;': '\u011d',        'Gcy;': '\u0413',        'gcy;': '\u0433',        'Gdot;': '\u0120',        'gdot;': '\u0121',        'gE;': '\u2267',        'ge;': '\u2265',        'gEl;': '\u2a8c',        'gel;': '\u22db',        'geq;': '\u2265',        'geqq;': '\u2267',        'geqslant;': '\u2a7e',        'ges;': '\u2a7e',        'gescc;': '\u2aa9',        'gesdot;': '\u2a80',        'gesdoto;': '\u2a82',        'gesdotol;': '\u2a84',        'gesl;': '\u22db\ufe00',        'gesles;': '\u2a94',        'Gfr;': '\U0001d50a',        'gfr;': '\U0001d524',        'Gg;': '\u22d9',        'gg;': '\u226b',        'ggg;': '\u22d9',        'gimel;': '\u2137',        'GJcy;': '\u0403',        'gjcy;': '\u0453',        'gl;': '\u2277',        'gla;': '\u2aa5',        'glE;': '\u2a92',        'glj;': '\u2aa4',        'gnap;': '\u2a8a',        'gnapprox;': '\u2a8a',        'gnE;': '\u2269',        'gne;': '\u2a88',        'gneq;': '\u2a88',        'gneqq;': '\u2269',        'gnsim;': '\u22e7',        'Gopf;': '\U0001d53e',        'gopf;': '\U0001d558',        'grave;': '`',        'GreaterEqual;': '\u2265',        'GreaterEqualLess;': '\u22db',        'GreaterFullEqual;': '\u2267',        'GreaterGreater;': '\u2aa2',        'GreaterLess;': '\u2277',        'GreaterSlantEqual;': '\u2a7e',        'GreaterTilde;': '\u2273',        'Gscr;': '\U0001d4a2',        'gscr;': '\u210a',        'gsim;': '\u2273',        'gsime;': '\u2a8e',        'gsiml;': '\u2a90',        'GT': '>',        'gt': '>',        'GT;': '>',        'Gt;': '\u226b',        'gt;': '>',        'gtcc;': '\u2aa7',        'gtcir;': '\u2a7a',        'gtdot;': '\u22d7',        'gtlPar;': '\u2995',        'gtquest;': '\u2a7c',        'gtrapprox;': '\u2a86',        'gtrarr;': '\u2978',        'gtrdot;': '\u22d7',        'gtreqless;': '\u22db',        'gtreqqless;': '\u2a8c',        'gtrless;': '\u2277',        'gtrsim;': '\u2273',        'gvertneqq;': '\u2269\ufe00',        'gvnE;': '\u2269\ufe00',        'Hacek;': '\u02c7',        'hairsp;': '\u200a',        'half;': '\xbd',        'hamilt;': '\u210b',        'HARDcy;': '\u042a',        'hardcy;': '\u044a',        'hArr;': '\u21d4',        'harr;': '\u2194',        'harrcir;': '\u2948',        'harrw;': '\u21ad',        'Hat;': '^',        'hbar;': '\u210f',        'Hcirc;': '\u0124',        'hcirc;': '\u0125',        'hearts;': '\u2665',        'heartsuit;': '\u2665',        'hellip;': '\u2026',        'hercon;': '\u22b9',        'Hfr;': '\u210c',        'hfr;': '\U0001d525',        'HilbertSpace;': '\u210b',        'hksearow;': '\u2925',        'hkswarow;': '\u2926',        'hoarr;': '\u21ff',        'homtht;': '\u223b',        'hookleftarrow;': '\u21a9',        'hookrightarrow;': '\u21aa',        'Hopf;': '\u210d',        'hopf;': '\U0001d559',        'horbar;': '\u2015',        'HorizontalLine;': '\u2500',        'Hscr;': '\u210b',        'hscr;': '\U0001d4bd',        'hslash;': '\u210f',        'Hstrok;': '\u0126',        'hstrok;': '\u0127',        'HumpDownHump;': '\u224e',        'HumpEqual;': '\u224f',        'hybull;': '\u2043',        'hyphen;': '\u2010',        'Iacute': '\xcd',        'iacute': '\xed',        'Iacute;': '\xcd',        'iacute;': '\xed',        'ic;': '\u2063',        'Icirc': '\xce',        'icirc': '\xee',        'Icirc;': '\xce',        'icirc;': '\xee',        'Icy;': '\u0418',        'icy;': '\u0438',        'Idot;': '\u0130',        'IEcy;': '\u0415',        'iecy;': '\u0435',        'iexcl': '\xa1',        'iexcl;': '\xa1',        'iff;': '\u21d4',        'Ifr;': '\u2111',        'ifr;': '\U0001d526',        'Igrave': '\xcc',        'igrave': '\xec',        'Igrave;': '\xcc',        'igrave;': '\xec',        'ii;': '\u2148',        'iiiint;': '\u2a0c',        'iiint;': '\u222d',        'iinfin;': '\u29dc',        'iiota;': '\u2129',        'IJlig;': '\u0132',        'ijlig;': '\u0133',        'Im;': '\u2111',        'Imacr;': '\u012a',        'imacr;': '\u012b',        'image;': '\u2111',        'ImaginaryI;': '\u2148',        'imagline;': '\u2110',        'imagpart;': '\u2111',        'imath;': '\u0131',        'imof;': '\u22b7',        'imped;': '\u01b5',        'Implies;': '\u21d2',        'in;': '\u2208',        'incare;': '\u2105',        'infin;': '\u221e',        'infintie;': '\u29dd',        'inodot;': '\u0131',        'Int;': '\u222c',        'int;': '\u222b',        'intcal;': '\u22ba',        'integers;': '\u2124',        'Integral;': '\u222b',        'intercal;': '\u22ba',        'Intersection;': '\u22c2',        'intlarhk;': '\u2a17',        'intprod;': '\u2a3c',        'InvisibleComma;': '\u2063',        'InvisibleTimes;': '\u2062',        'IOcy;': '\u0401',        'iocy;': '\u0451',        'Iogon;': '\u012e',        'iogon;': '\u012f',        'Iopf;': '\U0001d540',        'iopf;': '\U0001d55a',        'Iota;': '\u0399',        'iota;': '\u03b9',        'iprod;': '\u2a3c',        'iquest': '\xbf',        'iquest;': '\xbf',        'Iscr;': '\u2110',        'iscr;': '\U0001d4be',        'isin;': '\u2208',        'isindot;': '\u22f5',        'isinE;': '\u22f9',        'isins;': '\u22f4',        'isinsv;': '\u22f3',        'isinv;': '\u2208',        'it;': '\u2062',        'Itilde;': '\u0128',        'itilde;': '\u0129',        'Iukcy;': '\u0406',        'iukcy;': '\u0456',        'Iuml': '\xcf',        'iuml': '\xef',        'Iuml;': '\xcf',        'iuml;': '\xef',        'Jcirc;': '\u0134',        'jcirc;': '\u0135',        'Jcy;': '\u0419',        'jcy;': '\u0439',        'Jfr;': '\U0001d50d',        'jfr;': '\U0001d527',        'jmath;': '\u0237',        'Jopf;': '\U0001d541',        'jopf;': '\U0001d55b',        'Jscr;': '\U0001d4a5',        'jscr;': '\U0001d4bf',        'Jsercy;': '\u0408',        'jsercy;': '\u0458',        'Jukcy;': '\u0404',        'jukcy;': '\u0454',        'Kappa;': '\u039a',        'kappa;': '\u03ba',        'kappav;': '\u03f0',        'Kcedil;': '\u0136',        'kcedil;': '\u0137',        'Kcy;': '\u041a',        'kcy;': '\u043a',        'Kfr;': '\U0001d50e',        'kfr;': '\U0001d528',        'kgreen;': '\u0138',        'KHcy;': '\u0425',        'khcy;': '\u0445',        'KJcy;': '\u040c',        'kjcy;': '\u045c',        'Kopf;': '\U0001d542',        'kopf;': '\U0001d55c',        'Kscr;': '\U0001d4a6',        'kscr;': '\U0001d4c0',        'lAarr;': '\u21da',        'Lacute;': '\u0139',        'lacute;': '\u013a',        'laemptyv;': '\u29b4',        'lagran;': '\u2112',        'Lambda;': '\u039b',        'lambda;': '\u03bb',        'Lang;': '\u27ea',        'lang;': '\u27e8',        'langd;': '\u2991',        'langle;': '\u27e8',        'lap;': '\u2a85',        'Laplacetrf;': '\u2112',        'laquo': '\xab',        'laquo;': '\xab',        'Larr;': '\u219e',        'lArr;': '\u21d0',        'larr;': '\u2190',        'larrb;': '\u21e4',        'larrbfs;': '\u291f',        'larrfs;': '\u291d',        'larrhk;': '\u21a9',        'larrlp;': '\u21ab',        'larrpl;': '\u2939',        'larrsim;': '\u2973',        'larrtl;': '\u21a2',        'lat;': '\u2aab',        'lAtail;': '\u291b',        'latail;': '\u2919',        'late;': '\u2aad',        'lates;': '\u2aad\ufe00',        'lBarr;': '\u290e',        'lbarr;': '\u290c',        'lbbrk;': '\u2772',        'lbrace;': '{',        'lbrack;': '[',        'lbrke;': '\u298b',        'lbrksld;': '\u298f',        'lbrkslu;': '\u298d',        'Lcaron;': '\u013d',        'lcaron;': '\u013e',        'Lcedil;': '\u013b',        'lcedil;': '\u013c',        'lceil;': '\u2308',        'lcub;': '{',        'Lcy;': '\u041b',        'lcy;': '\u043b',        'ldca;': '\u2936',        'ldquo;': '\u201c',        'ldquor;': '\u201e',        'ldrdhar;': '\u2967',        'ldrushar;': '\u294b',        'ldsh;': '\u21b2',        'lE;': '\u2266',        'le;': '\u2264',        'LeftAngleBracket;': '\u27e8',        'LeftArrow;': '\u2190',        'Leftarrow;': '\u21d0',        'leftarrow;': '\u2190',        'LeftArrowBar;': '\u21e4',        'LeftArrowRightArrow;': '\u21c6',        'leftarrowtail;': '\u21a2',        'LeftCeiling;': '\u2308',        'LeftDoubleBracket;': '\u27e6',        'LeftDownTeeVector;': '\u2961',        'LeftDownVector;': '\u21c3',        'LeftDownVectorBar;': '\u2959',        'LeftFloor;': '\u230a',        'leftharpoondown;': '\u21bd',        'leftharpoonup;': '\u21bc',        'leftleftarrows;': '\u21c7',        'LeftRightArrow;': '\u2194',        'Leftrightarrow;': '\u21d4',        'leftrightarrow;': '\u2194',        'leftrightarrows;': '\u21c6',        'leftrightharpoons;': '\u21cb',        'leftrightsquigarrow;': '\u21ad',        'LeftRightVector;': '\u294e',        'LeftTee;': '\u22a3',        'LeftTeeArrow;': '\u21a4',        'LeftTeeVector;': '\u295a',        'leftthreetimes;': '\u22cb',        'LeftTriangle;': '\u22b2',        'LeftTriangleBar;': '\u29cf',        'LeftTriangleEqual;': '\u22b4',        'LeftUpDownVector;': '\u2951',        'LeftUpTeeVector;': '\u2960',        'LeftUpVector;': '\u21bf',        'LeftUpVectorBar;': '\u2958',        'LeftVector;': '\u21bc',        'LeftVectorBar;': '\u2952',        'lEg;': '\u2a8b',        'leg;': '\u22da',        'leq;': '\u2264',        'leqq;': '\u2266',        'leqslant;': '\u2a7d',        'les;': '\u2a7d',        'lescc;': '\u2aa8',        'lesdot;': '\u2a7f',        'lesdoto;': '\u2a81',        'lesdotor;': '\u2a83',        'lesg;': '\u22da\ufe00',        'lesges;': '\u2a93',        'lessapprox;': '\u2a85',        'lessdot;': '\u22d6',        'lesseqgtr;': '\u22da',        'lesseqqgtr;': '\u2a8b',        'LessEqualGreater;': '\u22da',        'LessFullEqual;': '\u2266',        'LessGreater;': '\u2276',        'lessgtr;': '\u2276',        'LessLess;': '\u2aa1',        'lesssim;': '\u2272',        'LessSlantEqual;': '\u2a7d',        'LessTilde;': '\u2272',        'lfisht;': '\u297c',        'lfloor;': '\u230a',        'Lfr;': '\U0001d50f',        'lfr;': '\U0001d529',        'lg;': '\u2276',        'lgE;': '\u2a91',        'lHar;': '\u2962',        'lhard;': '\u21bd',        'lharu;': '\u21bc',        'lharul;': '\u296a',        'lhblk;': '\u2584',        'LJcy;': '\u0409',        'ljcy;': '\u0459',        'Ll;': '\u22d8',        'll;': '\u226a',        'llarr;': '\u21c7',        'llcorner;': '\u231e',        'Lleftarrow;': '\u21da',        'llhard;': '\u296b',        'lltri;': '\u25fa',        'Lmidot;': '\u013f',        'lmidot;': '\u0140',        'lmoust;': '\u23b0',        'lmoustache;': '\u23b0',        'lnap;': '\u2a89',        'lnapprox;': '\u2a89',        'lnE;': '\u2268',        'lne;': '\u2a87',        'lneq;': '\u2a87',        'lneqq;': '\u2268',        'lnsim;': '\u22e6',        'loang;': '\u27ec',        'loarr;': '\u21fd',        'lobrk;': '\u27e6',        'LongLeftArrow;': '\u27f5',        'Longleftarrow;': '\u27f8',        'longleftarrow;': '\u27f5',        'LongLeftRightArrow;': '\u27f7',        'Longleftrightarrow;': '\u27fa',        'longleftrightarrow;': '\u27f7',        'longmapsto;': '\u27fc',        'LongRightArrow;': '\u27f6',        'Longrightarrow;': '\u27f9',        'longrightarrow;': '\u27f6',        'looparrowleft;': '\u21ab',        'looparrowright;': '\u21ac',        'lopar;': '\u2985',        'Lopf;': '\U0001d543',        'lopf;': '\U0001d55d',        'loplus;': '\u2a2d',        'lotimes;': '\u2a34',        'lowast;': '\u2217',        'lowbar;': '_',        'LowerLeftArrow;': '\u2199',        'LowerRightArrow;': '\u2198',        'loz;': '\u25ca',        'lozenge;': '\u25ca',        'lozf;': '\u29eb',        'lpar;': '(',        'lparlt;': '\u2993',        'lrarr;': '\u21c6',        'lrcorner;': '\u231f',        'lrhar;': '\u21cb',        'lrhard;': '\u296d',        'lrm;': '\u200e',        'lrtri;': '\u22bf',        'lsaquo;': '\u2039',        'Lscr;': '\u2112',        'lscr;': '\U0001d4c1',        'Lsh;': '\u21b0',        'lsh;': '\u21b0',        'lsim;': '\u2272',        'lsime;': '\u2a8d',        'lsimg;': '\u2a8f',        'lsqb;': '[',        'lsquo;': '\u2018',        'lsquor;': '\u201a',        'Lstrok;': '\u0141',        'lstrok;': '\u0142',        'LT': '<',        'lt': '<',        'LT;': '<',        'Lt;': '\u226a',        'lt;': '<',        'ltcc;': '\u2aa6',        'ltcir;': '\u2a79',        'ltdot;': '\u22d6',        'lthree;': '\u22cb',        'ltimes;': '\u22c9',        'ltlarr;': '\u2976',        'ltquest;': '\u2a7b',        'ltri;': '\u25c3',        'ltrie;': '\u22b4',        'ltrif;': '\u25c2',        'ltrPar;': '\u2996',        'lurdshar;': '\u294a',        'luruhar;': '\u2966',        'lvertneqq;': '\u2268\ufe00',        'lvnE;': '\u2268\ufe00',        'macr': '\xaf',        'macr;': '\xaf',        'male;': '\u2642',        'malt;': '\u2720',        'maltese;': '\u2720',        'Map;': '\u2905',        'map;': '\u21a6',        'mapsto;': '\u21a6',        'mapstodown;': '\u21a7',        'mapstoleft;': '\u21a4',        'mapstoup;': '\u21a5',        'marker;': '\u25ae',        'mcomma;': '\u2a29',        'Mcy;': '\u041c',        'mcy;': '\u043c',        'mdash;': '\u2014',        'mDDot;': '\u223a',        'measuredangle;': '\u2221',        'MediumSpace;': '\u205f',        'Mellintrf;': '\u2133',        'Mfr;': '\U0001d510',        'mfr;': '\U0001d52a',        'mho;': '\u2127',        'micro': '\xb5',        'micro;': '\xb5',        'mid;': '\u2223',        'midast;': '*',        'midcir;': '\u2af0',        'middot': '\xb7',        'middot;': '\xb7',        'minus;': '\u2212',        'minusb;': '\u229f',        'minusd;': '\u2238',        'minusdu;': '\u2a2a',        'MinusPlus;': '\u2213',        'mlcp;': '\u2adb',        'mldr;': '\u2026',        'mnplus;': '\u2213',        'models;': '\u22a7',        'Mopf;': '\U0001d544',        'mopf;': '\U0001d55e',        'mp;': '\u2213',        'Mscr;': '\u2133',        'mscr;': '\U0001d4c2',        'mstpos;': '\u223e',        'Mu;': '\u039c',        'mu;': '\u03bc',        'multimap;': '\u22b8',        'mumap;': '\u22b8',        'nabla;': '\u2207',        'Nacute;': '\u0143',        'nacute;': '\u0144',        'nang;': '\u2220\u20d2',        'nap;': '\u2249',        'napE;': '\u2a70\u0338',        'napid;': '\u224b\u0338',        'napos;': '\u0149',        'napprox;': '\u2249',        'natur;': '\u266e',        'natural;': '\u266e',        'naturals;': '\u2115',        'nbsp': '\xa0',        'nbsp;': '\xa0',        'nbump;': '\u224e\u0338',        'nbumpe;': '\u224f\u0338',        'ncap;': '\u2a43',        'Ncaron;': '\u0147',        'ncaron;': '\u0148',        'Ncedil;': '\u0145',        'ncedil;': '\u0146',        'ncong;': '\u2247',        'ncongdot;': '\u2a6d\u0338',        'ncup;': '\u2a42',        'Ncy;': '\u041d',        'ncy;': '\u043d',        'ndash;': '\u2013',        'ne;': '\u2260',        'nearhk;': '\u2924',        'neArr;': '\u21d7',        'nearr;': '\u2197',        'nearrow;': '\u2197',        'nedot;': '\u2250\u0338',        'NegativeMediumSpace;': '\u200b',        'NegativeThickSpace;': '\u200b',        'NegativeThinSpace;': '\u200b',        'NegativeVeryThinSpace;': '\u200b',        'nequiv;': '\u2262',        'nesear;': '\u2928',        'nesim;': '\u2242\u0338',        'NestedGreaterGreater;': '\u226b',        'NestedLessLess;': '\u226a',        'NewLine;': '\n',        'nexist;': '\u2204',        'nexists;': '\u2204',        'Nfr;': '\U0001d511',        'nfr;': '\U0001d52b',        'ngE;': '\u2267\u0338',        'nge;': '\u2271',        'ngeq;': '\u2271',        'ngeqq;': '\u2267\u0338',        'ngeqslant;': '\u2a7e\u0338',        'nges;': '\u2a7e\u0338',        'nGg;': '\u22d9\u0338',        'ngsim;': '\u2275',        'nGt;': '\u226b\u20d2',        'ngt;': '\u226f',        'ngtr;': '\u226f',        'nGtv;': '\u226b\u0338',        'nhArr;': '\u21ce',        'nharr;': '\u21ae',        'nhpar;': '\u2af2',        'ni;': '\u220b',        'nis;': '\u22fc',        'nisd;': '\u22fa',        'niv;': '\u220b',        'NJcy;': '\u040a',        'njcy;': '\u045a',        'nlArr;': '\u21cd',        'nlarr;': '\u219a',        'nldr;': '\u2025',        'nlE;': '\u2266\u0338',        'nle;': '\u2270',        'nLeftarrow;': '\u21cd',        'nleftarrow;': '\u219a',        'nLeftrightarrow;': '\u21ce',        'nleftrightarrow;': '\u21ae',        'nleq;': '\u2270',        'nleqq;': '\u2266\u0338',        'nleqslant;': '\u2a7d\u0338',        'nles;': '\u2a7d\u0338',        'nless;': '\u226e',        'nLl;': '\u22d8\u0338',        'nlsim;': '\u2274',        'nLt;': '\u226a\u20d2',        'nlt;': '\u226e',        'nltri;': '\u22ea',        'nltrie;': '\u22ec',        'nLtv;': '\u226a\u0338',        'nmid;': '\u2224',        'NoBreak;': '\u2060',        'NonBreakingSpace;': '\xa0',        'Nopf;': '\u2115',        'nopf;': '\U0001d55f',        'not': '\xac',        'Not;': '\u2aec',        'not;': '\xac',        'NotCongruent;': '\u2262',        'NotCupCap;': '\u226d',        'NotDoubleVerticalBar;': '\u2226',        'NotElement;': '\u2209',        'NotEqual;': '\u2260',        'NotEqualTilde;': '\u2242\u0338',        'NotExists;': '\u2204',        'NotGreater;': '\u226f',        'NotGreaterEqual;': '\u2271',        'NotGreaterFullEqual;': '\u2267\u0338',        'NotGreaterGreater;': '\u226b\u0338',        'NotGreaterLess;': '\u2279',        'NotGreaterSlantEqual;': '\u2a7e\u0338',        'NotGreaterTilde;': '\u2275',        'NotHumpDownHump;': '\u224e\u0338',        'NotHumpEqual;': '\u224f\u0338',        'notin;': '\u2209',        'notindot;': '\u22f5\u0338',        'notinE;': '\u22f9\u0338',        'notinva;': '\u2209',        'notinvb;': '\u22f7',        'notinvc;': '\u22f6',        'NotLeftTriangle;': '\u22ea',        'NotLeftTriangleBar;': '\u29cf\u0338',        'NotLeftTriangleEqual;': '\u22ec',        'NotLess;': '\u226e',        'NotLessEqual;': '\u2270',        'NotLessGreater;': '\u2278',        'NotLessLess;': '\u226a\u0338',        'NotLessSlantEqual;': '\u2a7d\u0338',        'NotLessTilde;': '\u2274',        'NotNestedGreaterGreater;': '\u2aa2\u0338',        'NotNestedLessLess;': '\u2aa1\u0338',        'notni;': '\u220c',        'notniva;': '\u220c',        'notnivb;': '\u22fe',        'notnivc;': '\u22fd',        'NotPrecedes;': '\u2280',        'NotPrecedesEqual;': '\u2aaf\u0338',        'NotPrecedesSlantEqual;': '\u22e0',        'NotReverseElement;': '\u220c',        'NotRightTriangle;': '\u22eb',        'NotRightTriangleBar;': '\u29d0\u0338',        'NotRightTriangleEqual;': '\u22ed',        'NotSquareSubset;': '\u228f\u0338',        'NotSquareSubsetEqual;': '\u22e2',        'NotSquareSuperset;': '\u2290\u0338',        'NotSquareSupersetEqual;': '\u22e3',        'NotSubset;': '\u2282\u20d2',        'NotSubsetEqual;': '\u2288',        'NotSucceeds;': '\u2281',        'NotSucceedsEqual;': '\u2ab0\u0338',        'NotSucceedsSlantEqual;': '\u22e1',        'NotSucceedsTilde;': '\u227f\u0338',        'NotSuperset;': '\u2283\u20d2',        'NotSupersetEqual;': '\u2289',        'NotTilde;': '\u2241',        'NotTildeEqual;': '\u2244',        'NotTildeFullEqual;': '\u2247',        'NotTildeTilde;': '\u2249',        'NotVerticalBar;': '\u2224',        'npar;': '\u2226',        'nparallel;': '\u2226',        'nparsl;': '\u2afd\u20e5',        'npart;': '\u2202\u0338',        'npolint;': '\u2a14',        'npr;': '\u2280',        'nprcue;': '\u22e0',        'npre;': '\u2aaf\u0338',        'nprec;': '\u2280',        'npreceq;': '\u2aaf\u0338',        'nrArr;': '\u21cf',        'nrarr;': '\u219b',        'nrarrc;': '\u2933\u0338',        'nrarrw;': '\u219d\u0338',        'nRightarrow;': '\u21cf',        'nrightarrow;': '\u219b',        'nrtri;': '\u22eb',        'nrtrie;': '\u22ed',        'nsc;': '\u2281',        'nsccue;': '\u22e1',        'nsce;': '\u2ab0\u0338',        'Nscr;': '\U0001d4a9',        'nscr;': '\U0001d4c3',        'nshortmid;': '\u2224',        'nshortparallel;': '\u2226',        'nsim;': '\u2241',        'nsime;': '\u2244',        'nsimeq;': '\u2244',        'nsmid;': '\u2224',        'nspar;': '\u2226',        'nsqsube;': '\u22e2',        'nsqsupe;': '\u22e3',        'nsub;': '\u2284',        'nsubE;': '\u2ac5\u0338',        'nsube;': '\u2288',        'nsubset;': '\u2282\u20d2',        'nsubseteq;': '\u2288',        'nsubseteqq;': '\u2ac5\u0338',        'nsucc;': '\u2281',        'nsucceq;': '\u2ab0\u0338',        'nsup;': '\u2285',        'nsupE;': '\u2ac6\u0338',        'nsupe;': '\u2289',        'nsupset;': '\u2283\u20d2',        'nsupseteq;': '\u2289',        'nsupseteqq;': '\u2ac6\u0338',        'ntgl;': '\u2279',        'Ntilde': '\xd1',        'ntilde': '\xf1',        'Ntilde;': '\xd1',        'ntilde;': '\xf1',        'ntlg;': '\u2278',        'ntriangleleft;': '\u22ea',        'ntrianglelefteq;': '\u22ec',        'ntriangleright;': '\u22eb',        'ntrianglerighteq;': '\u22ed',        'Nu;': '\u039d',        'nu;': '\u03bd',        'num;': '#',        'numero;': '\u2116',        'numsp;': '\u2007',        'nvap;': '\u224d\u20d2',        'nVDash;': '\u22af',        'nVdash;': '\u22ae',        'nvDash;': '\u22ad',        'nvdash;': '\u22ac',        'nvge;': '\u2265\u20d2',        'nvgt;': '>\u20d2',        'nvHarr;': '\u2904',        'nvinfin;': '\u29de',        'nvlArr;': '\u2902',        'nvle;': '\u2264\u20d2',        'nvlt;': '<\u20d2',        'nvltrie;': '\u22b4\u20d2',        'nvrArr;': '\u2903',        'nvrtrie;': '\u22b5\u20d2',        'nvsim;': '\u223c\u20d2',        'nwarhk;': '\u2923',        'nwArr;': '\u21d6',        'nwarr;': '\u2196',        'nwarrow;': '\u2196',        'nwnear;': '\u2927',        'Oacute': '\xd3',        'oacute': '\xf3',        'Oacute;': '\xd3',        'oacute;': '\xf3',        'oast;': '\u229b',        'ocir;': '\u229a',        'Ocirc': '\xd4',        'ocirc': '\xf4',        'Ocirc;': '\xd4',        'ocirc;': '\xf4',        'Ocy;': '\u041e',        'ocy;': '\u043e',        'odash;': '\u229d',        'Odblac;': '\u0150',        'odblac;': '\u0151',        'odiv;': '\u2a38',        'odot;': '\u2299',        'odsold;': '\u29bc',        'OElig;': '\u0152',        'oelig;': '\u0153',        'ofcir;': '\u29bf',        'Ofr;': '\U0001d512',        'ofr;': '\U0001d52c',        'ogon;': '\u02db',        'Ograve': '\xd2',        'ograve': '\xf2',        'Ograve;': '\xd2',        'ograve;': '\xf2',        'ogt;': '\u29c1',        'ohbar;': '\u29b5',        'ohm;': '\u03a9',        'oint;': '\u222e',        'olarr;': '\u21ba',        'olcir;': '\u29be',        'olcross;': '\u29bb',        'oline;': '\u203e',        'olt;': '\u29c0',        'Omacr;': '\u014c',        'omacr;': '\u014d',        'Omega;': '\u03a9',        'omega;': '\u03c9',        'Omicron;': '\u039f',        'omicron;': '\u03bf',        'omid;': '\u29b6',        'ominus;': '\u2296',        'Oopf;': '\U0001d546',        'oopf;': '\U0001d560',        'opar;': '\u29b7',        'OpenCurlyDoubleQuote;': '\u201c',        'OpenCurlyQuote;': '\u2018',        'operp;': '\u29b9',        'oplus;': '\u2295',        'Or;': '\u2a54',        'or;': '\u2228',        'orarr;': '\u21bb',        'ord;': '\u2a5d',        'order;': '\u2134',        'orderof;': '\u2134',        'ordf': '\xaa',        'ordf;': '\xaa',        'ordm': '\xba',        'ordm;': '\xba',        'origof;': '\u22b6',        'oror;': '\u2a56',        'orslope;': '\u2a57',        'orv;': '\u2a5b',        'oS;': '\u24c8',        'Oscr;': '\U0001d4aa',        'oscr;': '\u2134',        'Oslash': '\xd8',        'oslash': '\xf8',        'Oslash;': '\xd8',        'oslash;': '\xf8',        'osol;': '\u2298',        'Otilde': '\xd5',        'otilde': '\xf5',        'Otilde;': '\xd5',        'otilde;': '\xf5',        'Otimes;': '\u2a37',        'otimes;': '\u2297',        'otimesas;': '\u2a36',        'Ouml': '\xd6',        'ouml': '\xf6',        'Ouml;': '\xd6',        'ouml;': '\xf6',        'ovbar;': '\u233d',        'OverBar;': '\u203e',        'OverBrace;': '\u23de',        'OverBracket;': '\u23b4',        'OverParenthesis;': '\u23dc',        'par;': '\u2225',        'para': '\xb6',        'para;': '\xb6',        'parallel;': '\u2225',        'parsim;': '\u2af3',        'parsl;': '\u2afd',        'part;': '\u2202',        'PartialD;': '\u2202',        'Pcy;': '\u041f',        'pcy;': '\u043f',        'percnt;': '%',        'period;': '.',        'permil;': '\u2030',        'perp;': '\u22a5',        'pertenk;': '\u2031',        'Pfr;': '\U0001d513',        'pfr;': '\U0001d52d',        'Phi;': '\u03a6',        'phi;': '\u03c6',        'phiv;': '\u03d5',        'phmmat;': '\u2133',        'phone;': '\u260e',        'Pi;': '\u03a0',        'pi;': '\u03c0',        'pitchfork;': '\u22d4',        'piv;': '\u03d6',        'planck;': '\u210f',        'planckh;': '\u210e',        'plankv;': '\u210f',        'plus;': '+',        'plusacir;': '\u2a23',        'plusb;': '\u229e',        'pluscir;': '\u2a22',        'plusdo;': '\u2214',        'plusdu;': '\u2a25',        'pluse;': '\u2a72',        'PlusMinus;': '\xb1',        'plusmn': '\xb1',        'plusmn;': '\xb1',        'plussim;': '\u2a26',        'plustwo;': '\u2a27',        'pm;': '\xb1',        'Poincareplane;': '\u210c',        'pointint;': '\u2a15',        'Popf;': '\u2119',        'popf;': '\U0001d561',        'pound': '\xa3',        'pound;': '\xa3',        'Pr;': '\u2abb',        'pr;': '\u227a',        'prap;': '\u2ab7',        'prcue;': '\u227c',        'prE;': '\u2ab3',        'pre;': '\u2aaf',        'prec;': '\u227a',        'precapprox;': '\u2ab7',        'preccurlyeq;': '\u227c',        'Precedes;': '\u227a',        'PrecedesEqual;': '\u2aaf',        'PrecedesSlantEqual;': '\u227c',        'PrecedesTilde;': '\u227e',        'preceq;': '\u2aaf',        'precnapprox;': '\u2ab9',        'precneqq;': '\u2ab5',        'precnsim;': '\u22e8',        'precsim;': '\u227e',        'Prime;': '\u2033',        'prime;': '\u2032',        'primes;': '\u2119',        'prnap;': '\u2ab9',        'prnE;': '\u2ab5',        'prnsim;': '\u22e8',        'prod;': '\u220f',        'Product;': '\u220f',        'profalar;': '\u232e',        'profline;': '\u2312',        'profsurf;': '\u2313',        'prop;': '\u221d',        'Proportion;': '\u2237',        'Proportional;': '\u221d',        'propto;': '\u221d',        'prsim;': '\u227e',        'prurel;': '\u22b0',        'Pscr;': '\U0001d4ab',        'pscr;': '\U0001d4c5',        'Psi;': '\u03a8',        'psi;': '\u03c8',        'puncsp;': '\u2008',        'Qfr;': '\U0001d514',        'qfr;': '\U0001d52e',        'qint;': '\u2a0c',        'Qopf;': '\u211a',        'qopf;': '\U0001d562',        'qprime;': '\u2057',        'Qscr;': '\U0001d4ac',        'qscr;': '\U0001d4c6',        'quaternions;': '\u210d',        'quatint;': '\u2a16',        'quest;': '?',        'questeq;': '\u225f',        'QUOT': '"',        'quot': '"',        'QUOT;': '"',        'quot;': '"',        'rAarr;': '\u21db',        'race;': '\u223d\u0331',        'Racute;': '\u0154',        'racute;': '\u0155',        'radic;': '\u221a',        'raemptyv;': '\u29b3',        'Rang;': '\u27eb',        'rang;': '\u27e9',        'rangd;': '\u2992',        'range;': '\u29a5',        'rangle;': '\u27e9',        'raquo': '\xbb',        'raquo;': '\xbb',        'Rarr;': '\u21a0',        'rArr;': '\u21d2',        'rarr;': '\u2192',        'rarrap;': '\u2975',        'rarrb;': '\u21e5',        'rarrbfs;': '\u2920',        'rarrc;': '\u2933',        'rarrfs;': '\u291e',        'rarrhk;': '\u21aa',        'rarrlp;': '\u21ac',        'rarrpl;': '\u2945',        'rarrsim;': '\u2974',        'Rarrtl;': '\u2916',        'rarrtl;': '\u21a3',        'rarrw;': '\u219d',        'rAtail;': '\u291c',        'ratail;': '\u291a',        'ratio;': '\u2236',        'rationals;': '\u211a',        'RBarr;': '\u2910',        'rBarr;': '\u290f',        'rbarr;': '\u290d',        'rbbrk;': '\u2773',        'rbrace;': '}',        'rbrack;': ']',        'rbrke;': '\u298c',        'rbrksld;': '\u298e',        'rbrkslu;': '\u2990',        'Rcaron;': '\u0158',        'rcaron;': '\u0159',        'Rcedil;': '\u0156',        'rcedil;': '\u0157',        'rceil;': '\u2309',        'rcub;': '}',        'Rcy;': '\u0420',        'rcy;': '\u0440',        'rdca;': '\u2937',        'rdldhar;': '\u2969',        'rdquo;': '\u201d',        'rdquor;': '\u201d',        'rdsh;': '\u21b3',        'Re;': '\u211c',        'real;': '\u211c',        'realine;': '\u211b',        'realpart;': '\u211c',        'reals;': '\u211d',        'rect;': '\u25ad',        'REG': '\xae',        'reg': '\xae',        'REG;': '\xae',        'reg;': '\xae',        'ReverseElement;': '\u220b',        'ReverseEquilibrium;': '\u21cb',        'ReverseUpEquilibrium;': '\u296f',        'rfisht;': '\u297d',        'rfloor;': '\u230b',        'Rfr;': '\u211c',        'rfr;': '\U0001d52f',        'rHar;': '\u2964',        'rhard;': '\u21c1',        'rharu;': '\u21c0',        'rharul;': '\u296c',        'Rho;': '\u03a1',        'rho;': '\u03c1',        'rhov;': '\u03f1',        'RightAngleBracket;': '\u27e9',        'RightArrow;': '\u2192',        'Rightarrow;': '\u21d2',        'rightarrow;': '\u2192',        'RightArrowBar;': '\u21e5',        'RightArrowLeftArrow;': '\u21c4',        'rightarrowtail;': '\u21a3',        'RightCeiling;': '\u2309',        'RightDoubleBracket;': '\u27e7',        'RightDownTeeVector;': '\u295d',        'RightDownVector;': '\u21c2',        'RightDownVectorBar;': '\u2955',        'RightFloor;': '\u230b',        'rightharpoondown;': '\u21c1',        'rightharpoonup;': '\u21c0',        'rightleftarrows;': '\u21c4',        'rightleftharpoons;': '\u21cc',        'rightrightarrows;': '\u21c9',        'rightsquigarrow;': '\u219d',        'RightTee;': '\u22a2',        'RightTeeArrow;': '\u21a6',        'RightTeeVector;': '\u295b',        'rightthreetimes;': '\u22cc',        'RightTriangle;': '\u22b3',        'RightTriangleBar;': '\u29d0',        'RightTriangleEqual;': '\u22b5',        'RightUpDownVector;': '\u294f',        'RightUpTeeVector;': '\u295c',        'RightUpVector;': '\u21be',        'RightUpVectorBar;': '\u2954',        'RightVector;': '\u21c0',        'RightVectorBar;': '\u2953',        'ring;': '\u02da',        'risingdotseq;': '\u2253',        'rlarr;': '\u21c4',        'rlhar;': '\u21cc',        'rlm;': '\u200f',        'rmoust;': '\u23b1',        'rmoustache;': '\u23b1',        'rnmid;': '\u2aee',        'roang;': '\u27ed',        'roarr;': '\u21fe',        'robrk;': '\u27e7',        'ropar;': '\u2986',        'Ropf;': '\u211d',        'ropf;': '\U0001d563',        'roplus;': '\u2a2e',        'rotimes;': '\u2a35',        'RoundImplies;': '\u2970',        'rpar;': ')',        'rpargt;': '\u2994',        'rppolint;': '\u2a12',        'rrarr;': '\u21c9',        'Rrightarrow;': '\u21db',        'rsaquo;': '\u203a',        'Rscr;': '\u211b',        'rscr;': '\U0001d4c7',        'Rsh;': '\u21b1',        'rsh;': '\u21b1',        'rsqb;': ']',        'rsquo;': '\u2019',        'rsquor;': '\u2019',        'rthree;': '\u22cc',        'rtimes;': '\u22ca',        'rtri;': '\u25b9',        'rtrie;': '\u22b5',        'rtrif;': '\u25b8',        'rtriltri;': '\u29ce',        'RuleDelayed;': '\u29f4',        'ruluhar;': '\u2968',        'rx;': '\u211e',        'Sacute;': '\u015a',        'sacute;': '\u015b',        'sbquo;': '\u201a',        'Sc;': '\u2abc',        'sc;': '\u227b',        'scap;': '\u2ab8',        'Scaron;': '\u0160',        'scaron;': '\u0161',        'sccue;': '\u227d',        'scE;': '\u2ab4',        'sce;': '\u2ab0',        'Scedil;': '\u015e',        'scedil;': '\u015f',        'Scirc;': '\u015c',        'scirc;': '\u015d',        'scnap;': '\u2aba',        'scnE;': '\u2ab6',        'scnsim;': '\u22e9',        'scpolint;': '\u2a13',        'scsim;': '\u227f',        'Scy;': '\u0421',        'scy;': '\u0441',        'sdot;': '\u22c5',        'sdotb;': '\u22a1',        'sdote;': '\u2a66',        'searhk;': '\u2925',        'seArr;': '\u21d8',        'searr;': '\u2198',        'searrow;': '\u2198',        'sect': '\xa7',        'sect;': '\xa7',        'semi;': ';',        'seswar;': '\u2929',        'setminus;': '\u2216',        'setmn;': '\u2216',        'sext;': '\u2736',        'Sfr;': '\U0001d516',        'sfr;': '\U0001d530',        'sfrown;': '\u2322',        'sharp;': '\u266f',        'SHCHcy;': '\u0429',        'shchcy;': '\u0449',        'SHcy;': '\u0428',        'shcy;': '\u0448',        'ShortDownArrow;': '\u2193',        'ShortLeftArrow;': '\u2190',        'shortmid;': '\u2223',        'shortparallel;': '\u2225',        'ShortRightArrow;': '\u2192',        'ShortUpArrow;': '\u2191',        'shy': '\xad',        'shy;': '\xad',        'Sigma;': '\u03a3',        'sigma;': '\u03c3',        'sigmaf;': '\u03c2',        'sigmav;': '\u03c2',        'sim;': '\u223c',        'simdot;': '\u2a6a',        'sime;': '\u2243',        'simeq;': '\u2243',        'simg;': '\u2a9e',        'simgE;': '\u2aa0',        'siml;': '\u2a9d',        'simlE;': '\u2a9f',        'simne;': '\u2246',        'simplus;': '\u2a24',        'simrarr;': '\u2972',        'slarr;': '\u2190',        'SmallCircle;': '\u2218',        'smallsetminus;': '\u2216',        'smashp;': '\u2a33',        'smeparsl;': '\u29e4',        'smid;': '\u2223',        'smile;': '\u2323',        'smt;': '\u2aaa',        'smte;': '\u2aac',        'smtes;': '\u2aac\ufe00',        'SOFTcy;': '\u042c',        'softcy;': '\u044c',        'sol;': '/',        'solb;': '\u29c4',        'solbar;': '\u233f',        'Sopf;': '\U0001d54a',        'sopf;': '\U0001d564',        'spades;': '\u2660',        'spadesuit;': '\u2660',        'spar;': '\u2225',        'sqcap;': '\u2293',        'sqcaps;': '\u2293\ufe00',        'sqcup;': '\u2294',        'sqcups;': '\u2294\ufe00',        'Sqrt;': '\u221a',        'sqsub;': '\u228f',        'sqsube;': '\u2291',        'sqsubset;': '\u228f',        'sqsubseteq;': '\u2291',        'sqsup;': '\u2290',        'sqsupe;': '\u2292',        'sqsupset;': '\u2290',        'sqsupseteq;': '\u2292',        'squ;': '\u25a1',        'Square;': '\u25a1',        'square;': '\u25a1',        'SquareIntersection;': '\u2293',        'SquareSubset;': '\u228f',        'SquareSubsetEqual;': '\u2291',        'SquareSuperset;': '\u2290',        'SquareSupersetEqual;': '\u2292',        'SquareUnion;': '\u2294',        'squarf;': '\u25aa',        'squf;': '\u25aa',        'srarr;': '\u2192',        'Sscr;': '\U0001d4ae',        'sscr;': '\U0001d4c8',        'ssetmn;': '\u2216',        'ssmile;': '\u2323',        'sstarf;': '\u22c6',        'Star;': '\u22c6',        'star;': '\u2606',        'starf;': '\u2605',        'straightepsilon;': '\u03f5',        'straightphi;': '\u03d5',        'strns;': '\xaf',        'Sub;': '\u22d0',        'sub;': '\u2282',        'subdot;': '\u2abd',        'subE;': '\u2ac5',        'sube;': '\u2286',        'subedot;': '\u2ac3',        'submult;': '\u2ac1',        'subnE;': '\u2acb',        'subne;': '\u228a',        'subplus;': '\u2abf',        'subrarr;': '\u2979',        'Subset;': '\u22d0',        'subset;': '\u2282',        'subseteq;': '\u2286',        'subseteqq;': '\u2ac5',        'SubsetEqual;': '\u2286',        'subsetneq;': '\u228a',        'subsetneqq;': '\u2acb',        'subsim;': '\u2ac7',        'subsub;': '\u2ad5',        'subsup;': '\u2ad3',        'succ;': '\u227b',        'succapprox;': '\u2ab8',        'succcurlyeq;': '\u227d',        'Succeeds;': '\u227b',        'SucceedsEqual;': '\u2ab0',        'SucceedsSlantEqual;': '\u227d',        'SucceedsTilde;': '\u227f',        'succeq;': '\u2ab0',        'succnapprox;': '\u2aba',        'succneqq;': '\u2ab6',        'succnsim;': '\u22e9',        'succsim;': '\u227f',        'SuchThat;': '\u220b',        'Sum;': '\u2211',        'sum;': '\u2211',        'sung;': '\u266a',        'sup1': '\xb9',        'sup1;': '\xb9',        'sup2': '\xb2',        'sup2;': '\xb2',        'sup3': '\xb3',        'sup3;': '\xb3',        'Sup;': '\u22d1',        'sup;': '\u2283',        'supdot;': '\u2abe',        'supdsub;': '\u2ad8',        'supE;': '\u2ac6',        'supe;': '\u2287',        'supedot;': '\u2ac4',        'Superset;': '\u2283',        'SupersetEqual;': '\u2287',        'suphsol;': '\u27c9',        'suphsub;': '\u2ad7',        'suplarr;': '\u297b',        'supmult;': '\u2ac2',        'supnE;': '\u2acc',        'supne;': '\u228b',        'supplus;': '\u2ac0',        'Supset;': '\u22d1',        'supset;': '\u2283',        'supseteq;': '\u2287',        'supseteqq;': '\u2ac6',        'supsetneq;': '\u228b',        'supsetneqq;': '\u2acc',        'supsim;': '\u2ac8',        'supsub;': '\u2ad4',        'supsup;': '\u2ad6',        'swarhk;': '\u2926',        'swArr;': '\u21d9',        'swarr;': '\u2199',        'swarrow;': '\u2199',        'swnwar;': '\u292a',        'szlig': '\xdf',        'szlig;': '\xdf',        'Tab;': '\t',        'target;': '\u2316',        'Tau;': '\u03a4',        'tau;': '\u03c4',        'tbrk;': '\u23b4',        'Tcaron;': '\u0164',        'tcaron;': '\u0165',        'Tcedil;': '\u0162',        'tcedil;': '\u0163',        'Tcy;': '\u0422',        'tcy;': '\u0442',        'tdot;': '\u20db',        'telrec;': '\u2315',        'Tfr;': '\U0001d517',        'tfr;': '\U0001d531',        'there4;': '\u2234',        'Therefore;': '\u2234',        'therefore;': '\u2234',        'Theta;': '\u0398',        'theta;': '\u03b8',        'thetasym;': '\u03d1',        'thetav;': '\u03d1',        'thickapprox;': '\u2248',        'thicksim;': '\u223c',        'ThickSpace;': '\u205f\u200a',        'thinsp;': '\u2009',        'ThinSpace;': '\u2009',        'thkap;': '\u2248',        'thksim;': '\u223c',        'THORN': '\xde',        'thorn': '\xfe',        'THORN;': '\xde',        'thorn;': '\xfe',        'Tilde;': '\u223c',        'tilde;': '\u02dc',        'TildeEqual;': '\u2243',        'TildeFullEqual;': '\u2245',        'TildeTilde;': '\u2248',        'times': '\xd7',        'times;': '\xd7',        'timesb;': '\u22a0',        'timesbar;': '\u2a31',        'timesd;': '\u2a30',        'tint;': '\u222d',        'toea;': '\u2928',        'top;': '\u22a4',        'topbot;': '\u2336',        'topcir;': '\u2af1',        'Topf;': '\U0001d54b',        'topf;': '\U0001d565',        'topfork;': '\u2ada',        'tosa;': '\u2929',        'tprime;': '\u2034',        'TRADE;': '\u2122',        'trade;': '\u2122',        'triangle;': '\u25b5',        'triangledown;': '\u25bf',        'triangleleft;': '\u25c3',        'trianglelefteq;': '\u22b4',        'triangleq;': '\u225c',        'triangleright;': '\u25b9',        'trianglerighteq;': '\u22b5',        'tridot;': '\u25ec',        'trie;': '\u225c',        'triminus;': '\u2a3a',        'TripleDot;': '\u20db',        'triplus;': '\u2a39',        'trisb;': '\u29cd',        'tritime;': '\u2a3b',        'trpezium;': '\u23e2',        'Tscr;': '\U0001d4af',        'tscr;': '\U0001d4c9',        'TScy;': '\u0426',        'tscy;': '\u0446',        'TSHcy;': '\u040b',        'tshcy;': '\u045b',        'Tstrok;': '\u0166',        'tstrok;': '\u0167',        'twixt;': '\u226c',        'twoheadleftarrow;': '\u219e',        'twoheadrightarrow;': '\u21a0',        'Uacute': '\xda',        'uacute': '\xfa',        'Uacute;': '\xda',        'uacute;': '\xfa',        'Uarr;': '\u219f',        'uArr;': '\u21d1',        'uarr;': '\u2191',        'Uarrocir;': '\u2949',        'Ubrcy;': '\u040e',        'ubrcy;': '\u045e',        'Ubreve;': '\u016c',        'ubreve;': '\u016d',        'Ucirc': '\xdb',        'ucirc': '\xfb',        'Ucirc;': '\xdb',        'ucirc;': '\xfb',        'Ucy;': '\u0423',        'ucy;': '\u0443',        'udarr;': '\u21c5',        'Udblac;': '\u0170',        'udblac;': '\u0171',        'udhar;': '\u296e',        'ufisht;': '\u297e',        'Ufr;': '\U0001d518',        'ufr;': '\U0001d532',        'Ugrave': '\xd9',        'ugrave': '\xf9',        'Ugrave;': '\xd9',        'ugrave;': '\xf9',        'uHar;': '\u2963',        'uharl;': '\u21bf',        'uharr;': '\u21be',        'uhblk;': '\u2580',        'ulcorn;': '\u231c',        'ulcorner;': '\u231c',        'ulcrop;': '\u230f',        'ultri;': '\u25f8',        'Umacr;': '\u016a',        'umacr;': '\u016b',        'uml': '\xa8',        'uml;': '\xa8',        'UnderBar;': '_',        'UnderBrace;': '\u23df',        'UnderBracket;': '\u23b5',        'UnderParenthesis;': '\u23dd',        'Union;': '\u22c3',        'UnionPlus;': '\u228e',        'Uogon;': '\u0172',        'uogon;': '\u0173',        'Uopf;': '\U0001d54c',        'uopf;': '\U0001d566',        'UpArrow;': '\u2191',        'Uparrow;': '\u21d1',        'uparrow;': '\u2191',        'UpArrowBar;': '\u2912',        'UpArrowDownArrow;': '\u21c5',        'UpDownArrow;': '\u2195',        'Updownarrow;': '\u21d5',        'updownarrow;': '\u2195',        'UpEquilibrium;': '\u296e',        'upharpoonleft;': '\u21bf',        'upharpoonright;': '\u21be',        'uplus;': '\u228e',        'UpperLeftArrow;': '\u2196',        'UpperRightArrow;': '\u2197',        'Upsi;': '\u03d2',        'upsi;': '\u03c5',        'upsih;': '\u03d2',        'Upsilon;': '\u03a5',        'upsilon;': '\u03c5',        'UpTee;': '\u22a5',        'UpTeeArrow;': '\u21a5',        'upuparrows;': '\u21c8',        'urcorn;': '\u231d',        'urcorner;': '\u231d',        'urcrop;': '\u230e',        'Uring;': '\u016e',        'uring;': '\u016f',        'urtri;': '\u25f9',        'Uscr;': '\U0001d4b0',        'uscr;': '\U0001d4ca',        'utdot;': '\u22f0',        'Utilde;': '\u0168',        'utilde;': '\u0169',        'utri;': '\u25b5',        'utrif;': '\u25b4',        'uuarr;': '\u21c8',        'Uuml': '\xdc',        'uuml': '\xfc',        'Uuml;': '\xdc',        'uuml;': '\xfc',        'uwangle;': '\u29a7',        'vangrt;': '\u299c',        'varepsilon;': '\u03f5',        'varkappa;': '\u03f0',        'varnothing;': '\u2205',        'varphi;': '\u03d5',        'varpi;': '\u03d6',        'varpropto;': '\u221d',        'vArr;': '\u21d5',        'varr;': '\u2195',        'varrho;': '\u03f1',        'varsigma;': '\u03c2',        'varsubsetneq;': '\u228a\ufe00',        'varsubsetneqq;': '\u2acb\ufe00',        'varsupsetneq;': '\u228b\ufe00',        'varsupsetneqq;': '\u2acc\ufe00',        'vartheta;': '\u03d1',        'vartriangleleft;': '\u22b2',        'vartriangleright;': '\u22b3',        'Vbar;': '\u2aeb',        'vBar;': '\u2ae8',        'vBarv;': '\u2ae9',        'Vcy;': '\u0412',        'vcy;': '\u0432',        'VDash;': '\u22ab',        'Vdash;': '\u22a9',        'vDash;': '\u22a8',        'vdash;': '\u22a2',        'Vdashl;': '\u2ae6',        'Vee;': '\u22c1',        'vee;': '\u2228',        'veebar;': '\u22bb',        'veeeq;': '\u225a',        'vellip;': '\u22ee',        'Verbar;': '\u2016',        'verbar;': '|',        'Vert;': '\u2016',        'vert;': '|',        'VerticalBar;': '\u2223',        'VerticalLine;': '|',        'VerticalSeparator;': '\u2758',        'VerticalTilde;': '\u2240',        'VeryThinSpace;': '\u200a',        'Vfr;': '\U0001d519',        'vfr;': '\U0001d533',        'vltri;': '\u22b2',        'vnsub;': '\u2282\u20d2',        'vnsup;': '\u2283\u20d2',        'Vopf;': '\U0001d54d',        'vopf;': '\U0001d567',        'vprop;': '\u221d',        'vrtri;': '\u22b3',        'Vscr;': '\U0001d4b1',        'vscr;': '\U0001d4cb',        'vsubnE;': '\u2acb\ufe00',        'vsubne;': '\u228a\ufe00',        'vsupnE;': '\u2acc\ufe00',        'vsupne;': '\u228b\ufe00',        'Vvdash;': '\u22aa',        'vzigzag;': '\u299a',        'Wcirc;': '\u0174',        'wcirc;': '\u0175',        'wedbar;': '\u2a5f',        'Wedge;': '\u22c0',        'wedge;': '\u2227',        'wedgeq;': '\u2259',        'weierp;': '\u2118',        'Wfr;': '\U0001d51a',        'wfr;': '\U0001d534',        'Wopf;': '\U0001d54e',        'wopf;': '\U0001d568',        'wp;': '\u2118',        'wr;': '\u2240',        'wreath;': '\u2240',        'Wscr;': '\U0001d4b2',        'wscr;': '\U0001d4cc',        'xcap;': '\u22c2',        'xcirc;': '\u25ef',        'xcup;': '\u22c3',        'xdtri;': '\u25bd',        'Xfr;': '\U0001d51b',        'xfr;': '\U0001d535',        'xhArr;': '\u27fa',        'xharr;': '\u27f7',        'Xi;': '\u039e',        'xi;': '\u03be',        'xlArr;': '\u27f8',        'xlarr;': '\u27f5',        'xmap;': '\u27fc',        'xnis;': '\u22fb',        'xodot;': '\u2a00',        'Xopf;': '\U0001d54f',        'xopf;': '\U0001d569',        'xoplus;': '\u2a01',        'xotime;': '\u2a02',        'xrArr;': '\u27f9',        'xrarr;': '\u27f6',        'Xscr;': '\U0001d4b3',        'xscr;': '\U0001d4cd',        'xsqcup;': '\u2a06',        'xuplus;': '\u2a04',        'xutri;': '\u25b3',        'xvee;': '\u22c1',        'xwedge;': '\u22c0',        'Yacute': '\xdd',        'yacute': '\xfd',        'Yacute;': '\xdd',        'yacute;': '\xfd',        'YAcy;': '\u042f',        'yacy;': '\u044f',        'Ycirc;': '\u0176',        'ycirc;': '\u0177',        'Ycy;': '\u042b',        'ycy;': '\u044b',        'yen': '\xa5',        'yen;': '\xa5',        'Yfr;': '\U0001d51c',        'yfr;': '\U0001d536',        'YIcy;': '\u0407',        'yicy;': '\u0457',        'Yopf;': '\U0001d550',        'yopf;': '\U0001d56a',        'Yscr;': '\U0001d4b4',        'yscr;': '\U0001d4ce',        'YUcy;': '\u042e',        'yucy;': '\u044e',        'yuml': '\xff',        'Yuml;': '\u0178',        'yuml;': '\xff',        'Zacute;': '\u0179',        'zacute;': '\u017a',        'Zcaron;': '\u017d',        'zcaron;': '\u017e',        'Zcy;': '\u0417',        'zcy;': '\u0437',        'Zdot;': '\u017b',        'zdot;': '\u017c',        'zeetrf;': '\u2128',        'ZeroWidthSpace;': '\u200b',        'Zeta;': '\u0396',        'zeta;': '\u03b6',        'Zfr;': '\u2128',        'zfr;': '\U0001d537',        'ZHcy;': '\u0416',        'zhcy;': '\u0436',        'zigrarr;': '\u21dd',        'Zopf;': '\u2124',        'zopf;': '\U0001d56b',        'Zscr;': '\U0001d4b5',        'zscr;': '\U0001d4cf',        'zwj;': '\u200d',        'zwnj;': '\u200c',    }try:    import http.client as compat_http_clientexcept ImportError:  # Python 2    import httplib as compat_http_clienttry:    from urllib.error import HTTPError as compat_HTTPErrorexcept ImportError:  # Python 2    from urllib2 import HTTPError as compat_HTTPErrortry:    from urllib.request import urlretrieve as compat_urlretrieveexcept ImportError:  # Python 2    from urllib import urlretrieve as compat_urlretrievetry:    from html.parser import HTMLParser as compat_HTMLParserexcept ImportError:  # Python 2    from HTMLParser import HTMLParser as compat_HTMLParsertry:    from subprocess import DEVNULL    compat_subprocess_get_DEVNULL = lambda: DEVNULLexcept ImportError:    compat_subprocess_get_DEVNULL = lambda: open(os.path.devnull, 'w')try:    import http.server as compat_http_serverexcept ImportError:    import BaseHTTPServer as compat_http_servertry:    compat_str = unicode  # Python 2except NameError:    compat_str = strtry:    from urllib.parse import unquote_to_bytes as compat_urllib_parse_unquote_to_bytes    from urllib.parse import unquote as compat_urllib_parse_unquote    from urllib.parse import unquote_plus as compat_urllib_parse_unquote_plusexcept ImportError:  # Python 2    _asciire = (compat_urllib_parse._asciire if hasattr(compat_urllib_parse, '_asciire')                else re.compile('([\x00-\x7f]+)'))    # HACK: The following are the correct unquote_to_bytes, unquote and unquote_plus    # implementations from cpython 3.4.3's stdlib. Python 2's version    # is apparently broken (see https://github.com/rg3/youtube-dl/pull/6244)    def compat_urllib_parse_unquote_to_bytes(string):        """unquote_to_bytes('abc%20def') -> b'abc def'."""        # Note: strings are encoded as UTF-8. This is only an issue if it contains        # unescaped non-ASCII characters, which URIs should not.        if not string:            # Is it a string-like object?            string.split            return b''        if isinstance(string, compat_str):            string = string.encode('utf-8')        bits = string.split(b'%')        if len(bits) == 1:            return string        res = [bits[0]]        append = res.append        for item in bits[1:]:            try:                append(compat_urllib_parse._hextochr[item[:2]])                append(item[2:])            except KeyError:                append(b'%')                append(item)        return b''.join(res)    def compat_urllib_parse_unquote(string, encoding='utf-8', errors='replace'):        """Replace %xx escapes by their single-character equivalent. The optional        encoding and errors parameters specify how to decode percent-encoded        sequences into Unicode characters, as accepted by the bytes.decode()        method.        By default, percent-encoded sequences are decoded with UTF-8, and invalid        sequences are replaced by a placeholder character.        unquote('abc%20def') -> 'abc def'.        """        if '%' not in string:            string.split            return string        if encoding is None:            encoding = 'utf-8'        if errors is None:            errors = 'replace'        bits = _asciire.split(string)        res = [bits[0]]        append = res.append        for i in range(1, len(bits), 2):            append(compat_urllib_parse_unquote_to_bytes(bits[i]).decode(encoding, errors))            append(bits[i + 1])        return ''.join(res)    def compat_urllib_parse_unquote_plus(string, encoding='utf-8', errors='replace'):        """Like unquote(), but also replace plus signs by spaces, as required for        unquoting HTML form values.        unquote_plus('%7e/abc+def') -> '~/abc def'        """        string = string.replace('+', ' ')        return compat_urllib_parse_unquote(string, encoding, errors)try:    from urllib.parse import urlencode as compat_urllib_parse_urlencodeexcept ImportError:  # Python 2    # Python 2 will choke in urlencode on mixture of byte and unicode strings.    # Possible solutions are to either port it from python 3 with all    # the friends or manually ensure input query contains only byte strings.    # We will stick with latter thus recursively encoding the whole query.    def compat_urllib_parse_urlencode(query, doseq=0, encoding='utf-8'):        def encode_elem(e):            if isinstance(e, dict):                e = encode_dict(e)            elif isinstance(e, (list, tuple,)):                list_e = encode_list(e)                e = tuple(list_e) if isinstance(e, tuple) else list_e            elif isinstance(e, compat_str):                e = e.encode(encoding)            return e        def encode_dict(d):            return dict((encode_elem(k), encode_elem(v)) for k, v in d.items())        def encode_list(l):            return [encode_elem(e) for e in l]        return compat_urllib_parse.urlencode(encode_elem(query), doseq=doseq)try:    from urllib.request import DataHandler as compat_urllib_request_DataHandlerexcept ImportError:  # Python < 3.4    # Ported from CPython 98774:1733b3bd46db, Lib/urllib/request.py    class compat_urllib_request_DataHandler(compat_urllib_request.BaseHandler):        def data_open(self, req):            # data URLs as specified in RFC 2397.            #            # ignores POSTed data            #            # syntax:            # dataurl   := "data:" [ mediatype ] [ ";base64" ] "," data            # mediatype := [ type "/" subtype ] *( ";" parameter )            # data      := *urlchar            # parameter := attribute "=" value            url = req.get_full_url()            scheme, data = url.split(':', 1)            mediatype, data = data.split(',', 1)            # even base64 encoded data URLs might be quoted so unquote in any case:            data = compat_urllib_parse_unquote_to_bytes(data)            if mediatype.endswith(';base64'):                data = binascii.a2b_base64(data)                mediatype = mediatype[:-7]            if not mediatype:                mediatype = 'text/plain;charset=US-ASCII'            headers = email.message_from_string(                'Content-type: %s\nContent-length: %d\n' % (mediatype, len(data)))            return compat_urllib_response.addinfourl(io.BytesIO(data), headers, url)try:    compat_basestring = basestring  # Python 2except NameError:    compat_basestring = strtry:    compat_chr = unichr  # Python 2except NameError:    compat_chr = chrtry:    from xml.etree.ElementTree import ParseError as compat_xml_parse_errorexcept ImportError:  # Python 2.6    from xml.parsers.expat import ExpatError as compat_xml_parse_erroretree = xml.etree.ElementTreeclass _TreeBuilder(etree.TreeBuilder):    def doctype(self, name, pubid, system):        passif sys.version_info[0] >= 3:    def compat_etree_fromstring(text):        return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder()))else:    # python 2.x tries to encode unicode strings with ascii (see the    # XMLParser._fixtext method)    try:        _etree_iter = etree.Element.iter    except AttributeError:  # Python <=2.6        def _etree_iter(root):            for el in root.findall('*'):                yield el                for sub in _etree_iter(el):                    yield sub    # on 2.6 XML doesn't have a parser argument, function copied from CPython    # 2.7 source    def _XML(text, parser=None):        if not parser:            parser = etree.XMLParser(target=_TreeBuilder())        parser.feed(text)        return parser.close()    def _element_factory(*args, **kwargs):        el = etree.Element(*args, **kwargs)        for k, v in el.items():            if isinstance(v, bytes):                el.set(k, v.decode('utf-8'))        return el    def compat_etree_fromstring(text):        doc = _XML(text, parser=etree.XMLParser(target=_TreeBuilder(element_factory=_element_factory)))        for el in _etree_iter(doc):            if el.text is not None and isinstance(el.text, bytes):                el.text = el.text.decode('utf-8')        return docif sys.version_info < (2, 7):    # Here comes the crazy part: In 2.6, if the xpath is a unicode,    # .//node does not match if a node is a direct child of . !    def compat_xpath(xpath):        if isinstance(xpath, compat_str):            xpath = xpath.encode('ascii')        return xpathelse:    compat_xpath = lambda xpath: xpathtry:    from urllib.parse import parse_qs as compat_parse_qsexcept ImportError:  # Python 2    # HACK: The following is the correct parse_qs implementation from cpython 3's stdlib.    # Python 2's version is apparently totally broken    def _parse_qsl(qs, keep_blank_values=False, strict_parsing=False,                   encoding='utf-8', errors='replace'):        qs, _coerce_result = qs, compat_str        pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]        r = []        for name_value in pairs:            if not name_value and not strict_parsing:                continue            nv = name_value.split('=', 1)            if len(nv) != 2:                if strict_parsing:                    raise ValueError('bad query field: %r' % (name_value,))                # Handle case of a control-name with no equal sign                if keep_blank_values:                    nv.append('')                else:                    continue            if len(nv[1]) or keep_blank_values:                name = nv[0].replace('+', ' ')                name = compat_urllib_parse_unquote(                    name, encoding=encoding, errors=errors)                name = _coerce_result(name)                value = nv[1].replace('+', ' ')                value = compat_urllib_parse_unquote(                    value, encoding=encoding, errors=errors)                value = _coerce_result(value)                r.append((name, value))        return r    def compat_parse_qs(qs, keep_blank_values=False, strict_parsing=False,                        encoding='utf-8', errors='replace'):        parsed_result = {}        pairs = _parse_qsl(qs, keep_blank_values, strict_parsing,                           encoding=encoding, errors=errors)        for name, value in pairs:            if name in parsed_result:                parsed_result[name].append(value)            else:                parsed_result[name] = [value]        return parsed_resulttry:    from shlex import quote as compat_shlex_quoteexcept ImportError:  # Python < 3.3    def compat_shlex_quote(s):        if re.match(r'^[-_\w./]+$', s):            return s        else:            return "'" + s.replace("'", "'\"'\"'") + "'"try:    args = shlex.split('中文')    assert (isinstance(args, list) and            isinstance(args[0], compat_str) and            args[0] == '中文')    compat_shlex_split = shlex.splitexcept (AssertionError, UnicodeEncodeError):    # Working around shlex issue with unicode strings on some python 2    # versions (see http://bugs.python.org/issue1548891)    def compat_shlex_split(s, comments=False, posix=True):        if isinstance(s, compat_str):            s = s.encode('utf-8')        return list(map(lambda s: s.decode('utf-8'), shlex.split(s, comments, posix)))def compat_ord(c):    if type(c) is int:        return c    else:        return ord(c)compat_os_name = os._name if os.name == 'java' else os.nameif sys.version_info >= (3, 0):    compat_getenv = os.getenv    compat_expanduser = os.path.expanduser    def compat_setenv(key, value, env=os.environ):        env[key] = valueelse:    # Environment variables should be decoded with filesystem encoding.    # Otherwise it will fail if any non-ASCII characters present (see #3854 #3217 #2918)    def compat_getenv(key, default=None):        from .utils import get_filesystem_encoding        env = os.getenv(key, default)        if env:            env = env.decode(get_filesystem_encoding())        return env    def compat_setenv(key, value, env=os.environ):        def encode(v):            from .utils import get_filesystem_encoding            return v.encode(get_filesystem_encoding()) if isinstance(v, compat_str) else v        env[encode(key)] = encode(value)    # HACK: The default implementations of os.path.expanduser from cpython do not decode    # environment variables with filesystem encoding. We will work around this by    # providing adjusted implementations.    # The following are os.path.expanduser implementations from cpython 2.7.8 stdlib    # for different platforms with correct environment variables decoding.    if compat_os_name == 'posix':        def compat_expanduser(path):            """Expand ~ and ~user constructions.  If user or $HOME is unknown,            do nothing."""            if not path.startswith('~'):                return path            i = path.find('/', 1)            if i < 0:                i = len(path)            if i == 1:                if 'HOME' not in os.environ:                    import pwd                    userhome = pwd.getpwuid(os.getuid()).pw_dir                else:                    userhome = compat_getenv('HOME')            else:                import pwd                try:                    pwent = pwd.getpwnam(path[1:i])                except KeyError:                    return path                userhome = pwent.pw_dir            userhome = userhome.rstrip('/')            return (userhome + path[i:]) or '/'    elif compat_os_name == 'nt' or compat_os_name == 'ce':        def compat_expanduser(path):            """Expand ~ and ~user constructs.            If user or $HOME is unknown, do nothing."""            if path[:1] != '~':                return path            i, n = 1, len(path)            while i < n and path[i] not in '/\\':                i = i + 1            if 'HOME' in os.environ:                userhome = compat_getenv('HOME')            elif 'USERPROFILE' in os.environ:                userhome = compat_getenv('USERPROFILE')            elif 'HOMEPATH' not in os.environ:                return path            else:                try:                    drive = compat_getenv('HOMEDRIVE')                except KeyError:                    drive = ''                userhome = os.path.join(drive, compat_getenv('HOMEPATH'))            if i != 1:  # ~user                userhome = os.path.join(os.path.dirname(userhome), path[1:i])            return userhome + path[i:]    else:        compat_expanduser = os.path.expanduserif sys.version_info < (3, 0):    def compat_print(s):        from .utils import preferredencoding        print(s.encode(preferredencoding(), 'xmlcharrefreplace'))else:    def compat_print(s):        assert isinstance(s, compat_str)        print(s)if sys.version_info < (3, 0) and sys.platform == 'win32':    def compat_getpass(prompt, *args, **kwargs):        if isinstance(prompt, compat_str):            from .utils import preferredencoding            prompt = prompt.encode(preferredencoding())        return getpass.getpass(prompt, *args, **kwargs)else:    compat_getpass = getpass.getpasstry:    compat_input = raw_inputexcept NameError:  # Python 3    compat_input = input# Python < 2.6.5 require kwargs to be bytestry:    def _testfunc(x):        pass    _testfunc(**{'x': 0})except TypeError:    def compat_kwargs(kwargs):        return dict((bytes(k), v) for k, v in kwargs.items())else:    compat_kwargs = lambda kwargs: kwargsif sys.version_info < (2, 7):    def compat_socket_create_connection(address, timeout, source_address=None):        host, port = address        err = None        for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):            af, socktype, proto, canonname, sa = res            sock = None            try:                sock = socket.socket(af, socktype, proto)                sock.settimeout(timeout)                if source_address:                    sock.bind(source_address)                sock.connect(sa)                return sock            except socket.error as _:                err = _                if sock is not None:                    sock.close()        if err is not None:            raise err        else:            raise socket.error('getaddrinfo returns an empty list')else:    compat_socket_create_connection = socket.create_connection# Fix https://github.com/rg3/youtube-dl/issues/4223# See http://bugs.python.org/issue9161 for what is brokendef workaround_optparse_bug9161():    op = optparse.OptionParser()    og = optparse.OptionGroup(op, 'foo')    try:        og.add_option('-t')    except TypeError:        real_add_option = optparse.OptionGroup.add_option        def _compat_add_option(self, *args, **kwargs):            enc = lambda v: (                v.encode('ascii', 'replace') if isinstance(v, compat_str)                else v)            bargs = [enc(a) for a in args]            bkwargs = dict(                (k, enc(v)) for k, v in kwargs.items())            return real_add_option(self, *bargs, **bkwargs)        optparse.OptionGroup.add_option = _compat_add_optionif hasattr(shutil, 'get_terminal_size'):  # Python >= 3.3    compat_get_terminal_size = shutil.get_terminal_sizeelse:    _terminal_size = collections.namedtuple('terminal_size', ['columns', 'lines'])    def compat_get_terminal_size(fallback=(80, 24)):        columns = compat_getenv('COLUMNS')        if columns:            columns = int(columns)        else:            columns = None        lines = compat_getenv('LINES')        if lines:            lines = int(lines)        else:            lines = None        if columns is None or lines is None or columns <= 0 or lines <= 0:            try:                sp = subprocess.Popen(                    ['stty', 'size'],                    stdout=subprocess.PIPE, stderr=subprocess.PIPE)                out, err = sp.communicate()                _lines, _columns = map(int, out.split())            except Exception:                _columns, _lines = _terminal_size(*fallback)            if columns is None or columns <= 0:                columns = _columns            if lines is None or lines <= 0:                lines = _lines        return _terminal_size(columns, lines)try:    itertools.count(start=0, step=1)    compat_itertools_count = itertools.countexcept TypeError:  # Python 2.6    def compat_itertools_count(start=0, step=1):        n = start        while True:            yield n            n += stepif sys.version_info >= (3, 0):    from tokenize import tokenize as compat_tokenize_tokenizeelse:    from tokenize import generate_tokens as compat_tokenize_tokenizetry:    struct.pack('!I', 0)except TypeError:    # In Python 2.6 and 2.7.x < 2.7.7, struct requires a bytes argument    # See https://bugs.python.org/issue19099    def compat_struct_pack(spec, *args):        if isinstance(spec, compat_str):            spec = spec.encode('ascii')        return struct.pack(spec, *args)    def compat_struct_unpack(spec, *args):        if isinstance(spec, compat_str):            spec = spec.encode('ascii')        return struct.unpack(spec, *args)else:    compat_struct_pack = struct.pack    compat_struct_unpack = struct.unpack__all__ = [    'compat_HTMLParser',    'compat_HTTPError',    'compat_basestring',    'compat_chr',    'compat_cookiejar',    'compat_cookies',    'compat_etree_fromstring',    'compat_expanduser',    'compat_get_terminal_size',    'compat_getenv',    'compat_getpass',    'compat_html_entities',    'compat_html_entities_html5',    'compat_http_client',    'compat_http_server',    'compat_input',    'compat_itertools_count',    'compat_kwargs',    'compat_ord',    'compat_os_name',    'compat_parse_qs',    'compat_print',    'compat_setenv',    'compat_shlex_quote',    'compat_shlex_split',    'compat_socket_create_connection',    'compat_str',    'compat_struct_pack',    'compat_struct_unpack',    'compat_subprocess_get_DEVNULL',    'compat_tokenize_tokenize',    'compat_urllib_error',    'compat_urllib_parse',    'compat_urllib_parse_unquote',    'compat_urllib_parse_unquote_plus',    'compat_urllib_parse_unquote_to_bytes',    'compat_urllib_parse_urlencode',    'compat_urllib_parse_urlparse',    'compat_urllib_request',    'compat_urllib_request_DataHandler',    'compat_urllib_response',    'compat_urlparse',    'compat_urlretrieve',    'compat_xml_parse_error',    'compat_xpath',    'workaround_optparse_bug9161',]
 |